'동적PRT'에 해당되는 글 1건

  1. 2009.12.07 3D모델 변형가능 동적PRT


아래에서 퍼옴

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





3D모델 변형가능 동적PRT - 동적 PRT 기술의 대두


2009-07-18 01:00:00
3Dモデルの変形に対応した動的PRT技術の台頭 PSF技法ベースのPRTは、自身の遮蔽、他者への遮蔽を考えることにより、シーンに存在する3Dモデルの移動や回転を許容する動的PRTが可能になった。これは、ビリアードのよ ...... >> Read more

(C) Mainichi Communications Inc. All rights reserved


3D모델의 변형에 대응한 동적 PRT기술의 대두

PSF기법 기반의 PRT는, 자신의 차폐와 타 오브젝트에의 차폐를 생각함으로써, 씬에 존재하는 3D모델의 이동이나 회전을 허용하는 동적 PRT가 가능하게 되었다. 이것은, 당구와 같은 테이블 게임이나, 블럭퍼즐 게임과 같은 3D게임 그래픽스에는 응용할 수 있을 것이다.

하지만, 3D모델의 형상(형태)을 변경, 변형할 수 없다는 제약은, 실질적으로 부위가 접히거나 구부러지거나 하는 인간이나 동물과 같은 생물을 취급할 수 없다는 것과 같다. 이것은, 실시간 3D게임 그래픽스에의 응용을 생각하면 큰 제약이라고 할 수 있다.

그런 가운데, 2006년의 SIGGRAPH에서, Zhong Ren씨등이, 「Real-time Soft Shadows in Dynamic Scenes using Spherical Harmonic Exponentiation」이라는 논문을 발표해, PSF기법의 동적 PRT를 기반으로 하면서 자신의 변형까지 지원하는 기술을 발표했다.

그것이 「SH Exponentiation」(SHEXP)이라는 솔루션이다.

지금까지 형상 변형을 실현할 수 없었던 것은, 씬에 등장하는 각각의 3D모델을 「하나의 강체」로 간주해 왔기 때문이다.

SHEXP기법에서는 발상을 전환해, 등장하는 3D오브젝트를, 여러가지 크기로 된 구체(球體)들의 집합체로서 파악한다는 것이다. 즉, 3D모델의 그 형태는 복수의 여러 크기의 구체들이 모여 구성되어 있는 것……으로서 해석하고 처리를 진행시키는 것이다.

이러면, 그 3D모델이 어떻게 변형했다고 해도 「그 3D모델을 구성하고 있는 구체(球體)가 이동했을 뿐」이라고 간주할 수 있다.

3D모델을 복수의 구의 집합체로 생각하면, 3D모델의 변형은 구의 이동으로 생각할 수 있다. 즉, 강체가 이동하는 것에 대응한 PSF기법에 의한 동적 PRT를 응용할 수 있게 된다

SHEXP기법의 실현에 따른 장해

이 아이디어는 훌륭하지만, 몇가지 넘지 않으면 안 되는 문제들이 부상한다.

첫번째로, 3D모델을 어떻게 구체에 근사하는가 하는 실현 방법에 대해서. 이상적인 것은 자동적으로 실행하는 것이지만, 그 3D모델에 어떠한 변형을 허용하는가라는 부분이 복잡하게 관계되기 때문에, 현실적으로는 구(球) 근사화 authoring tool등을 제작해서, 아티스트에게서 구체화(球體化) 처리를 수작업으로 하도록 하는 것이 가장 상책이라고 할 수 있을지도 모른다.

이 구체(球體) 근사에 대해서는 2개의 논문이 참고가 될 것이다.

하나는, Riu Wang씨가 2006년의 PacificGraphic에서 발표한 「Variational Sphere Set Approximation for Solid Objects」라는 논문이다. 2번째는 Gareth Bradshaw씨가 2004년의 SIGGRAPH에서 발표한 「Adaptive Medial-Axis Approximation for Sphere-Tree Construction」이라는 논문이다. 피라미드사의 구현에서는 후자의 논문의 방법을 구현했다고 한다.

