屏幕扭曲效果

项目中我使用的方法,自己记录下。

1》扭曲效果本身实现

方向使用渲染物体的法线来标记,渲染完其他物体后,最后渲染扭曲,将一张渲染完成后的rt传入shader中,根据渲染物体的屏幕座标渲染根据法线偏移过后的像素,达到扭曲效果。

当然这个方法可以使用两个相机来实现,考虑到项目中经常要对相机做复制,双层相机复制的步骤繁琐且不好管理。而且双相机的性能也有一定的损耗。

最后采用CommandBuffer来实现。我们手动渲染扭曲物体。

 

2》实现流程

先管理一个list用来记录扭曲物体,同时这些扭曲物体不会被任何相机渲染,主要用来提供renderer和material。供给CommandBuffer.DrawRenderer使用。

项目使用前向渲染,我们需要在透明物体渲染结束之前渲染扭曲物体即可。

Camera.AddCommandBuffer(CameraEvent.AfterForwardAlpha, _distortionCommand);

在渲染物体之前,需要把当前绘制的rt拷贝出来,以供扭曲物体使用。

_distortionCommand.Blit(BuiltinRenderTextureType.CameraTarget, distortionRT);

接着传入Shader

_distortionCommand.SetGlobalTexture(PARAM_SCENE_COPY, distortionRT);

设置回来

_distortionCommand.SetRenderTarget(BuiltinRenderTextureType.CameraTarget);

接下来手动渲染之前就收集好的扭曲物体

_distortionCommand.DrawRenderer(GameGraphics.Instance.distortionObjList[i].rendererDis, GameGraphics.Instance.distortionObjList[i].materialDis);

搞定,记得rt复用减少gc节省内存。

 

发布了25 篇原创文章 · 获赞 9 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章