Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

테드옹의 VFX

만트라 렌더링 필기 본문

Houdini

만트라 렌더링 필기

Tedd_Kim 2021. 10. 16. 11:36

렌더 엔진을 사용하면서 항상 헷갈렸던 부분에 대한 필기, 복기

보통의 경우엔 principal shader를 쓰고 표면하산란이나 refraction roughness같은 옵션을 컨트롤하고 싶은 특수한 경우에 classic shader를 사용하는 것을 추천(한다고 sideFX가 써놨다) 

 

[약자]

Of : opacity (Surface opacity) 

Cf : color (Surface color)

Af : Alpha (pixel tranparency)

Cl : light color

F : surface BSDF

BSDF : Bidirectional Scattering Distribution Function(양방향 산란 분포 함수)

 

 

항상 유념해야할 요소는 4가지 있다

diffuse rays, reflect rays, refract rays, volumetric rays

 

헷갈리지 말아야할 것 2가지

[primary rays, secondary rays] 와 [direct rays, indirect rays]

- PBR렌더링에서 광원이 물체에 닿았을 때, 오브젝트가 가진 surface BSDF에 의거하여 secondary rays를 보낸다(reflection)

무한히 반사하는것을 방지하기 위한 파라미터가 reflect limit이다

 

[Sampling parameters]

- diffiuse quality

오직 indirect diffuse sampling에만 관여한다

다른 물체에서부터 반사되어 오는, 혹은 볼륨 내에서 빛의 산란같은 간접광에서의 노이즈 감소를 기대할 수 있다

 

이 수치는 min ray sample, max ray sample, noise level의 스칼라곱으로 작용한다

예를 들어, 세 수치가 1, 8, 0.1이고 diffuse quality가 2라면 만트라는 indirect diffuse sample에 한해서 2, 16개의 secondray diffuse 광선과 0.05의 noise level을 적용할 것이다

 

indirect lighting을 extra image planes로 보내면서 작업을 하면 어느 부분에서 노이즈가 생기는지 알 수 있을 것

 

- reflection quality, refractin quality 

diffuse quality와 같이 indirect reflection, refraction에만 적용된다

 

- volume step rate

볼륨 렌더에 대한 퀄리티를 향상시킨다.

0.25의 값은 voxel의 1/4만 계산하는 원리랑 비슷하기 때문에, 1로 올려버리면 voxel의 값을 온전하게 샘플링하는 것

1이상의 값은 유의미한 차이를 기대하기 힘들고, 이것을 올리면 렌더타임이 엄청나게 늘어날 수 있다

 

[Limit parameters]

- reflect limit

"Hall of mirrors"상황을 연상하면 편함 (나중에 직접 한번 해보자)

 

첫번째 광선이 오브젝트에 반사된 경우에, 그것은 direct reflection으로 계산되기 때문에

reflect limit을 0으로 설정한다고 한들 specular reflection이 보이긴 할 것이다.

이 설명으로 미루어 보아 이것도 역시 indirect reflection 횟수에 관한 옵션일듯

 

대부분의 경우에 이 효과는 굉장히 미미하기 때문에 어느정도 수치를 낮춰도 될 것 같다

 

- refract limit

굴절에 관한 포인트는

"이 물체를 뚫고 다른 것을 볼 수 있는가?"이다. (따라서, 불투명한 물체는 refraction수치가 필요 없다)

 

만약 refract shader를 가지고 있는 투명한 물체의 안에 있는 오브젝트를 렌더링 할 때

refract limit이 부족하면 안쪽에 있는 물체는 검정색으로 보일 것이다.

만약 5의 수치를 가지고 있다면, 이 광선은 물체의 표면을 5번 뚫고 갈 수 있는 것이다. (reflection은 반사시키는 것임을 기억)

 

하지만 reflection과 마찬가지로 대부분의 경우에서 효과가 미미하기 때문에 어느정도 수치를 낮춰도 될 것 같다

 

- diffuse limit

뭔가 굉장히 검정색이다 -> diffuse limit을 올리자

이 수치는 global illumination으로 작용한다. 그리하여 수치가 올라갈수록 광원뿐만 아니라 다른 오브젝트에서 반사된 간접광역시 계산한다. 따라서, 현실적인 신을 렌더링 하고싶을 때 올려야할 수치, 그러나 렌더타임이 매우 길어질 수 있다

 

4이상의 수치에서는 유의미한 기대를 하기 힘들다.

 