드래곤의 3D모델을 다른 레벨로 구상근사(球狀近似)한 모습

두번째로, 구(球)로 3D모델을 근사해 버리면, 세세한 요철이나 가시와 같이 예리한 디테일이 없어져 버린다는 문제가 있다. 이것은 디테일부분의 구체 근사에는 직경이 작은 구를 이용하는 것으로 그나름 대응은 할 수 있다. 단, 그 경우에는 구의 수가 많아져, PRT 처리 때의 부하가 커진다. 즉, 세번째 문제와도 관련이 깊지만, 그 타겟 시스템의 처리 속도에 맞쳐, 어느 정도의 품질로 구체 근사를 해 줄지를 결정하게 될 것이다.

세번째는 처리 속도의 문제. 3D모델이 구체로 근사되었다고 가정하고, 그 모든 구들에 대해서 서로 PSF기법의 동적 PRT를 실시하게 된다. 즉, 처리 부하가 높은 SH Triple Product의 횟수는 급증해, 연산 부하가 매우 높아져 버린다.

첫번째와 두번째 문제는 어떻게든 대응할 수 있지만, 이 세번째 문제는 근본적인 해결책이 필요하다.

거기서 Zhon Ren씨등의 연구그룹은, 이 SH Triple Product 연산 비용을 감소 시키기 위해서 「SH Log」와「SH Exp」라는 2개의 새로운 연산 메소드를 개발했다.(계속)

오리지널 3D모델

구체 근사한 3D모델

형상이 변형 되어도 지면에의 그림자 뿐만 아니라, 신체의 각 부위간의 상호 차폐등도 고려된다. 구체(球體) 근사에 의해서 실현된 기술. 마루의 그림자나 셀프 그림자는 구체 근사에 의해, 상당히 희미해져 있지만, 현실 세계의 그림자도 이처럼 뿌옇게 된다는 것을 생각하면, 충분한 품질이라 할 수 있다




3D모델 변형가능 동적PRT - SH Log와 SH Exp란 ?

SH Log와 SH Exp란?

SH Log의 Log는 로그(對數)를 나타내고 있다. 그리고 SH Exp의 Exp는 지수를 나타낸다.

고등학교 수학에서 배우는 공식에 복수의 곱셈은 그 수의 Log의 총합(덧셈)을 Exp한 값과 같다고 하는 것이 있다.

예를 들어, 25×46 = 1150. Exp(Ln25 + Ln46) 또는 10^(Log25 + Log46)을 윈도우즈의 계산기나 함수 계산기로 계산해 보자. 제대로1150이 될 것이다

이 지수와 로그(대수)의 법칙을 SH Triple Product에 응용한 것이 SH Log와 SH Exp 계산이다.

즉, 차폐계수 벡터끼리의 SH Triple Product 연산 부하를 절감 시키기 위해서, 우선 로그(Log)의 합을 계산해, 그 값에 대해서 지수(Exp)를 취하면 SH Triple Product를 계산한 것이 되지 않을까……라는 것이다. 이것이 성립되면 부하가 높은 SH Triple Product의 반복을 단순한 덧셈으로 떨어뜨릴 수 있게 된다. 이 증명은 매우 복잡해서 여기에서는 생략 하지만, 이것은 성립되는 것이므로, 사용해도 된다.

SHEXP기법에서의 사전 계산

SHEXP기법의 동적PRT에서는, 등장하는 3D모델을 모두 구체(球體)로 해 버리는 관계로, 자기 차폐나 Shadow Fields의 사전 계산을 단일의 구(球), 1개로 한정할 수 있다. 여기에서 이후의 연산을 하기 쉽게하기 위한 방법을 보여준다.

