'시차차폐매핑'에 해당되는 글 1건

  1. 2009.12.07 범프매핑의 개량형

아래에서 퍼옴

http://allosha.tistory.com/category/니시카와%20젠지/범프매핑의%20개량형




시차매핑(Parallax Mapping)

2008-05-16 18:30:00
法線マップを活用したバンプマッピングは、1ポリゴンで表現するにはコストパフォーマンス的に見合わない微細凹凸を表現するために非常に重宝する技術であった。実際、プログラマブルシェーダ・アーキテクチャ・ベー ...... >> Read more

(C) Mainichi Communications Inc. All rights reserved.



법선맵을 활용한 범프매핑은, 하나의 폴리곤으로 표현하려면 코스트 퍼포먼스적으로 맞지 않는 미세한 요철(凹凸)을 표현하는데는 매우 유용한 기술이었다. 실제로, 프로그래머블 셰이더 아키텍쳐 기반의 GPU가 된 이후에, 3D게임 그래픽스에 가장 많이 보급된 기술이라고 할 수 있을지도 모른다.

그런데 , 이 기술도 만능은 아니고, 특정의 조건에서는 한계가 있다. 이것을 개선한 개량버전의 범프매핑이라 할 수 있는 것이 「시차 차폐 매핑」(Parallax Occlusion Mapping)이다.


법선맵에 의한 범프매핑의 약점

법선맵을 활용하는 범프매핑은, 미세요철의 법선벡터를 이용해 실시간으로 광원에 대해서 픽셀단위로 음영 계산을 하기 때문에, 그 입체적인 음영은 광원이 이동하면 제대로 움직이고, 멀리서 보기에는 정말로 미세요철이 있는 것처럼 보인다. 그러나, 실제로는 요철의 지오메트리 정보가 없기 때문에, 시점을 이 요철에 너무 가까이가져가면 거짓말이 드러난다.

3인칭 시점의 3D게임이면 어느 정도, 시점(카메라)을 대상물로부터 떨어 뜨려 놓을 수 있지만, 1인칭 시점의 게임에서는 좀처럼 그렇게도 되지 않는다.

「 F.E.A.R. 」(MONOLITH,2005)으로 부터. 멀리서 보기에는 요철이 제대로 있는 것처럼 보인 벽돌의 벽도 가까이 가서 보면 이와 같다. 실제로 요철은 없고, 평평한데 음영이 붙어 있는 부자연스러움이 드러난다.
(C)2005 Monolith Productions, Inc. All rights reserved. Published by Vivendi Universal Games, Inc. under license from Monolith Productions, Inc. F.E.A.R., Vivendi Universal Games and the Vivendi Universal Games logo are trademarks of Vivendi Universal Games, Inc. Sierra and the Sierra logo are registered trademarks or trademarks of Sierra Entertainment, Inc. in the U.S. and/or other countries. MONOLITH and the Monolith logo are trademarks of Monolith Productions, Inc. All other trademarks are property of their respective owners.


범프매핑에서, 시점이 가까워지면 「 부자연스러움 」이 드러나는 이유는 무엇일까 생각해 보면,

  • 실제로 요철이 있으면, 그 요철에 의한 전후관계의 차폐를 느낄 수 있을테지만, 그것이 없고, 평면에 음영이 붙은 것처럼 보여 버린다

라는 부분에 있다는 것을 알게된다.

이것을 해결해 나가면, 범프 맵핑의 약점을 극복할 수 있는 것이다.


개량형 범프매핑 「시차매핑」

이러한 생각으로, 현재까지 여러가지 개량형 범프매핑이 고안되었다.

SIGGRAPH 2001에서 발표된 「 Polynomial Texture Mapping 」(다항식 텍스쳐 매핑)등이 그 예이지만, 그보다 심플하고, 사전 계산이 필요없고, 구현하기 쉬운 「시차 매핑」(Parallax Mapping) 쪽이 인기를 끌어 그 개량과 보급이 진행되어 왔다.

법선맵을 활용한 범프매핑에서는, 미세요철의 정보로서 그 미세요철의 법선벡터만을 이용하지만, 시차 매핑에서는, 법선벡터에 추가해서 그 미세요철의 높이 정보도 이용한다. 높이정보는, 법선맵을 생성할 때의 중간 정보인 「 높이맵」(Height Map) 에 해당하므로, 귀찮을 것이 없다.

법선맵 기반의 범프매핑의 경우, 어느 픽셀을 그릴 때, 그 픽셀에 대응하는(텍스처 좌표의) 법선맵에서 꺼내 온 법선벡터로, 음영 계산을 한다. 이것은, 곧, 시선과 그 폴리곤 상의 픽셀과의 교차점에 대해서, 실제의 요철량을 무시하고, 음영 계산을 하는 것이다.

