Volumetric Ray Marching
·
Graphics
Volumetric Ray MarchingVolume Ray Marching은 구름, 연기, 안개 볼륨 데이터 등 내부 밀도가 공간적으로 분포된 비표면 객체를 실시간 렌더링하기 위한 핵심 기법이다.위 렌더링 방식은 광선을 작은 스텝으로 쪼개어 진행하면서 매 위치에서 매질의 밀도를 샘플링하고, 광선을 따라 산란된 빛을 누적 적분하는 방식으로 최종 색상과 투명도를 계산한다. Volumetric Ray Marching 동작 원리Ray Direction픽셀의 화면 좌표로부터 월드 공간의 광선 원점과 방향을 계산한다. 전형적으로 카메라 위치를 원점으로, 픽셀의 정규화 좌표를 카메라 좌표계에서 월드 좌표계로 변환하여 방향을 얻는다. Volume Bound광선이 볼륨 객체와 교차하는 시작 지점과 끝 지점을 구한다. ..
Deferred Decal Tangent Space Normal Blend
·
Graphics
Deferred Decal RenderingDeferred Decal은 별도의 메시를 씬 표면에 덧붙이지 않고도 투영하여 텍스처(Base Color, Normal, Metalic, Roughness 등)를 합성할 수 있는 기법이다. 총알 구멍, 핏자국, 오일 자국, 데칼성 웨더링 등 대부분의 동적/정적 데칼 효과가 이 방식으로 처리된다.Deferred Decal은 현재 프레임의 Depth를 샘플링하여 데칼 영역 안에 있는 메쉬에 합성을 진행하므로 Depth PrePass가 필요로 하다. Deferred Decal 동작 원리Decal Bounding Box데칼의 영향 영역을 위치 / 방향 / 크기만 있는 추상 볼륨이 아닌 Bounding Box로 정의하여 배치하고 해당 박스를 일반 메쉬처럼 렌더링을 진행한..
Two-Pass HZB Occlusion Culling
·
Graphics
Two-Pass HZB Occlusion CullingTwo-Pass HZB(Hierarchical Z-Buffer) Occlusion Culling은 가려진 지오메트리를 효율적으로 제거하기 위한 기법이다. 현재 Unreal Engine 5의 Nanite를 비롯해 다수의 최신 렌더링 파이프라인에서 표준적인 오클루전 컬링 방식으로 자리잡고 있다.핵심 아이디어는 단순하다. "이전 프레임에 보였던 오브젝트는 이번 프레임에도 거의 대부분 보일 것"이라는 가정을 활용하여 1차 패스에서 신뢰할 수 있는 HZB를 먼저 만들고, 이 HZB로 2차 패스에서 나머지 오브젝트의 가시성을 재검증하는 구조이다. 기존 HZB Occlusion Culling (One-Pass) 방식의 한계기존의 HZB 오클루전 컬링은 다음과 같..
Animation Compression
·
Graphics
시작하기 전에..UE 5.5에서 캐릭터 관련 에디터 기능을 플러그인으로 포팅하면서 애니메이션 시스템의 압축기를 이식하기 위해 압축 프로세스를 분석해보려고 한다. 언리얼 내부에서도 ACL 플러그인을 주축으로 데이터 압축이 진행되며 디코딩 과정만 적용한다면 충분히 사용 가능하다고 판단이 된다. Key Sampling먼저 키샘플링은 애니메이션을 일정 시간 단위로 샘플링하여 키를 생성하는 단계이다.샘플레이트를 지정하여 초당 몇 프레임으로 샘플링할지 정할 수 있고 크로스 플랫폼 게임의 경우Frame Stripping 기능을 활용하면 플랫폼 별로 샘플레이트를 다르게 적용할 수 있게 해준다. Key Reduction애니메이션 키 데이터를 압축하기 이전 압축에 필요한 키들을 선별하기 위한 사전 작업이다.각각의 알고리즘..
Animation Retargeting
·
Graphics
시작하기전에..요즘 상용 엔진에서는 기본적으로 지원하는 애니메이션 재활용 기법인 Retargeting을 구현하는 과정에서의 아이디어를 정리해보려한다. 사실 요즘 상용엔진을 사용하지 않고 네이티브로 구현할 일이 얼마나 있을지는 잘 모르겠지만.. 나중에 다시 구현해야할 일이 있을 경우 동일한 실수를 반복하지 않기 위해... Skeletal Mesh의 Bone 구조가 다르거나 Bone의 Base Pose가 다른 경우 Animation을 재활용 할 수 있을까?먼저 애니메이션이 어떻게 처리되는지 생각해보자. 기준이되는 모델의 각 노드별 Local Transform에 대한 Base Pose를 기준으로 각 애니메이션 트랙 내의 프레임에서 표현되는 키값은 변화한 각 노드들의 로컬 공간에서의 변화량에 대한 정보를 의미한..
Texture Block Compression
·
Graphics
시작하기 전에..프로젝트에서 자체 텍스처 포멧을 사용하는 경우 텍스처 압축 포멧을 추가해야 할 때마다 압축기를 통해 압축 데이터를 지원해야 하는 경우가 발생한다. 압축기를 제공하는 오픈소스 라이브러리가 여러가지 있는데 NVIDIA의 NVTT의 경우 NVIDIA Texture Tools 3 부터는 풀 소스가 아닌 SDK 형식의 라이브러리를 제공한다. 빌드된 툴로는 DDS 형식의 포멧으로 적용을 해야 했기에 텍스처 데이터만 필요한 경우 SDK를 활용하여 압축기를 구성해야한다.https://developer.nvidia.com/gpu-accelerated-texture-compression NVIDIA Texture Tools 3NVTT 3 can be used to compress textures to a..
[DirectX 11] Dissolve Effect
·
Graphics
Dissolve Effect - 특정 모델이 죽거나 사라질때 갑자기 사라지는 것이 너무 어색하다 느껴, 이전에서 부터 이러한 효과들을 추가해보고 싶은 욕심이 있었기에 객체가 타들어가는 효과인 Dissolve Effect를 활용하게 되었다. Dissolve Effect 적용 방식 - 일단 Dissolve Effect를 적용하기 위해선 Dissolve 전용 Noise Texture가 필요로한데 시간적인 부분도 있고 아트측에서 제작해본 경험도 없었기에 아트측에서 제작한 몇개의 Texture와 구글링을 통해 찾은 Texture를 섞어 사용하게 되었다. - 실체가 보여지는 굵기와, 타들어가는 속도, 타들어가는 색상 및 강도, 타들어가는 부분의 바깥쪽과 안쪽의 강도를 설정 할수 있게 구현하여 세세한 조절을 할 수 ..
[DirectX 11] Color Grading & LookUpTable Texture
·
Graphics
Color Grading- 후처리 방식중 하나이며, 전체적인 스크린상의 RGB값을 활용하여 미리 계산해둔 다른 테이블의 RGB로 변환시키는 작업이다.- 영화측에서는 거의 필수적으로 사용한다고 하며, 다른 테이블을 참조해서 변환한다는 것 자체는 간단하지만 생각보다 효과적인 결과물을 볼 수 있다. Color Grading을 적용하게된 계기- 현재 진행중인 프로젝트에서 외부에 있을때와 내부에 있는 경우는 IBL을 영역별로 나누어 분위기를 조성하였지만, 게임 흐름상 보스존에 입장한다거나 공간에 대한 변화가 있을때 추가적인 효과를 주기 위해 추가하게 되었다.- 처음엔 단일 Color Grading을 적용하려고 생각하였으나 교수님이 피드백으로 보통 게임에서 상황이나 구역별로 영역을 지정하여 가중치를 주어 블랜딩하여..