[번역] Unbiased 렌더링에 대한 진실
포스트 날짜 : 2016.09.29 원문 출처 : https://labs.chaosgroup.com/index.php/rendering-rd/the-truth-about-unbiased-rendering/ 번역 : GunSik Kim /kgs716@naver.com
[역자] 작년에 카오스그룹 블로그에 올라온 biased 와 unbiased 렌더링 방법에 관한 짧은 글을 번역해보았습니다. 오역과 의역이 있을 수 있습니다. 참고로 biased 렌더링이란 기본적인 ray tracing 기법 위에 여러가지 숏컷이나 트릭들을 얹어 렌더링 속도를 최적화하는 방법을 말합니다. 멘탈레이의 GI나 Finalgather, V-Ray 의 caustic 옵션, max ray intensity, 여러가지 GI 방법, sss의 prepass같은 편법들이 실제 렌더링 속도를 향상시키기 위해 개발된 옵션들입니다. 이런 방법들은 실제로 ray들을 있는 그대로 tracing 하는것보다 물리적으로 덜 정확한 이미지를 만들어내지만 속도가 빠르기때문에 대부분 렌더엔진에 그 기능들이 포함되어 있지요. 반면에 우리가 알고 있는 path tracing 엔진들, 대표적으로 아놀드나 맥스웰같은 렌더러들이 unbiased 렌더러를 표방하고 있는데요, 이 글을 쓴 사람 의견에 비춘다면 얘네들도 다 biased 렌더 엔진이 되겠네요.
-------------------------------------------------------------------------------------------------------------------
지난 몇년간 biased 렌더링이 더 좋은가 아니면 unbiased 렌더링이 더 좋은가에 대한 많은 토론이 있었습니다. "unbiased"라는 말은 더 렌더링이 (물리적으로) 더 정확함을 의미합니다. 하지만 Unbiased라고 주장하는렌더러들을 포함해서 거의 모든 렌더러가 어느정도는 biased 한 면을 가지고 있습니다. Biased 솔루션이 더 빠르고, 영리한 방법으로 렌더링을 하기 때문이죠. 그렇다고 해서 Biased 가 꼭 물리적으로 정확하지 않을 필요도 없고요. 이것들을 이해하기 위해서 제가 조금 더 부연설명을 해드리겠습니다.
Unbiased란 무슨뜻일까?
Unbiased 라는 말은 기본적으로 아무런 편법이 없는 렌더 계산방식 입니다. 모든 Ray들이 그 중요성과는 상관없이 똑같이 취급됩니다. 이 때문에, 깨끗한 결과를 얻기위해선 엄청나게 많은 ray들이 필요하죠. 카오스 그룹의 온라인 포룸에서 Vlado라는 사람이 이 unbiased rendering 에 관한 좋은 설명을 해주었습니다.
"이론적으로, unbiased 방식의 렌더링 계산은, 만약 당신이 똑같은 입력값 (3D scene)을 넣는다면 개별적 결과값은 정확하지 않지만 (역: 노이즈 같은것들) 렌더러는 계속해서 이 값들을 종합해 평균을 내고 이로인해 정확한 결과 (역: 렌더링 완료된 이미지)를 얻어냅니다. V-Ray 의 Progressive 모드를 생각하시면 이해가 빠를겁니다. Progressive 샘플러가 노이즈를 없애는 과정을 보면 각각의 패스들은 노이즈가 많지만 이것들이 계속 쌓이고 평균값을 내면 깨끗하고 정확한 이미지를 얻을 수 있죠."
이쯤에서 당신이 Progressive 렌더링이 unbiased 라고 생각할수도 있지만 그건 아닙니다. 여러가지 biased 솔루션을 사용하고도 progressive path tracer 가 될 수는 있으니까요. 이런 최적화들은 사용자들을 위해 셋팅에 있을수도 있고, 아예 숨겨져 있을 수도 있습니다. 만약 raytracer가 빠르다면 biased일 확률이 높습니다. 얼마나 biased 한지는 raytracer를 만드는 개발자나 사용자의 셋팅에 따라서 달라집니다. 만일 raytracer가 많은 biased 셋팅들을 켜고 끌 수 있게 사용자들에게 노출시켜 놨다면 사용자들은 그런 옵션들이 어떤 효과가 있는지 알 필요가 있겠죠.
Unbiased 렌더링에 대한 오해
여기 unbiased 렌더링에 대한 가장 일반적인 오해들을 모아봤습니다. :
Unbiased는 물리적으로 정확하다 - Unbiased 렌더링이 물리적으로 정확하다거나 biased가 그 반대일거라는 생각은 틀렸습니다. 둘다 정확하지 않아요. Blin이나 GGX같은 BRDF 쉐이딩 모델을 쓴다는건 실제 재질에 대한 근사값을 구하는것 뿐입니다. 진짜 중요한것은 어떤게 더 물리적으로 그럴듯하면서 빠른가 입니다. 밑에서 더 설명하겠습니다. Unbiased는 셋팅을 덜해도 된다 (쉽다) - 셋팅이 적다고해서 렌더링이 unbiased가 되는것은 아닙니다. biased한 셋팅들이 렌더러 내에 이미 들어있거나 유저들에게 노출되지 않았을 뿐이죠. Brute Force GI = Unbiased - 많은 사람들이 GI를 특정한 방법으로 계산하거나 캐쉬 데이터를 가져다 쓴다면 biased렌더러라고 생각합니다. 캐쉬된 GI데이터를 쓰는건 biased가 맞지만 brute force GI도 역시 biased가 될 수 있습니다. Path tracing is unbiased - 많은 biased 성질들이 path tracer에도 내장되어 있습니다. 이것도 사실이 아니죠.
어떤것들이 렌더러를 biased로 만드는가?
이쯤에서 당신은 어떻게 unbiased 가 biased로 되는지 궁금하실지도 모르겠습니다. 그리고 앞에서 말한 어떤 숏컷들이 그런일을 하는지도요. 여기엔 많은 공통된 트릭이 있습니다. 이중 몇가지는 V-Ray에서 셋팅을 통해 유저들에게 선택할 수 있게 해 놓은것도 있지요. 다른 렌더 엔진들은 안그런 경우도 있습니다. 이건 인터페이스를 간편하게 하기 위해서일수도 있고 사용자로 하여금 렌더러를 unbiased라고 믿게 할려는 수작일수도 있습니다. 여기 렌더 엔진을 biased로 만드는 몇가지 셋팅의 예를 들어보겠습니다.
Light의 튕기는 정도를 정의하는것 - unbiased는 ray가 씬밖으로 나가거나 완전히 흡수되지 않는 한 계속해서 튕길겁니다. 캐쉬를 쓰는것 - GI나 커스틱같은곳에 캐쉬를 이용한 보간법은 더 많은 light bounce를 위한 biased 솔루션입니다. Adaptive Sampling - 더 중요한곳에 더 많은 ray를 쓰는것입니다. 예를들면 light 이 들어간곳이나 GI가 많이 들어간곳이 되겠죠. (역: 혹은 high contrast가 있는곳이나 blurry reflection 이 많이 들어간 곳도 다른곳에 비해 ray를 더 많이 사용하게 됩니다.) Caustic ray를 줄이거나 없애는것 - 커스틱 계산은 느리기때문에 보통 렌더엔진들에서 제공하는 옵션입니다. firefly (역 : 높은 intensity를 가진 ray들 때문에 생기는 반짝거리는 노이즈 현상) 를 없애기 위한 ray intensity 자르기 (clamping) - glossy reflection ray들이 랜덤하게 밝은 광원과 닿았을때 생기는 부작용을 없애기 위한 일반적인 트릭입니다. secondary ray의 밝기를 임의로 조절함으로써 이 현상을 줄일 수 있습니다. 모든 clamping 이나 한계값 설정은 biased 한 속성입니다. 이런 테크닉은 렌더링 속도를 향상시키죠.
어떤게 맞나? biased? 아니면 unbiased?
이런 트릭들을 사용한다고 해서 꼭 biased 솔루션이 물리적으로 정확하지 않다는건 아닙니다. 여기 Vlado의 말을 다시 한번 빌리자면 :
"전 최근에 사람들이 'unbiased' 라는 것이 '물리적으로 정확함'인줄 알거나 그 반대로 'biased'가 물리적으로 어느정도 부정확하다는 추측을 한다는 것에 대해 꽤나 놀랐습니다. 사실 이 두 단어의 관계는 과학분야에서의 말하는 정밀도(precision)와 정확도(accuracy)정도가 됩니다. (역: 그렇다면 렌더링에서 이야기하는 정확도(accuracy)는 이미지가 얼마나 현실과 가까운지가 되겠고 정밀도(precision)는 3d input 에서 얼만큼 오차가 없는 값이 출력되는가 하는 것(노이즈)이될 것 같네요. Unbiased 계산은 정밀도가 높지만, 그것이 정확도가 높다는 말은 아닙니다. (실제 대상과 얼마나 비슷한가). 반대도 마찬가지 입니다. biased라도 정확도가 높을 수 있지요. (실제 대상과 가까운것) 하지만 biased는 일반적으로 그렇진 않습니다."
그래서 biased렌더링 역시 물리적으로 정확 할 수 있을 뿐만 아니라 대부분의 경우에는 그렇게 작동하며 결과를 출력합니다. 만약 가능한한 가장 빠른방법으로 물리적으로 정확한 이미지를 얻고 싶다면 biased가 맞는 방법입니다. 만약 가능한한 모든 ray들을 계산하고 싶다면 unbiased가 답이고요.
어떤게 더 나은가? Biased? 아니면 unbiased?
unbiased라고 자칭하는 렌더러들을 포함해 대부분의 렌더러들은 자신들을 biased로 만들만한 솔루션을 가지고 있습니다. 그렇지 않다면 엄청나게 느리겠지요. Biased 엔진은 굉장히 똑똑해서, 가장 효율적으로 정확한 이미지를 만들어냅니다. 대부분의 unbiased 렌더러들을 비효율적이라고 부를 수 있을만큼이요.
좋아, 전부다 biased라면, 난 렌더 셋팅을 좀 덜하고싶어.
당신은 렌더엔진이 어느정도 biased한지 결정하는 셋팅을 노출시킬 수도 있고 숨길 수도 있습니다. V-Ray가 셋팅이 더 많은건, 많은 사용자들은 각각 다른걸 원할 수도 있기 때문입니다. 우리는 지난 몇번의 버전업동안 점점 시작과 동시에 보이는 셋팅들을 줄여왔습니다. 많은 V-Ray의 셋팅들이 "advanced"나 "expert"모드로 놓아야 보이는것들이 이때문이지요. 또 우리는 V-Ray에 사용자로 하여금 버튼을 한두번만 눌러도 되게끔, 손이 덜가게 만들고 싶었습니다.
최근 출시된 V-Ray는, 최초의 셋팅이 대부분의 유저 셋팅을 무시하게끔 되어 있습니다. (라이트나 메터리얼에 있는 subdiv 값들) 이건(종전에 있던 subdiv값들) 렌더링을 느리게 만들수도 있죠. 하지만 대부분의 사용자들은 옛날 작업파일을 열어 렌더해보면 엄청나게 빨라졌다는걸 느낄 수 있을겁니다. 이건 V-Ray자체의 성능이 좋아졌기 때문이기도 하지만, 이전에 있던 셋팅값들을 무시하기때문에 그렇습니다. 좋은점은, V-Ray셋팅은 단 3가지 만으로 컨트롤 가능하다는 점입니다. Vlado가 만든 아래의 영상이 더 적은 컨트롤로 더 빠른 렌더를 하기 위한 일반적인 셋팅을 설명해줍니다.
사실, 여기서 Vlado 가 사용한 셋팅은 우리의 기본 셋팅으로 되어 있기때문에, 사용자들은 까다로운 설정 없이 기본 셋팅만으로 좋은 이미지를 얻을 수 있는거죠.
결론 : Biased 솔루션은 잘 작동합니다. 그래서 다 사용하죠! 다시, 똑똑한 존 카맥(역: Doom, Quake 시리즈로 유명한 id소프트를 공동설립한 인물. 1인칭 슈팅게임의 아버지)의 말을 인용하고 싶네요. '최적화'라는 말을 bias로만 바꿔서 읽어보세요. "최근 많은 노력들이 진행되고 있는데, 어떻게 path tracing을 최적화 하여 더 효율적으로 만드느냐 하는것이 지금 그래픽 렌더링의 현 주소입니다. 그것들은 언제나 당신이 하고자 하는것의 추측값일 뿐입니다. 하지만 그게 꽤 효과적이죠."
(존 카맥의 Principles of Lighting and Rendering at QuakeCon 2013)