그 폴리곤에 대해서 정면으로, 마주 보고 있을 때는  이것만으로도 부자연스러움은 없지만, 시선이 비스듬하게 되면, 이 요철의 음영과 그 표현하고 싶은 요철량과의 엇갈림이 커져서 부자연스럽게 되어 버린다.

거기서, 이 요철량을 고려해 주고자 하는 것이 시차 매핑이다.

법선맵에 의한 범프맵핑의 경우, 요철과 정면으로 마주 보고 있을 때는 부자연스러움은 그렇게 없지만...

 

기울여 보면, 요철의 원근이 고려되지 않아
이런 느낌이 되 버린다.

 원래라면 요철의 원근이 고려되어 이렇게
 보일 것이다. 이것을 하려는 것이 시차 매핑


표현하려고 하는 그 요철이 「매우 완만하다」라고 가정했을 때는, 그릴려는 픽셀의 위치에서의 높이와 시선이 그 요철과 교차하는 곳의 높이는 거의 같다고 할 수 있을 것이다. 그렇다면, 그릴려고 하는 픽셀 위치에서의 높이 정보와 시선이 (서로) 교차하는 위치가, 높이 정보를 고려한 법선맵에서의 참조 위치라고 할 수 있다.

이 "조작"에 의해서, 기울어진 각도의 시선 앞에 있는 요철도 그 나름대로 입체적으로 보이게 된다.

이것이 시차 매핑이다.

보통의 범프 맵핑이 가진 부자연스러움의
원인

시차 매핑은, 법선맵 참조 위치를 요철의 높이를 기록한 높이맵 정보를 바탕으로 재조정하는 버전의 범프 맵핑


< 그림 설명>
좌:
ポリゴン面(폴리곤면), 凹凸の高さ量(요철의 높이량), ハイトマップ(높이맵)
원래 이 시선과 요철(凹凸)이 교차하는 이곳의 법선맵을 참조해야 함
그냥 범프맵핑은 여기의 법선맵을 참조해 버린다.
우:
여기를 시선과 요철의 교차점으로 보고, 이 위치의 법선맵을 참조한다.
원래는 여기 위치의 법선벡터를 참조해야 하지만 오차는 있다.
hxE.xy <-- 높이맵의 높이정보 h를 읽어서 대략적으로 시선 E와 요철이 교차하는 지점을 구한다.


이 시차 매핑을 채용한 3D게임은 이미 몇개정도 존재한다. 픽셀셰이더의 부하는 거의 법선맵 기반의 범프매핑과 다르지 않다는 특성도 그 채용을 적극적으로 만들고 있는 것 같다.(계속)

 「F.E.A.R.」(MONOLITH,2005)로 부터. 왼쪽이 단순한 법선맵 베이스의 범프 맵핑, 오른쪽이 시차 매핑.
(C)2005 Monolith Productions, Inc. All rights reserved. Published by Vivendi Universal Games, Inc. under license from Monolith Productions, Inc. F.E.A.R., Vivendi Universal Games and the Vivendi Universal Games logo are trademarks of Vivendi Universal Games, Inc. Sierra and the Sierra logo are registered trademarks or trademarks of Sierra Entertainment, Inc. in the U.S. and/or other countries. MONOLITH and the Monolith logo are trademarks of Monolith Productions, Inc. All other trademarks are property of their respective owners.

「Tom Clancy's Splinter Cell Chaos Theory」(UBI SOFT,2005)로 부터. 왼쪽이 단순한 법선 맵 기반의 범프 맵핑, 오른쪽이 시차 매핑.
(C)2005 Ubisoft Entertainment. All Rights Reserved. Splinter Cell, Splinter Cell Chaos Theory, Sam Fisher, Ubisoft, and the Ubisoft logo are trademarks of Ubisoft Entertainment in the U.S. and/or other countries. If you need to speak about the game, you have to write the full title this way:Tom Clancy's Splinter Cell Chaos Theory. If you need to speak only about the Splinter Cell licence, you have to name it this way:Tom Clancy's Splinter Cell(R)




시차차폐매핑(Parallax Occlusion Mapping)


범프매핑의 개량형이라고 할 수 있는 「시차매핑」이지만, 서두에서 말한 범프매핑의 약점에 대한 약간의 개선을 보인 것에 지나지 않으며, 부자연스러움은 어느정도는 남아 있다.

예를 들면, 요철의 변화가 매우 심한 경우에서는, 대담한 근사로 구한 요철과, 시선의 교차점과 많이 어긋나 무시할 수 없게 되고, 여전히 요철의 전후관계나 차폐는 무시된 상태 그대로다.

