原创作品

Unity URP管线用ASE实现热扭曲

YFY 发表于   2023-09-15 18:38:19
4211
2
31

作为一名底层小特效,热扭曲可谓特效装逼利器但是想要在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)

URP中半透效果的热扭曲效果实现 - 知乎 (zhihu.com)

标签:
确定
评论(2)
sophie
这个扭曲是不是只能扭曲不透明物体,没法扭曲半透?
回复
111天前
YFY
回复
sophie
都可以扭曲
回复
93天前
老腿毛
好复杂的设置
回复
605天前
YFY
回复
老腿毛
实际就是采样到的画面在渲染特效之前,新建一个渲染队列把特效放到画面采集之前就行
回复
605天前
老腿毛
回复
YFY
有没有简单一点的方法。多个摄像机有时候程序不愿意
回复
605天前
YFY
回复
老腿毛
好像不加新的摄像机也没关系你可以试试
回复
605天前
没有更多啦~