UDN
Search public documentation:
MotionBlurSkinningKR
English Translation
日本語訳
中国翻译
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
日本語訳
中国翻译
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
모션블러 스키닝 포스트 프로세스 이펙트
![]() |
각기 다른 방향으로 움직이는 부분에는 모션블러의 방향과 세기도 다릅니다. |
문서 변경내역: Martin Mittring 작성. 홍성진 번역.
개요
![]() |
왼쪽: 기능 끔 중간: 기능 켬 오른쪽: 픽셀별 속도를 색으로 표시 |
기능 켜기
![]() |
MotionBlurSkinning 콘솔 명령을 사용한 화면입니다. |
스켈레탈 메시 플랙 설정하기

구현
제한된 본 수
본 데이터 저장을 위해 1D 텍스처를 사용하기에 본 수에 제한이 있습니다. 현재는 4096 폭 텍스처를 사용하며, 본당 3 텍셀을 저장해야 합니다. stat SceneUpdate 명령으로 이 제한에 걸리나 볼 수 있습니다. 근처의 오브젝트에만 모션블러를 쓰기에 아직 본 수가 문제되는 것을 본 적은 없습니다. 얼굴 애니메이션용 모션블러에는 모션블러 스키닝 기능이 필요하지 않음을 알아두시기 바랍니다.셰이더 순열
스킨드 모션블러가 있거나 없을 때 셰이더 순열(permutation)을 피하려 노력했습니다. 대부분 코드 복잡도를 낮추기 위함이지만, 전반적인 셰이더 수를 줄이기 위함이기도 합니다. 정적 분기(불 셰이더 상수에 비교)를 사용하기로 결정했는데, 문제도 해결되고 드라이버를 통해 최적화되기 때문입니다. 엑스박스360에서는 셰이더 순열을 피하기 위해 정적 분기를 사용합니다. 확인한 바로는 컴파일한 것 만큼 빠릅니다. 다른 플랫폼에서는 아직 이 기능을 사용하지 않습니다. (최적화 부분 참고)성능
CPU 데이터 업데이트
스킨된 모션블러는 이전 프레임의 데이터를 저장하고 다음 프레임부터 재사용하기에 CPU 비용이 그리 높지 않습니다. 텍스처 록 연산상의 드라이버 성능은 느릴 수 있는데 그런 연산 카운트를 프레임별로 추적합니다. stat SceneUpdate (씬 업데이트 통계) 콘솔 명령으로 수치를 확인할 수 있습니다. 업데이트된 본의 양도 확인할 수 있습니다. ![]() |
통계에서 록에 대한 CPU 시간과 업데이트된 본의 양을 확인할 수 있습니다. |
추가 드로 콜
모션블러된 오브젝트는 (픽셀별 모션 벡터를 저장하기 위해) 속도 렌더링 패스에서 렌더링할 필요가 있습니다. 스킨되지 않은 모션블러에 대해서는 오브젝트 모션이 있을 때만 이 작업을 해 주면 됩니다. 스킨된 오브젝트에 모션이 있는지를 테스트하기 위해서는 데이터를 훨씬 많이 검사해야 할 것입니다. 아직 이 최적화는 하지 않습니다. 할 수야 있었지만 움직이는 오브젝트가 많은 최악의 경우에는 도움이 되지 않을 것입니다. 즉 움직이지 않는 (봇과 같은) 오브젝트에 대해 스킨된 모션블러를 켜 버리면 렌더링에 드로 콜이 추가로 발생한다는 것입니다.버텍스 텍스처 펫치 GPU 비용
현재 메써드에는 매우 큰 버텍스 포맷 속으로의 버텍스 텍스처 펫치가 12 필요합니다. (본 하나 4x3 매트릭스용 4 플로트, 스키닝용 4 본) 무슨 뜻이냐면 이런 식의 렌더링에는 버텍스가 더 많이 들어가며, 렌더링도 느려진다는 것입니다. 근처의 오브젝트만 이런 식으(속도 렌더링 패스)로 렌더링되게 해야 근처의 액션 다수에서만 렌더링 비용이 정점을 찍게 됩니다. 엑스박스360에서 (모프 포함 빽빽한 트라이앵글 메시의) 속도 렌더링 패스를 프로파일링할 때 리짓 모션블러일 때보다 렌더링이 60% 느려지는 것을 확인했습니다. (모든 오브젝트가 움직여서 렌더링을 생략할 수가 없었던 거죠.)메모리

다른 플랫폼 지원
최적화
- 엑스박스360에서 "vfetch" 기능을 버텍스 텍스처 펫치 대신 사용할 수도 있습니다.
- 버텍스별 본 룩업을 4 미만으로 할 수도 있습니다. (질이 떨어지겠지만 괜찮은 수준일 듯)
- 게임 코드가 움직이지 않는 오브젝트를 발견했을 때 끌 수 있도록 하기 위해 런타임에 bPerBoneMotionBlur (본별 모션블러 여부)를 검사할 수도 있습니다. (이것 자체는 간단해도 쓸만해 지려면 게임 코드 작업이 좀 필요)
- PC와 플레이스테이션 3에서도 정적 분기를 활용하는 것입니다. 현재 엔진에 버그가 있어 사용할 수가 없습니다. 대안으로써 해당 기능을 끄기 위해 플로트의 상태를 체크합니다. (즉 스킨되지 않은 오브젝트도 속도 렌더링 패스에서 셰이더 비용이 엄청 든다는...)
- 현재 텍스처가 일부만 사용되도 전체 텍스처를 록 합니다.
- 속도 렌더링이 필요하면 모든 본을 그 전 것에다가 비교하여 테스트합니다.
쓸만한 콘솔 명령
-
MotionBlurSkinning
- (모션블러 스키닝) 위에 설명