PSF기법에서는 구면조화함수의 스케일링 계수들로 된  계수벡터를 보관하고 있었지만, SHEXP기법에서는, SH Log와 SH Exp의 조합을 활용하기 위해서, 이 계수에 대해서 미리 SH Log 연산을 실시해, SH Log 공간의 값으로 보관 한다.

이 방법에 의해, 차폐 구조의 합성(통합)처리의 중간 계산을 부하가 높은 SH Triple Product가 아니라, 덧셈만으로 처리할 수 있게 된다. 마지막에 SH Exp 연산을 실시해 원래의 공간으로 되돌려서, 음영 처리(휘도 계산)을 실행하도록 한다.

무거운 처리의 일부를 실시간으로 하지 않고, 사전에 미리 해 둔다는 이미지이다. 이것에 의해서 PSF기법에서는 매우 고부하였던 SH Rotation이나 SH Triple Product 연산의 부하가 작아짐으로써, 구(球)가 다수 등장하는 구 근사를 이용하는 SH Exp기법에서도 어느정도의 퍼포먼스를 예상할 수 있게 된다.(계속)

PSF기법과 같이 Shadow Fields를 산출하는 것도, 그 결과를 구면조화함수의 계수벡터 상태 그대로가 아니라, SH Log 연산을 해둔다

SHEXP 기법의 개념도. 고부하인 계산을 SH Log 공간에서의 덧셈으로 떨어뜨리고, 그것을 다시 SH Exp 연산으로 원래 공간으로 되돌린다는 발상이 포인트가 된다


<그림 설명>
상:
(제목) 렌더링 개요(계산 전)
구의 Shadow Filed의 계수 벡터를 SH Log 공간에서 보존한다!!
SH Log 연산
하:
(제목) SHEXP 개념도
계산전,
통상공간, SH Log공간,
물체의 구 근사,
구의 Shadow fields 계산,
SH Log 연산,
SH Log공간의 구의 Shadow fields 계산
계산시
물체 위치, 형상 변신,
차폐 통합,
고속 처리가 가능!!
SH Exp 연산
휘도계산





3D모델 변형가능 동적PRT - 대역조화함수(Zonal Harmonics) 도입

대역조화함수(Zonal Harmonics)의 도입

SHEXP기법에서는, 구(球)의 Shadow Fields를 다루는 부분에 대해 새로운 최적화를 추진한다.

구(球)의 모양은 어디에서 보든 똑같은 "원"이다.

구 전체의 Shadow Fields를 모두 저장하면 실행 측면에서 확실히 유리하지만, 메모리의 소비량이 커져 버린다. 어쨌든, 어디에서 보든 똑같이 원으로 밖에 보이지 않는다면, 어느 한축 방향의 일정거리의 각지점의 Shadow Fields를 산출해 두고, 이것을 리얼타임 렌더링시에 SH Rotation으로 변이 시키는 처리를 구현해 주면 메모리 소비량을 상당히 줄일 수 있다. 그러나, SH Rotation 계산은 자체가 부하가 높기 때문에 실제로는 퍼포먼스 면에서 불리해 진다.

구(球)의 Shadow Fields 취급에 대한 3가지 구현안

<그림 설명>
구의 Shadow field에는 3가지 선택이 존재
표:
                              메모리 소비           실행 속도
전부 보존                        X                      O
SH Rotation                     O                      X
Zonal Harmonics               O                      O
(박스) 전부 보존,
SH Rotation

거기서, 높은 처리 속도와 메모리 소비량이 괜찮은 Zonal Harmonics(대역 조화 함수)라는 개념을 도입한다.

Zonal Harmonics에서는, 앞에서 이야기한 SH Rotation으로 변이 시키는 구현안 처럼, 한방향 만의 Zonal Harmonics 계수를 보관하므로 메모리의 소비량은 작고, 거기다가 계산 부하는 그다지 크지 않다.

