physical based rendering in practice

82
PHYSICALLY BASED RENDERING 인성민 × shader study cafe.naver.com/shader

Upload: allen-in

Post on 20-Jun-2015

453 views

Category:

Technology


5 download

DESCRIPTION

PBR을 WebGL로 구현해보면서 경험한 삽질담 14/07/14 Shader study 발표 자료

TRANSCRIPT

Page 1: Physical based rendering in practice

PHYSICALLY BASED RENDERING

인성민 × shader studycafe.naver.com/shader

Page 2: Physical based rendering in practice

한번쯤 다시 보는 라이팅

발표자
프레젠테이션 노트
PBR을 WebGL로 구현해보고 난 뒤의 삽질기
Page 3: Physical based rendering in practice

이전에는…

Page 4: Physical based rendering in practice

확산

Page 5: Physical based rendering in practice

반사

Page 6: Physical based rendering in practice

라이팅

Page 7: Physical based rendering in practice

달라지는 라이팅

Page 8: Physical based rendering in practice

확산

Page 9: Physical based rendering in practice

(정) 반사

Page 10: Physical based rendering in practice

(확산 성질의) 반사

Page 11: Physical based rendering in practice

반사

Page 12: Physical based rendering in practice

라이팅

Page 13: Physical based rendering in practice

달라지는 텍스처

Page 14: Physical based rendering in practice

출처: http://www.marmoset.co/toolbag/learn/pbr-practice

diffuse

normal

Page 15: Physical based rendering in practice

출처: http://www.marmoset.co/toolbag/learn/pbr-practice

glossiness

specular color

Page 16: Physical based rendering in practice

출처: 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 17: Physical based rendering in practice

잠시만요…

Page 18: Physical based rendering in practice

잠시만요…

Page 19: Physical based rendering in practice

잠시만요…

Page 20: Physical based rendering in practice

잠시만요…

Page 21: Physical based rendering in practice

멘 to the 붕

Page 22: Physical based rendering in practice

이쯤에서 용어정리

Page 23: Physical based rendering in practice

출처: http://www.marmoset.co/toolbag/learn/pbr-practice

albedo

normal

발표자
프레젠테이션 노트
diffuse 맵은 albedo 맵이라고도 종종 부름
Page 24: Physical based rendering in practice

출처: 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 25: Physical based rendering in practice

그럼 metallic은?

Page 26: Physical based rendering in practice

범인은 디즈니 BRDF

발표자
프레젠테이션 노트
처음 언급되었는지는 확실치 않지만, 유명해진 것은 아마도 디즈니의 발표 이후인듯
Page 27: Physical based rendering in practice

Cook-Torrance BRDF

발표자
프레젠테이션 노트
디즈니에서 C.T BRDF를 기반으로 자신들만의 BRDF를 만들고 싶어했음 그래서 C.T BRDF의 핵심인 Microfacet BRDF를 기반으로 실제 데이터를 끼워맞추기 시작함.
Page 28: Physical based rendering in practice

MERL 100

발표자
프레젠테이션 노트
이때 사용한 데이터가 MERL 100임 MERL 100은 미쯔비시에서 “실제 관측한” 값들을 DB화 시킨 것임
Page 29: Physical based rendering in practice
발표자
프레젠테이션 노트
theta_h, theta_d, phi_d의 3방향 90, 90, 180도에서 관측한 결과를 저장한 데이터베이스. Cubemap이라고 생각하면 편함. 위의 사진은 phi_d = 90도일 때 x축으로 theta_h, y축으로 theta_d일때의 데이터의 모습.
Page 30: Physical based rendering in practice

출처: SIGGRAPH 2012 PBR Course. “Physically-Based Shading at Disney” course note

발표자
프레젠테이션 노트
phi_d가 90도일때 가장 의미 있는 값들이 보이기 때문에 90도일 때의 단면을 보여준다고 함 단면을 살펴보면 프레넬, 스페큘러, 디퓨즈의 특징을 다음과 같은 위치 등에서 찾을 수 있음
Page 31: Physical based rendering in practice

1의 베이스 컬러, 10개의 스칼라

발표자
프레젠테이션 노트
디즈니는 실측한 데이터를 기반으로 C.T BRDF를 수정하여 최종적으로 1개의 base color, 10개의 스칼라로 조정 가능한 BRDF 모델을 만들어냈음
Page 32: Physical based rendering in practice

출처: SIGGRAPH 2012 PBR Course. “Physically-Based Shading at Disney” course note

발표자
프레젠테이션 노트
그중에 하나가 metallic임
Page 33: Physical based rendering in practice

요즘 게임에서 사용하는 PBR의 모태

발표자
프레젠테이션 노트
가 아닐까 조심스럽게 추측해봄
Page 34: Physical based rendering in practice

라이팅

