[GDC 2012] 니시카와 젠 지의 3D 게임 팬을위한 "inFamous 2"강좌
좋지만 불완전한 SSAO. 그 약점을 보완하는 기술에 주목!
3D 게임 그래픽스의 큰 테마로 '그림자'와 '음영'이있다. 최근에는 "그림자" 생성은 뎁스 쉐도우 맵 기법이 주류로, 그림자 생성을 위한 그림자 맵을 여러장 사용하여 그것들을 시점으로부터의 원근에 따라 할당 하는 캐스케이드 확장 기법이 주류가 되고 있다. 이러한 접근의 그림자 생성은 생성하는 그림자 맵의 해상도에 의존하는 정밀도가 되며, 미세한 그림자를 생성 할 수 없다.
또한 간접광 등의 이차 광원으로부터의 그림자 생성은 현재 쓰이고 있는 방식중에는 절망적이다.
그래서 최근 각광 받고 온 것이 렌더링 결과와 함께 출력되는 뎁스 (심도) 버퍼의 내용을 바탕으로하여 포스트 프로세스 방식으로
가상적인 환경광에 대한 "음영"을 생성하는 SSAO (Screen Space Ambient Occlusion)이다.
SSAO는 Crytek에 의해 고안 , 순식간에 여러 타이틀에 채택 되었지만, 동시에 세세한 문제가 부각 되어 왔다. 여기에 최근 GDC에서는이 SSAO의 개량 관련된 세션이 많아지고 있으며, 올해도 예외는 아니었다. "Ambient Occlusion Fields and Decals in Infamous 2 '도 그런 세션의 하나 다. 매우 이해하기 쉽고, 게다가 쉽게 구현할 수있을 것 같아서 소개하고자한다.
【inFamous 2] | |
---|---|
■ Screen Space Ambient Occlusion (SSAO)은 완벽하지 않습니다!
Nathan Reed 씨 (Rendering Programmer, Sucker Punch Productions) |
PS3 전용 타이틀 'inFAMOUS 2 (인퍼머스 2)'에서는 새겨넣은 형태의 "음영"로 정점 단위에 자기 차폐 상태를 새겨 넣은
고전적인 AO (Ambient Occlusion)과 SSAO를 모두 사용하여 풍부한 "음영" 표현을했다.
정점 단위의 AO와 SSAO는 각각의 장단점을 감싸 서로 좋은 보완 관계에 있다. 정점 단위의 AO는 움직이지 않는 정적 개체, 그것도 거대한 건물이 만들어내는 같은 대국적인 그늘 (그림자) 생성에 유효하다. 이 그늘 (그림자)가 툿영 되는 곳의 정점을 미리 세세하게 봐야 하는 귀찮음이 있지만, SSAO에서는 만들기 어려운 포괄적 인 그늘 (그림자)를 생성에 적합하다. 이를 보간하는 존재가 SSAO된다.
SSAO는 정적 개체는 물론, 움직이는 동적 오브젝트에도 국소적인 그늘 (그림자) 구성을 할 수있다. 구체적인 알고리즘은 다음과 같다.
보고 있는 픽셀이 얼마나 차폐 된 장소의 픽셀인지 그 픽셀에 대응하는 깊이 값과 픽셀 주변에 대응하는 깊이 값을 읽고 그 값을 서로 비교하여 구한다. 그 비교에서 심도 맵의 후미진 닫혀진 위치에 있으면 있을수록 픽셀 차폐도가 높다고 하고 "그림자" 색이 붙는다. 근사하게 말하면, 심도 맵에서 초 로컬 레이캐스팅을 하고 차폐 상태를 조사 하는 수법이라고 할 수 있다.
그러나 SSAO는 결국 렌더링 결과에 대해서 수행하는 화면좌표계 포스트 프로세스이기 때문에 몇 가지 약점이있다. 첫째, 렌더링 결과의 외주 부근은 (깊이 버퍼) 정보가 부족하기 때문에 차폐도가 제대로 계산할 수 없다. 그늘 색이 엷게 뿐이므로 무시되는 경우가 대부분이다. 또한 심도 맵 관점에서 본 깊이 정보 만 저장하고 있지 않기 때문에, 무언가에 차폐 된 뒤에 차폐도는 계산할 수 없다.
그것과 씬이나 개체에 대해 시점까지의 거리가 거의 일정한 게임이면 눈치채기 어렵지만, 장면이나 개체에 대해 시점을 접근하거나 멀리하거나 하면 부자연스러움을 깨닫게 된다. 이렇게, SSAO에 붙은 그림자 색상 범위 (크기)는 화면 좌표계에서의 차폐도 조사 가 진행되는 뿐이므로, 그려지는 그림자 색 영역은 화면의 크기에 거의 일정하게되어 버리는 것이다.
예를 들어, 막대 모양의 개체의 밑부분에 그려진 그림자 색의 크기에 주목 했다고 하면 오브젝트에 달라 붙을 정도로 가까이 봐도 멀리 떨어져 봐도 화면에 렌더링 되는 밑부분에 그림자의 크기는 변하지 않는 것이다. 정확히는 접근 할 때 그 막대기의 밑부분이 확대해서 보이기 때문에, 그 "그림자" 색은 크게 보여야하며 멀리 떨어졌을때에는 막대기가 작게 보이기 때문에 그에 따라 작게 보여야 한다.
■ AO Fields라는 생각
"inFAMOUS 2"의 AO Fields 방법 |
"inFAMOUS 2 '는 3인칭 시점의 오픈 월드형 액션 게임으로 카메라가 씬이나 오브젝트에 접근하거나 멀어지는 시스템으로 되어 있다. 게다가 초능력을 사용하여 차와 같은 큰 오브젝트를 대담하게 던지거나 이동할 수 있고 있기 때문에 전술 한 SSAO의 약점은 크게 보이는 상황입니다.
그래서 'inFAMOUS 2' 개발팀은 SSAO를 자신의 방식으로 개선 하기로 했다. 그 중 하나가 "Ambient Occlusion Fields"(AO Fields)이다. 이 방법은 각 오브젝트 모델에 짝이 되는 AO Fields를 사전 계산 해 줄 필요가 있다. AO Fields란 감각적으로 말하면 "해당 오브젝트가 모든반향에 어떤 다른 오브젝트를 차폐 하느냐' 는 정보가 된다.
이 AO Fields의 크기는 각 개체 모델을 완전히 가릴 수있는 직육면체보다 더 한층 큰 직육면체로 한다. 이 큰 직육면체를 xyz 각 축 8 ~ 16 분할하여 복셀로 분할하고 각 복셀의 중심에서 전방위 (6 방향)에 대해 32 × 32 텍셀의 큐브맵을 렌더링 한다.
【AO Fields] | |
---|---|
AO Fields의 이미지 (왼쪽) 각 복셀에서 AO Fields 각 복셀의 중심으로부터 봤을때의 전방위 배경을 큐브 맵에 렌더링 한 결과로부터 얻는다 (오른쪽) |
여기에서 꽤 대담이다. 렌더링 된 큐브 맵을 탐색하고 그 중심을 구하고, 복셀의 중심으로부터 이 중심으로의 방향을 산출 한다. 이것을 차폐 벡터한다. 참고로 여기서 말하는 '중심'이라는 것은, 큐브 맵에 그려진 채워진 텍셀의 크기에서 그 중심을 구한것 뿐이다. 이제 이 복셀의 중심에서 본 "차폐 방향 ≒ 1개의 차단되는 방향"을 구해진다.
그런데,이 큐브 맵에 렌더링 된 텍셀의 크기 (채워진 면적)이 복셀의 차폐율을 나타내고 있다. 이 면적을 바탕으로 "이 지점의 차폐율"을 요구한다. 이렇게 구한 차폐 방향 (x, y, z)와 차폐율을 텍스처에 저장한다. 차폐 방향은 벡터이므로 RGB에 저장하고 차폐율은 스칼라이므로 α에 저장한다. 이렇게 계산되어 있는것이 3D 텍스처 (3 차원 수치 테이블)에서 이 오브젝트에 짝을 이루는AO Fields 가 된다.
【AO Fields의 사전 계산】 | |
---|---|
이 'inFAMOUS 2'의 AO Fields의 생각은 Mattias Malmer 교수의 논문 "Fast Precomputed Ambient Occlusion for Proximity Shadows" 를 추천하고 있으며,이 논문을 참고로 AO Fields의 직육면체 크기가 결정 되었다고 한다.
세션에서는 실제 'inFAMOUS 2'의 오브젝트에서 AO Fields를 어느정도의 크기로 자른지도 구체적 값이 표시되어 있다. 예를 들어 자동차는 32 × 16 × 8 복셀로 구분하여 각 데이터가 32 비트 정수 이었기 때문에 3D 텍스처로 용량은 16,384 바이트 (16KB)로 되어 있다. 뿐만 아니라 공원 의자는 16 × 8 × 8 복셀에서 4KB, 쓰레기통은 8 × 8 × 8 복셀 2KB. 3D 텍스처라고 해도 상당히 거칠기 때문에 의외로 크기는 작다. 단, 크기는 작지만 데이터 자체는 벡터 데이터이고 정밀도가 요구되기 때문에 텍스처 압축 (DXT)는 쓰지 않은 것.
【AO Fields의 크기】 | |
---|---|
"다른 물체에 미치는 차폐 상태"를 요구하기 때문에 개체 크기보다 필연적으로 큰 영역에서 생각할 필요가있다. 그림의 회색 상자가 개체를 덮는 저스트 사이즈의 직육면체라고하면 파란 상자가 AO Fields. "inFAMOUS 2 '에서는 참고 논문을 따르고 ε = 0.25를 채택 |
■ AO Fields를 이용한 렌더링
여기까지를 그대로 구현 한 결과입니다. 그늘 색이 거친 사각형 모양으로되어 나타났다. |
실제로 이 AO Fields를 런타임에서 어떻게 이용 할까 인데 모든 오브젝트들을 렌더링을 완료 한 후 각 개체의 AO Fields 크기의 직육면체를 렌더링 해 나가는 형태다.
하지만 실제로 직육면체의 실체를 그리는 것이 아니라, 깊이 테스트를 수행하여 AO Fields 크기의 직육면체와 모든 오브젝트 렌더링 된 장면과 교차 부분 (AO Fields를 적용 할 수 있는 부분)을 구하는 것이 주된 목적이다.
이것은 Deferred 계 렌더링 라이팅 단계 와 비슷한 처리계이다. Deferred 계 렌더링 라이팅 단계에서 "광원의 적용범위"을 요구하지만, AO Fields는 "차폐 적용범위"을 구하고 있는 것이다.
실제로 렌더링을 수행한 픽셀 쉐이더는 깊이 테스트 결과에서 그 부분이 AO Fields를 적용해야 할 장소라고 판단 할 수 있는 경우, 그 깊이 값을 바탕으로 월드 좌표계의 위치 정보를 역산하고 이 값에서 AO Fields의 어느 복셀의 영향하에 있는지 (오브젝트의 로컬 좌표)를 구한다.
AO Fields의 어느 복셀을 읽어 내야 하는지를 구한후에는 복셀에 대응하는 3D 텍스처에서 차폐 벡터와 차폐율을 읽어 낸다. 그리고는 그 위치의 법선 벡터를 읽어 내 (Deferred 계의 렌더링 엔진이라면 깊이 버퍼와 함께 먼저 G 버퍼로 렌더링이 끝난 상태)이 차폐 벡터와 각도 관계를 검토하면서 차폐율로 바이어스값을 주고 그림자 색상을 계산하면 된다.
여기까지의 내용을 실제로 실행 한 것이 우측의 스크린샷으로 아니나 다를까 엉성한 복셀 단위로 관리되는 AO Fields 내용이 사각형처럼 렌더링 결과가 여실히 나타나고 있다.
【차폐도 산출식】 | |
---|---|
해당 장소의 차폐도 산출 식. Strength는 차폐강도를 나타내며 아티스트가 오브젝트마다 결정할 수 있다. 즉 AO Fields에 따라 그림자 농담을 Strength로 컨트롤 할 수 있다. (왼쪽), 해당 장소에 법선벡터가 차폐벡터의 방향에 가까우면 가까울수록 그림자색은 짙어진다 라는 조정 항목이다 (오른쪽) |
■ AO Fields 개량
가장 바깥 쪽 경계 복셀을 향해 차폐 율이 제로가되도록 AO Fields를 조정. 이 슬라이드 alpha가되고있는 것은 α에 저장되어있는 차폐 율의 수 |
그래서 각 개체의 AO Fields 대해, 가장 바깥 쪽 경계에 있는 복셀의 차폐율을 강제적으로 0으로 하여, AO Fields의 차폐율의 가장 큰 값에서 외곽 복셀의 차폐율 점점 0으로 선형적 감쇠형태의 조정을 한다. 이 조정을 수행한 것이 아래 스크린 샷으로, 사각형처럼 보이는 아티펙트는 거의 알수 없게 된다.
【AO Fields를 조정】 | |
---|---|
왼쪽이 조정 전에서 오른쪽이 조정 후. 사각 같은 유물은 대부분 감소 할 수 있었다. |
그러나 아티펙트는 또 하나 있었다. 그것은 잘못된 그림자 색깔로 붙는다는 아티펙트다. 예로, 자동차 본네트와 지붕, 사이드 스텝 부근에 불필요한 그림자색이 생긴다.
이것은 AO Fields가 꽤 엉성한 복셀 단위로 계산되어 있기 때문에, 개체의 경계면 부근에서 차폐율이 급변하는 이 부근에서의 차폐율의 계산에 진행할때 많은 오차가 생긴다.
각 복셀에서 차폐항목을 계산할 때 그 복셀이 경계면에 있으면 자동으로 차폐율을 조정하도록 하는 AO Fields 계산법을 포함시키는 것도 생각했지만, 복잡한 형상 있는 곳에서 그것도 판단이 어렵다. 그래서 어쩔수 없이 그림자색을 입히는 픽셀 부분에 법선 벡터를 참조하여 방향에 따라 AO Fields 의 참조를 반 복셀 옆으로 당겨서 조정(오프셋)을 더하는 방식을 채택했다.
다소 무리한 대응했지만 효과는 좋았다. 경계면 부근에서의 의미 불명 한 그늘 색깔은 없애는데 성공. 그러나 그 부작용으로 차폐율이 높은 곳에서 그림자 색상이 더 진하게 나오게 되었다. 그냥 뭐, 이것은 큰 문제가 없다고 판단. 결국 이 방식을 채택하는 것으로 결정했다. 여기까지의 내용을 그림으로 정리 한 것이 아래된다.
【AO Fields 영상】 |
---|
오브젝트 주위에 나와있는 그림자 색깔은 SSAO에 의한 것이 아니라, AO Fields 따른 것이다. SSAO는 이 영상에서는 의도적으로 적용하고 있지 않다 |
【AO Fields를 조정 2】 | |
---|---|
경계면에서의 불필요한 그림자 색깔. 동그라미 부분이 해당 부분이다 (왼쪽). 쉐이딩 대상 장소의 법선 벡터의 방향에 따라 반 복셀 빗겨서 AO Fields 를 샘플링한 방식을 넣는 것으로 아티팩트를 제거 (오른쪽) |
■ AO Decals 이라는 발상 ~ 두께가 얇은 오브젝트를 위한 AO Fields
창문과 문 등 두께가 얇은 오브젝트 관해서는 더 단순화 된 모델 AO Fields를 'inFAMOUS 2'에서는 채용 했다고 한다. 기본적인 아이디어는 AO Fields와 같고, 대상 오브젝트를 복셀화 하여 구분된 각 복셀 단위로 차폐 항목을 구해 간다는 방식이지만, 엷은 오브젝트이므로 대담하게 간략화 한것을 도입했다.
먼저 3D 텍스처는 사용하지 않고, AO 정보는 2D 텍스처로 취급한다. 그리고 복셀 레이어는 4층으로 제한 하고, 첫번째 계층의 정보를 R 텍셀에 2,3,4 번째 레이어의 정보를 각각 G, B, α에 저장한다.
각 수치가 스칼라가 되어 버리므로, AO Fields에 저장 되어 있던 차폐 방향 벡터는 버리고, 차폐율만을 저장하도록 하는 것이다. 이 오브젝트의 4계층분의 차폐율을 저장한 텍스쳐를 AO Decals라고 부른다.
AO Decals에서는 차폐 방향은 각 복셀과 같은 방향을 향하고 있다고 가정한다. 예를 들어, 예를 들어 창이라면 벽에 붙어 있으므로, 차폐 방향은 벽면에서 봤을때 야외 방향으로 반구 방향뿐이라고 생각한다 (반대측은 항상 벽에 차폐되어 있다고 간주한다)
AO Decals도 사전계산으로 차폐율 계산은 필요하지만, AO Fields에서 그랬던 것처럼 각 복셀에서 큐브 맵 렌더링은 사용하지 않고, 보다 단순화 된 알고리즘을 사용한다.
대상 오브젝트를 텍스처에 하이트맵으로 렌더링하고 그 결과에 대해서 4계층분의 레이어로 구분하고 각 층의 각 텍셀에 대응하는 하이트맵의 높이값과 그 주변의 높이값을 검토하여 차폐율을 계산한다. 하이트맵을 깊이 버퍼로써 보면 이 방식은 SSAO와 동일하다.
SSAO와 처리가 다른 것은, 공중에 뜬 지점에 대해서도 차폐율을 계산하는 점이다. 이것은, 예를 들면 창문을 넘는 제3의 오브젝트에 대해서도 그림자 색을 붙일수 있게 하는 것이다.
【AO Decals 2】 | |
---|---|
엷은 오브젝트라고 해도 4계층은 상당이 엉성한 공간분할이 된다 (왼쪽). 차폐율은 오브젝트의 표면의 각 지점으로부터 진행된다. 결과는 각 지점에 가장 가까운 계층에 저장 되어있다 (파란색 점). 다른 물체로의 차폐에도 대응하기 위해 공중점에서도 차폐율을 계산한다 (녹색 점) (오른쪽). |
"inFAMOUS 2"의 AO Decals 사양. AO Decals는 ε = 0.7로 AO Fields 보다 작은 경계상자를 할당하고 있다. |
AO Decal의 크기도 AO Fields 때와 마찬가지로 각 개체가 완전히 들어가고, 게다가 약간 크지만, AO Fields 때보다 크기는 작은편이다. 이것은 처리부하에 대한 배려와 오브젝트의 두께가 원래 얇기 때문에 그정도로 크게 하지 않아도 충분 하기 때문일 것이다.
데이터 크기로 AO Decals는 각 변의 64 ~ 128 텍셀 정도로 하고 저장 내용이 스칼라 값의 차폐율 이므로 다소의 오차도 허용 할 수 있다는 것으로, DXT5 압축을 적용하고 있다. 데이터 크기로 4 ~ 16KB 이고, AO Fields와 동일하다. 그렇게 크지 않다.
런타임에서 AO Decals의 적용은 AO Fields와 똑같다. 모든 개체의 렌더링을 마친 장면에 대해 AO Decals 사이즈의 직육면체를 렌더링하여 구해진 교차 부분에서 AO Decals에 저장된 차폐율을 바탕으로 그림자색을 입혀 나간다. AO Decals는 차폐방향이 단순화되어 존재하지 않기 때문에 계산은 AO Fields보다 상당히 단순하다.
단 scene과 AO Decals의 교차 부분의 깊이값에 해당하는 차폐율을 4계층의 분리된 AO Decals의 1계층에서 읽어내는것 뿐으로 포인트 샘플링이 되어 지저분하게 되버린다. 그래서 어떤 텍스처 필터링을 도입 할 필요가 있다. 그러나 단일 텍스처 내에 있는 αRGB의 각 값에 대해 필터링 처리하는 것은 하드웨어에서는 불가능하므로 각자 픽셀 셰이더 프로그램 측에서 수행할 필요가 있다.
【AO Decals 3】 | |
---|---|
차폐율과 차폐강도값 만으로 그림자 색상을 결정한다 (왼쪽), AO Decals에서부터 자동차의 위치를 가져올 때 필터링 처리를 하는 쉐이더 코드의 예 (오른쪽)) |
■ AO Decals 개혁
원으로 그린 부분에 하얀선의 아티펙트가... |
여기까지의 처리를 적용한 것이 우측 스크린 샷이지만, 벽면과 창문의 교차 부분에 희미하게 흰 선이 보인다. 사실 이것도 AO Fields 에서 보이지만 엉성한 복셀화의 폐해에서 경계면에서의 급격한 차폐율의 변화가 일어나고있는 것이 원인이다. 구체적으로는 경계면 안쪽이 차폐율 0이고 경계면 바깥쪽이 "높음" 차폐율 일 경우에 텍스처 필터링의 효과에 의해 얻어낸 차폐율이 엷어져 버리는 것으로 생긴다.
이것을 방지하려면 하이트 맵에 숨어 있는 부분에 대한 경계면의 차폐율은 그 옆쪽에 있는 하이트맵에 숨어 있지 않은 경계면 측의 차폐율로 덮어 씌워 버리면 된다. 이것으로 경계면의 차폐율이 급격히 변하게 되지 않게 되어, 흰색 선 아티팩트를 없앨수 있다.
파란색 점은 보통의 차폐율을 구한점. 빨간색 점은 하이트 맵에 숨어있는 특수한 점 (왼쪽) 경계 부근의 차폐율은 균일화 해 버리는 것으로, 이 부근에서의 텍스처 필터링에 의한 차폐율의 급변을 방지한다. (오른쪽) |
해당 조치를 적용하기 전 (왼쪽) 흰색 선 아티펙트가 사라짐 (오른쪽) |
위의 스크린 샷은 사실 조금 결과를 미리 보여준 샷으로, 실은 아직 벽면에 직각 오브젝트의 측면의 그림자 색깔이 부드럽게 되버린다는 아티펙트가 남아있다. 창문을 예를 들면 마치 측면이 둥근 형태를 띄고 있는 것 같은 그림자색이 되어 버린다는 것이다.
이것에 관해서는 AO Decals을 더 수정하는 것이 아니라 각 오브젝트 측의 뒤에 무한으로 퍼지는 벽면 평면이 있다고 하고 각 버텍스의 부가정보로써 이 벽면으로부터 차폐율을 구워 넣어 버리는것으로 해결한다. 즉, 벽면에 직각 측면에 나오는 어두운 그림자 색은 AO Decals의 효과가 아니라 버텍스에 구워 넣은 AO의 효과 이다. 여기까지의 내용을 영상으로 정리 한 것이 아래 동영상이다.
【AO Decals 영상】 |
---|
오브젝트 주위에 나와있는 그림자 색깔은 SSAO에 의한 것이 아니라, AO Decals 따른 것이다. SSAO는 이 영상에서는 의도적으로 적용하지 않았다 |
AO Decals 만으로는 이렇게 측면에 그림자 색상이 바로 윗쪽으로 갈수록 희미되어 버려, 마치 둥근형태를 띄고 있는 것 같은 음영이 나타난다. (왼쪽). 그림 중간에 있는 식으로 구한 벽에서 차폐율을 오브젝트의 각 버텍스에 구운 것으로 대처한다 (오른쪽) |
도입하기 전에 (왼쪽), 도입 한 결과. 옆 그림자색이 선명하게 나오게되었다 (오른쪽) |
■ 마치며 ~ AO Fields의 방식을 변형 인체에 적용하는 방법
미래는 이 AO Fields의 생각을 자신이 변형 인체와 같은 객체에 적용 해 나가는 것이 과제다. 게다가, 그것은 결코 꿈 같은 이야기가 아니다 |
세션의 마지막에 "inFAMOUS 2 '에서 AO Fields와 AO Decals을 도입 한 것으로, 증가 된 추가 텍스처 용량의 보고서가 공개되었다.
"inFAMOUS 2 '에서는 이 AO Fields와 AO Decals의 개념을 도입 한 독특한 개체는 119 종 이라고 하며, 그 총 텍스처 용량 (AO Fields의 3D 텍스처와 AO Decals의 2D 텍스처의 합산 용량)은 불과 569KB이었다고 것. 119 개의 개체에 대한 추가 텍스처 용량으로 적당한 증가량으로 이것으로 얻을 수있는 효과를 생각하면 합리적인 방안이라고 할 수 있겠다.
퍼포먼스적으로는 1프레임을 평균으로 보고 20 ~ 100 개의 AO Fields, AO Decals의 렌더링 부하가 걸리고 있지만, 소요 시간은 PS3에서 0.3ms ~ 1.0ms Worst Case라도 2.3ms 이 였다고 분석되고 있다. 기본적으로 버텍스 부하보다는 픽셀 부하가 높은 작업이므로 표시 프레임에 이 방식에 의해 그림자 색상이 그려지고 있을 때 부하가 높아질 것 같다.
AO Fields, AO Decals는 현재 오브젝트 자체가 변형되지 않는 차량 등의 큰 오브젝트, 쓰레기통 같은 작은 오브젝트에만 적용되고 있다. 개체가 움직여도, 제대로 그 움직인 곳에서 다른 물체에 차폐가 고려되지만, 손발이 움직이는 같은 인체와 같은 오브젝트 관해서는 이 AO Fields, AO Decals는 대응하지 못하고 있다. 이 부분이 앞으로 연구해 나가야 할 확장 방향성이라고 Reed 씨는 맺고있다.
다만, 인체처럼 "자신이 변형" 개체에의 AO Fields 아이디어는 Reed 씨도 가지고 있으며, 그것은 인체라면 팔, 다리, 목, 몸통 등 주요 인체 구성 부분으로 분해하고 각각의 부위에 AO Fields를 처리하여 준다 ...... 접근법이다. 즉, 변형 개체를 변형하지 않는 개체의 집합체로 처리 해 주는 것이다. 이렇게함 으로써 추가 부하도 리니어 스케일에서 어림 잡는 것이 가능하다.
SSAO를 발단으로 한 새로운 쉐이딩 방식은 앞으로 당분간은 아직도 진화를 보이면서, 계속 유행해 나갈 것이라고 필자는 생각한다.
AO Fields와 AO Decals 의한 추가 메모리 사용량 (왼쪽)과 추가 GPU 부하 (오른쪽) |
출처 : http://game.watch.impress.co.jp/docs/series/3dcg/20120314_518785.html
'게임 그래픽 리서치' 카테고리의 다른 글
"uncanny valley 현상" 을 넘어선 차세대 "파이널 판타지" 의 기준이 될 리얼타임 (0) | 2012.06.20 |
---|---|
Example based wrinkle synthesis for clothing animation (0) | 2012.05.05 |
"슈퍼 스트리트 파이터 IV" 그래픽스 강좌 (후편) (0) | 2012.02.09 |
NVIDIA 표면하산란(Subsurface Scattering) (0) | 2012.01.14 |
"슈퍼 스트리트 파이터 IV" 그래픽스 강좌 (전편) (0) | 2011.12.06 |