Wednesday, October 15, 2008

Global Illumination 의 종류와 이해 및 V-Ray의 GI 솔루션


| Eyecg.com tutor





 
아래 글은 http://www.spot3d.com/vray/help/150R1 에 있는 GI 연산방법의 분류에 대한 내용을 번역한 것입니다.


The rendering equation


거의 모든 현대의 GI랜더러들은 1986년 James T.Kajiya의 논문 "The Rendering Equation"에 의해 소개된 랜더링 방정식에 기반하고 있습니다. 이 방정식은 빛이 어떻게 씬 전체에 전파되는가를 기술하고 있습니다. 또한 Kajiya는 그의 논문에서 path tracing이라 불리는 Monte Carlo 방법을 사용하는 랜더링 방정식에 기반하여 이미지를 계산하기 위한 방법을 제안하고 있습니다.

이 방정식은 사실 엔지니어링 분야에서는 오래전부터 알려져 왔으며 서로 다른 환경에서 방사성 열 전달을 계산하기 위해 사용되어 왔습니다. 하지만 Kajiya 가 처음으로 이 방정식을 컴퓨터 그래픽에 적용하였습니다.

또한 이 랜더링 방정식은 단지 "전자기학을 위한 맥스웰 방정식의 근사치"입니다. 이는 모든 광학적 현상을 모형화하기 위한 것이 아닙니다. 단지 기하광학에 기반하고 있으며 따라서 회절(diffraction)이나 간섭(interference), 편광(polarization)과 같은 것들은 시뮬레이션 할 수 없습니다. 하지만 분광(dispersion)과 같은 파장에 의존한 효과는 쉽게 수정하여 적용될 수 있습니다.

또 한가지 더욱 철학적인 점은 이 랜더링 방정식이 빛이 어떻게 행동하는가 하는 수학적 모델로부터 나온다는 점입니다. 컴퓨터 그래픽을 위해서는 매우 좋은 모델이지만, 빛이 실세계에서 행동하는 것을 정확히 설명하지는 못합니다. 예를 들어서 랜더링 방정식은 빛 줄기가 무한히 미세하게 얇으며 빛의 속도가 무한하다고 가정을 합니다. 하지만 이들 가정은 어느 것도 실제 물리세계에서는 사실이 아닙니다.

랜더링 방정식이 기하광학에 기초하고 있기 때문에 레이트레이싱은 랜더링 방정식을 풀기 위한 매우 편리한 방법입니다. 실제로 대부분의 랜더러는 랜더링 방정식을 레이트레이싱에 기반하여 해결하고 있습니다.

랜더링 방정식의 여러 다른 공식이 가능하지만 Kajiya에 의해 제안된 것은 아래와 같습니다 :

 여기서 :
L(x,x1)은 x1지점에서부터 x지점까지 통과하는 빛;
g(x, x1) 는 지오메트리(혹은 visibility term);
e(x, x1) 는 x1포인트에서 x포인트를 향해 빛이 방출되는 세기:
r(x, x1, x2) 는 x2포인트로부터 x1포인트를 통해 x포인트로 가는 분산된 빛;
S는 씬의 모든 표면의 합이며 x,x1과 x2는 S로부터의 지점.

이 방정식이 의미하는 바는 : 씬 내에서 x1지점으로부터 주어진x지점에 도달하는 빛이 모든 다른 x2지점에서 x1지점으로 방출되는 빛과 x를 향해 반사된 빛의 합이라는 의미입니다:



I: Exact vs approximate methods


앞서 언급했듯이, 우리는 이 방정식을 정확히 해결할 수 없습니다 - 비록 매우 작은 것들이라도 언제나 에러들이 존재합니다. 몇몇 랜더링 방법에서는 원하는 수준의 에러가 사용자에 의해 사전에 지정되어지며 이것이 연산의 정확도를 결정합니다 (예를 들면 GI 샘플 밀도, GI ray 갯수나 포톤의 수). 이러한 방법들의 단점은 사용자들이 최종 결과물이 완성될 때까지 전체 연산과정을 기다려야 한다는 점입니다. 또 한가지 단점은 주어진 시간 내에 충분한 퀄리티를 만들어내는 설정방법을 찾기 위해 많은 시행착오를 거쳐야 한다는 점입니다. 하지만 이들 방법의 큰 장점은 지정한 정확도 내에서는 매우 효율적이라는 점입니다. 왜냐하면 알고리즘은 랜더링 방정식의 어려운 부분을 분리하여 해결하는데 집중할 수 있으며 그리고 나서 그 결과를 합칠 수 있기 때문입니다 (예를 들어 독립적인 영역으로 이미지를 분리하여 몇 번의 연산과정을 수행하는 것 등입니다.)