거기서, 다음에 고안된 것이, 이 요철과 시선의 교차점을 구할 때에 정밀도를 좀더 올리려는 접근방법이다. 이것은 픽셀셰이더의 Programmability와 GPU 성능이 매우 향상된 다이렉트X 9 세대 / SM 3.0 대응 GPU가  등장하면서 처음으로 현실성을 띠게 된 기술이다.

이 개량판의 시차 매핑에서는, 세세한 요철의 차폐(Occlusion)관계가 고려되는 것으로 부터 「시차차폐매핑」(Parallax Occlusion Mapping)이라 불린다.

지금까지는 평면에 양각(凸)을 붙인다고 하는 이미지였지만, 시차차폐매핑에서는 평면에 음각(凹)을 조각한다 ……라는 이미지로 구현된다고 하는 것이 표준인 것 같다.

「시선과 요철과의 충돌점을 구하고, 그 위치의 법선맵을 꺼낸다」라고 하는 근본적인 생각은 시차 매핑과 다르지 않다.

문제는 어떻게 요철과 시선의 충돌점을 효율적으로 구해 갈까라는 부분이다.

이것은, 의외로 착실한 실시간 계산으로 실현된다.

구체적으로는, 폴리곤면으로부터 조사점을 그 시선의 연장선상을 따라 조금씩 들어가게 하면서 그때마다, 요철과의 충돌 판정을 실시해 간다. 충돌이라 판정 할 수 있다면, 그 부분에 대응하는 법선맵을 참조한다. 법선맵에서 법선벡터를 가져온 다음의 음영 계산 자체는 범프매핑이나 시차매핑과 같다.

조사점을 시선을 따라 조금씩 들어가게 하고, 그 위치에서의 높이맵을 참조해 그 높이가, 진행된 시선의 높이보다 낮으면, 시선은 계속 진행하게 된다.

계속 조사점을 시선을 따라 진행시켜 나가서, 결국에는 높이맵의 높이가, 그 때의 시선의 높이 보다 높게 된다. 이것은 즉, 요철안으로 조사점이 들어 간 것이 되어, 충돌점은 전회(前回)와 이번 사이에 있다고 판정할 수 있다.「이전과 이번의 중간 지점에 충돌점이 있었다」라고 판단해 거기를 교차점으로 하는 타협을 해도 괜찮고, 혹은 1회 되돌아와서, 거기로부터 시선을 진행시키는 거리를 짧게 해 정확한 충돌지점을 구하려고 해도 괜찮을지도 모른다. (역자: DX 샘플에서는 서로 보간)

어쨌든, 이 기법의 품질을 결정 짓는 것은, 이 조사점을 시선을 따라서, 들어가도록 진행해 갈 때의 스텝의 섬세함(분해능)이다.

렌더링의 결과는, 시차 매핑과는 다르고, 요철과 시선의 차폐를 비교적 정확하게 구해오며, 앞에 위치한 오목(凹) 부분의 틈새로부터 뒤에 위치한 볼록(凸)부분이 보인다 …… 라는 엉켜있는 요철의 전후관계나 차폐관계를 그려낼 수 있다.(계속)


<그림 설명>
視線: 시선、ポリゴン面 : 폴리곤 표면、
ハイトマップの高さ=MAX : 높이맵에서의 최대높이값
 (역자: DX샘플에서는 1로 함)、

ハイトマップの高さ=0 : 높이맵에서의 높이값은 0
(박스) 시선을 그 연장선상을 따라 잠수시켜 간다.

<그림 설명>
(버블) 시선을 여기까지 잠수시켜 그곳의 높이맵을 참조.
(박스) 전진시킨 시선의 높이가 더 크므로 아직 요철과 충돌하지 않았다.


<그림 설명>
(버블) 시선을 좀더 잠수시킨다.
(박스) 시선의 높이가 그곳에서의 높이맵의 높이보다 아래이면 요철과 충돌했다고 판정 할 수 있다.

<그림 설명>
(박스) 이전과 현재 사이의 적당한 지점을 충돌점으로 보고 그곳에 대응하는 법선맵(노말맵)을 참조한다.

                       시차차폐매핑의 동작 개념도



셀프 쉐도우가 추가된 시차차폐매핑(Parallax Occlusion Mapping)

일단, 시선과 요철(凹凸)과의 교차점이 구해지면, 앞에서 기술한 것처럼, 라이팅 자체는 그 교차점에서의 법선맵으로부터 꺼내온 법선벡터를 이용해 계산하면 된다.

이 때, 좀더 생각 해보면, 이 미세 요철에 셀프 그림자(주변의 요철의 그림자)를 생성할 수 있다. 생각은 지금까지의 시선과 요철의 교차점을 구하는 것과 비슷하다.

