'한정 조건부 동적 PRT'에 해당되는 글 1건

  1. 2009.12.07 한정 조건부 동적 PRT - PSF(Precomputed Shadow Fields)


아래에서 퍼옴

http://allosha.tistory.com/category/니시카와%20젠지/PRT




한정 조건부 동적 PRT - PSF(Precomputed Shadow Fields)란?


2009-07-03 14:51:11
動的PRT第一段階PSF技法とは? 静的PRTが発表された後、世界のリアルタイム3Dグラフィックスの研究者が積極的に研究開発に乗り出したのが「シーン上のオブジェクトを動かせない」という制約の撤廃だ。 2005年のSIGGRA ...... >> Read more

(C) Mainichi Communications Inc. All rights reserved.


동적 PRT 첫번째 단계 Precomputed Shadow Fields(PSF) 기법이란?

정적 PRT가 발표된 이후, 세계의 실시간 3D그래픽스 연구자들이 적극적으로 연구 개발에 나선 것이 「씬 상의 오브젝트를 움직일 수 없다」는 제약의 철폐이다.

2005년의 SIGGRAPH 2005에서 Kun Zhou씨등이 발표한「Precomputed Shadow Fields for Dynamic Scenes」논문에서 제창된 「Precomputed Shadow Fields」(PSF) 라는 개념이 이 제약의 철폐를 향한 큰 발판이 된다.

이것은, 개개의 오브젝트는, 형상(형태) 변형은 허용되지 않지만, 각각의 위치를 바꾸거나 기울기를 바꾸거나 하는 것은 가능한 동적 PRT이다. 석상이나 동상, 연필이나 펜, 병이나 식기 등, 그 자신이 변형되지 않는 강체 모델이라면, 씬에 움직임을 추가한다 해도 활용할 수 있는 PRT이고, 3D게임에의 응용 가능성을 확 끌어 당긴 기술이라고 할 수 있다.

그런데, 정적 PRT에서 , 씬의 움직임에 대응할 수 없었던 것에는 근본적인 이유가 있다. 그것은 「씬 전체를 "1개"의 오브젝트로 취급한다」는 대전제가 있었기 때문이다. 거기서, 씬을 「복수의 오브젝트로 이루어진다」고 분해해서 생각하면 어떨까? 라는 발상이 생겨나게 되었다. 즉, 정적 PRT에서의 차폐구조에 대한 생각을, 「자기 자신의 부위가 자신을 차폐하는 "자기차폐"」와, 「다른 오브젝트에 의한 차폐」로 나누어 생각하려는 것이다.

토끼의 「자기차폐」란, 예를 들면 토끼의 귀가 몸체를 가리는 것. 「다른 오브젝트에 의한 차폐」란 불상의 그림자가 차주전자(teapot)에 걸리는 것 같은 그런 상황

<그림 설명>
자기 자신에 의한 차폐: 자기차폐
타오브젝트에 의한 차폐


자신이 변형하지 않는 강체의 경우, 당연하겠지만 자기차폐 구조는 변하지 않는다. 즉, 이것은 사전계산이 가능하다고 할 수 있는 것이다.

형상이 변하지 않는다고 전제하면, 자기 차폐는 사전에 계산해 둘 수 있다

<그림 설명>
각 물체를 강체라고 가정하면, 자기 자신에 의한 차폐는 불변
-> 각 물체는 이동, 회전할 수 있지만, 형상(형태)은 변형될 수 없다.

정적 PRT에는 없었지만 동적 PRT에서는 요소가 되는 것이「다른 오브젝트에의 차폐」이다.

다른 오브젝트에의 차폐는, 자신을 중심으로 어느 일정 거리에 떨어진 곳에 있는 동심구(同心球, 중심은 동일하고 반경이 다른 구)상의 점에 대한 차폐 구조로 생각한다.

즉, 아래의 그림으로 해설하면, 그림속의 토끼의 주변에, 눈에는 안보이는 가상적인 구를 생각해, 그 구의 내면에 무수한 카메라를 설치해서, 각 점으로부터 토끼의 실루엣이 어떻게 보일까를 모두 기록해 둔다라는 이미지이다.

토끼의 주변에, 눈에는 보이지 않는 가상적인 구를 생각해, 그 구의 내면에 무수한 카메라를 설치해서, 각 점으로부터 토끼의 실루엣이 어떻게 보일까를 모두 기록해 둔다


