본문 바로가기
Renderer/Vray

Vray Light 에서의 Affect Specular, Affect Reflections

by biped 2022. 5. 3.

 

다음 장면에서는 사각 라이트를 생성하고  사각 라이트에 맵(HDRI)을 적용했다.

사각 라이트에 Affect Reflections 체크 해지하여 거울에 사각 라이트 맵을 보이고 싶지 않을 경우의 예이다. 

 

 

사각 라이트 : Affect Reflections 체크 ,  거울의 재질:  Reflections glossiness value = 1

 

 

Test 1 ) 

사각라이트: Affect Reflections 체크 해지,  거울의 재질: Reflections glossiness value = 1

결과: 예상대로 HDRI 맵이 거울에서 사라졌다. (매끈한 재질에서는 광원이 정반사로 나타나기 때문이다.)

 

 

 

Test 2 )

사각 라이트: Affect Reflections 체크 해지,  거울의 재질 : Reflections glossiness value = 0.99

결과: HDRI의 콘트라스트가 높은 부분의  흔적이 보이지만 VrayReflections, VraySpecular 채널에는 사각 라이트가 보이지 않는다. 

( BRDF의 GGX 모드를 사용했을 때의 문제로 GTR tail falloff를 조정하거나 다른 모드로 사용하면  Test 3와 같이 동일하게 나옴. )

 

 

 

Test 3 )

사각 라이트: Affect Reflections 체크 해지,  거울의 재질:  Reflections glossiness value = 0.98

결과: 사각라이트의 HDRI 맵이 보이며  VrayReflections에는 알파가 나타나고 VraySpecular 채널에는 보인다.

( Test 1  처럼 작동하기 위해서는 Affect Specular도 함께 체크해지 한다. )

 

 

Vray Next 3.1 부터 변경된 부분이다. 광택(glossiness)에 영향을 받는다. 즉 표면 상태에 따라 달라진다.

Affect Reflections 옵션은 선명한 거울 반사 (매끄러운, glossiness value = 1 )가 있는 재질에만 영향이 적용되고 

Affect Specular 옵션은 흐릿한 반사 (거친 , glossiness value < 1 )가 있는 재질에만 영향이 적용된다. 

( 참고로 예전에는 glossiness= 1 인 완벽한 반사체는 현실에 없기 때문에 사실에 벗어난다고 해서 0.99까지 사용하기도 했다. )

열역학법칙과 관련하여 정반사(specular reflections) 와 확산반사 (diffuse reflections) 는 같은 반사로 보고 있으며 정반사(reflections)가  울통불통한 표면에 닿게 되면 광선이 튕겨져 산란되고 확산되어 보이기 때문이다. 

물리학 법칙에 따라  Vray Next 3.1부터는  반사유형이 재질의 상태에 따라 달라지게 되는 것이다,.

 

Vray 포럼 게시물에는 다음과 같은 내용이 있다.

“Affect specular” OFF in VRayLights now removes all reflections of the respective light. “Affect reflections” OFF now removes only the clear reflections (non-glossy) of the respective light.

- VRayLights에서 " Affect Specular " 끄기를 선택하면 이제 각 라이트의 모든 리플렉션이 제거됩니다. 이제 " Affect Reflections "을 끄면 각 라이트의 명확한 리플렉션(비광택)만 제거됩니다.

출처: https://forums.chaos.com/forum/v-ray-for-3ds-max-forums/v-ray-for-3ds-max-announcements/1056590-v-ray-next-update-3-hotfix-1-available-for-download-next-3-1

하지만 이 글은 오해가 있다, 테스트 결과로 봤을 때 “Affect specular” 만을 끄더라도 라이트의 모든 반사 (여기서 말하는 명확한 반사까지도 포함된다면)가 제거되지는 않는다.

 

 

< 정리 >

 

1.  매끄러운(Glossness) 표면의 반사는 정반사 (specular reflection) 이다.  

- Vray material의 Reflections glossiness value = 1 설정에 해당

- Vray Light의 Affect Reflections 옵션이 영향을 받는다.

 

 

2.  거친(Roughness)  표면의 반사는 난반사 (diffuse reflection)이다. 거칠어질수록 정반사 (specular reflection)가 줄어들면서 사라진다.

- Vray material의 Reflections glossiness value < 1 설정에 해당

- Vray Light의 Affect Reflections + Affect Specular 옵션이 영향을 받는다.

 

 

3. V-Ray Next 이후, reflection ( RGlossiness)  과  highlight ( HGlossiness) 별도로 제어할 수 없게 되었다. (다른 목적을 가진 두개의 라이트를 복사해서 사용하던가 ,  편법으로는 VrayBlendMaterial 이용해야 된다,)

 

- 반사로 나타나는 라이트 소스의 형태가 스캔라인 렌더러에서 처럼  Specular 과 Reflections  따로 나누어져 있어서 두가지를 같이 혼용하여 사용하는 것은 가짜(fake)이며,  현실세계에서는 라이트 소스의 뚜렷한 반사 (Specular highlight)는 흐릿한 반사(blurred Reflections) 별도로 나누어진 것이 아닌 같은 것으로 보기 때문에  현재 v-ray도 이를 따른다.

 

- Specular 채널은 라이트의 직접 반사(direct reflections)가 모두 포함된다. 

( 즉, 광원(Direct Light)에서 오는 Reflections +  Specular 가 모두 포함된다. )

 

- Reflection 채널은 모든 간접반사( Indirect Reflections)를 포함하고 재질에 반사 값 (reflection values)이 설정되지 않은 표면은 렌더링 요소에 정보가 없으므로 검은색으로 렌더링 된다. 