Zonal Harmonics는 회전대칭인 정보 밖에는 적용할 수 없다는 제약이 있지만, 다루는 대상이 어디에서 보나 똑같은 모양인 구(球)의 차폐구조 데이터이므로 문제는 없다.

Zonal Harmonics의 요점

대상이 어디에서 보든지 동일한 모양인 구(球)의 차폐구조 데이터이므로 Zonal Harmonics를 적용할 수 있다.

<그림 설명>
상:
1. 특수한 한방향에서, Zonal Hamonics 계수를 계산
-> 한방향만의 계수를 저장하므로, 메모리 소비량은 적다.
2. 다른 방향은 Zonal Hamonics 계수를 이용해서 계산
SH Rotation: 벡터와 행렬의 곱셈 5회
Zonal Harmonics: 벡터와 벡터의 곱셈 1회
-> 상당히 고속
다만 Zonal Harmonics는 "회전 대칭"인 정보만 적용 가능
하:
Zonal Harmonics
제약: 회전대칭인 정보만 적용 가능
구의 Shadow fields 계산
제약을 클리어
구는 어디에서 봐도 회전 대칭


Zonal Harmonics에서 보관할 한 방향을 결정하는 방법에는 요령이 있다. 어떤 조건(그림 참조)을 만족하는 방향을 결정해, 차폐구조를 산출해서 구면조화함수로 근사 시켜 차폐계수벡터를 구하면, m=0 이외의 계수는 모두 0이 되어 버린다. 이 특성에 주목하면, m=0 일 때의 차폐계수벡터만 저장해 두면 되는 것이다.

이 특성은, 그 특수조건을 만족하는 방향을 선택했을 경우의 효과이다. 그리고, 이 m=0 때의 차폐 계수 벡터에 Zonal Harmonics의 보정 계수를 곱해 산출된 값이 Zornal Harmonics계수(ZH계수)가 된다.

바꾸어 말하면, ZH계수는, 특수 조건하에서의 m=0일 때의 구면조화함수의 차폐계수벡터를 조금 세공(=Zonal Harmonics)해준 버전이라 할 수 있다.


Zornal Harmonics 이용을 위한 특수조건

Zonal Harmonics계수의 계산 흐름. l=3 까지의 구면조화함수의 차폐계수벡터는 본래는 16개를 저장해야 하지만, 특수조건하의 혜택으로 m=0 이외의 계수는 전부 제로가 되어 버리므로 그것들이 필요없어진다(4개만 저장). 여기가 포인트

<그림  설명>
상:
(제목) Zonal Harmonics(특수한 한방향을 결정)
물체의 중심과 샘플점의 거리는 일정하다고 가정
특수한 한방향이란?
회전대칭축샘플좌표계의 +z축이 일치하는 특수한 방향
(박스) 회전대칭축과 샘플좌표계의 +z축이 일치하는 점은 한점만 존재
중:
Zonal Harmonics 계수 계산
차폐정보를 취득
 

결국, 원하는 것은 임의의 방향의 차폐계수벡터이다. 이것은, 그 임의의 각도의 구면조화함수와 방금전의 기준축으로 구한 ZH계수의 곱셈(積算)으로 구할 수 있다. 이 부분의 수학적인 이론과 증명은 생략하지만, 이 기법을 이용하는 쪽은 그런 것이다라고 그냥 사용할 수 있다. 포인트가 되는 것은, SH Rotation에서는 벡터와 행렬의 곱셈(積算)이 5회나 필요한데 반해, ZH를 이용하면 벡터끼리의 곱셈(積算) 1회로 임의의 방향의 차폐계수벡터가 구해진다는 점이다.

Zonal Harmonics의 도입으로 임의의 방향의 차폐계수벡터가 비교적 저부하로 계산이 가능해졌다

<그림 설명>
임의의 방향의 차폐계수 벡터 계산
회전 중심축과 샘플 좌표계의 +Z축과의 각도는 θ로 가정
곱셈

