3D Rendering 21

텍셀과 픽셀

픽셀은 씬을 그리는 렌더타겟의 서페이스 상의 단위 텍셀은 텍스쳐상의 단위 프레임버퍼에 들어갈 화면상의 하나의 픽셀은 여러개의 텍셀에 해당할수도 있고, 텍셀의 일부분만을 차지할 수도 있다.픽셀은 프레임 버퍼의 한점이다. 픽셀과 텍셀은 각자의 영역에서는 하나의 점을 나타내지만 렌더링의 과정에서 둘은 일치할수도 혹은 일치하지 않을 수도 있다. 미리 변환된 꼭짓점을 사용하여 2D 출력을 렌더링하는 경우 각 텍셀 영역이 단일 픽셀 영역에 올바르게 해당하도록 주의해야 합니다. 그렇지 않으면 텍스처 왜곡이 발생할 수 있습니다. Direct3D가 삼각형을 래스터화하고 텍스처링할 때 따르는 프로세스의 기본 사항을 이해하면 Direct3D 애플리케이션이 2D 출력을 올바르게 렌더링하도록 할 수 있습니다. 앞의 다이어그램은..

3D Rendering 2023.09.29

volumetic light map

공간에 대한 빛의 정보를 저장하는 라이트 맵. 간접광, 즉 광원으로부터 물체로 직접적으로 쏘아지는 빛이 아닌 물체에 반사되서 다시 물체로 쏘아지는 빛의 정보를 담을 수 있는 라이트 맵. 일반적인 라이트맵과는 다르게 공간의 형태를 저장하기 때문에 단순 텍스쳐의 형식이 아니다. 3차원 구면조화함수를 이용하여 정보들을 저장하고 해당 공식에 따라 산출되는 수치들을 저장하는 방식으로 되어 있기에 일반적인 라이트맵에 비하여 저장 용량이 작다. 해당 데이터를 이용하여 Specular(반사광)을 연산하는데 이용할 수 있다. 아래는 언리얼 공식 문서의 설명내용 라이트매스는 스태틱 메시의 간접광에 대해 표면 라이트맵 을 생성합니다. 하지만 (캐릭터같은) 다이내믹 오브젝트는 간접광도 받을 방법이 필요합니다. 이는 빌드 시간..

3D Rendering 2023.09.29

Compute Shader

개념 GPGPU(General-Purpose computing on GPU)를 이용해 대규모 병렬처리를 수행하는 쉐이더 동시에 수많은 대상(~ 수십만, 수백만 단위)에 대해 동일한 연산(함수)을 처리해야 할 때 사용한다. 컴퓨트 쉐이더를 연산에 사용하는 예시로 VFX Graph가 있다. 확장자는 .compute ※ GPGPU(General Purpose Graphics Procesiing Units) 그래픽 처리를 위한 보조장치였떤 GPU를 보완하여 컴퓨터의 중앙처리 장치인 CPU를 대신하여 모든 데이터 연산 및 처리를 하는 GPU 상의 범용 계산 장치

3D Rendering 2023.09.28

Tiled Forward Shading(Forward+)

포워드의 단점인 여러개의 라이팅을 다루는데 한계가 있는 점을 보완한 렌더링. 라이트를 타일별로 컬링하여 적용되는 라이트들만을 타일별로 구분하여 픽셀 셰이더 단계에서 적용. 렌더링 과정을 간단히 요약하자면 아래와 같습니다. 1. 화면을 NxN 타일 크기로 나누고, 타일과 교차되는 Light 들을 각 타일에 할당합니다. 2. 실제 오브젝트를 렌더링할때, 현재 픽셀이 어느 타일에 포함되는지 찾고, 찾은 타일에 포함되어있는 라이트들을 가져와 현재 픽셀에 적용합니다. Tiled Forward Rendering은 Tiled Deferred Rendering의 확장 혹은 수정 버젼입니다. 이 둘과 비교해서 Tiled Forward Rendering의 장점은 아래와 같습니다. Transparency 지원 하드웨어 MS..

3D Rendering 2023.09.28

TBDR(Tile-based (Deffered) GPU)

또한, TBR에서 변형되어 파생한 Tile Based Deferred Rendering(이하 TBDR) 라는 방식도 있습니다. 이 방식은 기본적으로는 TBR입니다. 다만 버텍스 쉐이더에서 트랜스폼 연산을 거치고나서 바로 픽셀 쉐이더로 넘기는 것이 아닙니다. 대신 버텍스 쉐이더의 결과를 중간 데이터를 담는 파라미터 버퍼에 담아둡니다. (이 버퍼를 ImgTec에서는 파라미터 버퍼라 부르고, ARM에서는 폴리곤 리스트라 부르는 등 여러 이름이 존재하지만 편의상 파라미터 버퍼로 통일하여 칭하겠습니다.) 이 파라미터 버퍼에 담은 후 픽셀 쉐이더로 바로 넘기는 것이 아니라, 매 드로우 콜 마다 버텍스 쉐이더의 결과를 계속 담아둡니다. 그 후 모든 드로우콜이 끝나면 그때서야 비로소 타일을 렌더링하고 프레임버퍼에 출력..

