09_motionblur

1,007 views

Published on

퍼 픽셀 모션블러 입문

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,007
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

09_motionblur

  1. 1. introduction 김성익(noerror@hitel.net) 2009.4
  2. 2. MotionBlur• 모션블러란 ?• 구현이슈 – 결과를 누적시켜서 적용하는 방법 – 픽셀별 속도(방향과 크기)를 구해 블러시키는 방법
  3. 3. Image space motion blur• 포스트 프로세스 처리• 셰이더사용• 모션 블러 영역안의 픽셀의 속도를 구해 현재 프레임의 이미지로 블러처리
  4. 4. Algorithm• 텍스처에 전체 화면 렌더링 (t1 : scene)• 각 픽셀별로 속도를 계산 (t2 : velocity mask) – 버텍스 셰이더 이동 – 이전 위치와 현재 위치를 이용• 두 장의 텍스처(t1, t2)로 모션블러 합성• 마지막 두 단계는 한 단계로 통합가능 – t1을 복사한 t1’ 으로 t1에 픽셀별로 바로 합성
  5. 5. Scene Texture
  6. 6. Velocity Texture(1)• 버텍스 별로 Velocity 계산• 현재 스크린스페이스와 이전 위치의 스크린 스페이스, dt 를 이용 Velocity를 구함
  7. 7. Velocity Texture(2)• 이전위치 전달 – 이전 프레임의 매트릭스와 ViewTM을 전달 (일반적인 형태) • prevProjCoord = in.coord * prevTM * prevViewTM • 세이더 변수의 개수제한으로 스키닝에 한계가 있음 (가능하다면) – prevProjCoord = (in.coord * prevTM[in.idx.x] * in.weight.x + in.coord * prevTM[in.idx.y] * in.weight.y … ) * prevViewTM – 이 경우 Shader3 Model은 텍스처를 이용하면 접근 가능 – 버텍스 정보에 담아서 (텍스처정보에 이전 위치 벡터를) • CPU로 소프트웨어 트랜스폼 및 스키닝을 하는 경우prevProjCoord = in.prevCoord * prevViewTM• 가볍게 카메라의 이동에 대해서만 처리하는 것도 가능 – prevProjCoord = in.coord * curTM * prevViewTM
  8. 8. Velocity Texture(3)
  9. 9. Velocity Texture(4)-stretch• 괘적을 표현하기 위해서 메시를 부풀림• 정교한 괘적은 아니지만 납득할 수준• 버텍스 노멀과 좌표계상(screenspace X)의 방향으로 버 텍스의 위치를 현재 프레임과 이전 프레임 중 선택
  10. 10. Velocity Texture(5)
  11. 11. Velocity Texture(6)
  12. 12. Composition (1)• 속도로 블러 시킬 길이를 구한 다음 n개의 구간으로 나 눠서 SceneTexture 의 텍스처 샘플링 데이터를 조합• 퀄리티를 위해선 최대 길이를 제한 할 필요 있음
  13. 13. Composition (2)• 샘플링을 많이 할수록 자연스러움 (속도는 더 느려짐)
  14. 14. Result
  15. 15. Degeneracy Geometry• 스트래칭시 메시의 변형이 심해서 원하는 형태가 안나오 는 경우 대비해서 보이지 않는 안쪽에 면을 만들어둠
  16. 16. Depth-based Velocity• 씬이 정적이라고 가정하고 카메라에 의한 변화만 있다고 가정 (원경은 동적이더라도 움직임이 작아 납득할 수준)• 스크린상 위치와 depth를 이용하면 뷰 좌표를 얻을 수 있으므로 이전 카메라 viewTM을 이용해서 Velocity 일괄 계산
  17. 17. Velocity Dilation• 약간 부풀려서 엣지를 확보
  18. 18. Blend Mask
  19. 19. Iterative Quality Improve• 합성 패스를 늘려서 적은 샘플링으로 고퀄리티를 얻어냄
  20. 20. Reference• Stupid OpenGL Shader Tricks - Simon Green• Implementing Motion Blur & Depth of Field using DirectX 8 - Matthias Wloka• Hardware Accelerated Motion Blur Generation - Clement Shimizu, Amit Shesh, Baoquan Chen• Crysis Next Gen Effects - Tiago Sousa• Lost Planet 그래픽스강좌 http://game.watch.impress.co.jp/docs/20070131/3dlp.htm

×