실제의 구현에서는 구의 중심으로부터 일정 간격 마다의 ZH계수를 구해, 이것을 테이블화해 보관하게 된다. 이 "일정 거리"라는 것은「구의 중심으로부터의 일정 거리」가 아니고, 구의 중심을 향한 직선과 구의 면에 대한 접선이 구성하는 각도의 변화(구에 대해서 가장 멀다= 0도 ~ 구에 대해서 가장 가깝다=90도)단위로 준다. 이것은 뒤에서 서술할 차폐계수벡터의 통합 계산을 효율적으로 하기 위한 테크닉이다.(계속)

ZH계수 테이블의 개념

ZH계수를 구하는 포인트는 거리가 아니라 각도를 키로 해서 작성하는 것이 나중에 편리하다

구의 Shadow Fields 요약정리. ZH계수를 이용함으로써 적은 메모리 사용과 고속 실행이 가능해 진다

<그림 설명>
상:
Zonal Harmonics 계수 계산,
ZH 계수 테이블,
차폐정보를 취득
하:
1. 특수한 1방향에서, Zonal Harmonics계수를 계산
ZH계수계산,
ZH계수 테이블을 미리 계산,
데이터량은, 수 KB정도
2. 다른 방향은, Zonal Harmonics계수를 이용해서 계산
1.현재의 거리에 대응하는 ZH계수를 테이블로 부터 취득
2. ZH계수 벡터와 구면조화함수 벡터를 곱셈



3D모델 변형가능 동적PRT - SH Log 연산과 SH Log 차원의 차폐 통합

SH Log 연산과 SH Log 공간에서의 차폐 통합

SHEXP기법의 근간이 되는 테크닉인 SH Log연산과 SH Exp연산에 대해서, 지금 한번 집중해서 보기로 한다.

수학적인 유도는 생략 하지만, 이미지적으로는 SH Log와 SH Exp은 구면조화함수 공간에서의 로그, 지수 계산이 된다.

행렬의 로그나 지수의 계산값은, 먼저, 그 행렬을, 쌍(pair)이 되는 직교 행렬과 대각행렬로 분해해서, 그 대각행렬의 각 성분들에 로그나 지수의 계산을 해준 값과 같다라는 성질이 있다. 구면조화함수 공간에서의 로그나 지수 계산도 이 성질을 응용해서 한다.

SH Log를 구하는 방법

행렬의 로그나 지수 계산값은, 우선, 그 행렬을, 쌍(pair)이 되는 직교 행렬들과 대각행렬로 분해해서, 그 대각행렬의 각 성분들에 로그나 지수 계산을 실시한 값과 같다라는 성질이 있다

차폐계수 벡터의 로그는 이와 같이 된다


그런데, 앞에서도 이야기했지만, 구하고 싶은 것은 임의의 방향의 Log공간에서의 차폐계수벡터이다.

실제 구현에서는, 사전에 미리 계산한 ZH계수 테이블에 Log값들을 구해 저장해 둔다(Log ZH 계수 테이블). 이렇게 함으로써, 임의의 방향의 Log공간 차폐계수벡터는, 그 방향의 구면조화함수값에, Log ZH계수 테이블 값을 곱해 주기만 하면 구해진다.

임의의 방향의 Log공간에서의 차폐계수벡터를 구하는 방법은, 이론이나 유도는 몇회 분량이지만 실제 구현은 그렇게까지 어려운 것은 아니다

SH Log 공간에서의 차폐계수벡터가 구해지면, 이번에는 그 차폐를 통합하는 단계로 넘어간다.

정점 단위의 처리가 되는 것은 지금까지의 PRT와 똑같다. 어떤 정점에서의 SH Log공간의 차폐계수벡터는, 아래와 같은 흐름이 된다.