3D Rendering 2023.09.28

TBR(Tile-based Render)

전통적으로 데스크톱의 그래픽에서는 드로우콜마다 프레임 버퍼 전체를 갱신합니다. 하지만 높은 해상도의 프레임버퍼 전체를 매 번 갱신하는 것은 높은 메모리 대역폭을 요구하게 됩니다. 따라서 모바일에서는 프레임버퍼 전체를 매 번 갱신하는것이 아니라 타일 단위로 쪼개서 갱신을 하는 방식을 사용합니다. 드로우콜 발생 시 즉시 프레임버퍼에 기록하는 것이 아니라, 칩셋에 내장된 메모리에 존재하는 타일에 렌더링합니다. 이로 인해서 매번 화면 전체를 렌더링 하는 것이 아니라 실제 도형이 그려지는 타일만 렌더링 하게 됩니다. 우선, 프레임버퍼를 일정 크기의 타일로 영역을 나눕니다. (이 타일 크기는 칩셋 벤더마다 차이가 있습니다.) 드로우콜이 발생하면 지오메트리 데이터가 버텍스쉐이더를 거쳐서 트랜스폼을 수행 후 레스터화됩..

3D Rendering 2023.09.28

Deffered Render 메모리 대역폭 문제

대역폭은 메모리에서 한 번에 빼낼 수 있는 데이터의 양을 의미한다 디스플레이와 동일한 크기의 메모리를 여러개 할당하여 렌더링 데이터를 저장해야하므로 메모리 대역폭을 많이 필요로 하게되어 대역폭의 문제가 발생한다. 디스플레이의 크기와 해상도가 좋아질 수록 더욱 큰 대역폭을 요구하게 되는 것이 문제 모바일의 같은 경우에는 대역폭이 낮으므로 디퍼드를 적용하기 어렵다

3D Rendering 2023.09.28

Light Pre-Pass

디퍼드 셰이더의 과정을 모두 거쳐서 결과물을 Lit Buffer(라이트 버퍼)에 저장하고 똑같은 물체를 다시 Forward형식으로 라이팅을빼고 그려서 Lit Buffer의 결과물과 합성하여 그린다. 이런 방식을 통해서 디퍼드의 단점인 다양한 Material을 다루기 힘들다는, 특히 투명도가 있는 물체를 다루기 어렵다는 부분을 보완한다 하지만 물체를 디퍼드와 포워드로 두 번 그리기때문에 DrawCall이 2배가 된다.

3D Rendering 2023.09.28

Deffered Render

※ 디퍼드 렌더링 Forward에서 Gemetry이후 Geometry Buffer(G-Buffer)라고 부르는 씬에서 라이팅을 처리하기 위해 필요한 데이터들을 나누어 저장하는 공간에 저장한다. 각 저장공간을 모두 다 합쳐서 G-Buffer라고 부른다. 렌더링에 필요한 데이터들을 나누어 저장한다. 각 저장공간을 렌더타겟이라고 부르고 여러 개의 렌더타겟을 사용해 멀티 렌더 타겟을 사용한다고 한다. MRT(Multi Render Target)이라고 부른다. 디퍼드에서는 MRT를 이용해 화면에 그려질 픽셀의 데이터를 MRT에 전부 수집한 후 라이팅 연산을 한 번에 처리한다. Forward의 경우에는 위의 설명처럼 물체마다 덧그리기를 진행하여 그리기를 시행한다. First Pass 1번째 파이프라인과정에서는 GB..

3D Rendering 2023.09.28

Forward Render

※ 포워드 렌더링 * Vertex Pragment(버텍스 셰이더) - World/View/Projection의 변환 연산이 일어난 지점 * Geometry Pragment(지오매트리 셰이더) - 버텍스 셰이더를 거친 정점들을 이용해 도형을 구성한다. - Projection을 거친 정점은 절두체컬링을 통해 제거된 정점을 삼각형의 한꼭지점으로 가져서 삼각형의 형태를 잃어버릴 수 있다. 이런 경우에 여기서 새로운 정점을 생성하여 도형의 형태를 바꾸거나 전달받은 정점을 이용해 더욱 세밀한 도형을 표현하기위해 정점을 분할하여 더 세분화된 형태로 바꾸어 새롭게 도형의 형태를 구성할 수 있다. 그 단계를 여기서 진행한다. * Clipping Restarization - 정점을 통해 구성된 도형의 픽셀들을 화면에 표현..

3D Rendering 2023.09.28