구해진 시선과 요철의 교차점으로부터, 광원의 방향을 향해서 똑같이 충돌판정을 실시해 주는 것이다.

시선과 요철의 교차점에서 광원 방향으로 조금 진행해서, 그 위치에서의 높이맵을 참조해서 충돌했는지 안했는지를 판정한다. 만약, 한번도 충돌하지 않고 폴리곤 표면을 빠져 나올 수 있으면, 무엇에도 차폐되지 않은 것이 되고, 이곳에는(시선과 요철의 교차점)에는 빛이 닿고 있다고 판정할 수 있다.

반대로, 폴리곤면을 빠져 나오기 전에, 그 외의 요철에 충돌했을 경우는, 다른 요철에 의해서 빛이 차폐되어 있다고 판단할 수 있고,  빛이 오지 않는다고 판정할 수 있다. 즉, 여기(시선과 요철의 교차점)는 그림자라고 판정 할 수 있는 것이다.


<그림설명>
視線(시선)、ポリゴン面 (폴리곤 표면)、
ハイトマップの高さ=MAX (높이맵에서의 최대높이값)
(역자: DX샘플에서는 1로한다)、
ハイトマップの高さ=0 (높이맵에서의 높이값은 0)
(좌)시선과 요철이 교차한 지점
(우)시점을 요철이 교차한 지점에서 광원쪽으로 향하게 해서 충돌을 조사.

<그림 설명>
(좌)시점과 요철이 교차한 지점.
(우)광원방향으로 조사점을 진전시켜 거기에서의 높이맵을 참조. 아직 조사점이 높이맵의 높이 보다 크므로 충동하지 않았다고 간주할 수 잇다.


<그림 설명>
조사점을 좀더 진전시켜서
(우)조사점의 높이 보다 그곳에서의 높이맵의 높이가 더 크기 때문에 조사점은 요철의 속으로 들어갔다... 즉 충돌했다고 판정할 수 있다.
(중)결국 여기는 그림자가 된다고 간주할 수 있다.

            셀프 그림자를 추가한 시차차폐매핑의 동작 개념도

<그림 설명>
(박스) 시점과 요철의 교차점
(버블)광원방향으로 조사해서 아무것도 차폐되어 있지 않으면 빛이 닿고 있는 것이다.(그림자가 아니다)

다만, 이대로는, 그림자이다, 아니다, 라고 너무 딱 잘라 말하는 것이 되어, 그림자의 윤곽이 하드하게 나와 버린다. 경우에 따라서는 깊이그림자 기법(역자: 쉐도우매핑)의 그림자 생성(머지않아 본연재에서 다룰 예정)에서 처럼, 이상한 에일리어싱이 생겨날 가능성도 있다.

거기서, 조사점이 요철에 충돌한 뒤에도 당분간 광원 방향으로 조사를 진행시켜, 「그림자라고 해도, 어느 정도 차폐되어 있는 것인가」를 조사한다.

구체적으로는, 광원으로 돌아와 들어가 있는 이 조사점의 높이와 그 조사점에서의 요철의 높이와의 거리를 구해서 이것을 「 차폐정도 」로서 계측해 나가는 것이다. 적당한 곳에서 조사를 중지해 (이상적인 것은 폴리곤면을 빠져 나올 때까지), 일련의 조사 중에서 가장 큰 차폐상태를 결과값으로 해서, 그림자의 색을 결정해 준다. 차폐 상태가 낮으면 연한색의 그림자, 즉 반그림자(소프트 그림자)로 한다.

이것으로 그림자의 엣지 부근이 부드럽고 흐릿하게 되어, 리얼리티가 증가하게 되는 것이다.


     셀프 그림자를 추가한 시차차폐매핑에서의 소프트 그림자의 실현 방법

<그림 설명>
(박스)차폐 정도를 조사해서 그림자색의 농도에 반영시켜 소프트쉐도우를 실현시킨다.



이 테크닉이 실제의3D게임에서 채용된 예는 아직 적다고 생각되지만, AMD의 Radeon X1000시리즈의 데모 「TOYSHOP」에 채용되어 화제가 되었다.

마이크로소프트의 다이렉트X SDK 데모로 부터. 법선맵에 의한 범프 맵핑

시차차폐매핑

셀프 그림자가 추가된 시차차폐매핑(소프트 그림자 대응)


셀프 그림자가 추가된 시차차폐매핑(소프트 그림자 대응)을 구현한 Radeon X1000시리즈용의 리얼타임 데모  「 TOYSHOP」. 이 입체적인 문자 간판도 셀프 그림자 시차차폐매핑으로 표현되고 있다



 




Posted by 노을삼킨별
,