발표자
프레젠테이션 노트
다시 라이팅 얘기로 넘어와서 PBR 라이팅은 결국 직접 확산광 + 직접 반사광 + 간접 확산광 + 간접 반사광의 합으로 계산됨
Page 35: Physical based rendering in practice

DIRECTIONAL LIGHTS직접광

Page 36: Physical based rendering in practice

DIRECT DIFFUSE직접 확산광

Page 37: Physical based rendering in practice

𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝜋𝜋

𝑐𝑐𝑑𝑑𝑑𝑑𝑑𝑑(𝑛𝑛 � 𝑎𝑎)

Page 38: Physical based rendering in practice

texture2D(albedo, uv) * L_dir * dot(n, l) * AO * cavity / PI;

Page 39: Physical based rendering in practice

DIRECT SPECULAR직접 반사광

Page 40: Physical based rendering in practice

D법선 분포항

발표자
프레젠테이션 노트
Normal Distribution Function, 줄여서 NDF라고도 부름.
Page 41: Physical based rendering in practice

D(𝑛𝑛𝑛)(이론상) 주요 성분

발표자
프레젠테이션 노트
이론상 NDF는 microfacet 노멀 n’ 방향으로 microfacet의 normal이 얼마나 분포되어 있는지를 나타내는 항임
Page 42: Physical based rendering in practice

D(𝑛𝑛, ℎ, 𝑟𝑟)(구현상) 주요 성분

발표자
프레젠테이션 노트
보기에는 3차식으로 보이지만
Page 43: Physical based rendering in practice

𝑛𝑛 � ℎ = 1

발표자
프레젠테이션 노트
dot(n, h)가 1이 되는 경우는 정반사가 일어날 경우만임
Page 44: Physical based rendering in practice

𝑛𝑛 � ℎ = 1

발표자
프레젠테이션 노트
이 경우도 정반사가 일어날 조건이며 마찬가지로 dot(n, h)가 1임
Page 45: Physical based rendering in practice

𝑛𝑛 � ℎ ≠ 1

발표자
프레젠테이션 노트
정반사가 일어나지 않을 조건에서는 dot(n, h)가 1이 아닌 값이 나옴
Page 46: Physical based rendering in practice

𝑛𝑛 � ℎ ≠ 1

발표자
프레젠테이션 노트
또 다른 예
Page 47: Physical based rendering in practice

D(𝑛𝑛 � ℎ, 𝑟𝑟)정반사 조건과 표면 거칠기의 상관관계

발표자
프레젠테이션 노트
사실 구현상으로는 dot(n, h)와 r의 2차식임
Page 48: Physical based rendering in practice

beckmann blinn-phong GGX

발표자
프레젠테이션 노트
NDF로 많이 쓰이는 3가지 NDF의 contour 그래프 x축은 roughness이고, y축은 dot(n, h)임 빨간색은 0에 가까운 값이고, 밝은 베이지색으로 갈 수록 값이 커짐
Page 49: Physical based rendering in practice

GGX

발표자
프레젠테이션 노트
가장 뭔가 있어 보이는 GGX를 예로 들어 자세히 설명
Page 50: Physical based rendering in practice

GGX

발표자
프레젠테이션 노트
표면이 매끈할 경우 (r값이 낮을 경우) 법선 이외의 방향으로는 반사가 잘 되지 않고, 법선 방향 근처에서는 급격하게 반사가 일어남.
Page 51: Physical based rendering in practice

GGX

발표자
프레젠테이션 노트
표면이 거칠 경우 (r값이 높을 경우) 법선의 방향과 관계없이 어느 정도의 반사가 발생함 (즉, 확산됨)
Page 52: Physical based rendering in practice

GGX

발표자
프레젠테이션 노트
다르게 얘기하면 r값이 낮을수록 dot(n, h)의 변화에 민감해지고, r값이 높을수록 dot(n, h)의 변화에 둔해짐
Page 53: Physical based rendering in practice

F반사항

발표자
프레젠테이션 노트
반사항은 Fresnel항이라고도 부름
Page 54: Physical based rendering in practice

𝐹𝐹(𝑎𝑎,𝑛𝑛𝑛)(이론상) 주요 성분

Page 55: Physical based rendering in practice

𝐹𝐹(𝐹𝐹0, 𝑎𝑎, ℎ)(구현상) 주요 성분

발표자
프레젠테이션 노트
가끔 구현한 코드들을 살펴보면 F0, l, h가 아닌 F0, v, h로 전달하는 경우가 있는데 상관없음. 여기서 l은 v로 바꿔도 동일함
Page 56: Physical based rendering in practice

𝑎𝑎 � ℎ ≈ 0

발표자
프레젠테이션 노트
dot(n, h)가 1이 되는 경우는 정반사가 일어날 경우만임
Page 57: Physical based rendering in practice

