2015-12-02 3 views
1

Я хочу размыть весь экран. Моя первая попытка состояла в том, чтобы использовать пользовательскую шейдерную и ядерную свертку. Но это, конечно, вызвало резкое падение кадров. Моя вторая попытка заключается в использовании преобразования Фурье. Поэтому мой план состоит в том, чтобы взять изображение из источника RenderTexture, используя функцию «OnRenderImage», и выполнить преобразование, а затем сохранить обратно.Преобразование Фурье для применения единства Gaussian Blur

void OnRenderImage (RenderTexture source, RenderTexture destination){} 

Но это означает, насколько я мог понять его, копировать изображение из памяти видеокарты в ОЗУ, применяя преобразования, а затем скопировать его обратно.

Это действительно лучший способ сделать это, или я должен попробовать что-то еще.

С наилучшими пожеланиями и спасибо

ответ

0

Unity имеют встроенный эффект размытия в стандартном пакете активов, и это, вероятно, лучший способ сделать это: http://docs.unity3d.com/Manual/script-BlurOptimized.html

Чтобы использовать это просто импортировать эффекты стандартного пакета активов , и добавьте скрипт Blur на камеру.

За кулисами, он на самом деле будет использовать OnRenderImage, но это не означает, копирование изображения из графической памяти в ОЗУ, применяя преобразования, а затем скопировать его обратно.

Объект RenderTexture представляет собой текстуру, расположенную в памяти графической карты. Вы не копируете пиксели в ОЗУ, чтобы управлять им. Вместо этого манипуляции на нем выполняются в графическом процессоре через фильтры на основе шейдеров, то есть Graphics.Blit(source, destination, someEffectMaterial);.

Смотреть подробнее о Постобработка эффектов: http://docs.unity3d.com/Manual/comp-ImageEffects.html