09_motionblur
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

09_motionblur

on

  • 1,065 views

퍼 픽셀 모션블러 입문

퍼 픽셀 모션블러 입문

Statistics

Views

Total Views
1,065
Views on SlideShare
1,065
Embed Views
0

Actions

Likes
0
Downloads
8
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

09_motionblur Presentation Transcript

  • 1. introduction 김성익(noerror@hitel.net) 2009.4
  • 2. MotionBlur• 모션블러란 ?• 구현이슈 – 결과를 누적시켜서 적용하는 방법 – 픽셀별 속도(방향과 크기)를 구해 블러시키는 방법
  • 3. Image space motion blur• 포스트 프로세스 처리• 셰이더사용• 모션 블러 영역안의 픽셀의 속도를 구해 현재 프레임의 이미지로 블러처리
  • 4. Algorithm• 텍스처에 전체 화면 렌더링 (t1 : scene)• 각 픽셀별로 속도를 계산 (t2 : velocity mask) – 버텍스 셰이더 이동 – 이전 위치와 현재 위치를 이용• 두 장의 텍스처(t1, t2)로 모션블러 합성• 마지막 두 단계는 한 단계로 통합가능 – t1을 복사한 t1’ 으로 t1에 픽셀별로 바로 합성
  • 5. Scene Texture
  • 6. Velocity Texture(1)• 버텍스 별로 Velocity 계산• 현재 스크린스페이스와 이전 위치의 스크린 스페이스, dt 를 이용 Velocity를 구함
  • 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. Velocity Texture(3)
  • 9. Velocity Texture(4)-stretch• 괘적을 표현하기 위해서 메시를 부풀림• 정교한 괘적은 아니지만 납득할 수준• 버텍스 노멀과 좌표계상(screenspace X)의 방향으로 버 텍스의 위치를 현재 프레임과 이전 프레임 중 선택
  • 10. Velocity Texture(5)
  • 11. Velocity Texture(6)
  • 12. Composition (1)• 속도로 블러 시킬 길이를 구한 다음 n개의 구간으로 나 눠서 SceneTexture 의 텍스처 샘플링 데이터를 조합• 퀄리티를 위해선 최대 길이를 제한 할 필요 있음
  • 13. Composition (2)• 샘플링을 많이 할수록 자연스러움 (속도는 더 느려짐)
  • 14. Result
  • 15. Degeneracy Geometry• 스트래칭시 메시의 변형이 심해서 원하는 형태가 안나오 는 경우 대비해서 보이지 않는 안쪽에 면을 만들어둠
  • 16. Depth-based Velocity• 씬이 정적이라고 가정하고 카메라에 의한 변화만 있다고 가정 (원경은 동적이더라도 움직임이 작아 납득할 수준)• 스크린상 위치와 depth를 이용하면 뷰 좌표를 얻을 수 있으므로 이전 카메라 viewTM을 이용해서 Velocity 일괄 계산
  • 17. Velocity Dilation• 약간 부풀려서 엣지를 확보
  • 18. Blend Mask
  • 19. Iterative Quality Improve• 합성 패스를 늘려서 적은 샘플링으로 고퀄리티를 얻어냄
  • 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