- volume limit

볼륨에서의 diffuse limit같은 수치, 광원에서 멀리 떨어진 볼륨을 밝혀줄 수 있다.

볼륨이 다른 물체에서의 간접광을 받기 위해서는 이 수치가 1이상으로 올라가야한다.

빛의 산란과 같은 효과를 기대할 수 있다

 

- color limit

간접광 빛의 세기를 조절한다 

반딫불이효과를 해결하는데 좋지만, 간접광 위주로 이루어진 장면에서는 전반적인 휘도가 낮아질 수 있다 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

만트라의 렌더 과정

 

1. tile

2. load geo (abc, bgeo...)

3. displacement 

4. renderable check

5. opacity shading

6. PBR or micropolygon render

  - pbr pixel sample은 5x5, 6x6나 디테일이 많이 필요한 displacement 혹은 texture의 경우 12x12(사실상 상한선)까지도 사용함

 

- displacement bound

clipping을 방지하는 선에서 가능한 작은 값을 이용할 것, bound가 존재하지 않으면 Clipping이 일어남

- sampling이란?

카메라 위치에서 광선을 쏘아서 물체의 표면을 맞춘 후 가지고 온 정보(색깔 등등..)를 추합하는 것

- primaray rays vs. secondary rays

오브젝트의 shape과 대략적인 정보를 수집하는 것은 primary ray가 한다

그 외 라이팅, 반사, 굴절등의 계산은 seconday ray가 한다.

 

하나의 primaray ray당 "적어도" 하나 이상의 secondary ray가 발생한다

seconday ray는 direct와 indirect로 나누어진다

 

즉, primaray ray에서 secondary ray가 발생하고, 이것이 direct와 indirect로 나누어지는 것

primary ray와 secondary ray의 출발점은 같다. 다만 하는 역할이 다를 뿐

 

primaray ray의 숫자는 픽셀 샘플이 5x5라면 픽셀당 25개이다.

 

- pixel sample 3x3, 5x5같은 것은 per pixel이다

예를 들어 1280x720화면에 n개의 픽셀이 있다면, 전체적으로는 nx5x5개의 픽셀로 화면을 구성하는것

 

- min ray sample, max ray sample

이 둘은 Primary ray가 아니라 필요한 "secondary ray"의 하한과 상한선이다

 

- opacity랑 tranceprency는 다르다

opacity는 높아도 반사,굴절을 하지만 alpha는 낮으면 아예 안보이고 없어지는 것이다

 

- PBR렌더링은 오브젝트 표면의 BSDF(확률적)에 의거하여 광선을 보내기 때문에, 필연적으로 노이즈라는 부산물이 생긴다

이 현상은 저화질에서 더 두드러지므로 테스트 렌더로만 디노이즈를 판단할 수 없음

따라서 pixel sample을 오브젝트가 정확히 렌더링될 시점까지 올려서 1차적으로 노이즈 문제를 해결한 후, 그 다음 방법으로 noise level을 건드려야함 (노이즈 잡겠다고 pixel sample만 무작정 올리면 모든 렌더링요소들이 느려짐)

 

- 너무 쨍한 반점들이 보이면 color limit을 낮춰야함(diffuse limit아님)

 

- 오브젝트 단위로 렌더 property를 설정하여 히어로 오브젝트 등에 더 낮은 노이즈레벨값을 줄 수 있음 

https://www.sidefx.com/docs/houdini/props/index.html

 

[나중에 해볼 것]

볼륨을 PBR과 micropolygon으로 렌더링했을 때 각각의 퀄리티와 시간차이 테스트

https://www.sidefx.com/docs/houdini/render/volumes.html  

렌더링 팁과 트릭 https://www.sidefx.com/docs/houdini/render/quality.html#noise 

 

Render quality and speed

The parameters on the mantra node’s Rendering ▸ Sampling sub-tab are the most important for increasing quality (or decreasing quality to speed up rendering). The Rendering ▸ Sampling ▸ Pixel samples property is the global baseline quality control f

www.sidefx.com

볼륨 렌더링 https://www.sidefx.com/docs/houdini/render/volumes.html

'Houdini' 카테고리의 다른 글

Particle simulation  (0) 2021.10.23
pyro simulation 정리  (0) 2021.10.19
[예술 속의 과학] 서적 필기  (0) 2021.10.17
Ocean render  (1) 2021.10.16
Houdini 필기  (0) 2021.08.10