6. 차례
1. 일러두기
2. 피부 셰이더에서 제일 중요한 점 두가지
3. BRDF? 사전정의(Pre-Intergrated)?
4. 3DS Max에서 맵 만들기
5. 정리
7. 일러두기
• 물리적으로 정확한 셰이더는 아닙니다.
– 정확하게 만들 수도 있지만…
• 디퓨즈 부분에 대해서만 다루고 있습니다.
– 스페큘러나 반사는 Kelemen / Szirmay - Kalos model을 쓰세요!
8. 일러두기
• 물리적으로 정확한 셰이더는 아닙니다.
– 정확하게 만들 수도 있지만…
• 디퓨즈 부분에 대해서만 다루고 있습니다.
– 스페큘러나 반사는 Kelemen / Szirmay - Kalos model을 쓰세요!
• 사실 그냥 Phong Specular를 쓰셔도 괜찮을 겁니다. 아마도…
9. 일러두기
• 물리적으로 정확한 셰이더는 아닙니다.
– 정확하게 만들 수도 있지만…
• 디퓨즈 부분에 대해서만 다루고 있습니다.
– 스페큘러나 반사는 Kelemen / Szirmay - Kalos model을 쓰세요!
• 사실 그냥 Phong Specular를 쓰셔도 괜찮을 겁니다. 아마도…
• 굉장히 주관적인 주장입니다.
– 객관적 증명은 다음에 기회가 된다면…
16. 기존 셰이더들의 문제
• 무겁다!
– NVidia의 경우 머리당 라이트맵 11개!
• 이걸 매 프레임마다 Lerp해준다!
– 12 tap Approximation 의 경우에도 머리당 라이트맵 2개!
• 캐릭터 5개가 화면에 나오면?
• (머리 5 + 몸 파트 5) * 2 = 라이트맵 20개!
• UV Seam 문제
17. 그럼 SSSSS는?
• Screen Space Sub Surface Scattering
• 화면 단위 처리기 때문에 많은 캐릭터가 나오는 장면에 적합!
– 그렇지만 한명만 나오는 장면에서도 같은 비용이 발생!
• Deferred 랜더러가 필요!
– G-buffers 채널을 많이 쓴다!
• 결정적으로 S가 너무 많다!
20. Lambertian reflectance
• 컴퓨터 그래픽에 있어 디퓨즈 부분을 표현하는 가장 기본적인 방식.
– “표면으로부터 관찰되는 방사선의 강도는 표면 법선과 관찰자 시선 사이의 각 𝜃의 Cosine에
대해 직접적으로 비례한다.”
• 쉽게 말해 빛과 표면이 이루는 각도에 따라 음영이 결정된다는 소리.
21. Lambertian reflectance
• 응? 그럼 이런 것들은?
• 익히 알고 있던 셰이더 이름들은 디퓨즈 셰이딩에 관한 것이
아니었다!
• 이것들은 하이라이트, 즉 BRDF를 기반으로 한 Specular 계
산에 관한 것이었다!
– 물론 Oren-Nayar-Blinn은 디퓨즈 셰이딩에 관한 것입니다.
23. BRDF
Bidirectional reflectance distribution function
• 앞의 식을 설명하자면,
– 𝜔 𝜊 방향으로 반사되어 나가는 복사휘도와 𝜔 𝜄 방향에서 들어오는 미분 복사조도 사이의 비율
– 이게 Bidirectional, 양방향인 이유는 입사/반사 방향에 따라 함수 값이 달라지기 때문
– 특정 식을 의미하지 않음.
• 사실 Lambert 셰이딩이 그렇게 간단하게 계산 될 수 있는 이유는 빛이 입사하는 방
향에 관계없이 모든 방향으로 같은 양의 빛을 반사한다고 가정했기 때문이다.
• 요컨대, 특정 표면이 내가 보는 시점과 빛과의 관계에 따라 갖는 특정 값을 얻는 법
24. 그러나
그때는 그냥
디퓨즈는 Lambertian, 스페큘러는 BRDF인줄만 알았습니다.
그런데…
25. (시간이 흘러) 두 가지, 새로운 것을 보게 됐다!
• 팀 포트리스2의 툰 셰이딩을 흉내 낸 것 • Arch & Design Material (3DS Max)
26. 1. Lambert 셰이딩 계산을 UV좌표로 쓸 수 있다!
2. BRDF를 디퓨즈에도 적용 할 수 있다!
죄송합니다! 너무나 당연한걸…
27. 이런 겁니다!
• 텍스쳐의 UV 좌표는 0~1사이의 실수입니다.
• 즉, Lambertian Reflection으로 얻어진 실수를 U좌표로 쓸 수 있다는 겁니다!
– V좌표는 무조건 0이라고 해두면…
어두운 쪽=0
밝은 쪽=1
28. 여기에 Lambertian Reflection을 BRDF로 바꾸면…
• Lambert 셰이딩은 빛과 표면에 관한 값만 나옵니다. 이걸 V축 좌표로 삼고,
• 시점과 표면에 관한 dot product 값을 구해서 U축 좌표로 삼으면…
• 물체의 뒤편에 빛이 있을 때 표면의 빛 정보를 텍스쳐에서 얻어 올 수 있습니다.
29. 여기에 Lambertian Reflection을 BRDF로 바꾸면…
• Lambert 셰이딩은 빛과 표면에 관한 값만 나옵니다. 이걸 V축 좌표로 삼고,
• 시점과 표면에 관한 dot product 값을 구해서 U축 좌표로 삼으면…
• 물체의 뒤편에 빛이 있을 때 표면의 빛 정보를 텍스쳐에서 얻어 올 수 있습니다.
30. 여기에 Lambertian Reflection을 BRDF로 바꾸면…
• Lambert 셰이딩은 빛과 표면에 관한 값만 나옵니다. 이걸 V축 좌표로 삼고,
• 시점과 표면에 관한 dot product 값을 구해서 U축 좌표로 삼으면…
• 물체의 뒤편에 빛이 있을 때 표면의 빛 정보를 텍스쳐에서 얻어 올 수 있습니다.
즉, Sub Surface Scattering을
(텍스쳐만 있다면)
할 수 있다는 겁니다!
31. 여기에 Lambertian Reflection을 BRDF로 바꾸면…
• Lambert 셰이딩은 빛과 표면에 관한 값만 나옵니다. 이걸 V축 좌표로 삼고,
• 시점과 표면에 관한 dot product 값을 구해서 U축 좌표로 삼으면…
• 물체의 뒤편에 빛이 있을 때 표면의 빛 정보를 텍스쳐에서 얻어 올 수 있습니다.
즉, Sub Surface Scattering을
(텍스쳐만 있다면)
할 수 있다는 겁니다!
33. BRDF를 기록한 맵 만들기 - 0
• 우리에겐 최고의 랜더링 솔루션을 제공하는 3D Studio Max가 있습니다.
– 자체 랜더러도 훌륭하고요,
– 업계 표준이라는 Mentalray도 탑재하고 있죠,
– 거기다 모든 3D 어플리케이션 중 가장 많은 외부 랜더러를 갖고 있습니다.
– 결정적으로 끝내주는 피부 셰이더를 갖고 있습니다!
아니 뭐 제가 맥스만 쓸 줄 알아서 이런게 아니라고 말은 못하겠지만…
34. BRDF를 기록한 맵 만들기 - 1
• Max의 Sub Surface Scattering Fast Skin shader로 피부 재질을 만들어 줍니다.
• 만들어진 재질에서 스페큘러와 반사를 없애고 디퓨즈 색을 흰색으로 바꿔 구에 적용합니다.
38. 이렇게 만들어진 맵을 셰이더에 적용하면~
Lambert Shading BRDF Skin Shading
39. 확대해서 보면…
요렇게 바알갛게
핏기가 올라옵니다.
첫번째 피부 셰이더의 특징은
만들었다면, 두번째 특징은?
40. 피부 셰이더의 두번째 특징을 재현 하려면?
• Blend Normal
– 빛이 피부 속으로 확산 되는 것을 Blurring한 노멀맵으로 표현.
– 원본의 R채널에 Blur를 줍니다.
– 이렇게 만들어진 이미지와 원본의 GB채널을 합해 새로운 노멀맵을 만들어 줍니다.
– 원본 노멀맵과 새로 만들어진 노멀맵을 BRDF 셰이딩의 R채널을 기준으로 Lerp해줍니다.
41. BRDF 셰이딩의 R채널을 기준으로?
• BRDF 셰이딩으로 얻어지는 것은 피부 속으로 RGB 각각의 빛이 투과하는 양.
42. BRDF 셰이딩의 R채널을 기준으로?
• BRDF 셰이딩으로 얻어지는 것은 피부 속으로 RGB 각각의 빛이 투과하는 양.
43. BRDF 셰이딩의 R채널을 기준으로?
• BRDF 셰이딩으로 얻어지는 것은 피부 속으로 RGB 각각의 빛이 투과하는 양.
44. BRDF 셰이딩의 R채널을 기준으로?
• BRDF 셰이딩으로 얻어지는 것은 피부 속으로 RGB 각각의 빛이 투과하는 양.
45. BRDF 셰이딩의 R채널을 기준으로?
• BRDF 셰이딩으로 얻어지는 것은 피부 속으로 RGB 각각의 빛이 투과하는 양.
즉, 어떻게 노멀맵을 섞어야 하는지를 얻을 수 있다.
46. 그럼 왜 R채널만 Blur 주는데?
• 모든 채널에 Blur를 주면 세세한 디테일이 전부 사라집니다!
Original Normal Blend Normal Blur Normal
54. BRDF기반 사전정의 피부 셰이더
• BRDF: 빛만을 고려한 것이 아닌, 시점까지 고려한
• 사전 정의: BRDF 맵과 Blend 노멀맵을 미리 만들어 놓은
• 피부 셰이더!
55. 이게 뭐가 좋냐면…
• 빠릅니다!
• 필요한 텍스쳐가 적어 메모리 사용량이 매우 적습니다!
• Shader model 3.0 기반이기 때문에 어떤 플랫폼에도 적용 할 수 있습니다!
• 이 방식을 응용하면 피부 BRDF맵 뿐만 아니라 거의 모든 재질의 BRDF맵을 얻을 수
있습니다!
56. • 그렇지만 잘 살펴보면 단점도 있습니다.
– 두께에 기반한 SSS는 불가능 합니다.
– 뒤쪽에서 투과되는 빛은 따로 처리를 해줘야
합니다.
– 피부에 부드럽게 떨어지는 그림자를 만들 수
없습니다.
– 미리 만들어 놓아야 하는 것들이 많아 아티스
트가 최종 결과물을 예측하기가 어렵습니다.
써놓고 보니 정말 많은 단점이군요. OTL