Appearance
지오메트리 셰이더(8)~지오메트리 셰이더를 활용한 신표현(4)
[칼럼 핵심 요약]
노멀 맵을 활용한 범프 매핑을 보다 발전시켜, 텍스처에 기재된 요철 정보를 따라 실제로 3D 모델을 지오메트리 레벨로 변위시켜 버리는 기술을 「디스플레이스먼트 매핑」이라고 부른다.🌐 원문 링크: ジオメトリシェーダ(8)~ジオメトリシェーダを活用した新表現(4) (Mynavi News)
📅 원문 발행일: 2008-11-10 | ✍️ 저자: 西川善司 (니시카와 젠지 / Zenji Nishikawa)
NOTE
💡 현대 그래픽스 관점에서의 발전사 (Modern Retrospective)
- 본 칼럼에서 다루는 핵심 렌더링 기법은 현대 실시간 렌더링 엔진(DirectX 12, Vulkan, Unreal Engine, Unity)의 기초 이론을 구성하고 있으며, 최신 하드웨어 가속 기법 및 컴퓨트 셰이더와 결합하여 고도화되었습니다.
📖 본문 해설
[원문 리드문] > 노멀 맵을 활용한 범프 매핑을 보다 발전시켜, 텍스처에 기재된 요철 정보를 따라 실제로 3D 모델을 지오메트리 레벨에서 변위시켜 버리는 기술을 「디스플레이스먼트 매핑」이라고 부른다.
지오메트리 셰이더를 활용한 신표현(4)~디스플레이스먼트 매핑
평평한 평면(단일 폴리곤)에 대해 미세한 요철이 있는 것처럼 셰이딩(Shading)하는 테크닉을 범프 매핑이라고 부르며, 이것의 주류 기법은 노멀 맵을 활용한 것인 것은 이미 본 연재 제14회~제16회에서 말했다.
노멀 맵을 활용한 범프 맵핑에서는 실제로 요철을 할 수 있는 것이 아니라, 요철이 있는 것처럼 셰이딩(Shading)할 뿐이므로, 그 폴리곤면에 시점을 가깝게 하여 그 요철을 긁어내도록 해 보면, 실제로는 요철이 없는 것이 노출되어 버린다.
이것을 보다 발전시켜, 텍스처에 기재된 요철 정보(하이트맵)에 따라서, 실제로 3D 모델을 지오메트리 레벨로 변위(디스플레이스) 시켜 버리는 기술을 「디스플레이스먼트 맵핑」(Displacement Mapping)이라고 부른다.
이미지적으로는, 이미 존재하는 기본 모델에 대해서, 텍스처에 기재된 요철 정보로 디테일을 변형한다(정형한다)……라고 하는 느낌이 된다.
텍스처에 쓰여진 요철 정보로 3D 모델을 변형시킨다는 것은 "버텍스 셰이더로 텍스처를 읽어 버텍스를 변위시킨다"는 작업이 필요하다. 즉, 버텍스으로부터 텍스처를 참조하는 「Vertex Texture Fetching」(VTF:버텍스 텍스처링)이라고 불리는 기능에 GPU가 대응하고 있을 필요가 있다. VTF는 DirectX 9세대 SM3.0 대응 GPU에서는, 지원되고 있는 GPU와 되어 있지 않은 GPU가 혼재했기 때문에, 호환성면에서 적극적으로 활용되는 국면이 적었지만, DirectX 10세대 SM4.0 대응 GPU에서는 모든 GPU가 대응해야 하는 필수 기능이 되어 있으므로 적극적으로 이용해도 문제가 없다.
여기서는, 범프 매핑(노멀 매핑)의 한층 더 앞서 있는, 디스플레이스먼트 매핑의 2가지의 실현 방법을 소개해 간다.
노멀 맵에 의한 범프 맵핑과 디스플레이스 맵핑의 차이
폴리곤을 분할하여 디스플레이스 매핑을 수행하는 방법
이미 존재하는 3D 모델에 대해서 디스플레이스먼트 매핑을 실행하는 경우, 디테일의 요철을 기재한 하이트맵 해상도와, 그것을 적용하는 측의 3D 모델의 버텍스 해상도의 밸런스가 잡히지 않으면, 디스플레이스먼트 매핑의 품질은 낮아져 버린다. 그런 해상도 밸런스를 신경 써야 할 정도라면 디스플레이스먼트 매핑을 활용하지 않고 제작 단계에서 처음부터 그 디테일을 적용한 3D 모델을 준비하는 것이 런타임 부하도 가벼워지고 귀찮음이 적다.
디스플레이스 맵핑을 위해서는 하이트 맵 텍스처와 3D 모델의 폴리곤 수의 균형이 중요합니다.
그러나 만약 버텍스수가 적은 폴리곤 모델에 해상도가 높은 요철 정보를 적용하고 필요에 따라 버텍스을 증가시켜 디스플레이스맵핑을 할 수 있으면 매우 편리하다. 시점에서 가까운 때에는 낮은 폴리곤으로, 노멀 맵에서 요철 표현을 해, 시점에 가까워짐에 따라 폴리곤 분할수를 올려, 요철 정보의 반영량도 늘려, 정밀도가 높은 성형을 실시하도록 하면, 지오메트리의 LOD(Level of Detail)를 실현할 수 있다.
관점에서의 거리에 따라 필요한 폴리곤 분할을 수행 한 다음 디스플레이 매핑을 수행하는 것이 이상적입니다.
이 구조를 실현하기 위해서는 적용하는 요철 정보의 정밀도에 맞추어 3D 모델의 버텍스을 늘리는 구조가 필요하게 된다.
3D모델의 버텍스의 증가……는 좀 더 자세하게 말하면, 원래의 3D폴리곤 모델을 세세하게 분할해 줄 필요가 있다는 것이다.
이 「폴리곤 분할 처리」(Subdivision)를 실현하는 것이 「테셀레이션」(Tessellation)이라는 테크닉이다. 테셀레이션을 수행하는 기능 모듈을 특히 "테셀레이터"(Tessellator)라고합니다.
테셀레이터는 폴리곤 분할 가게입니다.
ATI의 Radeon HD 2000/3000 시리즈에는, 바로 이 테셀레이터의 구조를 하드웨어 실장한 기능 블록이 탑재되고 있지만, DirectX 10에서는 표준 기능으로서 서포트되어 있지 않기 때문에, 호환성의 측면에서 하면 다소 사용하기 어렵다. 덧붙여서, 테셀레이터 기능의 DirectX에의 편입은 DirectX 11로 실현되는 것이 거의 확약되고 있다. (계속)
민생용 GPU로서 세계 최초로 하드웨어 테셀레이터를 탑재한 것은, Matrox가 2002년에 발표한 「Parhelia-512」였다
최근에는 AMD가 2007년에 발표한 Radeon HD 2000 시리즈가 하드웨어 테셀레이터를 탑재했다. 사진은 최상위 모델인 'Radeon HD 2900 XT'
(트라이Z 니시카와 젠지)