GLSL 쉐이더 효과 : 모션 블러를 수행하는 방법?


16

스프라이트가 풍경, 캐릭터 등으로 돌아가는 완전한 2D 환경이 있습니다.

보다 최신의 느낌을주기 위해 카메라를 빠르게 움직일 때 최신 FPS 게임 (예 : 크라이시스) 블러와 유사한 모션 블러 효과를 구현하고 싶습니다.

사이드 스크롤러에서 원하는 효과는 카메라가 움직일 때 빠른 움직임에 대한 아이디어를 제공하기 위해 약간의 흐림 효과가 나타나는 것입니다. 누구 든지이 작업을 수행하는 데 도움이 될 수 있다면 픽셀 쉐이더를 사용한다고 가정합니다. 감사합니다.


렌더링 된 버퍼의 사본을 여러 개 보관하십시오. 예를 들어, 이전 프레임 중 4 개를 흐리게하여 현재 프레임을 만듭니다. 원하는 효과를 만들어야합니다.
knight666

@ knight666은 여분의 버퍼 (A라고 부름)를 유지하고 출력 버퍼 (화면으로 이동)와 그 일부 (0.75)를 혼합하는 것보다 낫지 않습니다 (메모리는 확실히 확실하지 않습니다). B)라고 부르고 나중에 B를 A에 복사하십시오. 이것은 롤링 평균을 생성하고 모션 블러를 증가시키는 것은 추가 비용이 들지 않습니다.
Elva

1
나는 이것을 주석으로 만들려고했지만 주석 버튼을 찾을 수 없었습니다. 어쨌든 Dave O.가 말하는 것은 아마도 당신이 가장 내기이고 Crysis와 같은 게임에서 사용되는 것입니다. 이것은 이런 식으로 작동합니다. 객체를 렌더링하는 동안 객체 속도를 별도의 버퍼로 렌더링합니다. MRT를 사용하면이 작업이 더 빨라지고 속도를 계산하는 여러 가지 방법이 있지만 전체 렌더 버퍼에 대한 속도가있는 추가 버퍼가 필요합니다. 그런 다음 모든 픽셀에서의 속도를 기준으로 후 처리 셰이더에서 벨록의 반대 방향으로 컬러 버퍼로 샘플링합니다.
Arelius

Listing 27-1의 HLSL / Cg 코드는 전체 화면 후 처리 픽셀 쉐이더의 이전 방정식을 사용하여 깊이 버퍼와 전류의 역수를 사용하여 주어진 픽셀에서 렌더링 된 객체의 월드 공간 위치를 계산합니다. 뷰 프로젝션 매트릭스. ... HLSL .... 귀하의 코드에서는 GLSL이 아닙니다 .....

답변:


6

마지막 프레임 버퍼의 사본을 보관하십시오. 카메라 움직임 벡터를 가져 와서 뒤집습니다. 평소처럼 장면을 그린 다음 약간의 오프셋 (방금 계산 한 카메라 델타)과 0.75 알파로 마지막 프레임 버퍼를 그립니다. 모션 블러 효과를주기 위해 원하는만큼 반복하십시오.


1
이 방법은 구현하기가 쉽지만 미세 조정하기가 매우 어렵습니다 (흐리게 보이지 않고 흔적을 남기는 물체처럼 보일 수 있음). 또 다른 간단한 접근 방식은 후 처리 픽셀 쉐이더에서 반전 된 카메라 이동 방향으로 픽셀을 "바르게"하는 것입니다.
Dave O.

6
이 방법의 주요 문제점은 프레임 속도에 따라 다르다는 것입니다. 20fps에서 실행중인 경우 100fps에서 실행중인 경우의 모양과 매우 다르게 보입니다. 그것을 알고 있고 원하는 프레임 속도로 원하는 결과를 얻는 한 괜찮습니다.하지만 알고 있어야합니다.
Maximus Minimus

19

이 방법을 사용하는 것이 좋습니다. 후 처리 효과로 모션 블러

구현하기 매우 간단합니다. glsl 데모에서 사용한 것입니다. Ruin island [link]


이 방법은 과거 프레임에서의 혼합보다 훨씬 우수합니다.
Steven Lu

현재와 ​​같이이 답변은 링크 만 제공합니다. 나중에 링크가 끊어지면 아무도 실제로 문제를 해결 하는 방법 을 알 수 없습니다 . 최소한 링크가 제공하는 필수 정보를 포함 시키십시오

네, 인터넷 사본을 만들어 봅시다. 그 사본은 완전히 깨지지 않을 것입니다. : J
SasQ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.