( VrayRawReflection는 반사되는 대상, VrayReflectionFilter는 반사 강도를 의미하며 이 둘을 곱하면 VrayReflection 채널이 된다.)

 

■  용어가 혼란스럽다.  기능상 아래와 같이 이해하면 된다. 

Affect Reflections =  Reflection = specular reflection (정반사, 뚜렷한 반사)

Affect Specular  = highlight = diffuse reflection (난반사, 블러링 반사)

 

 

참고: 

멘탈레이의 A&D 재질과 Highlights의 관계

https://3dsmaxman.tistory.com/127

 

Consistent lighting elements

https://blog.daum.net/3dsmaxman/434

 

Microfacet GTR (GGX)에서  GTR tail falloff 와 Glossiness의 값에 대한 변화

https://www.chaos.com/blog/improvements-to-the-gtr-brdf

 

VraySpecular Render Element

https://docs.chaos.com/display/VMAX/VRaySpecular

 

물리 기반 렌더링 (PBR)

https://namu.wiki/w/%EB%AC%BC%EB%A6%AC%20%EA%B8%B0%EB%B0%98%20%EB%A0%8C%EB%8D%94%EB%A7%81

 

정반사(specular reflection)와 난반사 (diffuse reflection)

https://www.physicsclassroom.com/class/refln/Lesson-1/Specular-vs-Diffuse-Reflection

https://lifeisforu.tistory.com/383

 

 

사용된 소스: https://www.hdri-hub.com/hdrishop/freesamples/freehdri

 

 

 

<추가>

1) invisible 체크 ,  Reflections glossiness value = 1 또는 0.98 

- 채널에 나타나는 반사 결과는 동일 하지만 VrayReflections 채널에는 알파가 안 나타남. (invisible은 알파 값 0과 동일하다 )

 

invisible : 일반적으로 오해하는 것이 라이트도 숨기고 그로 인해서 반사도 감춰지는 줄 알고 있지만 광원을 카메라 광선을 통해 볼 때 또는 굴절을 통해서 볼 때만 라이트가 보이지 않도록 하는 기능이며 (예를 들어 Dome을 배경으로 사용할 경우 Ray만 얻는데 사용할 수 있다.), 라이트 반사에는 효과를 내지 못한다.  또 해당 라이트에 가려져 다른 라이트가 차단되는 것을 방지하는데 이용하기도 한다. (Occlude other lights 체크 해지)

 

 

 

2) 라이트의  map 슬롯은 이미지의 알파 값으로부터도 영향을 받는다. 

Reflections glossiness value = 1 , 이미지 알파 값 0으로 인해서 VrayReflections 채널에도 알파가 안 나타남.

 

 

 

 

3) 거울 객체의  Vray properties에서 Reflection exclude를 사용하여 라이트 반사를 제거함. 

- 라이트는  옵션에서 해당이 안 되기 때문에  '제외 (exclude)' 옵션을 사용할 수 없다.  모든 오브젝트를 포함하고 'include'  옵션을 사용하면 라이트만 제외시킬 수 있는 꼼수가 있다.  다만  모든 라이트의 반사(Reflections)가 제거된다.  Specular는 예외

 

 

 

< 강제적으로 라이트를 Vray properties > Reflection exclude에 포함시키는 스크립트 >

 

참고 )

1. glossiness value = 1 인 재질이어야 함. (거울 같은 선명한 반사 상태)  1이하인 경우 라이트의 Specular로 나타나기 때문이다. 

2. 예시 두가지 스크립트가 일부 특정 버젼에서 버그가 있는지 작동하지 않는 것 같음. 과거 버젼에서 작동이 안되었던걸로 기억하는데 최근 Vray 6.X 버젼에서는 테스트에서는 작동한다.

3. Wrapper material 을 사용한 matte 오브젝트에는 작동이 안될 수 있다,

 

 

theLight = "VrayLight001"
vrayaddtracesets $
append (vraygettracesets $).reflect_exclude (getnodebyname theLight)

 

숨기고 싶은 라이트 명(예시..VrayLight001)만 바꾸어 주고, 거울(라이트의 반사를 숨기고 싶은 객체) 을 선택한 상태에서 위 스크립트 명령을 실행 하면 된다,

지우고 싶을 때는 거울의 Vray properties > Reflection exclude 옵션에 들어가서 등록되어 있는 라이트를 지우면 된다,

 

 

출처: https://forums.chaos.com/forum/v-ray-for-3ds-max-forums/v-ray-for-3ds-max-problems/66796-exclude-hdr-light-dome-reflection-from-the-vrayplane

----------------------------------------------------------------------------------------------------------

 

또 하나의 스크립트 

 

해당되는 오브젝트, 라이트 이름을 바꾸고 거울 오브젝트를 선택한 상태에서 스크립트 명령을 실행하면 된다.

 

m=vrayAddTraceSets $Plane002
m.reflect_exclude_type=0
m.reflect_exclude=#($VRayLight002)

 

 

showproperties m --------------------------------- Trace Sets의 사용 가능한 속성 출력

m=vrayAddTraceSets $ -----------라이트를 해당 객체의 Trace Sets에 추가. $를  $오브젝트 이름로 대체하면 된다.

m.reflect_exclude_type=0 -- -----------------------------------0 은 exclude; 1 은 include
m.reflect_exclude=#($VraySun001,$VrayLight001) ------괄호 안에 조명 이름 설정

 

 

 

출처:

https://forums.chaos.com/forum/v-ray-for-3ds-max-forums/v-ray-for-3ds-max-general/1045389-can-i-add-the-light-to-trace-set-in-vray-next

 

https://forums.chaos.com/forum/v-ray-for-3ds-max-forums/v-ray-for-3ds-max-problems/1034964-trace-sets-exclude-lights

 

 

 

 

 

 

 

댓글