우선, 그 정점에서 대상으로 하는 구의 중심으로 그은 선분과 그 정점로부터 대상 구에 접하는 접선이 이루는 각도를 키로 해, Log ZH계수 테이블을 참조한다(그림). 앞에서 말했던 「일정 거리가 아니라 각도를 키로 하는 테이블 작성」은 여기서 편리함을 준다. 이 Log ZH계수에 그 각도의 구면조화함수를 곱해 주면, 그 정점에서의 SH Log공간의 차폐계수벡터가 구해진다.

그리고, 이 SH Log공간의 차폐계수벡터들의 통합은, 앞에서 이야기한 것처럼 Log공간에서의 메리트를 살려서 덧셉(합산) 만으로 구할 수 있다.

최종적인 총합이 구해지면, 통상 공간으로 되돌리기 위해서, 로그(Log)의 역함수인 지수(Exp) 연산을 실시할  필요가 있다. 그렇다, SH Exp 연산이다.(계속)

SH Log공간에서의 차폐 계수 벡터의 통합 처리. 이 처리를 모든 구에 대해서 실시한다. 각도를 키로 하는 테이블 작성은 여기서 효과적이다.




3D모델 변형가능 동적PRT - SH Exp 연산의 대담한 근사에 의한 고속화

SH Exp연산의 대담한 근사에 의한 고속화

SH Exp연산에 대해서는 정의 그대로의 정직한 연산을 실시하는 것도 하나의 방법이지만, 리얼타임의 퍼포먼스 향상을 위해, 여기서는 근사 방법을 도입한다.

어떤 값의 지수는 급수전개를 하면 아래의 그림처럼 나타낼 수 있다. 이 계산은 제곱승이나 나눗셈이 포함되어 있어서 계산 부하가 높다. 거기서 SHEXP기법의 개발 연구그룹에서는 최초의 2개의 항만으로 근사한다는 대담한 방법을 채택했다. 그러나, 그대로 하면 오차가 너무 크기 때문에, 가중치를 넣은 선형결합으로 근사 한다.

SHEXP 연산을 최초의 2개항만으로 근사를 하는 대담한 방법을 도입해서 퍼포먼스를 올린다.

<그림 설명>
(제목) SH Exp연산
exp(F) = 1 + F + F^2/2! + F^3/3! + F^4/4!+ ...
SH Exp연산은 실행시에 이용 -> 고속으로 계산하고 싶다
부하의 원인: F^2, F^3, F^4,...의 계산이 무겁다
(박스) 최초의 2개항(선형항)만으로 어떻게 근사할 수 없을까?
exp(F) ~ a1 + bF          단, 1=(√4π, 0, 0, ...)
두항에 가중치(a, b)를 곱해서 선형 결합함으로 근사


2개의 선형항들에 곱해지는 2개의 가중치 계수는, 사전 계산으로 테이블화 해둔다. 그렇다면, 이 가중치 계수가 중요해진다.

SHEXP기법의 연구 개발그룹에서는, 이 2개의 가중치 계수의 계산에는 일반적인 수치계산으로 이용되는 최소 이승법(最小二乘法)을 사용했다.

어떤 차폐 정보로부터, 그 차폐계수벡터 g를 구하고, 이것을 SH Log 연산해서 SH Log공간으로 변환해 그것을 f라고 했을 때, f의 값으로부터 최소이승법으로, 그 2개의 가중치 계수 a, b가 구해지므로, 사전 계산해서 작성하는 테이블은 f를 키로 해서 a, b를 구하는 방법을 생각할 수 있다.

그러나, 이것은 실현이 어렵다. 그것은, 아무리 등장하는 3D모델이 구(球)뿐이라고는 해도, 구의 중복 상태나 그 조합은 무수히 많기 때문에, 이것에 대응하는 자기 차폐 상태 g도 무수히 많아지고, 결국은 f도 무수히 존재하게  된다. f를 키로 한 테이블의 사이즈가 방대해져 버려, 현실성이 없는 것이다.

SH Exp 연산의 개념도. 퍼포먼스 향상을 위해서 맨앞의 선형항 2개와 가중치 계수를 이용한 계산으로 근사한다. 그 가중치 계수는 테이블을 사용한다