또 다른 방법에서는 이미지가 점진적으로 계산되어집니다 - 초반에는 에러가 크지만 알고리즘이 부가적인 연산을 수행하면서 에러가 점점 작아지는 것입니다. 어느 순간에 우리는 전체 이미지에 대해 적당한 결과를 갖게 됩니다. 그러면 우리는 연산을 종료시킬 수 있으며 그 중간결과를 사용할 수 있게 됩니다.


Exact (unbiased or brute-force) methods.


장점:
* 매우 정확한 결과를 냅니다.
* 이 방법이 만드는 한가지 문제는 노이즈 입니다.
* 이 방법을 사용하는 랜더러들은 이미지품질을 위한 단지 몇 개의 제어옵션을 가집니다.
* 일반적으로 매우 적은 추가메모리를 사용합니다.

단점:
* Unbiased 방법은 adaptive가 아니므로 노이즈가 없는 이미지를 위해서는 매우 느립니다.
* exact 방법에 의해서는 몇가지 효과는 연산될 수 없습니다(예를 들면 포인트 라이트로부터 완벽한 거울을 통해 보여지는 커스틱스)
* 이들 방법에서는 퀄리티 요구수준을 강제하기 힘듭니다.
* Exact 방법은 일반적으로 최종이미지에 직접 적용됩니다. 따라서 Gi솔루션을 저장한 다음 다시 사용할 수 없습니다.

예:
* Path tracing (brute-force GI in some rendereres).
* Bi-directional path tracing.
* Metropolis light transport.


 

Approximate (biased) methods:


장점:
* Adaptive하므로 일반적으로 exact방법에 비해서 많이 빠릅니다.
* exact 방법에서는 불가능한 효과들을 연산할 수 있습니다. (예를 들면 완벽한 거울을 통과하는 포인트라이트의 커스틱스)
* 품질 요구사항이 설정될 수 있으며 그에 맞게 솔루션이 수정될 수 있습니다.
* 일부 approximate 방법에서는 GI솔루션을 저장하고 다시 사용할 수 있습니다.

단점:
* 비록 일반적으로 오류가 매우 작게 만들어지더라도 완전히 정확한 결과를 내지는 못합니다.
* 얇은 벽체아래의 빛샘과 같은 오류들이 가능합니다.
* 품질을 제어하는 복잡한 설정.
* 일부 approximate방법은 많은 부가적인 메모리를 사용한다.

예:
* Photon mapping.
* Irradiance caching.
* Radiosity.
* Light cache in V-Ray.

Hybrid methods:

일부 효과를 위해서는 exact방법을 사용하며 일부를 위해서는 approximate 방법을 사용합니다.

장점:
* 속도와 품질의 결합

단점:
* 설정하는데 더욱 복잡합니다.

예:
* Final gathering with Min/Max radius 0/0 + photon mapping in mental ray.
* brute force GI + photon mapping or light cache in V-Ray.
* Light tracer with Min/Max rate 0/0 + radiosity in 3ds Max.
* 어떠한 방법은 점근적으로 unbiased가 될 수 있습니다 - 이는 처음에는 다소 bias 로 시작했으나 연산이 수행됨에 따라서 점차적으로 감소되는 것입니다.



II: Gathering vs shooting methods


Shooting methods


이는 빛으로부터 시작하며 빛 에너지가 씬 전체에 퍼지는 방법입니다. 슈팅 방법은 exact 나 aporoximate 방식이 될 수 있습니다.

장점:
* 커스틱스와 같은 빛의 특정 효과를 쉽게 흉내 낼 수 있습니다.

