UDN
Search public documentation:

MotionBlurSoftEdgeKR
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

UE3 홈 > 포스트 프로세스 이펙트 > 모션블러 소프트에지 포스트 프로세스 이펙트
UE3 홈 > 시네마틱 아티스트 > 모션블러 소프트에지 포스트 프로세스 이펙트

모션블러 소프트에지 포스트 프로세스 이펙트


SoftEdgeFan.jpg
소프트에지를 통해 움직이는 오브젝트 밖으로의 모션블러링이 가능합니다.

문서 변경내역: Martin Mittring 작성. 홍성진 번역.

개요


추천 글: Motion Blur KR

소프트에지 기능을 사용하면 모션블러에 필름같은 효과를 추가하여 품질을 훨씬 나아집니다. 필름 카메라에서 흔히 말하는 빛을 더 받기 위해 셔터를 일정 기간 개방하는 효과인 것입니다. 움직이는 물체의 이동 방향을 따라 잔영이 나타나는 것이죠. 이 모션블러는 다수의 텍스처 샘플을 평균내는 식으로 이미지 콘텐츠를 흐리게 만드는 포스트 프로세싱 효과를 기반으로 합니다. 필름 이미지같은 오브젝트 밖으로의 블러링 효과는 가능이야 합니다만 손이 좀 갑니다. 그런 문제에 대한 해결책을 바로 모션블러 소프트에지 기능이라고 부릅니다.

이 기능의 기술적인 속성을 알아 둬야 어플의 필요에 따라 모양과 퍼포먼스을 조절할 수 있을 것입니다.

소프트에지 활성화 및 올바른 파라미터 설정하기


소프트에지 기능은 위버 포스트 프로세스 노드 내의 포스트프로세싱 체인 내에서 활성화시킬 수 있습니다:

EditorSetting.jpg
0으로 두면 소프트에지 기능은 꺼지(나 빠르)고, 값이 커 질수록 반경도 커 집니다. (1..10 범위가 좋습니다.)

소프트에지 기능을 사용할 때는 Max Velocity(최대 속도)도 늘려줘야 모션블러 효과도 강해집니다.

결과


MotionBlurSoftEdgeNumbers.jpg
왼쪽: 오브젝트 안에만 블러
중간: 오브젝트 바깥 블러 기능 사용
오른쪽:반경을 높여 효과를 완전 키움

이 기능은 퍼포먼스을 약간 잡아먹습니다. 반경이 커 질수록 (블러링 도중의 샘플링이 많아지니) 약간씩 더 들어갑니다. 값이 크면 각기 달리 움직이는 오브젝트가 너무 가까이 있을 때 모션에 왜곡이 생길 수도 있습니다. 중간 이미지에서 나타나는 것처럼 값이 너무 작으면 움직이는 오브젝트가 잘려 보일 수도 있습니다. 경험에 의하면 (1 정도의) 작은 값도 괜찮은 결과를 내긴 했습니다. 모션을 강하게 하려면 5나 10 정도의 값을 줘여 할 수 있습니다. 최대 속도에 따라 값을 계산할 수도 있지만, 퍼포먼스과 품질의 줄타기를 하면서 가급적 작은 값을 찍을 수 있도록 하는 편이 나은 것 같습니다.

실행시간에 값 바꾸기


MotionBlurSoftEdge 콘솔 명령을 통해 포스트 프로세싱 체인에 지정된 세기를 덮어쓸 수 있습니다. 파라미터 없이 명령만 넣으면 도움말을 볼 수 있습니다. 이 명령은 얼린(, 즉 freezeframe 명령을 사용했을 때나 게임을 일시정지시킨) 상태에서 사용하는게 좋습니다. 주의할 점은, 모션블러 스키닝 은 얼릴 수가 없습니다. 현재 매 프레임마다 업데이트하도록 구현해 놨는데, 중간에 어떤 오브젝트가 얼어버리면 본별 정보가 사라지기 때문입니다.

console.jpg
콘솔 명령의 도움말입니다.

조금 실험해 보면 적절한 값을 찾을 수 있을 것이고, 그 값을 포스트 프로세싱 체인에서 사용하면 됩니다.

구현


모션블러는 씬이 모션 방향으로 블러링되는 포스트 프로세스에서 구현됩니다. 모션 방향은 속도 텍스처 (화면 공간 2D 모션 벡터는 색으로 인코딩됨) 및 카메라 모션으로부터 나옵니다. 그 방법은 Motion Blur KR 에서 설명했습니다. 그래픽 하드웨어는 scatter (다수의 대상에 데이터 분산) 메써드보다 gather (보통 텍스처 매핑) 메써드가 훨씬 빠릅니다. 모션블러용으로는 현재 픽셀에 대해서 어느 인접 픽셀로부터 내용물을 받는지 알아야 합니다.

소프트에지 기능을 끄면 그저 현재 픽셀의 모션은 인접한 것과 같을 거라고 가정합니다. 색 누수를 피하기 위해 모션 방향이 다르거나 없는 픽셀은 거부합니다. 깔끔한 해결책이긴 합니다만, 오브젝트 경계 밖으로는 블러가 생기지 않습니다.

소프트에지 기능을 켜면 단순한 가우시안 블러를 가지고 중간 속도 텍스처를 블러링합니다. 모션 벡터를 블러링하면 모션 벡터의 길이에 손실이 생길 것입니다. 그걸 보상하기 위해 다른 (오브젝트 모션이 없으면 0, 있으면 1) 채널 또한 블러링합니다. 이 채널을 나눠 줌으로써 모션 세기 손실을 보상할 수 있습니다.

내부 버퍼가 어때 보이는가는 다음 이미지와 같습니다 (모션 벡터는 다르게 인코딩되기에 색이 다릅니다):

MotionBlurSoftBlurredVelocity.jpg
왼쪽: 속도 텍스처
중간: 블러링된 속도 텍스처 (좁은 반경)
오른쪽: 블러링된 속도 텍스처 (넓은 반경)

블러링된 이미지의 해상도가 훨씬 낮음에 주목해 보십시오. 디테일 손실은 모션중에는 보이지 않으며, 텍스처에 바이리니어 필터링까지 하면 더합니다.

포스트 프로세싱 도중 샘플링에 사용할 오브젝트 방향을 구하기 위해 블러링된 속도 벡터를 사용합니다. 카메라 모션 방향 또한 샘플링해서 결과를 섞어줍니다.

퍼포먼스


완전히 구현된 것으로 보지는 않습니다만, 사용 가능한 만큼 충분히 빨라 보입니다. 모션을 강하게 할 수록 텍스처 캐시가 이 수치에 영향을 줄 수 있으니 약간 나빠지긴 할 것입니다. 그 최적화 방법을 모색중입니다.