𝑎𝑎 � ℎ ≈ 1

발표자
프레젠테이션 노트
dot(n, h)가 1이 되는 경우는 정반사가 일어날 경우만임
Page 58: Physical based rendering in practice

𝐹𝐹(𝐹𝐹0, 𝑎𝑎 � ℎ)반사 기저와 관찰자 기준 광원의 위치와의 상관관계

Page 59: Physical based rendering in practice

schlick schlick (ver. UE4)

발표자
프레젠테이션 노트
여기서 빨갈수록 반사가 발생하지 않는 것이고, 밝은 베이지 색으로 갈 수록 반사가 발생하는 것임
Page 60: Physical based rendering in practice

schlick

Page 61: Physical based rendering in practice

schlick

발표자
프레젠테이션 노트
기저값(F0)이 높다면 광원이 어디에 위치해있던지 간에 항상 반사함 금속의 경우 F0값이 높기 때문에 우리가 어느 방향을 바라보더라도 반사가 발생함
Page 62: Physical based rendering in practice

schlick

발표자
프레젠테이션 노트
하지만 기저값이 낮은 경우 역광인 경우에만 반사가 발생함 비금속의 경우 기저값이 낮아서 일반적으로는 반사가 잘 발생하지 않지만, 역광의 경우에는 반사가 발생함. (Everything shines)
Page 63: Physical based rendering in practice

G지형항

Page 64: Physical based rendering in practice

𝐺𝐺(𝑎𝑎, 𝑣𝑣,𝑛𝑛𝑛)(이론상) 주요 성분

Page 65: Physical based rendering in practice

𝐺𝐺(𝑎𝑎, 𝑣𝑣,𝑛𝑛, 𝑟𝑟)(구현상) 주요 성분

Page 66: Physical based rendering in practice

𝑟𝑟 ≈ 0

발표자
프레젠테이션 노트
표면이 매끈하면 반사되었을 때 차폐가 덜 됨
Page 67: Physical based rendering in practice

𝑟𝑟 ≈ 0

발표자
프레젠테이션 노트
특히 차폐는 위와 같은 상황에서 많이 발생하지만 위에선 발생하지 않았음
Page 68: Physical based rendering in practice

𝑟𝑟 > 0

발표자
프레젠테이션 노트
표면이 거칠어도 정면에서 바라볼때는 차폐가 거의 발생하지 않음
Page 69: Physical based rendering in practice

𝑟𝑟 > 0

발표자
프레젠테이션 노트
하지만 비스듬히 바라보면 차폐가 발생
Page 70: Physical based rendering in practice

𝐺𝐺(𝑛𝑛 � 𝑣𝑣,𝑛𝑛 � 𝑎𝑎, 𝑟𝑟)시야-법선, 광원-법선과 표면 거칠기의 상관관계

Page 71: Physical based rendering in practice

implicit schlick smith

발표자
프레젠테이션 노트
왼쪽의 그래프와 오른쪽의 2 그래프가 확연하게 달리 보이는 이유 왼쪽과 오른쪽의 두 그래프는 축이 서로 다름 오른쪽의 그래프가 반쪽 짜리이기 때문. 결국에는 왼쪽과 같은 형태가 됨
Page 72: Physical based rendering in practice

schlick

Page 73: Physical based rendering in practice

schlick

발표자
프레젠테이션 노트
거칠지 않을 때에는 차폐가 되지 않음
Page 74: Physical based rendering in practice

schlick

발표자
프레젠테이션 노트
하지만 거칠 경우에는 비스듬히 바라볼 수록 차폐가 많이 되며, 마주보고 바라보면 차폐가 발생하지 않음
Page 75: Physical based rendering in practice

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: Physical based rendering in practice

AMBIENT LIGHTS주변광

Page 77: Physical based rendering in practice

AMBIENT DIFFUSE주변 확산광

Page 78: Physical based rendering in practice

𝐿𝐿𝑑𝑑𝑑𝑑𝑑𝑑𝑖𝑖𝑑𝑑𝑑𝑑𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝜋𝜋

𝑐𝑐𝑑𝑑𝑑𝑑𝑑𝑑(𝑛𝑛 � 𝑎𝑎)

Page 79: Physical based rendering in practice

textureCube(irradiance, n) * texture2D(albedo, uv) * dot(n, l) / PI;

Page 80: Physical based rendering in practice

AMBIENT SPECULAR주변 반사광

Page 81: Physical based rendering in practice

textureCubeLod(radiance, reflect(v, l), idx) * C_dir;

발표자
프레젠테이션 노트
여기서 중요한 것은 idx 값은 roughness 값을 기반으로 구해지는 값임 또한 Radiance 맵은 단순히 lerp되어 밉매핑된 텍스처가 아님
Page 82: Physical based rendering in practice

끝Q&A