티스토리 뷰

Game/Graphics

Roughness and metalic

newpolaris 2018. 1. 25. 20:15

물리

https://computergraphics.stackexchange.com/questions/1513/how-physically-based-is-the-diffuse-and-specular-distinction

There's no such thing as a "specular color" There's no such thing as "diffuse reflection"

PBRT

BRDF의 경우 미세면 각각을 perfact specular 로 취급

투과하는 개체의 경우 BTDF 로 부터 계산 (fresnel에 의해 reflection 비율 결정)

fresnel을 정식으로 계산함

  1. dielectrics
  2. conductor
  3. semi-conductor

3번은 무시하고 1, 2번을 다루는데,

2번 즉 메탈류의 특징은

  1. complex-valued index of refraction. 프리넬 방정식이 복잡해짐.
  2. 안쪽으로 진행한(transmitted) 라이트는 급격하게 흡수되어버림, 그러므로 pbrt에서는 refract를 conductor에서는 무시함

그렇다고, Specular만 존재하는 BRDF만 PRBT에 존재하는 것은 아님,

Glossy layer가 있는 물체(polished wood, wall with glossy paint)의 경우,

FresnelBlend라는 BRDF로 부터 계산

FresnelBlend-PBRT

흔히 보던 diffuse + specular 형태임

먼저 diffuse

specular의 경우 아래와 같은 schlickFresnel을 사용

Diffuse

실제 F0의 값은 아래와 같이 차이남 (Reflect different wave lengths)

(Physically Based Rendering for Artists)

맨위의 링크에서는 아래와 같이 이야기함

The variation is relatively small for dielectrics

다른 링크의 좀더 자세한 글,

Metallic surfaces reflect most but not all of the spectrum of light that hits its surface, while absorbing the other visible wavelengths.
For this reason metals tend to reflect their own tinted version of reality, and the color it reflects is referred to as their Albedo.  

Metals also have a very high index of Reflectivity compared to non-metals.
A smooth gold surface will reflect the world around it with strong contrast, while a non-metal with the “same” smooth surface will only reflect a faint image.

