Page 1
PHYSICALLY BASED RENDERING
인성민 × shader studycafe.naver.com/shader
Page 2
한번쯤 다시 보는 라이팅
발표자
프레젠테이션 노트
PBR을 WebGL로 구현해보고 난 뒤의 삽질기
Page 14
출처: http://www.marmoset.co/toolbag/learn/pbr-practice
diffuse
normal
Page 15
출처: http://www.marmoset.co/toolbag/learn/pbr-practice
glossiness
specular color
Page 16
출처: http://www.marmoset.co/toolbag/learn/pbr-practice
ambient occlusion cavity
발표자
프레젠테이션 노트
여기서는 AO맵을 분리하였지만, 예전과 같이 diffuse에 합쳐도 무방. PBR기반에서는 diffuse 맵에서 AO 요소를 제거해야 한다는 글도 많이 보이지만, 이는 PBR로 넘어와서 분리된 사항은 아닌 것으로 생각됨. 다만 근래의 게임들에서는 diffuse에서 AO로 인한 그림자들을 모두 제거하여 flat하게 만드는 것이 특징인데, 이는 위와 같이 별도의 AO맵을 만들어서 사용하거나 SSAO와 같이 별도의 AO 패스를 돌리기 때문인 것으로 추측됨 cavity 맵은 새로이 생긴 개념임
Page 23
출처: http://www.marmoset.co/toolbag/learn/pbr-practice
albedo
normal
발표자
프레젠테이션 노트
diffuse 맵은 albedo 맵이라고도 종종 부름
Page 24
출처: http://www.marmoset.co/toolbag/learn/pbr-practice
microsurface
reflectivity
발표자
프레젠테이션 노트
glossiness 맵은 microsurface 맵이라고도 하며, 값이 1 – glossiness를 취해서 roughness 맵이라고 하는 곳도 있음. 즉, glossiness는 표면의 매끈한 정도. 0이면 거친 것이고, 1이면 매끈한 것임 roughness는 표면의 거친 정도. 0이면 매끈한 것이고, 1이면 거친 것임 specular color는 reflectivity라고도 하며 후에 나올 f0의 값을 저장하는 텍스처임
Page 26
범인은 디즈니 BRDF
발표자
프레젠테이션 노트
처음 언급되었는지는 확실치 않지만, 유명해진 것은 아마도 디즈니의 발표 이후인듯
Page 27
Cook-Torrance BRDF
발표자
프레젠테이션 노트
디즈니에서 C.T BRDF를 기반으로 자신들만의 BRDF를 만들고 싶어했음 그래서 C.T BRDF의 핵심인 Microfacet BRDF를 기반으로 실제 데이터를 끼워맞추기 시작함.
Page 28
MERL 100
발표자
프레젠테이션 노트
이때 사용한 데이터가 MERL 100임 MERL 100은 미쯔비시에서 “실제 관측한” 값들을 DB화 시킨 것임
Page 29
발표자
프레젠테이션 노트
theta_h, theta_d, phi_d의 3방향 90, 90, 180도에서 관측한 결과를 저장한 데이터베이스. Cubemap이라고 생각하면 편함. 위의 사진은 phi_d = 90도일 때 x축으로 theta_h, y축으로 theta_d일때의 데이터의 모습.
Page 30
출처: SIGGRAPH 2012 PBR Course. “Physically-Based Shading at Disney” course note
발표자
프레젠테이션 노트
phi_d가 90도일때 가장 의미 있는 값들이 보이기 때문에 90도일 때의 단면을 보여준다고 함 단면을 살펴보면 프레넬, 스페큘러, 디퓨즈의 특징을 다음과 같은 위치 등에서 찾을 수 있음
Page 31
1의 베이스 컬러, 10개의 스칼라
발표자
프레젠테이션 노트
디즈니는 실측한 데이터를 기반으로 C.T BRDF를 수정하여 최종적으로 1개의 base color, 10개의 스칼라로 조정 가능한 BRDF 모델을 만들어냈음
Page 32
출처: SIGGRAPH 2012 PBR Course. “Physically-Based Shading at Disney” course note
발표자
프레젠테이션 노트
그중에 하나가 metallic임
Page 33
요즘 게임에서 사용하는 PBR의 모태
발표자
프레젠테이션 노트
가 아닐까 조심스럽게 추측해봄
Page 34
라이팅
발표자
프레젠테이션 노트
다시 라이팅 얘기로 넘어와서 PBR 라이팅은 결국 직접 확산광 + 직접 반사광 + 간접 확산광 + 간접 반사광의 합으로 계산됨
Page 35
DIRECTIONAL LIGHTS직접광
Page 36
DIRECT DIFFUSE직접 확산광
Page 37
𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝜋𝜋
𝑐𝑐𝑑𝑑𝑑𝑑𝑑𝑑(𝑛𝑛 � 𝑎𝑎)
Page 38
texture2D(albedo, uv) * L_dir * dot(n, l) * AO * cavity / PI;
Page 39
DIRECT SPECULAR직접 반사광
Page 40
D법선 분포항
발표자
프레젠테이션 노트
Normal Distribution Function, 줄여서 NDF라고도 부름.
Page 41
D(𝑛𝑛𝑛)(이론상) 주요 성분
발표자
프레젠테이션 노트
이론상 NDF는 microfacet 노멀 n’ 방향으로 microfacet의 normal이 얼마나 분포되어 있는지를 나타내는 항임
Page 42
D(𝑛𝑛, ℎ, 𝑟𝑟)(구현상) 주요 성분
발표자
프레젠테이션 노트
보기에는 3차식으로 보이지만
Page 43
𝑛𝑛 � ℎ = 1
발표자
프레젠테이션 노트
dot(n, h)가 1이 되는 경우는 정반사가 일어날 경우만임
Page 44
𝑛𝑛 � ℎ = 1
발표자
프레젠테이션 노트
이 경우도 정반사가 일어날 조건이며 마찬가지로 dot(n, h)가 1임
Page 45
𝑛𝑛 � ℎ ≠ 1
발표자
프레젠테이션 노트
정반사가 일어나지 않을 조건에서는 dot(n, h)가 1이 아닌 값이 나옴
Page 47
D(𝑛𝑛 � ℎ, 𝑟𝑟)정반사 조건과 표면 거칠기의 상관관계
발표자
프레젠테이션 노트
사실 구현상으로는 dot(n, h)와 r의 2차식임
Page 48
beckmann blinn-phong GGX
발표자
프레젠테이션 노트
NDF로 많이 쓰이는 3가지 NDF의 contour 그래프 x축은 roughness이고, y축은 dot(n, h)임 빨간색은 0에 가까운 값이고, 밝은 베이지색으로 갈 수록 값이 커짐
Page 49
GGX
발표자
프레젠테이션 노트
가장 뭔가 있어 보이는 GGX를 예로 들어 자세히 설명
Page 50
GGX
발표자
프레젠테이션 노트
표면이 매끈할 경우 (r값이 낮을 경우) 법선 이외의 방향으로는 반사가 잘 되지 않고, 법선 방향 근처에서는 급격하게 반사가 일어남.
Page 51
GGX
발표자
프레젠테이션 노트
표면이 거칠 경우 (r값이 높을 경우) 법선의 방향과 관계없이 어느 정도의 반사가 발생함 (즉, 확산됨)
Page 52
GGX
발표자
프레젠테이션 노트
다르게 얘기하면 r값이 낮을수록 dot(n, h)의 변화에 민감해지고, r값이 높을수록 dot(n, h)의 변화에 둔해짐
Page 53
F반사항
발표자
프레젠테이션 노트
반사항은 Fresnel항이라고도 부름
Page 54
𝐹𝐹(𝑎𝑎,𝑛𝑛𝑛)(이론상) 주요 성분
Page 55
𝐹𝐹(𝐹𝐹0, 𝑎𝑎, ℎ)(구현상) 주요 성분
발표자
프레젠테이션 노트
가끔 구현한 코드들을 살펴보면 F0, l, h가 아닌 F0, v, h로 전달하는 경우가 있는데 상관없음. 여기서 l은 v로 바꿔도 동일함
Page 56
𝑎𝑎 � ℎ ≈ 0
발표자
프레젠테이션 노트
dot(n, h)가 1이 되는 경우는 정반사가 일어날 경우만임
Page 57
𝑎𝑎 � ℎ ≈ 1
발표자
프레젠테이션 노트
dot(n, h)가 1이 되는 경우는 정반사가 일어날 경우만임
Page 58
𝐹𝐹(𝐹𝐹0, 𝑎𝑎 � ℎ)반사 기저와 관찰자 기준 광원의 위치와의 상관관계
Page 59
schlick schlick (ver. UE4)
발표자
프레젠테이션 노트
여기서 빨갈수록 반사가 발생하지 않는 것이고, 밝은 베이지 색으로 갈 수록 반사가 발생하는 것임
Page 61
schlick
발표자
프레젠테이션 노트
기저값(F0)이 높다면 광원이 어디에 위치해있던지 간에 항상 반사함 금속의 경우 F0값이 높기 때문에 우리가 어느 방향을 바라보더라도 반사가 발생함
Page 62
schlick
발표자
프레젠테이션 노트
하지만 기저값이 낮은 경우 역광인 경우에만 반사가 발생함 비금속의 경우 기저값이 낮아서 일반적으로는 반사가 잘 발생하지 않지만, 역광의 경우에는 반사가 발생함. (Everything shines)
Page 64
𝐺𝐺(𝑎𝑎, 𝑣𝑣,𝑛𝑛𝑛)(이론상) 주요 성분
Page 65
𝐺𝐺(𝑎𝑎, 𝑣𝑣,𝑛𝑛, 𝑟𝑟)(구현상) 주요 성분
Page 66
𝑟𝑟 ≈ 0
발표자
프레젠테이션 노트
표면이 매끈하면 반사되었을 때 차폐가 덜 됨
Page 67
𝑟𝑟 ≈ 0
발표자
프레젠테이션 노트
특히 차폐는 위와 같은 상황에서 많이 발생하지만 위에선 발생하지 않았음
Page 68
𝑟𝑟 > 0
발표자
프레젠테이션 노트
표면이 거칠어도 정면에서 바라볼때는 차폐가 거의 발생하지 않음
Page 69
𝑟𝑟 > 0
발표자
프레젠테이션 노트
하지만 비스듬히 바라보면 차폐가 발생
Page 70
𝐺𝐺(𝑛𝑛 � 𝑣𝑣,𝑛𝑛 � 𝑎𝑎, 𝑟𝑟)시야-법선, 광원-법선과 표면 거칠기의 상관관계
Page 71
implicit schlick smith
발표자
프레젠테이션 노트
왼쪽의 그래프와 오른쪽의 2 그래프가 확연하게 달리 보이는 이유 왼쪽과 오른쪽의 두 그래프는 축이 서로 다름 오른쪽의 그래프가 반쪽 짜리이기 때문. 결국에는 왼쪽과 같은 형태가 됨
Page 73
schlick
발표자
프레젠테이션 노트
거칠지 않을 때에는 차폐가 되지 않음
Page 74
schlick
발표자
프레젠테이션 노트
하지만 거칠 경우에는 비스듬히 바라볼 수록 차폐가 많이 되며, 마주보고 바라보면 차폐가 발생하지 않음
Page 75
F(f0, n, l) * D(n, h, r) * V(n, v, l, r) * L_dir * cavity;
발표자
프레젠테이션 노트
G항에 1/(4 * dot(n, l) * dot(n, v))를 포함시켜 V항(Visibility)으로 부르기도 함
Page 76
AMBIENT LIGHTS주변광
Page 77
AMBIENT DIFFUSE주변 확산광
Page 78
𝐿𝐿𝑑𝑑𝑑𝑑𝑑𝑑𝑖𝑖𝑑𝑑𝑑𝑑𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝜋𝜋
𝑐𝑐𝑑𝑑𝑑𝑑𝑑𝑑(𝑛𝑛 � 𝑎𝑎)
Page 79
textureCube(irradiance, n) * texture2D(albedo, uv) * dot(n, l) / PI;
Page 80
AMBIENT SPECULAR주변 반사광
Page 81
textureCubeLod(radiance, reflect(v, l), idx) * C_dir;
발표자
프레젠테이션 노트
여기서 중요한 것은 idx 값은 roughness 값을 기반으로 구해지는 값임 또한 Radiance 맵은 단순히 lerp되어 밉매핑된 텍스처가 아님