단점:
* 카메라뷰를 고려하지 않습니다. 따라서 이미지상에 보이지 않거나 기여하지 않는 씬의 일부분에 대해 많은 시간을 소모합니다 (예를 들어 눈에 보이지 않는 커스틱스가 여전히 연산되어집니다)
* 빛 가까이에 있는 씬의 부분은 보다 정확한 솔루션을 내지만 빛에서 먼 부분은 부정확하게 연산됩니다.
* 오브젝트라이트나 환경라이트(스카이라이트) 와 같은 효과를 효율적으로 흉내내지 못합니다. 비물리적인 광원은 흉내내기 힘듭니다.
 
예:
* photon mapping (approximate).
* particle tracing (approximate).
* light tracing (exact).
* some radiosity methods (approximate).


Gathering methods


이 방법은 카메라와/또는 씬의 지오메트리로부터 시작합니다. 개더링 방법 역시 exact나 approximate 방법이 될 수 있습니다.

장점:
* 우리가 관심 있는 씬의 한 부분에 기반하여 작업을 합니다. 따라서 슈팅법에 비해 더욱 효율적입니다.
* 이미지에서 보이는 모든 부분에 매우 정확한 솔루션을 만듭니다.
* 비물리적인 조명과 같은 다양한 빛 효과를 흉내낼 수 있습니다.

단점:
* 포인트 라이트나 작은 에리어 라이트로부터의 커스틱스와 같은 일부 빛 효과는 흉내내기 어렵거나 불가능합니다.

예:
* path tracing (exact)
* irradiance caching (final gathering in mental ray), (approximate).
* some radiosity methods (approximate).


 

Hybrid methods


이 방법은 슈팅과 개더링을 혼합한 것으로 역시 exact 와 approximate 방법이 될 수 있습니다.

장점:
* 거의 모든 빛 효과를 흉내낼 수 있습니다.

단점:
* 설정이 복잡합니다.

예:
* final gathering + photon mapping in mental ray (approximate).
* irradiance map/brute force GI + photon map in V-Ray (approximate).
* bi-directional path tracing and metropolis light transport (exact).
* some radiosity methods (approximate).



III: Approximate methods: view-dependent vs view-independent solutions


어떠한 approximate방법은 GI솔루션의 저장이 가능합니다. 이 저장된 캐시는 뷰에 대해 독립적이거나 의존적일 수 있습니다.

Shooting methods


장점:
* 슈팅방법은 일반적으로 뷰에 독립적인 솔루션을 만듭니다.

단점:
* 솔루션이 일반적으로 품질이 낮습니다 (흐릿하거나 부족한 디테일). 디테일한 솔루션은 많은 시간과 메모리를 필요로 합니다.
* Adaptive 솔루션을 적용하기 힘듭니다.
* 빛에서 먼 영역은 정확도가 낮습니다.

예:
* photon mapping
* some radiosity methods


 

Gathering methods


개더링 법과 몇몇 하이브리드 방법은 뷰의존법과 뷰독립법 둘 다 사용합니다.

View-dependent solutions

 

장점:
* 씬에서 단지 필요한 부분만 고려합니다 ( 보이지 않는 부분에 대해 시간을 낭비하지 않습니다).
* 지오메트리 종류에 제한이 없이 어떠한 종류의 지오메트리와도 작업할 수 있습니다.
* (모든 자세한 디테일을 유지하면서) 매우 고품질의 결과를 만들어낼 수 있습니다.
* 일부 방법에서는 뷰 의존 부분의 글로시 반사와 굴절 등의 솔루션도 저장할 수 있습니다.
* 뷰독립 솔루션에 비해 적은 메모리를 필요로 합니다.

단점:
* 다른 카메라 위치에 대해 업데이트를 필요로 합니다: 솔루션의 일부 수행된 부분이 재사용 되는 수가 있습니다.

