Presentation is loading. Please wait.

Presentation is loading. Please wait.

Microfacet BRDF 이민웅 Shader Study Microfacet 마이크로패싯.

Similar presentations


Presentation on theme: "Microfacet BRDF 이민웅 Shader Study Microfacet 마이크로패싯."— Presentation transcript:

1 Microfacet BRDF 이민웅 Shader Study Microfacet 마이크로패싯

2 BRDF (양방향 반사분포함수) 불투명한 surface 에서의 반사율을 표현하기 위한 함수
 i 는 input 을 의미하고 o 는 output 을 의미 광원 함수는 들어 오는 빛 방향인   와, 나가는 빛 방향인   를 취하며, 둘 다 표면 법선인 n 에 상대적이다. 그리고 이 함수는   를 따라 나가면서  반사되는 표면상의 irradiance incident 에 대한   로부터의 복사열radiance 을 반환한다. 각 방향 w 는 자체적으로 azimuth angle 인  와 zenith angle 인   에 의해 매개변수화되어 있으며, 결국 BRDF 는 전체적으로 4 차 함수이다 카메라 출처 :

3 물리적으로 타당한 BRDF의 조건 Reciprocity (상반적): BRDF(f) 연산에서 입사광 방 향(l) 과 반사광 방향(r) 은 입사와 반사의 방향이 바뀌어도 그 결과가 동일하다. 예를 들어 f(l,r) = f(r,l) 에너지 보존:  반사광의 총 에너지는 입사광의 에 너지 과 같거나 작다 Reciprocity 레셋프라시티

4 물리적으로 타당한 BRDF의 조건 물리 기반의 specular BRDF 는 한 면이 각각의 normal(m)에 따라 한방향으로 만 반사되는 다수 의 극소면으로 구성 되어 있다는 극소면 이론 (micro-facet theory)을 기반으로 하고 있음 l 방향에서 들어온 빛은 시선 방향 v 로 반사 되며 극소면의 normal 인 m 은 l 과 v 의 half 백터와 동일하다

5 Microfacet BRDF Microfacets
임의의 크기와 각도를 가지면서 표면상에 불규칙하게 분 포하는 (가우시안 분포) 작고 평평한 거울집합 정반사 모델 : 일부 microfacet에서 빛이 직접 반사 → 램 버트의 법칙에 따라서 난반사 모델 : 여러 개의 facet들끼리 상호 반사 Microfacet 마이크로패싯 리얼타임랜더링 2nd 참고

6 Microfacet BRDF

7 Microfacet BRDF Fresnel Term Distribution Term
일반적인 Schlick approximation 을 사용 Fresnel (and the Schlick approximation) is originally defined for mirror reflections, and uses the angle between the light (or view) direction and surface normal. Distribution Term 분산 항은 주어진 방향 주변에 극소면 normal 이 어떻게 만들어지는지를 결정하는데 사용 Geometry Term (Visibility functions) Geometry 항은 한 극소면이 다른 극소면을 얼마나 가로 막는 가를 설명하는데 사용 Schlick 쉴리크 approximation 어프락시메이션 Fresnel 프레넬 Distribution 디스트리뷰선 프레 넬은 (그리고 Schlick의 근사치) 원래 거울 반사에 대해 정의된, 그리고 빛 (또는 뷰) 방향과 정상 표면 간의 각도를 사용합니다. The rest of the microfacet BRDF are factors that fall out of the derivation. The ‘4’ is related to transforming from the space of half-angle directions to other spaces, and the two clamped dot products are foreshortening factors that relate to the way that the visible area of microfacets change in relation to their orientation.

8 Beckmann Distribution function

9 Blinn-Phong Distribution function

10 No Fresnel “No Fresnel” uses the base reflectance (which for most materials is quite low) for all angles.

11 Correct Fresnel This version uses the correct (for highlights) “x=(l dot h)” term for the Shlick approximation. This is a very specific term – it only kicks in when both the view and lighting directions form large angles with the surface normal. So you can see that it brightens the reflections in a selective manner compared to “no Fresnel”.

12 Incorrect Fresnel Here highlight Fresnel uses the “x=(n dot v)” term, which is correct for mirror reflections but incorrect for point light highlights. This term is too non-specific, and brightens up the highlights all over the scene whenever the surface normal is glancing to the view direction. “No Fresnel” is actually closer to the correct image.

13 No Visibility function

14 Schlick-Smith Visibility function

15 Kelemen Visibility function

16 Cook-Torrance Visibility function

17 Schlick-Smith Visibility function

18 Kelemen Visibility function
Notice the problems due to lack of respect for roughness/gloss

19 float3 diffuse = saturate(. dot(. normal,. light_direction. ). )
float3 diffuse = saturate(?dot(?normal,?light_direction?)?) * light_colour; float3 diffuse = n_dot_l * light_colour; float3 specular = (PI / 4.0f) * specular_term * cosine_term * fresnel_term * visibility_term * light_colour; //Specular Term float normalisation_term = ( specular_power + 2.0f ) / 2.0f * PI; float blinn_phong = pow( n_dot_h, specular_power ); // n_dot_h is the saturated dot product of the normal and half vectors float specular_term = normalisation_term * blinn_phong; //Cosine Term float cosine_term = n_dot_l; //Fresnel Term float base = 1.0f - h_dot_l; // Dot product of half vector and light vector. No need to saturate as it can't go above 90 degrees float exponential = pow( base, 5.0f ); float fresnel_term = specular_colour + ( 1.0f - specular_colour ) * exponential; //Visibility Term float alpha = 1.0f / ( sqrt( PI_OVER_FOUR * specular_power + PI_OVER_TWO ) ); float visibility_term = ( n_dot_l * ( 1.0f - alpha ) + alpha ) * ( n_dot_v * ( 1.0f - alpha ) + alpha ); // Both dot products should be saturated visibility_term = 1.0f / visibility_term; //Performance/Quality Trade-off float3 slow_hardware_specular = specular_term * cosine_term * light_colour; float3 mid_hardware_specular = specular_term * cosine_term * fresnel_term * light_colour; float3 fast_hardware_specular = specular_term * cosine_term * fresnel_term * visibility_term * l

20 적용 된 후... 적용 전/후 물리적으로 타당한 BRDF 는 전통적인 라이팅 모델과 비교하여 표면에 다른 재질을 드러낸다

21 Reference 2/microfacet-brdf.html &logNo= der-code-for-physically-based-lighting/


Download ppt "Microfacet BRDF 이민웅 Shader Study Microfacet 마이크로패싯."

Similar presentations


Ads by Google