오브젝트 자신이 변형되지 않으면, 그 구 내의 각 점에 설치된 카메라에서 보이는 모습도 변하지 않는다. 즉, 각각의 방향에서의 다른 오브젝트에의 차폐 구조는 변하지 않는다고 생각할 수 있다. 이 다른 오브젝트에의 차폐 구조를 「Shadow Fields」라고 부르고, 이것을 사전 계산해서 구하기 때문에 "Precomputed" "Shadow Fields", PSF가 된다.

Shadow Fields의 사전 계산

이 PSF기법의 구조는 어떠한가? 조금, 보고 가기로 하자.

자기차폐의 차폐구조의 사전 계산은, 정적 PRT 때와 거의 같다. 각 3D모델상의 모든 정점으로부터 자기 차폐  구조를 조사/추출해서, 이것을 최종적으로는 구면조화함수로 근사 해서 그 스케일링 계수를 얻어, 이것을 차폐 계수 벡터로서 보존하는 것이다.

약간 개념의 전환이 필요한 것은, 다른 오브젝트에의 투사를 구하는 Shadow Fields의 계산이다. 자기 차폐의 산출에서는, 그 3D오브젝트를 구성하는 정점에서 본 차폐 구조를 구했지만, 이것에 반해, Shadow Fields의 산출은, 그 동심구 상의 각 점에서 본 차폐 구조를 구하는 것이 된다.

즉, 차폐 구조를 구하는 위치가 3D오브젝트의 외곽측에서 행해진다는 것 이외에는 자기 차폐의 계산과 같은 것이다. 각 동심구 상의 모든 정점으로부터 차폐 구조를 구해, 이것을 구면조화 함수로 근사해서 그 스케일링 계수를 구해, 저장(보존)하는 것이다.

이 때의 반경 r은, 물체의 경계구(Bounding Sphere. 그 물체 전체를 포괄 할 수 있는 구)를 기본으로 0.2r ~ 8.0r까지, 적당한 스텝으로 결정하고 있다고 한다. 피라미드사의 구현에서는 0.2r ~ 8.0r까지의 각각을 32등분 해서 구현했다고 한다.

「다른 오브젝트에의 차폐 구조」의 사전 계산은, 동심구 상의 각 점에서 3D모델 방향으로의 차폐 구조를 구한다. 구한 차폐 구조 정보는 구면조화 함수로 근사해 그 스케일링 계수를 구해서 보존한다. 이 흐름은 정적PRT와 똑같다

이 자기 차폐나 Shadow Fields의 산출은, 그 씬에 등장하는 3D오브젝트의 개수만큼 실시하게 된다. 예를 들면4종류의 3D오브젝트가 등장한다면 그 4종류에 대해 각각 자기 차폐와 Shdaow Fields를 산출할 필요가 있다.

주목되는 것은 형상(형태)이므로, 다른 색의 동일 형상 오브젝트를 등장시키는 3D게임에서의 활용의 경우에서는, 한 번 산출한 자기 차폐나 Shdaow Fields는 유용(流用)이 가능하게 된다. 또, 동일 형상(형태)이고 크기가 다른 것(확대 축소한 것)도, 동일하게 취급할 수 있다.(계속)





한정 조건부 동적 PRT - PSF기법에서의 라이팅


PSF기법에서의 라이팅

정점 단위의 음영 처리가 되는 것은 앞에서의 정적 PRT와 같다. 즉, 실제 렌더링 시, 3D모델의 각 정점들에 대해 라이팅을 해주게 된다. 구체적으로는, 그 라이팅을 실시하는 정점에 자기 차폐 정보를 고려하고, 나아가 그 정점에 영향을 미치는 다른 오브젝트의 Shadow Fields를 고려한다, 라는 흐름이 된다. 그리고 다른 오브젝트의 동심구 상에 나열된 복수의 Shadow Fields로부터 어떤 것을 선택할까이인데, 이것은 그 라이팅 대상인  정점으로부터 가장 가까운 8개의 후보를 선택해 가중치를 붙여서 선형 보간을 해서, 그 결과를 채택한다.

PSF기법에서의 라이팅

