作为一名底层小特效,热扭曲可谓特效装逼利器但是想要在URP环境下实现热扭曲效果实在艰难,在普通管线下各种大佬的shader都是带热扭曲的自己会连连看的话实现热扭曲也不难,但是URP管线下常规方法失去效果了,深知不学会热扭曲就无法跻身大佬们的脚后跟下。翻越各种网上资料后找到两位大佬提供的文献帮助顺利实现了URP环境下的热扭曲效果。观看不便可直接跳转知乎(Unity URP管线ASE热扭曲效果学习总结 - 知乎 (zhihu.com)) (参考大佬文献在最后)
本文为了各位特效同胞能够实现效果而编写,就不注重讲解原理只需要按照步骤就可以实现热扭曲效果。
首先我们需要打开unity左上Edit→projectsettings 在管线的渲染设置中,点一下图形设置Graphics上挂载的渲染设置。
勾选 Opaque Texture 选项
接下来用ASE编写普通热扭曲需要用到的shader。设置为透明序列
勾选Unpavk Normal Map选项打开Scale接口
最基础的获取屏幕坐标和颜色的ASE方法制作热扭曲效果但是在URP环境中会把我们的特效给切掉,所以需要以下操作。(图中所用的粒子是发射一个圆的模型)
接下来再新建一个子摄像机放到原摄像机的下层,设置如下图所示
全部取消勾选,Culling Maks选项一定要炫Nothing
把子摄像机放在主摄像机的Stack中
接下来创建贴图采样所需要的渲染队列
点击我们渲染管线中的RendererList 中的文件
添加Render Objjects组件 添加新的渲染队列,这个是热扭曲的渲染队列。接下来再添加一个渲染队列,让特效使用这个渲染顺序去先于热扭曲采样贴图之前去渲染,这样热扭曲效果就能采样到我们的特效。
注意Event中的顺序
接下来开始我们的shader制作,首先是我们的热处理shader,跟原来的shader差别不但是要把我们采样到的效果在这个shader中进行处理。
pass中的 Tags下面LightMode改成我们为热扭曲创建的队列
shader中的主帖图名字一定要改成 _CameraColorAttachmentA 这个名字,,如果是Unity2021之前的版本名字要改成_AfterPostProcessTexture !!!可以打开窗口Frame Debug 看摄像机的名字
简易的热扭曲效果,可以控制主帖图和遮罩贴图的UV流动,想要更加复杂的效果可以自行添加。
接下来是普通特效shader的编写,与其他shader也并没有什么不同,同样是需要pass中的 Tags下面LightMode改成我们为特效创建的队列
非常简易的半透明shader
在游戏中创建好我们的热扭曲粒子和特效粒子之后就可以得到下面的结果
人人有功练 Unity URP管线透明折射扭曲材质的一系列实践(一)两种渲染时机的扭曲材质 - 知乎 (zhihu.com)