O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 91 Anúncio
Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Quem viu também gostou (20)

Anúncio

Semelhante a [Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기 (16)

Anúncio

[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기

  1. 1. UDK로 물리 기반 셰이더 만들기 아이덴티티 게임즈 테크니컬 아티스트 김동석
  2. 2. 발표자 소개 / 차례 / 일러두기
  3. 3. 발표자 소개 • 김동석 – 1999년 3D 모델러로 게임 바닥에서 밥벌이 시작 – 아이닉스 소프트, 넥슨, 네오위즈를 거쳐~ – 현재 아이덴티티 게임즈에서 TA로 열심히 밥벌이 하고 있습니다! 3
  4. 4. 네, 아이덴티티 게임즈는 그 유명한 • 남자들의 수영장을 가진, 그곳입니다! 4
  5. 5. 차례 1. 일러두기 2. 물리 기반 셰이더 (Physical Based Shader)의 정의 3. 물리 기반 셰이더의 구조 4. 물리 기반 셰이더를 만들기 위한 전제 5. UDK로 물리 기반 셰이더 만들기 5
  6. 6. 일러두기 • 이 발표는 tri-Ace, Lazarov, Sébastien Lagarde의 PBS를 바탕으로 합니다. • 물리적으로 정확한 셰이더는 아닙니다.(물리 기반 셰이더라며!) 6
  7. 7. 물리 기반 셰이더( PYSICAL BASED SHADER)의 정의 이러쿵 저러쿵 풀어보는
  8. 8. 물리 기반 셰이더라니? (1) • 기존의 실시간 셰이더들은 물리적으로 부정확한 부분이 많았습니다. – 어두운 Diffuse map을 써야 한다던가 – Ambient Light가 단색이라던가 – Specular가 엄청 약하거나, 혹은 강하거나 8
  9. 9. 물리 기반 셰이더라니? (2) • 기존의 실시간 셰이더들은 물리적으로 부정확한 부분이 많았습니다. – Fresnel 효과가 잘못 들어가있거나 – Reflection에 대한 고려가 전혀 없거나 – 조명이 엄청 약한데도 엄청 밝은 셰이더라던가 9
  10. 10. 그럼 예전 셰이더들이 물리랑은 상관 없는거야? • 기존 셰이더들이 생략을 좀 많이 했을 뿐입니다. – Lambert diffuse 셰이딩은 표면이 완벽하게 빛을 반사한다고 가정합니다. – 거울의 반사율도 90%! • Phong 셰이딩은 현실 세계의 Specular를 재현하지 못합니다. – 원형 물체에선 괜찮지만 평평한 면에선 실제 스페큘러를 표현하지 못합니다. – 언제나 동그랗게 맺히는 하이라이트~ 10
  11. 11. 물리 기반 셰이더는 뭐가 다른데? • 물리 기반 셰이더는 생략된 물리 현상들을 좀더 많이 구현한 셰이더입니다. – Oren-nayar – Blinn-Phong Specular – 미세표면 – Fresnel 효과 – Image Base Light – 에너지 보존 법칙 11
  12. 12. 모든 표면은 거칠다! MICROFACET BRDF 실제 세계의 물리 효과들 1
  13. 13. 실제 세계의 물리 효과들 1- Microfacet BRDF (1) • Microfacet theory(미세표면 이론)은 물리 기반 셰이더의 근간 – 물체의 표면은 매우 작은, 완전 반사가 일어나는 편평한 표면의 집합 13
  14. 14. 실제 세계의 물리 효과들 1- Microfacet BRDF (2) • 예전 셰이더들은 물체의 모든 표면이 완전 반사를 한다고 가정하고 만들어 졌습니다. 14
  15. 15. 실제 세계의 물리 효과들 1- Microfacet BRDF (3) • 그럼 표면이 거칠면? 15
  16. 16. 실제 세계의 물리 효과들 1- Microfacet BRDF (4) • Specular의 모양도 바뀝니다! 16
  17. 17. 모든 표면은 반짝인다! 실제 세계의 물리 효과들 2
  18. 18. 실제 세계의 물리 효과들 2 - 모든 표면은 Specular가 있다! (1) • 셰이더라고 그러지만 사실은 반사 모델 – BRDF라는 말도 양방향 ‘반사’ 분포 함수 18
  19. 19. 실제 세계의 물리 효과들 2 - 모든 표면은 Specular가 있다! (2) • 카메라에 편광 필터를 사용해서 사진을 찍어 보신분은 아시겠지만 좀더 색이 풍부하게 나옵니다. – 이게 표면에서 반사되는 난반사를 줄여줘서 - Specular를 줄여줘서 - 본래의 색을 더 풍부하게 보이게 해주는 원리 입니다. • 즉, 편광 필터를 사용해서 찍은 사진들은 물체의 Diffuse 부분만을 얻어낸 것으로, 포토샵으로 원래 사진에서 디퓨즈 부분만 빼면 Specular만 남은 이미지를 얻을 수 있습니다. 19
  20. 20. 실제 세계의 물리 효과들 2 - 모든 표면은 Fresnel이 있다! (1) • 스넬의 법칙(Snell’s Law) – 두 매질이 마주하는 경계면에서 임계각을 넘으면 전반사가 일어난다. • 즉, 우리가 익히 아는 Specular 반사는 특정 각도에서만 일어납니다. 22
  21. 21. 실제 세계의 물리 효과들 2 - 모든 표면은 Fresnel이 있다! (2) • Fresnel의 법칙(Fresnel Effect) – 표면의 반사량은 관찰자의 시점과 표면이 이루는 각도에 영향을 받는다. – 표면을 바라보는 각도가 물체의 전반사가 일어나는 고유 각도, 즉 Critical Angle(임계각)에 이르면 Fresnel 효과를 경험 할 수 있게 됩니다. 23
  22. 22. • 마루도 얕은 각도에서 보면 거울 처럼 반사가 일어납니다. • 우리가 흔히 아는 Fresnel은 진정한 Fresnel이 아닌겁니다!
  23. 23. • 마루도 얕은 각도에서 보면 거울 처럼 반사가 일어납니다. • 우리가 흔히 아는 Fresnel은 진정한 Fresnel이 아닌겁니다!
  24. 24. 실제 세계의 물리 효과들 2 - 모든 표면은 Fresnel이 있다! (3) • 우리 주변 물체들의 IOR • 나무, 돌 같은 Specular가 없는 것처럼 보이는 재질들은 얕은 각도에서 전반사가 일어납니다. 26 재질 IOR(Index Of Refraction) 진공 1.0 공기 1.0002926 유리 1.5 유리, 나무, 돌, 콘크리트 3 ~ 4 (14 ~ 30도) 플라스틱 5 ~ 8 금속 20 ~ 100
  25. 25. 실제 세계의 물리 효과들 2 - 빛을 받는 물체의 표면도 그림자가 진다! • Fresnel 때문에 Specular가 잘 안보인다는 설명은 뭔가 부족 – 유리와 벤젠의 IOR은 같지만 Specular는 다르게 보임 27
  26. 26. 빛은 모든 방향에서 온다! 실제 세계의 물리 효과들 3
  27. 27. 실제 세계의 물리 효과들 3 - Image Based Lighting (1) • 기존의 셰이더는 Ambient Light를 그냥 단색으로 처리하는 경우가 대부분 29
  28. 28. 실제 세계의 물리 효과들 3 - Image Based Lighting (2) • 실제 세계에선 그늘진 부분에서도 난반사에 의한 조명이 발생 30
  29. 29. 실제 세계의 물리 효과들 3 - Image Based Lighting (3) • Image Based Lighting(IBL)은 단색으로 이뤄지던 주변광을 사진이나 이미지를 통해 여러 색을 갖게 만들어 주는 것. – 이것은 Diffuse 부분만이 아닌 Specular와 Reflection 양쪽에 영향을 주며, 표면의 거칠기에 따라 반사되는 주변광의 모양이 바뀝니다. 31
  30. 30. 실제 세계의 물리 효과들 3 - Image Based Lighting (4) • Specular와 Reflection 32
  31. 31. 에너지 보존 법칙 - 들어온 것보다 나가는 것이 많을 수 없다! 실제 세계의 물리 효과들 4
  32. 32. 실제 세계의 물리 효과들 4 - 에너지 보존 법칙 (1) • 뉴턴 역학계에 속해있다면 모든 물리 현상은 에너지 보존 법칙을 따릅니다. – 방출되는 에너지는 입력되는 에너지와 같거나 작다. – 무한동력이 존재하지 않는 이유죠. 34
  33. 33. 실제 세계의 물리 효과들 4 - 에너지 보존 법칙 (2) • 빛도 마찬가지! – 입사되는 빛보다 반사되는 빛의 양이 많을 수 없다! 35 에너지 보존 법칙 무시 에너지 보존 법칙 적용
  34. 34. 정리 하자면… • PBS는 이런 실제 세계의 물리 효과들을 표현합니다. – Microfacet BRDF • 모든 표면에 존재하는 Specular • 모든 표면에 존재하는 Fresnel • 표면 특유의 거칠기에 따른 미세표면 Shadowing과 Maksing – IBL(Image Based Lighting) • 실제 세계의 난반사를 시뮬레이션 하는 IBL • 표면의 거칠기에 따라 변형되는 주변광의 모양 – 그리고 마지막으로 이런 모든 물리적 현상을 에너지 보존 법칙에 따라 표현합니다.
  35. 35. 물리 기반 셰이더의 구조 게임으로 나온 PBS의 비교
  36. 36. 기본적인 셰이더의 구조 • 셰이더는 크게 두 부분으로 구성 – Directional Light 부분 – Ambient Light 부분 • 각 부분은 다시 세가지 반사 성분으로 이루어 짐 – Diffuse – Specular – Reflection • 기존 셰이더들은 Reflection 성분을 제외하고 구성된 경우가 많고, 특히 Ambient Light 부분은 Diffuse만 고려 38
  37. 37. 물리 기반 셰이더의 구조 • PBS 역시 다음과 같은 식으로 구성 됩니다. – (Directional Light) + (Ambient Light) • Directional Light는 다음과 같이 구성 됩니다. – (디퓨즈 부분) + (스페큘러 부분) + (반사 부분) • 디퓨즈 부분 – (디퓨즈 맵) * (디퓨즈 셰이딩) * (노멀라이징 식) • 스페큘러 부분 – (Normalizing Term) * (Specular Term) * (Fresnel Term) * (Visibility Term) • 반사 부분 – 큐브맵을 사용해서 표면 거칠기에 따른 표현 정도를 결정합니다. 39
  38. 38. Diffuse Albedo Equition (1) • 이 식은 PBS의 Directional 부분의 디퓨즈 라이트 부분과 스페큘러 라이트 부분 입니다. 40
  39. 39. Diffuse Albedo Equition (2) 41
  40. 40. PBS들의 비교 지금까지 게임에 쓰인
  41. 41. Tri-Ace의 PBS (1) • 2010년 Siggraph에서 제안 되었으며 게임에 적용 가능한 최초의 PBS에 대한 발표 입니다. 43
  42. 42. Tri-Ace의 PBS (2) • (Visibility Term)*(Specular Normalizing) = 0.0397436n+0.0856832로 간략화 됩니다. 44
  43. 43. Tri-Ace의 PBS (3) • Specular normalizing과 사전 정의 Ambient Lighting 45
  44. 44. Lazarov의 PBS (1) • 2011년 Siggraph에서 발표된, Call of Duty - Black ops에서 쓰인 셰이더 입니다. 46
  45. 45. Lazarov의 PBS (2) • Distribution Term – Beckmann Specular (m = 거칠기) – Blinn - Phong Sepcular in logarithmic encoding of the specular power (n = Specular Power) 47
  46. 46. Lazarov의 PBS (2) • Distribution Term – Beckmann Specular (m = 거칠기) – Blinn - Phong Sepcular in logarithmic encoding of the specular power (n = Specular Power) 48
  47. 47. Lazarov의 PBS (3) • Fresnel Term - 원래 Schlick의 식에서 Cspec은 F0로 옆의 식을 사용한 Fresnel 계수 - n = IOR. Lazarov의 Fresnel에선 Specular Color로 간략화 • Visibility Term 49
  48. 48. Lazarov의 PBS (4) • Reflection과 Ambient Light를 위한 IBL 50
  49. 49. 다른 PBS들 • Far cry3 에서 사용된 PBS는 Lazarov의 PBS에 Diffuse 부분에 대한 normalizing과 Visibility Term의 간략화가 이뤄진 PBS입니다. • Sébastien Lagarde의 PBS는 Lazarov의 PBS에 좀더 정밀한 IBL과 이를 위해 새로운 normalizing 식을 도출 해 낸 것입니다. 51
  50. 50. UDK용 PBS! 이것들을 짬뽕해서 제안하는
  51. 51. 제안하는 PBS 𝐿 𝑃𝐵𝑆 = 𝐿 𝑑𝑖𝑟𝑒𝑐𝑡𝑖𝑛𝑎𝑙 + 𝐿 𝑎𝑚𝑏𝑖𝑒𝑛𝑡 𝐿 𝑑𝑖𝑟𝑒𝑐𝑡𝑖𝑜𝑛𝑎𝑙 = 𝑅 𝑑𝑖𝑓𝑓 + (𝐹𝑆𝐺× 𝑉(𝑙, 𝑣, ℎ) × 𝐷 ℎ 4 ) + 𝐼𝐵𝐿 𝑟𝑒𝑓 𝐿 𝑎𝑚𝑏𝑖𝑒𝑛𝑡 = 𝑅 𝑑𝑖𝑓𝑓 + (𝑆𝑝𝑒𝑐 𝑎𝑚𝑏𝑖𝑒𝑛𝑡 × 𝐺𝑙𝑜𝑠𝑠) + 𝐼𝐵𝐿 𝑟𝑒𝑓 𝑅 𝑑𝑖𝑓𝑓 = 𝑐 𝑑𝑖𝑓𝑓 × 1 − 𝑐 𝑠𝑝𝑒𝑐 × { 𝑙 ∙ 𝑛 + 𝐼𝐵𝐿 𝑚𝑖𝑛−1} 𝐹𝑆𝐺 = 𝑐 𝑠𝑝𝑒𝑐 + (1 − 𝑐 𝑠𝑝𝑒𝑐)𝑒−6ℎ∙𝑣
  52. 52. 제안하는 PBS (계속) 𝑉 𝑙, 𝑣, ℎ = 1 ( 𝑛 ∙ 𝑙 1 − 𝑎 + 𝑎)( 𝑛 ∙ 𝑣 1 − 𝑎 + 𝑎) 𝑎 = 2𝛼𝑝 + 1 8 , 𝛼𝑝 = 8192 𝐺𝑙𝑜𝑠𝑠 , 𝐺𝑙𝑜𝑠𝑠 𝑖𝑛 [0, 1] 𝐷 ℎ 4 = 𝛼𝑝 + 2 8 (𝑛 ∙ ℎ) 𝛼𝑝
  53. 53. 𝜋 or Not 𝜋 • Diffuse Term에서 1 𝜋 이 없는 이유 – 1 𝜋 은 Lambertian BRDF 식에 원래 포함되어 있는 부분 – 실제 세계에서 빛을 계산 할때 radiometric하게 빛을 측정 – 게임 라이트는 그렇지 않음! • Specular Term에서 1 𝜋 이 없는 이유 – Blinn-Phong이나 Phong NDF BRDF모델은 SH기반 – 게임의 Specular는 빛을 받는 부분에서만 계산. 즉, SH 성분은 계산 하지 않음 • 요컨데, 게임에서 쓰이는 조명 시스템은 복사광을 계산하지 않기 때문에 실제 BRDF식에서 존재하는 1 𝜋 을 사용하지 않습니다! 55
  54. 54. 물리 기반 셰이더를 만들기 위한 전제 UDK에서
  55. 55. PBS를 위한 전제 • PBS를 위해선 엔진이 3가지를 지원해야 합니다. – Gamma-Correct Rendering – High Dynamic Range Rendering – Tone mapping – UDK는 이 세가지를 모두 지원합니다. • High Dynamic Range(HDR) Rendering – UDK의 HDR 랜더링된 이미지는 포스트 프로세스 버퍼에서 접근 가능합니다. – 어차피 톤 맵도 포스트 프로세스니 상관 없습니다. – 문제는 Gamma-Correct Rendering인데... 57
  56. 56. 빌어먹을 감마 코렉션… 58
  57. 57. 텍스쳐 읽을때 - D3DSAMP_SRGBTEXUTRE 랜더타겟에다 쓸때 - D3DRS_SRGBWRITEENABLE
  58. 58. 다음 텍스쳐는 어떻게 설정해줘야 할까요? • 디퓨즈 맵 • 노멀 맵 • 스페큘러 맵 60
  59. 59. 정답 61 sRGB Linear sRGB?
  60. 60. UDK의 sRGB 옵션 • UDK는 기본적으로 임포트 되는 모든 텍스쳐가 리니어 컬러 스페이스에서 작업되어 저장된 것으로 상정합니다. • 그렇기 때문에 외부 프로그램에서 그린 이미지와 똑같이 출력을 하려면 UDK로 임포트 하는 과정에서 역sRGB 보정을 해서 이미지를 밝게 만들어야 합니다. 62
  61. 61. 그럼 Specular map은? • 당연히 노멀맵처럼 Linear gamma space여야 합니다. – 그런데 전 sRGB를 사용했습니다. 왜? – 너무 어둡거든요! • 옆의 그림을 보시면 이해가 빠르실겁니다. – 아스팔트랑 알콜의 스페큘러가 구분이 되십니까? 63
  62. 62. Gamma Correction에 대해 정리 하자면… • UDK에선 입력되는 텍스쳐의 색 공간이 어떻든 무조건 리니어 감마 스페이스에서 제작한 것으로 상정하고 저장한다! • UDK에선 그래픽 버퍼에서 최종 랜더링을 그릴때 무조건 sRGB로 색공간 변화를 해준다! • 그래서 입력된 텍스쳐와 같은 결과를 얻으려면 역sRGB를 취해 밝게 저장 해야 한다! • 즉, 디퓨즈 맵은 그냥 보통 작업하듯이 작업 하면 되고, 스페큘러 맵은 IOR 컬러의 역sRGB로 색공간 변화 준 것으로 작업 한다! 64
  63. 63. UDK로 PBS 만들기 이제 진짜로 만들어 봅시다!
  64. 64. 일단 Normalmap부터 만들어 봅시다. • Blinn-Phong 모델을 사용하면 DXT1으로 압축된 Normalmap이 문제가 됩니다. – UDK에선 TC_NormalmapUncommpressed 방식으로 압축 하면 됩니다만 해상도가 떨어집니다. – 해상도를 유지하면서 블록 압축 현상을 피하고 싶었습니다. 66 Uncompressed DXT1
  65. 65. 그래서 약간의 처리를 해줍니다. 67 • 6 instructions가 들긴 합니다만 노멀맵의 해상도도 유지하면서 DXT1 압축에 의한 노이즈도 없애 줍니다. • 심지어 텍스쳐 메모리 차지하는 용량도 DXT1과 차이가 없습니다!
  66. 66. 그래서 약간의 처리를 해줍니다. 68 • 6 instructions가 들긴 합니다만 노멀맵의 해상도도 유지하면서 DXT1 압축에 의한 노이즈도 없애 줍니다. • 심지어 텍스쳐 메모리 차지하는 용량도 DXT1과 차이가 없습니다!
  67. 67. 큐브맵 LOD 접근하기 (1) • IBL과 표면 거칠기에 따른 반사를 큐브맵의 Mipmap을 통해 처리한다고 말씀 드렸습니다. – 그런데 UDK에서 어찌 Mipmap에 접근 하누? – UDK의 머테리얼 에디터도 결국은 HLSL코드 입니다. – 한번 불러와진 텍스쳐는 HLSL변수로 선언되어 있습니다. 이런 식으로요! 69
  68. 68. 큐브맵 LOD 접근하기 (2) 70
  69. 69. 큐브맵 LOD 접근하기 (3) • 이렇게 하면 이런게 됩니다. 71
  70. 70. Diffuse Term 72
  71. 71. Distribute Term 73
  72. 72. Fresnel & Visibility Term 74
  73. 73. Ambient Term 75
  74. 74. PBS의 활용법 만든건 써먹어야지!
  75. 75. SpecualrMap과 GlossinessMap • - Specular Map – 하이라이트의 색 – 하이라이트 강도 – 주변 환경(EnvCube)의 반사 세기 – Fresnel 효과 정도 – Diffuse Map의 밝기 • Glossiness Map – 하이라이트가 맺히는 면적 – 하이라이트 강도 – 주변 환경의 반사 선명도 – 표면의 거칠기 77
  76. 76. Specular 면적에 따른 강도의 변화 • 하이라이트가 넓게 - Glossiness가 낮으면 – 맺히는 하이라이트의 강도는 자동으로 줄어듭니다. • 하이라이트가 좁게 - Glossiness가 높으면 – 맺히는 하이라이트의 강도가 높아집니다. 78
  77. 77. SpecularMap의 제작 • 비금속류(녹슨 금속, 얼음, 물, 나무, 돌, 천 등) – RGB(0, 0, 0) ~ RGB(75, 75, 75) – UnrealColor(0.0, 0.0, 0.0) ~ (0.08, 0.08, 0.08) • 고광택 마감제가 칠해진 표면(플라스틱, 니스가 칠해진 나무, 폴리에스테르 가죽 등) – RGB(90, 90, 90) ~ RGB(143, 143, 143) – UnrealColor(0.1, 0.1, 0.1) ~ (0.28, 0.28, 0.28) • 금속류(페인트가 칠해진 철, 알루미늄, 구리, 청동, 백금 등) – RGB(155, 155, 155) ~ RGB(255, 255, 255) – UnrealColor(0.3, 0.3, 0.3) ~ (1, 1, 1) 79
  78. 78. http://seblagarde.wordpress.com/2012/04/30/ dontnod-specular-and-glossiness-chart/
  79. 79. Glossiness Map의 강도에 따른 Specular 81
  80. 80. Specular와 Glossiness의 강도에 따른 주변 환경 반사 값 변화 (1) 82
  81. 81. Specular와 Glossiness의 강도에 따른 주변 환경 반사 값 변화 (2) 83
  82. 82. CONCLUSION 마지막 장입니다!
  83. 83. PBS는 이런 겁니다. • PBS는 실제 세계의 물리 효과들을 표현합니다. – 모든 표면에 존재하는 Specular – Fresnel – 표면 거칠기에 따른 미세표면 Shadowing과 Masking – IBL(Image Based Lighting) – 에너지 보존 법칙
  84. 84. PBS의 장점과 단점 • 장점 – 적은 텍스처 리소스로 거의 모든 재질을 표현 할 수 있음 – 아티스트가 조절할 부분이 적음 – 다양한 조명 환경에서의 안정적 결과물 – 하나의 셰이더만 있으면 되므로 Differed Renderer에도 적합 – 적용하는데 특별한 신기술이 필요 없음 • 단점 – 아티스트에게 개념을 이해시키기 힘듦 – WYSWYG을 위한 별도의 장치가 필요 – 큐브맵을 자동으로 만들어줄 장치가 필요 – 리얼한 장면만 만들 수 있음
  85. 85. PBS는… • 제작이 좀 난해 하지만 충분히 시도할 가치가 있는 도전이라 생각합니다. 89
  86. 86. 질문사항은… • Jalnaga@eyedentitygames.com 으로 메일 주시거나~ • 트위터 @jalnaga나 • http://jalnaga.net에 메시지를 남겨 주시면 성심 성의껏 답변 드리겠습니다. 90
  87. 87. 끝!

×