Unity 在urp管线下加了tag依然只有单pass

        之前写了个shader, 结果显示的效果和预想得相差甚远. 研究了一下才发现写了多个pass, 但是只有一个pass被渲染了.

 

从Frame Debug可以看到只渲染了一次 

        发现在urp管线下默认只渲染一个pass, 从网上搜到了解决的办法, 给不同的pass加上不同"LightMode"的tag就可以同时渲染.

public DrawObjectsPass(string profilerTag, bool opaque, RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask, StencilState stencilState, int stencilReference)
            : this(profilerTag,
                new ShaderTagId[] { new ShaderTagId("SRPDefaultUnlit"), new ShaderTagId("UniversalForward"), new ShaderTagId("UniversalForwardOnly"), new ShaderTagId("LightweightForward")},
                opaque, evt, renderQueueRange, layerMask, stencilState, stencilReference)
        {}

 从这段源码中可以看到默认有四个tag可以使用用, 如Tags{ "LightMode" = "UniversalForward" }

        但是加了之后我的问题依然没有解决, 还是只渲染的一个pass. 经过排查后发现是urp的2D Render导致的.

         把Render换成默认的Render就可以解决了.

 问题解决, 两个pass都渲染出来了

Unity引擎的Universal Render Pipeline (URP)下,创建自定义的include文件主要是为了组织和复用资源,例如材质、CG脚本或者其他需要在多个场景中使用的代码片段。以下是创建自定义include文件以及遵循的一些基本步骤和规范: 1. 创建目录结构:首先,在Assets目录下的Resources/Shader Library/Include路径下建立一个新的文件夹,比如MyCustomIncludes。这将用于存放所有自定义的include文件。 2. 编写include文件:在新建的文件夹里,创建一个新的Cg/HLSL脚本文件,例如`MyCustomFunction.cginc`。这里可以编写你需要的统一函数、变量声明等。注意保持命名清晰,方便理解功能。 ```hlsl // MyCustomFunction.cginc float4 MyCustomFunction(float2 uv) { // 自定义计算逻辑... return float4(uv.x * 0.5 + 0.25, uv.y * 0.75, 0, 1); } ``` 3. 引入到材质中:在使用这个自定义函数的材质中,通过`#pragma include "MyCustomFunction.cginc"`指令引入它。 ```hlsl material Properties { #pragma vertex vert #pragma fragment frag #pragma target 3.0 #pragma include "MyCustomFunction.cginc" struct Input { float2 uv_MainTex; }; half4 frag(Input i) : SV_Target { half4 col = MyCustomFunction(i.uv_MainTex); return col; } }; ``` 4. 规范遵守: - 使用统一的命名规则,如小驼峰式或下划线分隔,以便于理解和管理。 - 尽量避免直接修改内置的include文件,以防将来Unity更新导致冲突。 - 在需要的地方添加注释,说明文件的功能和用途。 - 对于复杂的自定义组件,可能需要封装成预设(Prefab)以方便在项目中管理和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值