<그림 설명>
(버블) 이 정점의 라이팅은, 이 정점의 자기차폐를 고려하고, 이 정점을 포함하는 가까운 Shadow Fields를 참조 & 선형보간해서 「다른 오브젝트에의 차폐」(이 경우는 토끼에서 차주전자로의)도 고려한 형태로 한다. (이 그림은 2D로 표현되어 있어서 4개의 Shadow Fields를 참조하고 있지만 실제 3D렌더링에서는 8개)

물론, 자신과 다른 오브젝트에서 기준으로 하는 좌표계가 서로 다르기 때문에, 다른 오브젝트의 Shadow Fields 정보를 글로벌 좌표계로 변환하는 처리를 하지 않으면, 이쪽으로부터 다른 오브젝트의 Shdaow Fields를 사용할 수 없다.

알기 쉽게 앞의 그림을 인용해서 말하면, 차주전자와 토끼가 회전하고 있어서 다른 방향이 되어 있을 때, 차주전자에서 본 토끼는 상대적으로 다른 방향을 향하고 있기 때문에, 토끼의 「다른 오브젝트에의 차폐 정보 = Shadow Fields」를 이쪽에 반영 시키려면 그 Shadow Fields의 방향(좌표계)까지 변환하지 않으면 않된다라는 것이다.

이 Shdow Fields의 방향 변환 처리(좌표계 변환 처리)가 SH Rotation이라는 처리이다. SH은 Spherical Harmonics(구면 조화 함수)의 약자이다. 간단히 말하면, 구면 조화 함수로 근사 해서 만든 차폐 구조 데이터를, 그 스케일링 계수만을 사용해 좌표축 회전을 해 버리는 것이 SH Rotation이다.

구면 조화 함수의 스케일링 계수들로 된 계수 벡터만으로 좌표계의 회전을 실시하는 처리가 「SH Rotation」이다.

<그림 설명>
SH Rotation이란??
정보(화상)의 기준축 회전을 계수벡터 공간에서 직접 실행하는 연산

그리고 이어서 좌표계를 변환한 다른 오브젝트의 Shdow Fields들을 이쪽의 자기 차폐에 통합(반영)시키는 처리를 실시하는 것인데, 이것에는 SH Triple Product(고도의 복수회에 걸친 내적 연산)라는 연산을 한다.

SH Rotation과 SH Triple Product의 실제 논리나 처리계에 대해서는, 복잡하고, 지면 문제 상 여기서는 생략 한다. 양쪽 다 계수 벡터 차원에서 실시하는 계산이고, 또한 고속화를 고려한 방법이며, 구면조화 함수등과 같이 「현존하는」툴로서 활용해도 된다고 여겨지고 있다. 다만, 계산 부하는 그 나름대로는 크다.

SH Rotation과 SH Triple Product의 이론이나 구현에 대해서는 「Spherical Harmonic Lighting: The Gritty Details」(SH Rotation의 구현 방법), 「Code Generation and Factoring for Fast Evaluation of Low-order Spherical Harmonic Products and Squares」(SH Triple Product의 구현 방법)라는 논문이나, 피라미드사가 제공하는 자료를 참고하기 바란다.

처리하고 있는 정점에의 타 오브젝트로부터의 영향 유무에 대한 조사는, 그 씬에 등장하는 모든 타 오브젝트에 대해 실시한다. 영향이 있는지 없는지의 판단은, 앞에서의 바운딩스피어의 8.0r의 거리를 기준으로 실시하면 된다. 8.0r의 거리 이상 떨어진 다른 오브젝트에 대해서는 영향이 없다고 무시하고, 반대로 8.0r의 거리 이하의 다른 오브젝트에 대해서는 영향이 있다고 판단한다. 영향이 있다면 그 Shadow Fields를 통합해 나간다(계산에 포함한다).

모든 정점에 대해 차폐 구조를 산출 했으면, 이후의 음영 연산(휘도 계산)은 정적 PRT와 같다. 재차 말할 필요는 없겠지만, 그 차폐 계수 벡터와 광원 계수 벡터의 내적을 구할 뿐이다.(계속)

PSF기법에 의한 동적 PRT는 개개의 3D오브젝트의 변형은 허용 되지 않지만 위치 이동이나 회전은 허용 된다

피라미드사에 의한 PSF의 구현예. 마치 레이트레이싱에 의한 오프라인 렌더링 된 것 같은 부드러운 음영의 오브젝트들이 움직인다. 여기까지 움직일 수 있게 되면, 특정 타입의 게임이라면 실용화가 가능할지도 모른다



 

Posted by 노을삼킨별
,