전체 글 (20) 썸네일형 리스트형 포워드 랜더링 vs 디퍼드 랜더링 컴퓨터 그래픽스에서 렌더링(Rendering) 기법은 장면을 화면에 그리는 방식에 따라 여러 가지로 나뉩니다. 그중 가장 널리 사용되는 방법이 포워드 랜더링과 디퍼드 랜더링입니다. 이 두 방식은 성능과 활용 측면에서 큰 차이가 있으며, 게임 엔진이나 그래픽 애플리케이션에서 상황에 따라 선택됩니다.포워드 랜더링 (Forward Rendering)1. 개념포워드 랜더링은 오브젝트별로 조명을 계산하며, GPU의 래스터라이제이션 파이프라인을 따라 렌더링되는 전통적인 방식입니다.2. 특징오브젝트를 렌더링하면서 즉시 조명 및 쉐이딩을 적용GPU의 고정된 그래픽 파이프라인을 활용모든 픽셀에 대해 불필요한 조명 계산이 이루어질 수 있음투명 객체 렌더링이 쉬움 (Blending 가능)3. 장점낮은 메모리 사용량 → G-.. 시간 복잡도 시간 복잡도(Time Complexity)는 알고리즘이 입력 크기(n)에 따라 실행 시간을 얼마나 소비하는지를 분석하는 개념입니다. 빅오 표기법(Big-O Notation)을 사용하여 최악의 경우 실행 시간을 나타냅니다.대표적인 시간 복잡도 종류시간 복잡도설명O(1)입력 크기와 관계없이 실행 시간이 일정함O(log n)입력 크기가 증가할수록 실행 시간이 로그(log) 형태로 증가함O(n)입력 크기에 비례하여 실행 시간이 증가함O(n log n)병합 정렬(Merge Sort)과 같은 정렬 알고리즘에서 나타남O(n²)중첩 루프가 있는 알고리즘 (버블 정렬, 선택 정렬 등)O(2ⁿ)피보나치 재귀 호출과 같은 경우O(n!)외판원 문제와 같은 조합 탐색예제 코드로 시간 복잡도 분석1. O(1) - 상수 시간int.. Unity GPU Instancing GPU Instancing은 동일한 Mesh와 Material을 사용하는 여러 개의 객체를 한 번의 드로우 콜로 렌더링하는 최적화 기술입니다. 이를 통해 CPU와 GPU 간의 병목 현상을 줄이고 성능을 향상시킬 수 있습니다. GPU Instancing을 사용해야 하는 이유드로우 콜 감소 → CPU가 렌더링 요청을 줄여 프레임 속도 향상CPU 사용량 절감 → CPU에서 개별 객체를 처리하는 대신 한 번의 인스턴스로 처리대량의 객체 렌더링 가능 → 나무, 풀, 총알 등 동일한 객체를 다량 배치할 때 유용GPU Instancing 활성화 방법머티리얼(Material)에서 Instancing 활성화Material을 선택Inspector 창에서 Enable GPU Instancing 옵션 체크주의: Instanc.. 람다(lambda) in C++ C++에서 **람다(lambda)**는 **익명 함수(anonymous function)**를 정의하는 기능으로, 간결한 코드 작성과 함수 객체를 쉽게 만들 수 있도록 도와줍니다. C++11부터 도입되었으며, C++14, C++17, C++20을 거치며 더 강력하게 발전했습니다.람다 기본 문법[캡처](매개변수) -> 반환형 { 함수 본문 };[캡처] : 외부 변수 캡처 방식 지정 (&, =, 특정 변수 선택 가능)(매개변수) : 함수의 매개변수-> 반환형 : 반환형 (생략 가능, 자동 추론됨){ 함수 본문 } : 실행할 코드람다 기본 사용 예제#include int main() { // 기본적인 람다 표현식 auto add = [](int a, int b) { return a + b; }; .. 클로저(Closure) in C# C#에서는 JavaScript나 Python처럼 직접적으로 클로저(Closure) 개념을 제공하지 않지만, 익명 함수(Anonymous Functions), 람다 표현식(Lambda Expressions), 로컬 함수(Local Functions) 등을 활용하여 클로저와 유사한 동작을 구현할 수 있습니다.클로저(Closure)란?클로저는 함수 내부에서 외부 함수의 변수를 캡처하고, 해당 변수를 유지하면서 사용하는 기능을 의미합니다.즉, 함수가 실행된 후에도 변수를 계속 유지하는 특징이 있습니다.C#에서는 람다(Lambda) 또는 익명 함수(Anonymous Functions)가 외부 범위의 변수를 캡처하여 유지하는 방식으로 클로저를 구현할 수 있습니다.1. 람다 표현식으로 클로저 구현using Syste.. 코드 최적화 in C++ C++ 코드 최적화는 실행 속도와 메모리 사용량을 줄이고 유지보수성을 향상시키는 중요한 과정입니다. 주요 최적화 기법을 살펴보겠습니다.컴파일러 최적화 활용-O2, -O3 등의 최적화 옵션 사용 (g++ -O2 mycode.cpp -o myprogram)-march=native 플래그로 CPU 아키텍처에 맞게 최적화데이터 구조 및 알고리즘 개선적절한 컨테이너 선택 (std::vector vs std::list)불필요한 복사 연산 제거 (std::move, std::swap)시간 복잡도 고려하여 최적의 알고리즘 사용메모리 최적화동적 할당 최소화 (std::vector::reserve() 사용)스마트 포인터 (std::unique_ptr, std::shared_ptr) 활용캐시 친화적인 데이터 구조 설계루프 .. 함수 호출 규약 in C++ C++에서 함수 호출 규약(Calling Convention)은 함수가 호출될 때 인수를 어떻게 전달하고, 반환값을 어떻게 처리하며, 스택을 누가 정리하는지를 정의하는 방식입니다. 주요 호출 규약은 다음과 같습니다.cdecl (C Declaration)기본적인 C/C++ 함수 호출 규약인수 전달: 스택 (오른쪽에서 왼쪽)반환값: EAX (32비트), RAX (64비트)스택 정리: 호출자(caller)가변 인자 지원: 가능 (printf 같은 함수에서 사용)MSVC에서 _cdecl, GCC에서 __attribute__((cdecl))로 지정int __cdecl add(int a, int b) { return a + b;}stdcall (Standard Call)Windows API에서 많이 사용인수 .. C++14 주요 특징 C++14는 C++11을 기반으로 한 소규모 업그레이드 버전으로, 성능 개선과 문법 간소화에 중점을 둔 업데이트입니다. C++14의 주요 특징을 정리하면 다음과 같습니다.일반화된 람다 캡처 (Generalized Lambda Capture)C++11에서는 람다에서 변수를 캡처할 때 반드시 값을 직접 지정해야 했지만, C++14에서는 새로운 init-capture 기능을 도입하여 보다 유연한 변수 캡처가 가능해졌습니다.#include int main() { int x = 42; auto lambda = [y = x + 10]() { std::cout 장점: 람다 내부에서 새로운 변수를 생성할 수 있어 편리함.auto의 함수 반환 타입 유추 (Return Type Deduction)C++11에서는.. 이전 1 2 3 다음