문제

모션 블러가 2D 프로그램에 흐려질 생각이지만 현재 알고리즘의 결과를 의심합니다.

내 접근 방식은 현재 다음과 같습니다.

  • 백부퍼로 그리십시오.
  • 전면 버퍼를 업데이트 할 시간이되면 백부퍼를 전면 버퍼에 블렌딩하십시오.
  • 반복하다

"모션 블러"효과를 일으키는 것은 분명히 혼합물입니다.

이것은 하드웨어에서 분명히 요구되지 않으며, 이중 버퍼링은 어쨌든 수행 될 것이며 추가 단계는 Alpha 블렌딩입니다. 이는 간단한 계산입니다. 그러나 트레일은 매우 날카 로워지고 전혀 흐릿하지 않을 것입니다. 블렌딩 단계 전에 후면 버퍼에서 상자 블러를 할 수 있지만 Nintendo DS와 같은 저가형 시스템에서는 매우 세금이 부과 될 수 있습니다.

더 효율적으로 수행하거나 더 나은 결과를 얻을 수있는 솔루션이 있습니까?

도움이 되었습니까?

해결책

실제로 많은 중간 프레임을 렌더링하고 하나의 결과로 혼합해야합니다. 예를 들어, 출력 프레임 속도는 50fps입니다. 내부적으로 500fps와 10 개의 프레임을 혼합 한 그룹을 함께 렌더링하면 사용자에게 보여 주면 합리적인 결과를 얻을 수 있습니다.

현재 사용하고있는 접근 방식은 마치 느린 인으로 오래된 CRT에 렌더링하는 것처럼 지속성을 시뮬레이션합니다. 이것은 실제로 모션 블러와 같은 것이 아닙니다. 프레임 지속 시간이 20ms (1000/50) 인 경우 모션 흐릿한 프레임은 20ms 프레임 지속 시간에 걸쳐 렌더링으로 구성되며 모두 동일한 알파 가중치가 있습니다. 지속성 솔루션은 20, 40, 60, 80, 100ms 전의 렌더링으로 구성되며 점차 사라지고 있습니다.

다른 팁

내 지식에 더 효율적으로 할 수있는 실제 방법은 없습니다. 그것은 그것이 얻는 것만 큼 효율적입니다. 프레임 속도가 좋고 움직임도 너무 날카 로워지지 않으면 꽤 좋아 보입니다.

가장 잘 보이는 계획은 각 픽셀에 대해 새로운 위치에서 이전 위치로 반대하는 선을 그리는 것입니다. 그러나 이것은 사소한 계산이 아닙니다.

전혀 날카 롭지 않을 수도 있습니다. 그것은 모두 사용 된 블렌딩 함수에 따라 다릅니다. 예를 들어, 이전/현재 이미지의 경우 0.1/0.9는 각각 희미한 트레일을 제공합니다.

나는 이것이 본질적으로 OpenGL에서 모션 흐리게되는 방식이라고 덧붙일 수 있습니다 (축적 버퍼를 통해).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top