4. 문제
• Decal은 조명과 잘 통합되어야 함
– Deferred Render이면 문제 없음
• Decal은 모든 표면(정적이든 동적이든)에서 납득할 수
있는 결과를 내야 함
– Gbuffer에 8비트 채널하나를 데칼을 위해 사용해야함
• Decal은 기하구조의 경계에 맞게 잘려야 함
– 데칼이 물체의 적용되는 표면을 따라야함
• Decal 시스템은 충돌 검출에 쓰이는 것과는 아주 다를
수 있는 기하구조에 대해서도 잘 작동해야 함
– 복잡한 메시들은 충돌검출을 위해 덜 세밀한 메시를 사용한
다는 문제
– 반직선 투사 알고리즘이 돌려준 교점이 데칼을 실제로 랜더
링할 지점과 상당히 다를 수 있다는 것
5. 구현
• 데칼의 경계 입체에 적용되는 셰이더 이용
• 필요한 정보는 위치와 방향, 크기, 텍스쳐
정보(랜더링되는 뷰포트의 깊이 값)
• 데칼 공간에서 작업
– 셰이더에서 데칼의 변환행렬의 역행렬을 넘김
6.
7. 기하구조 랜더링
• 데칼이 적절한 깊이에 랜더
링을 하기 위해서는 경계
입방체를 그려서 어떤 방향
에서도 볼 수 있게 만듬
• 작은 데칼에게 잘 됨
8. 기하구조 랜더링 문제
• 후면선별(BackFace Culling)을 활성화 하고 깊이 판정
을 less로 둔 상태에서 입방체를 랜더링하면 카메라가
그 입방체에 진입하는 순간 데칼이 사라짐
• 해결책
– 전면 선별(frontface culling)을 활성화하고 greater으로 랜더
링
– 데칼이 카메라에 가까운 기하구조에 가려지는 경우 불필요
하게 많은 단편들이 랜더링 된다는 단점
• 입방체 꼭짓점들 중 카메라에 가장 가까운것을 찾아서
그 깊이에서 정렬된, 그리고 입방체 전체를 덮을 만큼
커다란 사각형을 하나 랜더링 하는 것
– 단, 가장 가까운 꼭짓점이 가까은 절단 평면보다 앞에 있다
면, 가까운 절단 평면의 깊이에서 화면 전체를 덮는 사각형
을 랜더링
9. 기하구조 랜더링
• 한 장면에 데칼들이 많이 적용되는 경우
– 하드웨어 인스턴싱으로 랜더링
• 성능 최적화에 도움
– 인스턴싱으로 최적화하는 경우
• 입방체의 위치, 크기를 미리 설정
• 단위 입방체를 사용하고 위치와 크기를 정점셰이더
안에서 적절히 변환
13. 모서리 감싸기
• 데칼이 모서리에 감싸게 하고 복잡한 표면
들의 곡면을 따르게 하는 것
• 표면의 법선을 데칼 공간으로 회전하면 x,y
성분은 표면의 기울기에 해당
– 데칼 평면을 기준
• 기울기와 단편과 데칼 평면사이의 거리를
텍스쳐 좌표로 수정
– 상대적 기울기가 없는 영역에서는 텍스쳐 좌
표가 변하지 않음
– 기울기가 큰 영역들(모퉁이)에서는 텍스쳐 좌
표가 데칼 평면과의 거리에 따라 바깥으로 이
동
• 핏자국등 액체가 튄 흔적을 표현할때 유용
• 투영과 감싸기 기능을 활용하면 어떤 종류
의 표면 사용 가능
14.
15. 표면절단
• 표면 절단의 이유
– 데칼을 전혀 잘라내지 못함
• 하나의 상자에 붙힌 데칼은 그 상자가 놓인 지면에도 투영
• 방법1
– 데칼의 정적 기하구조가 덮고 있는 픽셀들에게만 한정하는 것
– 정적물체를 랜더링 후 데칼을 적용하고 동적인 물체는 그 후 랜더링
• 방법 2
– 기하 버퍼의 또 다른 채널을 마련하고, 랜더링되는 각 물체에 대한 “데칼
ID”를 채널에 저장
– 기하버퍼 랜더링시 각 물체에 대한 데칼 ID를 분산색, 법선과 함께 버퍼
에 저장
– 데칼ID는 상수
• 셰이더는 ID를 기하 버퍼에서 읽은 ID와 비교
– 데칼 ID는 픽셀이 어떤 물체에 속한 것인지를 식별하기 위한 픽셀 당 마
스크 역할
– 정적기하구조가 아무런 구분없이 랜더링 한다면 동일한 ID값을 공유해도
됨
– 동적물체는 다른 고유 ID를 사용
• 가까이 있는 두물체만 같은 ID를 사용할 가능성만 없게 하면 고유할필요는 없음
16. 결론
• 여러 상황에서 좀 더 진짜 같아 보이도록 2D 투영을 개선한 것
– 입체적인 데칼을 만들어내는 것은 아님
• 시각적 결함을 방지하기 위해서는 입체적인 데칼을 사용해야
함
– 수직 기둥 모서리 같은 것들…
• 핏자국등은 표면 법선들 때문에 왜곡된다해도 핏자국으로 보여
별 상관없음
• 경제 입체 판정을 통해서 데칼을 미리 랜더링에서 제외하는 것
이 가능
• GPU의 인스턴싱을 이용 해서 많은 수의 데칼을 일괄적으로 랜
더링 가능
– 수많은 데칼들이 겹쳐지는 상황은 피해야 함
– 동시에 존재 할 수 있는 데칼수를 제한하는게 좋음
– MaxPayne은 한 지역에 만들 수 있는 데칼 수를 제한하여 이전에
방문했던 방에 다시 들어가도 핏자국이나 총알자국이 그래도 남아
있음 (멋있음)