이론/그래픽스 8

(기초) 포워드 VS 디퍼드 렌더링

렌더링 방식 언리얼이나 유니티같은 상용 엔진은 기본적으로 포워드(Forward) 렌더링과 디퍼드 (Deferred) 렌더링 방식을 지원한다. 이거 두개가 젤 유명한데 뭔 차이일까? 디퍼드 렌더링 (Deferred Rendering) 디퍼드 랜더링은 많은 수의 동적 라이트를 괜찮은 성능으로 처리할 수 있다. 따라서 PC 및 콘솔 게임에서 널리 쓰인다. 그러나 기기의 성능이 어느 정도 받쳐주어야 하며, 한 번에 여러 개의 버퍼에 한꺼번에 렌더링 하는 멀티 렌더 타겟 기능이 필요하다. 멀티 렌더 타겟을 이용해서 여러 개의 지오메트리 버퍼(G버퍼)에 불투명(Opaque)한 오브젝트들의 정보를 렌더링한다. 이때 버퍼에는 다양한 정보가 기록되고, 모든 오브젝트들을 버퍼에 렌더링 한 후 이 정보들을 토대로 라이팅을 ..

이론/그래픽스 2022.07.13

텍스처

텍스처? 텍스처 매핑이란 물체의 표면에 컬러를 입히는 기법이다. 픽셀 쉐이더에서 텍스처의 값을 참조해 물체 표면을 표현하는 픽셀의 최종 컬러에 영향을 준다. 대역폭(병목) 텍스처가 병목인 경우는 주로 메모리 대역폭이 모자란 경우이다. 대역폭이란 프로세서가 메모리에 있는 데이터를 가져올 때 최대로 가져올 수 있는 크기를 말한다. PC의 경우에 메모리 대역폭이 문제가 되는 경우는 적지만 모바일 환경의 경우는 다르다. 모바일의 경우에는 성능보다 전력 효율이나 발열등을 신경써야 한다. 메모리도 나름 발열과 전력소비를 많이 하는데 따라서 모바일 하드웨어의 메모리 대역폭은 상당히 작게 설계되는 편이다. 이런 메모리 이슈에는 GPU가 CPU 메모리에서 데이터를 가져오는 경우도 해당한다. 텍스처는 메모리를 많이 사용하..

이론/그래픽스 2022.01.22

컬링(Culling)

컬링 드로우콜을 줄이기 위해서는 애초에 적은 수의 오브젝트를 렌더링 하면 된다. 이 때 눈에 보이지 않는 오브젝트를 제외함으로써 렌더링할 오브젝트의 수를 줄일 수 있는데, 이처럼 렌더링이 필요하지 않은 오브젝트들을 추려 내는 것을 컬링(Culling)이라 한다. 프러스텀(Frustum) 컬링 대부분의 게임 엔진은 카메라의 뷰 프러스텀(절두체)로 컬링을 수행한다. 즉 저 사다리꼴 영역 안에 들어오거나 걸친 오브젝트만 눈에 보이게 되는데, 이 영역을 완전히 벗어난 오브젝트들은 렌더링 대상에서 제외시키는 것이다. (유니티의 경우 엔진에서 자동적으로 수행) 자유 시점 카메라에서는 카메라의 위치에 따라 렌더링 되는 오브젝트의 갯수가 크게 차이날 수 있다. 이런 경우 프러스텀 컬링에서 Far Clipping Pla..

이론/그래픽스 2021.12.14

배칭(Batching)

2021.11.13 - [이론/그래픽스] - 드로우콜(Draw Call) 배칭 배칭은 여러 배치를 묶어 하나의 배치를 만드는 것이다. 드로우콜 횟수를 줄이는 가장 효과적인 방법 중 하나이기도 하다. 배칭을 위해서는 오브젝트들이 동일한 머티리얼을 사용해야 하는데, 이때 머티리얼이 동일하다는 것은 동일한 머티리얼 인스턴스가 같다는 것을 의미한다. 스태틱 배칭 스태틱 배칭은 정적인 오브젝트를 대상으로 하는 배칭 기법이다. 따라서 런타임에서 버텍스 연산을 하지 않아도 되기 때문에 매우 효율적이다. 스태틱 배칭은 메시의 폴리곤 수에 상관 없이 같은 머티리얼을 사용하는 오브젝트들을 하나의 메시로 묶어준다. 단, 머티리얼이 1개라고 해서 무조건 1개의 배치로 합쳐지는 것은 아니며 라이트와 같은 요소들로 인해 배칭이 ..

