如何在 Unity 中将纹理添加到自定义着色器的实例属性? (URP)

问题描述 投票:0回答:1

我正在使用通用渲染管道在 Unity 中编写 2D 游戏,以便我可以利用其自动照明。我编写了一个着色器,它已经使用了一些实例化属性,例如自定义颜色和伤害级别,并且这些效果很好。

        UNITY_INSTANCING_BUFFER_START(Props)
            UNITY_DEFINE_INSTANCED_PROP(half, _Injury)
            UNITY_DEFINE_INSTANCED_PROP(half4, _Custom1)
            UNITY_DEFINE_INSTANCED_PROP(half4, _Custom2)
        UNITY_INSTANCING_BUFFER_END(Props)

接下来我想做的是允许与着色器关联的某些纹理也成为实例化属性,以便我可以根据具体情况更改它们。这些是辅助纹理,用于向各种服装添加自定义图案,而无需制作大量替代纹理。

问题是,我找不到任何关于如何将纹理声明为实例化属性的参考。我非常确定这应该是可能的,因为

MaterialPropertiesBlock
类有一个
SetTexture
函数,其格式与用于设置浮点值的函数类似,但我找不到任何示例来说明如何操作。

谁能告诉我这个过程吗?即使只是实例化属性的正确声明也会有所帮助,因为我尝试了几种不同的方法,它们都会给出非常神秘的错误。

unity-game-engine shader urp
1个回答
0
投票

再次,经过大约一个小时的努力,我在此处发布问题后几分钟内就找到了答案。这正在成为一种习惯。那好吧。显然,正确的形式让我困惑,因为正确的类名不是 2D(它出现在着色器属性部分中),也不是 Text(C# 代码中出现的),也不是 TEXTURE2D(出现在将它们定义为变量的宏中的),但是

Texture2D

只有纹理本身需要位于实例化属性部分中。采样器应该以通常的方式创建。

        UNITY_INSTANCING_BUFFER_START(Props)
            UNITY_DEFINE_INSTANCED_PROP(Texture2D, _PatternMask)
        UNITY_INSTANCING_BUFFER_END(Props)

        SAMPLER(sampler_PatternMask);
© www.soinside.com 2019 - 2024. All rights reserved.