HKU 대학교 Niel 교수님의 오늘 맡아주신 수업 내용을 요약했습니다.
RayTracing :
RayTracing :
가상적인 광선이 물체의 표면에서 반사되어,
카메라를 거쳐 다시 돌아오는 경로를 계산한다.
적게는 물체 하나가 반사하는 빛만 계산하면 되지만
많은 물체를 구성하는 입자 하나하나의 빛을 전부
계산해야하기 때문에 렌더링 기법 중 시간이 많이 소요되는 기술이다.
장점 :
- Rasterized 렌더링에 비해 라이팅이 현실적이다.
- 그림자, 반사, 굴절의 구현이 쉽다.
- 병렬화 계산(GPU 연산)에 적합하다. (각 광선은 다른 광선과 독립적으로 계산된다)
단점 :
- 다각형 메쉬의 교차점(각진 부분)에 대해 무거운 연산을 한다.
(원문 : Calculating intersection points for polygonal meshes is computationally heavy;)
- Fragment / Compute 셰이더를 사용할 때 재귀성 문제가 일어난다.
(원문 : Problem of recursivity when using fragment / compute shaders; )
RayMarching
RayMarching(레이 마칭) : 표면에 가까워질때까지 광선을 다가가게 한다.
장점 :
- 교차점(각진 부분) 표현이 어려울 때 레이트레이싱보다 낫다.
(원문 : Better than raytracing when it's difficult to determine intersection points;)
- Rasterized 렌더링에 비해 라이팅이 현실적이다.
- 병렬화 계산(GPU 연산)에 적합하다. (각 광선은 다른 광선과 독립적으로 계산된다)
- 곡면 필드 렌더링이 비교적 쉽다.
(원문 : Relatively easy to render non-Euclidian geometry, signed distance fields;)
단점 :
- 복잡한 다각형 메시를 렌더링 할 때 레이트 레이싱보다 성능이 더 나쁘다.
(원문 : Worse than raytracing with complex polygonal meshes; )
- Fragment / Compute 셰이더를 사용할 때 재귀성 문제가 일어난다.
사용 예시 :
- 구름 등 : 부드러운 오브젝트를 표현할 때 폴리곤을 여러 장 겹쳐서 쓰는 경우가 많은데,
이러한 상황에서의 대체 용도로 레이마칭의 활용도가 높다.
- 코스트가 가벼운 반사 표현 : SSR적 굴절 표현에서는 화면 밖 오브젝트가 굴절해 보이는 경우는 없다.
하지만 레이마칭 렌더링 기반으로 작동한다면 구현 가능하다.
레이마칭 관련 링크(더보기 클릭)
The Tomorrow Children 그래픽스 해설(한국어 번역)
m.blog.naver.com/sorkelf/221036183431
The Tomorrow Children 그래픽스 해설(일본어 원문) :
www.4gamer.net/games/269/G026934/20170126085/
Pathtracing :
PathTracing :
모든 물체에 랜덤 방향의 Ray를 추적시켜 엄청난 사실성을 자랑한다. (레이트레이싱보다 더 연산이 무겁다)
실제로 현실에서 모든 물체는 빛을 반사, 흡수하고, 여러 번 반사된 빛이
최종적으로 눈에 들어와서 색이 인지되는 것인데
이를 최대한 따라한 것이다.
현실의 빛 효과를 완벽히 따라한 이런 효과들
(soft shadows, depth of field, motion blur, caustics, ambient occlusion,
indirect lighting, etc..)을 간접적으로 표현할 수 있게 된다.
장점 :
- 간접 조명에 유용하다. (글로벌 일루미네이션)
- Rasterized 렌더링에 비해 라이팅이 현실적이다.
- 병렬화 계산(GPU 연산)에 적합하다. (각 광선은 다른 광선과 독립적으로 계산된다)
단점 :
- 랜덤 방향의 Ray를 추적하기에 결과가 종종 매우 혼잡(Noisy)해진다.
때문에 노이즈 제거 패스가 필요하다. (보통 blue noise 샘플링 텍스쳐와 함께 사용한다)
관련 내용(더보기 클릭)
퀘이크 게임에서의 Path Tracing 사용 : developer.nvidia.com/blog/path-tracing-quake-ii/
블루 노이즈 텍스쳐(Blue noise) : 화이트 노이즈에 비해 블루 노이즈는 노이즈가 규칙적인, 균일한 양상을 띈다.
링크 : blog.demofox.org/2018/01/30/what-the-heck-is-blue-noise/
- 다각형 메쉬의 교차점(각진 부분)에 대해 무거운 연산을 한다.
- Fragment / Compute 셰이더를 사용할 때 재귀성 문제가 일어난다.
마치며 정리 :
- Raytracing, Raymarching, Pathtracing을 위한 벡터 수학은 비교적 쉽다.
- 현실적인 조명 효과는 상대적으로 구현하기 쉽다.
- Ray-Triangle Intersection은 계산 비용이 많이 든다.
(*그러나 RTX 카드는 우리를 위해 Ray-Triangle Intersection을 계산할 수 있다.)
- 렌더링 비용은 그릴 픽셀 수에 따라 조정된다.
- 렌더링 비용은 렌더링 할 형상의 양에 따라 조정된다.
(* 따라서 카메라에 보이지 않는 부분 제거(culling)를 권장한다.)
추가 수업 내용 :
+ T&L 가속
+ 플렛 쉐이더
+ Gouraud 음영 셰이더
+ 퐁 셰이더 기법
레이트레이싱 말고 나머지 두개는 몰랐는데, 배우는게 정말 많네요.
레이트레이싱(Ray Tracing) : 물체에 빛을 쏘아 반사된 빛을 추적한다.
레이마칭(Ray marching) : 표면에
경로 추적(Path Tracing) : 모든 물체에 랜덤 방향의 Ray를 추적시켜 현실 빛 효과를 재현한다.
'프로그래밍 > 기타' 카테고리의 다른 글
[HKU대학 강의]강의 마무리, 감사 메일 빌드본 (1) | 2020.11.13 |
---|---|
3D공간 flock(Boids) 알고리즘(군체 AI, 새 무리 이동) C# 코드 리뷰 (0) | 2020.10.11 |