(https://www.jeremyromanowski.com/blog/2015/11/20/lets-get-physical-part-1-of-3)

우선 위와 같이 되어있는데,

이걸 모델링을 어떻게 해야할까?

Disney

https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf

밑에 UE4, Frostbite 모두 disney를 따랐다고 하는데, 막상 해당 paper에서는 별 말이 없다.

5.3 Diffuse model details

몇몇 모델에서는 위와같은 diffuse를 쓰고, 물리적으로 옳은건 렌더링시 너무 어둡게 나온기에, 그래서 위와같은 emperical model을 사용하는데, 위의 값과 형태가 MERL data 와 비슷해서 쓴다고 함

baseColor - the surface color, usually supplied by texture maps.

UE4

https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf

f(l,v) = cdiff / PI

Where cdiff is the diffuse albedo of the material.

이유는 disney 거랑 (saw only minor differences compared to Lambertian diffuse) 차이가 없어서 (디즈니랑 말이 다르다)

뒤에선 baseColor 가 등장 - Single color. Easier concept to understand (same as Disney’s model)

내부적으론 멀한건지 모르겠지만, cdiff가 결국 baseColor가 되는것 같은데, fresnel term 도 없고;

FROSTBITE

https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf

Appendix D Optimization algorithm for converting to Disney’s parametrization

The Disney parameterization uses five independent scalar values (baseColor, metal, reflectance). 

The relationship between the two parameterizations is as follows:

2개 parameter를 3개로 바꾸는 법 - two color values (diffuse albedo and f0)

Defines the diffuse albedo for non-metallic objects and Fresnel reflectance at normal incidence (f0) for metallic ones, 
as suggested by Burley’s presentation. 
For metallic objects the lower part of this attribute defines a micro-specular occlusion.

at the interface of a metal and a dielectric, like metallic oxides.

For this reason, we support a “two- color” deferred base material with a colored f0 and a diffuse color

BGFX-Example.IBL

refl = mix(vec3(0.04), inAlbedo, inReflectivity);
vec3 albedo = inAlbedo * (1.0 - inReflectivity);
vec3 dirFresnel = calcFresnel(refl, hdotv, inGloss);

vec3 lambert = ubDiffuse  * calcLambert(albedo * (1.0 - dirFresnel), ndotl);
vec3 blinn   = ubSpecular * calcBlinn(dirFresnel, ndoth, ndotl, specPwr(inGloss));
vec3 direct  = (lambert + blinn)*clight;

대략,

inReflectivity가 metalness inGloss가 1-roughness

refl = mix(vec3(0.04), inAlbedo, inReflectivity);

대략, metal(거의 0/1이어야 한다)일 경우 inAlbedo를 메탈의 고유색처럼 사용하고 아닐경우 어두운 단색을 사용하는 것 같다. 이는 위의 dieletic에서 specular color가 회색이어서 그런 것 같은데 너무 어두운거 아닌가 싶다. 다음의 LearningOpenGL에서도 동일하게 등장함

아래 슬라이드에서는 아예 흰색으로 해두었다. 다만, 저 diffuse의 흰색은 어디서 온건지;

https://www.slideshare.net/Hybrid0/physically-based-rendering-51309337

vec3 albedo = inAlbedo * (1.0 - inReflectivity);
vec3 dirFresnel = calcFresnel(refl, hdotv, inGloss);
vec3 lambert = ubDiffuse  * calcLambert(albedo * (1.0 - dirFresnel), ndotl);

albedo에 inReflectivity를 곱한다. 이는 대략 LearningOpenGL에서는 non-metal이어야 diffuse light를 가진다고 주석에 써둠.

FrostBite와 유사한 term이다.

dirFresnel은 LearningOpenGL에서 enery conservation으로 보면 될듯;

대략 결과는,

에너지 보존 때문에 좁은 영역에 specular가 모이면 diffuse가 거의 사라진다

흔히 보는 거랑 차이가 나는데; 우선 indirect를 모두 없앴기 때문이기도 한듯;

다른 곳의 결과도 대략 비슷하다

http://brabl.com/energy-conservation/

http://www.rorydriscoll.com/2009/01/25/energy-conservation-in-games/

LerningOpenGL-PBR

https://learnopengl.com/PBR/Lighting

바로 IBL-Baker를 볼껄 이란 생각도 들지만; 한 김에 마무리하자

우선 Cook-Torrance, G:Schlick-GGX, D:GGX, F:Fresnel-sclick

diffuse를 microfacet specular와 맞추기 위해 pi로 나눴기 때문에 어둡다

(NOTE: base가 된 bgfx-ibl 이 gamma space로 다시 색 환원을 안하고 tone-mapping만 하는데, tone-mapping 안에 해당 기능이 포함되었는지 몰것다)

적당히 gamma를 올려주면,

F0 describes how much light is reflected if you look straight down into a pool of water

F0는 결국 Bgfx-ibl에서의 Refl 이고 거의 유사한 식을 가진다.

차이가 있다면 diffuse/PI 인데, 이건 specular가 Cook-Torrance로 바뀌면서 비율을 유지하기 위해서인듯?

(diffuse의 경우 hemisphere integral시 PI나오는데 specular는 1이 나온다)

F0에 대한 좀더 자세한 설명은 위의 Theory에 나와있었다.

For conductor surfaces (metals) calculating the base reflectivity
using their indices of refraction doesn't properly hold and we 
need to use a different Fresnel equation for conductors altogether. 

실제로 conductor는 허수의 IOR를 가짐

pre-computing the surface's response at normal incidence (F0)
interpolate this value based on the view angle as per the Fresnel-Schlick approximation 

그러니까 0도에서의 surface를 response를 F0로 두고 이걸 기존의 fresnel-schlick과 함께 사용한다는 것.

Albedo: the albedo texture specifies for each texel the color of the surface, 
or the base reflectivity if that texel is metallic

여기서 금속의 색이 보이게 되는 듯;

Diffuse textures often have slight shadows or darkened crevices inside the image 
which is something you don't want in an albedo texture; 
it should only contain the color (or refracted absorption coefficients) of 
the surface.

머; 여기서 빛 4개로 늘리면

위와 같이 되는데 웹의 결과와 다르다; 우선 ambient term 없고 gamma correction도 없긴 한데

여기에 texture를 입히면,

metallic 0.1

metallic 0.9

roughness 0.1

각각의 영향이 큰편임;

'Game > Graphics' 카테고리의 다른 글

IBL (4) specular optimization  (0) 2018.02.10
D,G,F  (0) 2018.01.29
IBL (3)  (0) 2018.01.01
번역서  (0) 2017.12.31
IBL (2)  (0) 2017.12.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크