Ssao

2,402 views

Published on

[Devrookie]SSAO 발표 PT

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,402
On SlideShare
0
From Embeds
0
Number of Embeds
642
Actions
Shares
0
Downloads
41
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Ssao

  1. 1. SSAO(Screen Space Ambient Occlusion) 2012.12.08 Devrookie 엠에스박
  2. 2. • Ambient Occlusion(AO)• SSAO• 깊이 버퍼 SSAO• 뷰 스페이스 노말, 깊이 SSAO
  3. 3. Ambient OcclusionGI를 위해서 고려하는 부분중 하나로 Ambient값에 관련된 부분이다.기본 조명 모델 중 Diffuse + Specular 위주의계산을 하고 Ambient는 상수로 지정하는데 이번 스터디에서는 Ambient 계산에 대한 내용을다룬다.
  4. 4. Ambient Occlusion물체의 구석진 곳이나 주름진 곳등 특정 부분에는 빛이 상대적으로 가려지거나 잘 받지 못하기때문에 다른 부분보다 어둡다.즉, 빛이 차폐된 정도를 계산한 것이라고 보면된다.
  5. 5. Ambient OcclusionAO(Global) Diffuse(Local) Combined
  6. 6. Ambient Occlusion
  7. 7. Ambient Occlusion
  8. 8. Ambient Occlusion
  9. 9. Ambient Occlusion특정 점을 기준으로 구를 그려 한번씩 가봐서다른 점이 나온다면 그 점에 대해서 차폐된 것이다.구 전체에 적용하면 정확하게 얼마만큼 차폐되었는지 구할 수 있다.
  10. 10. Ambient Occlusion (b)가 (a)보다 어두울 것이다!
  11. 11. Ambient Occlusion계산은 P에서 부터 주변의 거리를 측정한다.
  12. 12. Ambient Occlusion퀄리티 vs 퍼포먼스 정확하게 계산하면 할 수록 퀄리티는 Up 퍼포먼스는 Down
  13. 13. Ambient Occlusion실시간 게임에는 사용하기 힘들다.이론상은 알았지만 적용하지 못하고 있던 가운데…Crytek서 Screen Space에서 계산하는 AmbientOcclusion을 Crysis에 적용하였다!!
  14. 14. Ambient Occlusion 두둥
  15. 15. • Ambient Occlusion(AO)• SSAO• 깊이 버퍼 SSAO• 뷰 스페이스 노말, 깊이 SSAO
  16. 16. SSAO2007 SIGGRAPH conference에서Martin Mittring이 발표한Finding Next Gen – CryEngine 2에 소개된 기법
  17. 17. SSAOScreen Space에서 계산을 하기 때문에 화면에보이는 녀석만 처리할 수 있어 빠르다.하지만 이 방법도 정확할수록 느려진다.
  18. 18. SSAO퀄리티와 퍼포먼스를 높이기 위한 발전 방향최소의 리소스최소의 연산다양한 방법들이 생겨났다.
  19. 19. • Ambient Occlusion(AO)• SSAO• 깊이 버퍼 SSAO• 뷰 스페이스 노말, 깊이 SSAO
  20. 20. 깊이 버퍼 SSAODepthBuffer -> SSAO Buffer -> Lighting 깊이 버퍼를 가지고 AO를 구하는 기법
  21. 21. 깊이 버퍼 SSAO
  22. 22. 깊이 버퍼 SSAO
  23. 23. 깊이 버퍼 SSAO 해당 범위 에서 탐색
  24. 24. 깊이 버퍼 SSAO단순화된 샘플링 커널
  25. 25. 깊이 버퍼 SSAO
  26. 26. 깊이 버퍼 SSAO
  27. 27. 깊이 버퍼 SSAO
  28. 28. 깊이 버퍼 SSAO
  29. 29. 깊이 버퍼 SSAO
  30. 30. 깊이 버퍼 SSAO샘플링 커널 벡터 생성
  31. 31. 깊이 버퍼 SSAO임의의 노말맵 랜덤하게 벡터 얻어오기
  32. 32. 깊이 버퍼 SSAO거리에 따른 커널 사이즈 구하기
  33. 33. 깊이 버퍼 SSAO 반사를 이용해 랜덤성을 더 부여Ambient Occlusion 구하기
  34. 34. 깊이 버퍼 SSAO더해준 만큼 나눠줘서 정규화
  35. 35. 깊이 버퍼 SSAO
  36. 36. 깊이 버퍼 SSAO앞에서 만든 SSAO 버퍼를 읽어와 일반 조명계산에 추가해준다.부드러운 결과를 얻으려면 샘플링 해주면 된다.
  37. 37. 깊이 버퍼 SSAO
  38. 38. 깊이 버퍼 SSAO
  39. 39. • Ambient Occlusion(AO)• SSAO• 깊이 버퍼 SSAO• 뷰 스페이스 노말, 깊이 SSAO
  40. 40. 뷰 스페이스 노말, 깊이 SSAO위 방식에는 문제점이 보인다.Halo : 경계 부분에서 흰색이 나타난다.Self Occlusion : 전체적으로 회색급이다.
  41. 41. 뷰 스페이스 노말, 깊이 SSAO구 범위에서 차폐된 정도가 값으로 정해지기 때문.
  42. 42. 뷰 스페이스 노말, 깊이 SSAO아이디어는 가져오되 다른 방법이 많이 고려되었다.그 중 뷰 스페이스 노말, 깊이 SSAO를 알아보자.
  43. 43. 뷰 스페이스 노말, 깊이 SSAO먼저 뷰 스페이스 노말, 깊이 맵을 만든다.
  44. 44. 뷰 스페이스 노말, 깊이 SSAO먼저 뷰 스페이스 노말, 깊이 맵을 만든다.
  45. 45. 뷰 스페이스 노말, 깊이 SSAO계산에 필요한 것은 위치값이기 때문에 깊이값을 이용해서 위치값을 얻어오는 방법에 대해서알아보자.* 위치를 담아둔 맵이 있으면 그냥 사용하면 된다.
  46. 46. 뷰 스페이스 노말, 깊이 SSAOFrustum 좌표를 이용해서 위치를 얻어올 수 있다.
  47. 47. 뷰 스페이스 노말, 깊이 SSAO
  48. 48. 뷰 스페이스 노말, 깊이 SSAOFrustum 좌표를 만들어서 쉐이더에 넘겨준다.
  49. 49. 뷰 스페이스 노말, 깊이 SSAOQuad를 그려줄때 normal에 인덱스값을 넣어준다.
  50. 50. 뷰 스페이스 노말, 깊이 SSAOVertex Shader에서 아까 구했던 Frustum 좌표를 Pixel Shader로 보내준다.
  51. 51. 뷰 스페이스 노말, 깊이 SSAO현재 픽셀에 해당하는 뷰 공간 위치를 얻어온다.랜덤 벡터를 만들어 낸다.* offset 벡터를 구하는 부분은 위의 내용과 같다.
  52. 52. 뷰 스페이스 노말, 깊이 SSAOOffset 벡터와 노말의 내적을 구해서 부호를 구한다.현재 위치에서 부터 차폐를 검사할 벡터를 구한다.* flip을 곱해줌으로써 반구 방향으로만 계산
  53. 53. 뷰 스페이스 노말, 깊이 SSAO구한 벡터에 Projection * Texture Projection 행렬을 곱해서 스크린 좌표를 구한다.구한 좌표에 해당하는 깊이값을 구하고 깊이값에 매치가 되는 뷰 공간 좌표를 구한다.
  54. 54. 뷰 스페이스 노말, 깊이 SSAO
  55. 55. 뷰 스페이스 노말, 깊이 SSAOP와 R은 같은 평면상에 있으므로 차폐 계산에서제외시켜야 한다. -> 노말을 이용해서 계산
  56. 56. 뷰 스페이스 노말, 깊이 SSAO노말과의 내적연산을 해서 그 값을 Occlusion값에 적용한다. (같은 평면이면 0)차폐된 값을 구하면 된다.
  57. 57. 뷰 스페이스 노말, 깊이 SSAO차폐 계산에 대해서 Eipsilon 값을 두어서 특정 거리는 계산에서 제외시키고 차폐를 계산할 거리의범위를 두어서 선형적으로 계산한다. (값의 조절이필요)
  58. 58. 뷰 스페이스 노말, 깊이 SSAO차폐를 계산한 만큼 나눠줘서 차폐 값을 맞춰준다.차폐된 값을 적절히 변화를 줘서 적용하면 된다.
  59. 59. 뷰 스페이스 노말, 깊이 SSAO
  60. 60. 뷰 스페이스 노말, 깊이 SSAO적절히 계산이 된 것 같기는 하지만 바로 적용하기에는 부드러워 보이지 않는다.SSAO를 구현하면 SSAO 맵을 만든 다음 나오는 부분이 바로 Blur를 적용하는 것이다.
  61. 61. 뷰 스페이스 노말, 깊이 SSAOBlur를 계산할 때 고려해야할 점은경계부분은 유지를 하면서 (Edge Preserving)노이즈를 부드럽게 변환시키는 것이다.(Smooth)노말, 깊이 맵을 참조해서 Blur를 계산할 수 있다.
  62. 62. 뷰 스페이스 노말, 깊이 SSAO핵심 알고리즘만 보면…현재 픽셀의 노말값과 깊이값을 구해둔다.샘플링할 픽셀의 노말값과 의 내적과 깊이 차이를 통과한 부분만 샘플링을 함으로써 경계를 유지할 수 있다.
  63. 63. 뷰 스페이스 노말, 깊이 SSAO
  64. 64. 뷰 스페이스 노말, 깊이 SSAO
  65. 65. 뷰 스페이스 노말, 깊이 SSAO
  66. 66. 뷰 스페이스 노말, 깊이 SSAO
  67. 67. 뷰 스페이스 노말, 깊이 SSAO
  68. 68. 발전• SSDO• HDAO• HBAO 찾아서 정리하는대로 올리겠습니다. -0-;;
  69. 69. 결론SSAO는 Ambient Occlusion을 실시간으로 적용하려는 노력에서 나온 기법중 하나고 점차 발전해 나가고 있다.Deferred Rendering등 요즘 트렌드상에서 기본적으로 노말, 깊이, 위치 맵을 얻어오기 때문에적용하기 어렵지는 않을 것이다.
  70. 70. 결론게임에 따라서 적용했을 때 효과가 있는 프로젝트가 있고 아닌 프로젝트가 있을 것이다. 상황에 따라서 성능비가 그렇게 높지 않을 수 있으니 무조건 사용하겠다는 생각은 버리는게 좋겠다.정적인 오브젝트가 많다면 라이트맵을 적용하는게 퀄리티도 좋고 빠를것이다.
  71. 71. 참고자료http://en.wikipedia.org/wiki/Ambient_occlusionD3DBookA Simple and Practical Approach to SSAOhttp://blog.naver.com/sorkelf/40147954876
  72. 72.

×