이론/그래픽스 2021.11.15

드로우콜(Draw Call)

드로우콜 CPU는 현재 프레임에 어떤 것을 그려야 할지 정하고, GPU에 오브젝트를 그리라고 명령을 호출하는데 이 명령이 바로 드로우 콜(Draw Call)이다. 게임의 오브젝트를 화면에 렌더링하려면 우선 오브젝트가 렌더링 대상인지를 판단한다. 이러한 과정을 컬링이라고 한다. 컬링을 거친 오브젝트가 렌더링 되기 위해선 CPU에서 GPU에 다음의 정보를 줘야 한다. 메시 정보 텍스처 정보 쉐이더 정보 트랜스폼 정보 알파 블렌딩 여부 기타 등등 메시 텍스쳐 쉐이더등의 정보는 스토리지에 보관되어 있다가 CPU가 이를 읽어들여 CPU 메모리에 데이터를 올린다. 그 후 CPU메모리에 있는 정보들을 GPU 메모리로 복사한다. 정보들은 GPU 메모리에 있어야 GPU가 사용할 수 있다. 만약 위 복사과정이 매 프레임마..

이론/그래픽스 2021.11.13

병목(Bottleneck)

최적화 게임의 성능 최적화를 위해서는 다음의 작업들을 고려할 수 있다. 메시의 버텍스 줄이기 텍스처 크기 줄이기 가벼운 쉐이더 사용 드로우콜 줄이기 게임 로직 최적화 물리 연산 줄이기 기타 등등 그러나 위 작업들을 수행하기 전에 어디서 병목이 일어나는지를 알아야 한다. 왜냐면 병목이 일어나는 곳 외에서 최적화를 해봤자 전반적인 수행 속도는 크게 바뀌지 않기 때문이다. 목표 설정 게임의 최적화 목표를 설정할 때 60FPS냐 30FPS냐를 정하는 것을 목표로 삼을 수 있다. 그러나 먼저 기준이 되는 하드웨어 스펙을 정해야 한다. 예를 들어 만드는 게임이 퍼즐게임이라면 가능한 다양한 기기에서 이용 가능하도록 해야 할 것이다. 또한 더 좋은 디바이스라고 해서 병목이 덜 발생할 것이라고 생각할 수 있지만 사실은 ..

이론/그래픽스 2021.11.03

렌더링 파이프라인

GPU 원래 렌더링은 CPU로만 처리하고 있었는데 GPU가 추가되면서 이를 이용한 하드웨어 가속이 가능해졌다. 동시에 렌더링 파이프라인이라는 개념이 쓰이게 됐고 이는 여러 Graphics API의 기반이 된다. CPU가 GPU에 명령을 보내어 각각 자신의 일을 병렬적으로 처리한다. GPU에는 VRAM이라는 전용 메모리가 존재하는데, 여기에는 텍스쳐나 메시 데이터 혹은 이중 버퍼링등에 쓰이는 버퍼가 저장된다. 기기별로 하나의 물리적인 RAM을 CPU+GPU가 나눠서 쓰기도 한다. 렌더링 파이프라인 래스터(raster) : 화상 정보를 표현하기 위해 이미지를 2차원 배열 형태의 픽셀로 구성하여 표현하는 것. 즉, 연속된 픽셀들의 집합. 렌더링 파이프라인 : 3차원 이미지를 2차원 래스터 이미지로 표현하기 위..

이론/그래픽스 2021.10.26

곡선(Curve) & 스플라인(Spline)

곡선 곡선을 표현하기에 앞서, 두 정점 (A, B) 사이에 있는 점 P를 다음과 같이 표현할 수 있다. 또한 곡선은 t에 대한 방정식(P(t))으로 표현할 수 있다. 베지에 곡선(Bézier Curves) n차 베지에 곡선은 n+1개의 점으로 얻을 수 있는 베지에 곡선이다. 1차(Linear) 베지에 곡선은 앞서 말한 점 A,B 사이에 있는 점 P의 집합으로 표현할 수 있다. 말이 곡선이지, 사실상 A-B를 잇는 선분이다. 2차(Quadratic) 베지에 곡선은 아래와 같다. 2차 베지에 곡선은 A와 B를 잇는 1차 베지에 곡선 위에 있는 한 점 AB(t)와 B와 C를 잇는 1차 베지에 곡선 위의 한 점 BC(t)사이에 있는 한 점 P(t)의 집합으로 볼 수 있다. 식으로 표현하면 다음과 같을 것이다. ..

이론/그래픽스 2021.07.11