<그림 설명>
상:
고속판,
근사계산,
a,b의 테이블화,
기본개념 -> 근사 정밀도 개선 ->a, b 테이블 작성
테이블 바깥에의 처리,
고속 처리가 가능!!
하:
기본판,
SH Log공간,
직접계산 or 대각화,
계산부하가 높다,
통상공간,
a, b 테이블


모든 차폐 정보에 대해서의 SH Log공간에서의 f를 구해, 그 f로부터 대응하는 2개의 가중치 계수 a, b를 얻는다는 것이 기본 발상. 그러나, 차폐의 조합이 너무 방대하다

<그림 설명>
(제목) a, b 테이블의 작성 (개념)
요점1: 차폐정보를 몇개정도 직접 작성해, SH Log변환
요점2: 최적의 근사를 해주는 a, b를 계산해서 테이블화
(박스 좌~ 우)
자신이 직접 적당히 만든 차폐정보
SH Log 연산
최적의 a, b를 계산
a,b 테이블

거기서, 한층 더 타협 조건을 부여한다. 그것은 f가 아니라 f의 절대값를 키로 한다는 조건. 나아가, 그 절대값의 상한과 하한을 결정해 버린다는 간략화의 타협도 추가한다. 이렇게 해서, 뭔가 현실적인 테이블화가 보이는 것 같다.

테이블화 실현을 위해서 좀더 타협안을 도입한다

<그림 설명>
(제목) a, b 테이블 작성의 개량
(박스) 차폐정보의 조함은 무수히 존재
→  f 마다 a, b를 테이블화하는 것은 비현실적
타협점:
√  f가 아니라 │f│로 테이블화
   → f가 달라도 │f│가 같으면 같은 a, b를 이용
   → 조합 시킬 수를 감소
√  테이블의 상한, 하한을 설정
(박스) a,b 테이블


타협안으로서는 너무 대담하므로, 이대로는 근사 정밀도가 그다지 좋지 않다. 거기서 정밀도 향상을 위한 방법을 생각해 해준다.

SH Log 공간으로 변환된 차폐계수 벡터의 요소 중에서, 절대값이 큰 것은 최초의 항 뿐이므로, 이 최초의 항만은 원래대로 SH Exp계산을 해주는 것이다. 절대값이 큰 최초의 항이 정밀도가 올라가면, (전체) 정밀도가 올라간다……이것을 노리는 것이다.

구체적으로는, SH Log공간의 차폐 계수 벡터의 최초의 항과 두번째항 이후를 분해해 최초의 항에 대해서는 SH Exp계산을 해주고, 그 이후에 대해서는, 그 대담한 2개의 가중치 계수 테이블을 사용한 간략 계산을 실시하도록 한다.

정밀도에 큰 영향을 주는 절대값이 큰 최초의 항과 두번째항 이후에 대한 계산 방법을 다르게 한다.

<그림 설명>
(제목) a, b 테이블의 근사 정보를 개선
→ DC Isolation (직류성분의 분리)



이 논리를 이용하기 위해서는, 2개의 가중치 계수를 얻기 위한 테이블을, SH Log 공간의 차폐계수벡터의 최초의 항을 제외한 나머지에 대해 작성할 필요가 있다

2개의 가중치 계수를 얻기 위한 테이블 작성의 두번째안. 앞에서 나온 그림과 개념적으로는 같지만, SH Log공간의 차폐 계수 벡터의 최초의 항을 제외한 것들에 대응하는 것으로 한다.

덧붙여, 이 테이블에서는, 키로 하는 f 값에 절대값의 하한과 상한을 설정한다고 하는 타협안을 적용했지만, 그럼, 그 조건을 만족할 수 없는(범위 밖의) f에 대해서는 어떻게 하면 좋을까?

