Advertisement
Advertisement

More Related Content

Advertisement

Recently uploaded(20)

Ssao

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