1. Volume Rendering이란?
- 3D 공간에서 정의된 Volume Data를 시각적으로 표현하는 렌더링 기법
- 게임 프로그래밍에서 쓰이는 표면 기반 렌더링과는 다르게, 3D 공간 상 밀도 값을 가지는 볼륨 데이터를 직접 렌더링
- 일반적으로 Voxel 형태로 표현되며, Voxel Data는 밀도, 색상 등의 속성 값을 가집니다.
2. 구현 방법
- DirectX11 기반으로 구현 (OpenGL 등 다른 그래픽스 라이브러리로도 구현 가능합니다)
2-1. Front Texture 생성
2-2. Back Texture 생성
2-3. 최초 Render Pass에서 Front Texture를 Render Target으로 설정한 후, Front Face Culling의 RasterizerState를 설정
2-4. Model Shader를 이용하여 FrontTexture에 위치값 기록
2-5. Back Texture를 RenderTarget으로 설정한 후, Back Face Culling의 RasterizerState를 설정
2-6. Model Shader를 이용하여 BackTexture에 위치값 기록
(이렇게 해주는 이유는 이후 Ray Marching 알고리즘에서 FrontTexture에서 BackTexture를 향하는 레이를 이용해 볼륨 렌더링을 진행하기 때문)
2-7. Raycast Shader를 이용하여 큐브를 렌더링하며 Ray Marching 알고리즘 수행
3. Ray Marching 알고리즘
3-1. Front Texture와 Back Texture에서 동일한 UV 좌표를 이용하여 위치 값 샘플링
3-2. Back Texture Position - Front Texture Position 벡터 연산을 통한 방향 벡터 추출 (normalize)
3-3. 그리고 sqrt(3)을 128로 나눈 값을 방향 벡터에 곱한 후 지정된 횟수만큼 iteration하여 전진하며, 밀도값을 추출하여 색상을 더한다.
- (dir * distance) * iteration
3-4. 최종 색상을 화면에 렌더링
4. 렌더링 결과
'DirectX > [개인] DirectX11 Volume Rendering' 카테고리의 다른 글
3. 연조직과 뼈 구분하여 Volume Rendering (0) | 2025.02.25 |
---|---|
2. Input 및 Camera 구현 (0) | 2025.02.23 |
댓글