f의 절대값이 하한,또는 상한을 넘는 경우, 하한, 상한 범위에 들어갈 때까지, 그 값을1/2(으) 해 간다. 그리고, 하한 상한 범위에 들어가면 테이블에서 구한 계수 a,b(을)를 꺼내, 그 값으로부터 SH Exp의 근사를 구하는데, 구한 값에 대해서, 방금전의1/2 한 횟수만큼,Triple Product계산을 하면 된다고 한다. 이 논리에 대한 수학적인 증명도 여기서는 생략 한다.

테이블 범위를 벗어난 경우에 대한 대처의 구체적인 예

차폐계수 벡터의 통합을 SH Log공간에서 실시하고, SH Exp연산으로 통상공간으로 되돌릴 수 있으면, 나머지는 음영 처리(휘도 계산) 뿐이다. 이것에 대한 처리계는 PSF기법과 논리는 완전히 똑같아서, 이 이후의 처리에 대해서는 해설을 생략 한다.

자기변형 할수있는 3D모델에 대해서도 동적 PRT를 적용할 수 있게 됨으로써 PRT의 응용범위는 극적으로 넓어졌다.

휘도 계산시의 반사 모델을 변경하면 당연히 금속과 같은 질감 표현도 가능하다

동적PRT의 가능성

2002년에 등장했을 때, PRT는 3D게임 그래픽스와는 관계없는 기술이라고 생각되어져 왔지만, GPU의 진화와, PRT기술 그 자체의 진화에 의해서, 3D게임 그래픽스에의 응용에 대한 기대가 높아져 왔다고 말할 수 있다.

특히 3D모델이 변형해도 적용할 수 있는 SHEXP기법의 동적PRT은, 본스키닝(Bone Skinning)된 3D캐릭터에도 대응 가능한 것이고, 인간이나 동물이라는 동적인 3D캐릭터 표현에도 문제 없게 대응할 수 있는 것이다. 이것이 넓게 활용되게 되면, 3D게임 그래픽스의 리얼리티는 향상되고, 표현의 폭도 한층 더 확장될 것이다.

본 연재에서 다룬 PRT는 차폐(그림자)로 한정한 테마였지만, PRT는 본래 「빛의 전달」(RADIANCE TRANSFER)를 「사전 계산」(PRECOMPUTE)하는 일반형이기 때문에, 사전계산하는 요소를 다르게 하거나 혹은 늘려 감으로써, 복잡하고 특수한 재질의 표현도 가능하다. 예를 들면, 피부와 같은 반투명 재질의 표현이나, 2차 반사광 이후의 복잡한 상호 반사의 음영 처리등도 가능하다.

현재의 SHEXP기법의 동적PRT에서도, 기본적으로 정점 단위의 음영 처리를 하고, 게다가 PRT의 단위가 구체 근사화 된 형상단위가 되므로, 세세한 디테일까지 고려한 복잡한 빛의 전달을 재현할 수 있는 것은 아니지만, 일반적인 반사 모델을 이용한 픽셀 단위의 음영처리와 조합하면, 그러한 결점도 보완할 수 있을 것이다.

가능성은 보였다고 해도, 3D게임 그래픽스에 응용하려면 , 아직도, 처리 속도나 비디오메모리 용량의 관점에서는 넘어야 할 과제가 많은 것 같다. 하지만, 이것은 하드웨어의 진보로 어떻게든 해결될 문제이다.

그런 의미에서는, 현재 세대 이후의 PC게임등의 앞선 엔진등에서는, 동적 PRT의 구현이 시작될 가능성은 높다.

PRT의 대상 요소 예.점 P에 대해서 PRT 할 수 있는 요소는 많이 있다. 다만, 다루는 요소가 많아지면 많아질 수록 계산 부하는 커져, 비디오메모리 사용량은 증가한다. 그러나, 이것은, 역으로 말하면, GPU 진화로 해결할 수 있는 문제라고도 말할 수 있다


 

Posted by 노을삼킨별
,