예:
* Irradiance caching (in V-Ray, mental ray, finalRender, Brazil r/s, 3ds Max's light tracer).


View-independent solutions


장점:
* 단지 한번만 솔루션이 수행되면 됩니다.

단점:
* 뷰에서 보이지 않는 부분까지 포함하여 씬 내의 모든 지오메트리가 고려됩니다.
* 씬 내의 지오메트리의 종류가 삼각면이나 사각면의 메쉬로 제한됩니다. (프로시저럴 혹은 무한 지오메트리는 허용되지 않습니다)
* 상세한 솔루션은 많은 메모리를 필요로 합니다.
* 단지 솔루션의 디퓨즈 부분만이 캐시됩니다 : 뷰 의존적 부분 (글로시 반사) 은 여전히 연산되어야 합니다.

예:
* Some radiosity methods.


Hybrid methods


서로다른 뷰 의존적 방법과 뷰 독립적 방법이 조합될 수 있습니다.

예:
* photon mapping and irradiance caching in V-Ray.
* photon mapping and final gathering in mental ray.
* radiosity and light tracer in 3ds Max.



GI methods supported by V-Ray


V-Ray는 GI 방정식을 해결하는 다양한 방법을 제공합니다 - exact, approximate, shooting, gathering. 일부 방법은 특정 종류의 씬에 더욱 적합합니다.


Exact methods



V-Ray는 두가지의 exact 방법을 지원합니다. brute force GI 와 progressive path tracing 입니다. 두 방법의 차이점은 brute force GI는 전통적인 이미지 구성 알고리즘 (버켓 랜더링)을 사용하며 adaptive 하다는 것이고, 반면에 path tracing 은 전체 이미지를 한번에 처리하며 adaptive하지 않다는 점입니다.

Approximate methods



그 외의 모든 방법(irradiance map, lightcache, photon map)은 approximate 방법을 사용합니다.

Shooting methods



Photon map 은 V-Ray에서 유일한 슈팅방법입니다. 커스틱스 또한 gathering 방법과 조합하여 포톤맵핑으로 수행될 수 있습니다.

Gathering methods



그 외의 모든 방법(bruce force GI, irradiance map, light cache) 은 gathering 방법입니다.


Hybrid methods



V-Ray는 서로다른 GI 엔진을 프라이머리와 세컨더리 바운스에 사용할 수 있습니다. 이는 사용자들이 자신의 목적에 맞게 exact 와 approximate, shooting과 gathering 알고리즘을 조합할 수 있게 해줍니다. 조합가능한 방법은  GI examples page.에서 볼 수 있습니다.

Friday, September 26, 2008

VRay Framebuffer 를 이용하여 멀티채널 exr 파일 사용하기


| Eyecg.com tutor

아래 튜토리얼은 eyecg.com 에 2008/09/26 14:37:24  에 게시한 글입니다.
무단전제 및 재배포 금지입니다.
 
 
 
아래 튜토리얼은 V-Ray를 사용하여 multichannel EXR 파일로 랜더링 하는 방법을 설명합니다.
 
 
 
애니메이션 (혹은 스틸이라도) 등을 랜더링 하는 경우에 단일 패스로 한번에 최종랜더링 이미지를 내기보다는
 
여러개의 패스(diffuse, GI, specular, lighting, .....) 를 랜더링 하여 합성툴을 이용하여
 
최종 이미지를 만드는 경우를 흔히 볼 수 있습니다.
 
V-Ray에도 이미 여러가지의 랜더패스들을 추출할 수 있는 옵션이 있습니다.
 
 
Render Element 탭으로 간 다음 원하는 element 들을 선택을 합니다. 컨트롤 키를 누르고 선택을 하면 여러개를 선택할 수 있습니다.
 
OK버튼을 누르면 아래 이미지와 같이 여러가지 랜더패스들이 등록이 되며 개별적으로 몇가지는 약간의 옵션을 가지는 경우도 있습니다.
 
 
일반적으로 랜더링시 많이 사용하는 TGA파일의 경우 32bit 포맷이라고 하지만 이는 채널별 (R, G, B, A) 로는 8비트에 불과합니다.
 
그러므로 색정보의 손실로 인해 합성시에 제약을 받는 경우가 많습니다.
 
이를 채널별로 32비트 포맷이 지원이 되는 exr 파일로 내보내도록 하겠습니다.
 
또한 랜더패스별로 단일 파일을 사용하는 경우 대용량의 파일로 인해 불편해 지는 경우도 많습니다.
 
하지만 Vray에서 지원하는 멀티채널 EXR 을 사용하는 경우 이러한 불편을 없앨 수 있습니다.
 
 
적당한 씬을 만들어서 재질과 조명및 카메라등 모든 설정을 마칩니다.
 
 
랜더러를 V-Ray로 변경을 하고
 
V-Ray 탭에서 V-Ray Frame Buffer를 활성화 시킵니다.
 
Enable built-in Frame Buffer 를 켜고
 
V-Ray raw image file 부분에서 Render to V-Ray raw image file 에 체크가 된 상태에서(기본값임) Brower 버튼을 눌러서 원하는 경로에 저장될 파일의 이름을 입력합니다.
 
이 때 파일 이름뒤에 확장자를 exr 로 직접 입력을 합니다.
 
 
랜더링을 합니다.
 
 
프레임버퍼에 위의 그림과 같이 여러개의 랜더패스들이 보여집니다.
 
지정한 경로에는 프레임별로 하나의 exr 파일이 만들어 졌습니다.
 
 
이를 멀티채널 exr 파일을 지원을 하는 합성툴 (Nuke 등) 을 사용하여 편집을 할 수 있습니다.
 
 
 
아래 링크는 여러가지 랜더패스들을 이용하여 합성을 하는 기본적인 과정에 대한 설명을 담은 링크입니다.
 
http://vray.info/tutorials/basiccomping/
 
아마도 많이 보셨을 것이라 생각되며, gnomon workshop의 Christopher Nichols 씨의 강좌에도 설명이 되어있는 내용입니다.
 
 
참고로 포토샵이나 에프터이펙트 의 경우 최근의 CS3 까지도 멀티채널 exr 파일을 직접 지원하지 않습니다.
 
따라서 ProEXR 같은 플러그인 등을 사용하여야 합니다. http://www.fnordware.com/ProEXR
 
이 플러그인을 사용하게 되면 포토샵 같은 경우 각 패스들이 레이어로 구분이 되어 불러와집니다.
 
 
 
 
--- 끝

Thursday, September 25, 2008

vrmesh파일과 mat 파일 별도저장하여 활용하기


| Eyecg.com tutor

본 튜토리얼은 eyecg.com 에 2008/09/25 19:17:40  에 게시한 글입니다.
무단전제 및 재배포 금지입니다.
 
 
 
본 튜토리얼은 vrmesh파일과 mat 재질파일을 내보내어 사용하는 방법에 대한 기초적인 튜토리얼입니다.
 
 
 
 
V-Ray를 사용시에 Vray Proxy 를 사용하여 Vrmesh 파일을 내보내는 경우에
 
이를 처음 사용하시는 분들은 재질을 어떻게 적용해야 하는지 모르는 경우가 있습니다.
 
아래 튜토리얼에서는 vrmesh파일과 mat 파일을 사용하여
 
내보낸 vrmesh파일을 나중에 다시 사용하는 경우에 좀 더 손쉽게 사용하는 방법을 설명하는 기본적인 튜토리얼입니다.
 
 
 
 
1. 모델링을 하여 재질을 지정하였습니다.
 
아래 두 개의 의자가 있습니다.
 
하나는 녹색 의자이며 다른 하나는 빨간색 의자입니다.
 
오브젝트의 이름은 각각 green_chair 와 red_chair 입니다.
 
두 의자는 각각 하나씩의 오브젝트로써 각 부분이 attach된 상태로 각 부분의 재질은 multi/sub-object 재질로 되어 있습니다.
 
각 재질의 이름은 greenchair 와 redchair 로서 각 5개씩의 sub 재질을 가지고 있습니다.
 
두 가지는 동일한 구조이며 1번 id는 의자 등판,  2번은 의자 안장부분, 3번은 의자 바닥플라스틱, 4번은 의자 하단 지지대, 5번은 팔걸이 입니다.

 
 
각 의자의 해당 부분에 sub-object를 지정하는 방법은 아래 그림과 같이
 
각 오브젝트의 서브 오브젝트로 가서 element 선택상태로 간 다음 1번 id를 지정하고자 하는 의자등판을 클릭한 다음 선택이 되면 material id 를 1로 입력하고 엔터키를 칩니다.
(여러 오브젝트를 attach시킨 경우 polygon 선택보다 element 선택이 훨씬 용이합니다.)
 
 
 
 
2. 각 의자의 특정부분에 각각 별개의 uv를 지정해야 하는 경우가 있습니다.
 
복잡한 unwrap대신 여러개의 uvw map을 사용하여 간단히 해결합니다.
 
 
 
 
3. 이제 만들어 놓은 의자를 vrmesh파일로 내보냅니다.
 
두 의자를 선택한 다음 마우스 우측버튼을 눌러서 V-Ray mesh export 를 선택합니다.

 
 
 
4. export 하기위한 메뉴가 나옵니다.
 
내보내기 할 경로를 brower버튼을 눌러 지정을 합니다.
 
두 개의 라디오 버튼이 있습니다.
 
첫번째 라디오 버튼은 선택한 두 개의 오브젝트를 하나의 vrmesh로 내보내기를 할 때 사용하는 옵션입니다.
 
이 경우 두 오브젝트가 하나의 vrmesh로 합쳐집니다.
 
두번째는 선택한 각 오브젝트의 이름별로 각각의 vrmesh로 내보내기 할 때 사용하는 옵션입니다.
 
우리는 두 의자 오브젝트를 각각의 vrmesh로 내보내기 할 것이므로 두번째 옵션을 선택합니다.
 
이렇게 내보내면 각 오브젝트의 이름과 동일한 이름을 가진 vrmesh 파일이 만들어지게 됩니다.
 
만일 오브젝트에 애니메이션이 지정되어 있다면 export animation을 체크하여 애니메이션이 되는 vrmesh를 내보낼 수 있습니다. (파일 크기가 커집니다)
 
그리고 맨 아래에 있는 automatically create proxies 옵션은 vrmesh 로 내보냄과 동시에 현재 선택한 오브젝트를 vrmesh로 바꿔주는 옵션입니다.

 
 
 
5. 이제 의자에 지정된 재질을 별도의 파일로 내보내서 vrmesh파일과 함께 저장을 합니다.
 
우선 재질편집기에 두 개의 재질이 등록이 되어 있습니다.
 
재질편집기의 재질 브라우저를 열어서 (1)
 
brower from scene(2) 을 선택을 합니다. 현재 씬에 지정된 재질이 표시가 됩니다.
 
save as버튼을 눌러(3) vrmesh 파일이 저장된 동일한 폴더에 mat 파일로 저장을 합니다.
 
 
 
6 . 이제 reset을 눌러 완전히 새로운 씬에서 시작을 합니다.
 
create panel에서 VRay를 찾은 다음 VRayProxy를 눌러서 뷰포트의 빈 곳을 클릭합니다.
 
 
 
7.choose external mesh  대화상자가 뜨면 앞에서 지정한 경로에서 원하는 vrmesh파일을 선택을 합니다. 여기서는 앞서 저장했던 red_chair.vrmesh를 불러왔습니다.
 
랜더링을 해 봅니다. 단색 오브젝트로 바뀌었습니다. 이는 오브젝트자체의 색상이며 아무런 재질이 지정되지 않았기 때문입니다.
 
vrmesh파일에는 각 재질id가 기억이 되어 있어서 임의의 multi/sub-object 재질을 만들어서 지정을 한 다음 이를 일일이 수정을
 
해도 되지만 기존에 만들어 놓은 재질을 사용하는 편이 훨씬 번거로움을 덜 수 있습니다.

 
 
 
8. 별도로 저장했던 재질파일을 불러와 봅니다.
 
재질브라우저를 다시 띄운다음 (1)
 
browse from Mtl Librafy 를 선택하고 (2)
 
open을 눌러 (3) 앞서 mat파일을 저장했던 폴더에서 mat 파일을 불러옵니다.


 
 
 
9. 열기 버튼을 누르면 아래 왼쪽 그림과 같이 두 개의 재질이 불러와 집니다. 이를 각각 빈 재질슬롯으로 드래그 하여 붙여넣습니다.

 
 
 
10. 이제 red chair 재질을 vrmesh의자에 지정을 하고 랜더링을 해 봅니다.
 
제대로 랜더링이 되었습니다.

 
 
 
11. 뷰포트상에서는 vrmesh 오브젝트의 재질을 볼 수 없으므로 어떤재질이 적용된 오브젝트인지 구분이 쉽지 않습니다. 
그러므로 오브젝트 컬러를 사용하여 구분을 해 놓는편이 좋습니다.

 
 
끝.....

Tuesday, September 9, 2008

VRay 랜더링시 화이트도트를 처리하는 방법


| Eyecg.com tutor


본 게시글은 eyecg.com 에 2008/09/09 21:18:15  에 게시한 글입니다.
무단전제 및 재배포 금지입니다.




예전부터 자주 보는 질문 중의 하나는

Vray를 사용하는 경우에 아래 그림과 같이 하얀색 점박이(이하 화이트도트라고 하겠습니다)가 생기는데

이걸 어떻게 없앨 수 있느냐는 질문입니다. (그림1)


(그림1)


주로 Vraysun을 사용하는 경우에 자주 발생하며 반사가 많이되는 재질에 특히 자주 발생하게 됩니다.
위의 주전자는 reflect 값이 232,232,232이며 glossiness가 0.88인 금속성 재질입니다.
Vraysun과 Vraysky를 사용하였고, 피지컬카메라를 사용하였습니다.


이제 편의를 위해 Enable built-in Frame Buffer를 체크하고 랜더링을 해 보겠습니다. (그림2)


(그림2)

이제 하얀점이 나타나는 지점을 마우스 우클릭을 하여 픽셀 정보가 보이게 합니다.

프레임버퍼창 하단의 i 형태의 아이콘을 누르면 정보창이 항상 켜집니다.


흰점의 색상값이 8비트로 보면 단순히 255,255,255로 나타나지만 32비트 float 로 보면 57.028, 46.147, 34.458 로 나타납니다.

일반적으로 255,255,255의 float값은 1.0, 1,0, 1,0으로 나타나야 하지만 지금 우리가 클릭한 밝은 부분은 이보다 훨씬 밝은

색입니다. 그로 인해 검정색테두리 같은 모양이 나왔습니다. (경계면이 날카롭게 표현되는 Catmull-Rom 필터를 사용했기 때문에

검정색 경계면이 뚜렷하게 나타났습니다.)



아래와 같이 프레임버퍼창의 첫번째 아이콘을 눌러 correction control 창을 열어봅니다.(그림3)

0 과 1 사이의 히스토그램이 왼쪽구석에 몰려있네요. 이는 57.028에 이르는 밝은 부분까지 히스토그램에 나타내려고 하다보니

대부분의 색영역이 있는 0~1.0구간이 한쪽으로 몰릴 수 밖에 없습니다.


(그림3)



자 이제 이를 해결하기 위한 가장 손쉬운 방법은 안티알리아싱 필터를 바꿔주는 것입니다.

아래 그림4에서는 필터를 건축CG에서 자주 사용하는 Catmull-Rom에서 기본세팅인 Area 1.5로 바꿔서 랜더링 해보았습니다.


(그림4)

괜찮게 나왔네요. 혹은 quadratic이나 아니면 아예 필터를 사용하지 않고 랜더링 해도 괜찮습니다.

하지만 우리나라사람들은 Catmull-Rom 필터를 선호하는 것 같습니다. 이미지 경계면이 뚜렷하게 보이기 때문이겠지요.

심지어 최종랜더링된 이미지에 포토샵 등에서 샤픈필터를 주는 경우도 많습니다.

또 필터변경만으로 해결이 되지 않을 수도 있습니다.



그럼 필터를 바꾸지 않고 해결할 수 있는 방법을 찾아봐야겠습니다.

VRay 랜더설정 창에서 Color mapping 롤아웃으로 갑니다.

우측의 sub-pixel mapping과 clamp output을 모두 체크합니다.


(그림5)


랜더링을 해 보았습니다. (그림5)

물론 필터는 기존의 Catmull-rom 필터입니다.

화이트도트가 사라졌습니다.

와~ 만세!!!



문제가 모두 해결되었을까요?


아래 correction 컨트롤 창을 다시 열어봅니다.(그림6)


(그림6)

히스토그램이 좀전과는 달리 0에서 1 사이에 모두 다 들어가 있습니다.

네. 아무리 밝은 부분을 클릭해서 픽셀정보를 살펴보아도 Float 값이 1.0을 넘어서지 않습니다.

맞습니다. 여러분이 clamp output을 체크했을 때 바로 옆에 clamp level 이란게 있다는 것을 눈치채셨을 겁니다.

분명 거기에 1.0이라고 적혀 있었고, 여러분은 그 값을 건드리지 않았을 것입니다.


이제 명확해 졌습니다. 여러분이 clamp level 을 1.0으로 놓고 clamp output을 체크했다면 이는

모든 색상의 최대값을 1.0으로 제한하고 그 보다 밝은 값을 갖는 픽셀은 잘라내어서 1.0으로 맞추겠다는 얘기가 됩니다.


아래 이미지는 위와 같이 clamp output을 체크하지 않았을 경우에 clamp된 부분을 보여줍니다.(그림7)


(그림7)

흰색으로 보이는 부분은 모두 float 값이 1.0을 넘어서는 부분을 나타냅니다.

여러분이 Vray Frame Buffer(VFB) 창을 열었을 때 하단의 아이콘을 보시면 두번째 아이콘이 기본적으로 클릭이 되어 있는 것을 볼 수 있습니다.

이 버튼의 이름은 Force color clamping 으로서 강제로 화면에 표시할 수 있는 최대밝기는 255,255,255 값으로

clamp시킨 상태의 이미지로 보이게끔 해 주는 역할을 합니다.


clamp level을 1.0으로 제한하고 랜더링 했을 때는 이 버튼을 누르건 안누르건 아무 변화가 없습니다.

하지만 clamp level을 1.0보다 높은 값으로 제한하거나, 혹은 이 옵션을 사용하지 않았을 경우는 아래와 같이 보이게 됩니다.


(그림8)


자 그럼 우리는 Clamp output을 체크함으로써 화이트 도트를 해결하였습니다.

그럼 항상 이 옵션을 켜고 사용하면 될까요?




아래 이미지를 다시 봅니다.(그림9)

큰 주전자 옆의 작은 주전자는 VraylightMtl을 사용한 것으로 자체발광을 하고 있습니다. 연한 푸른색을 지정하였고 세기는 200을 줬습니다.


(그림9)

앞에서 했던대로 Clamp level 을 1.0으로 설정하고(사실 기본값을 그대로 둔다고 봐야겠죠)

Clamp output 을 체크한 상태로 랜더링 했습니다. 히스토그램이 0에서 1까지 범위에 있군요.


이제 VFB의 Exposure correction 아이콘 (하단 우측에서 3번째 조리개모양 아이콘) 을 누른다음 컨트롤 창의 맨 위에

삼각형 슬라이더를 왼쪽으로 옮겨봅니다.   -0.55까지 낮춰보았습니다.(그림10)


(그림10)

노출값을 조절했기 때문에 이미지의 전체적인 밝기가 어두워졌습니다.

근데 발광하는 주전자 역시 빛을 잃어서 탁한 느낌이 나는군요. 빛을 내는 것 같지 않아 보입니다.

노출값을 더 어둡게 하면 더욱 이상해 보입니다.




이번에는 clamp level을 3.0을 지정하고 랜더링 해보겠습니다.(그림11)


(그림11)

1.0으로 clamp했을때와 별 차이 없이 밝은 푸른빛을 내는 주전자가 랜더링 되었습니다.

물론 히스토그램에는 3.0까지의 범위가 나오고 그 이상의 밝기는 3.0까지 clamp 되었습니다.




이제 익스포져 컨트롤을 이용해서 노출값을 조절해 보았습니다. 역시 -0.55 로 낮췄습니다.(그림12)


(그림12)

네. 밝은 푸른빛의 주전자가 여전히 밝게 빛을 내고 있네요. 카메라 노출값이 낮아졌으므로 원래의 밝은 파란색이

더 잘 보이게 되었습니다.




결론입니다.

우리는 화이트도트를 없애기 위해 컬러클램핑을 사용하여 간단히 해결을 했습니다.

하지만 clamp output을 사용하는 경우에는 고유의 색과 밝기를 잃어버리게 됩니다.

물론 랜더링 이미지를 그대로 사용하는 경우에는 아무 상관이 없습니다.

하지만 32bit floating포맷인 EXR이나 HDR로 저장을 한 다음 이를 포토샵이나 에프터이펙트 등의 툴에서 색보정을 하려면

클램핑 된 색상으로 인해 조명과 같은 밝은 물체는 빛을 잃어서 탁한색으로 바뀌어버리게 됩니다.


예전의 Vray버전에는 clamp level을 조절하는 기능이 없었습니다.

하지만 최근의 버전에는 이 값을 조절하는 기능이 있기 때문에 1.0이 아닌 좀 더 높은 값을 사용하여 클램프 시켜서

후보정시에 좀 더 유연성을 줄 수 있게 됩니다.



이상으로 VFB와 color clamping 을 사용한 화이트도트 처리법을 살펴보았습니다.