要访问着色器图中的辅助纹理法线贴图?

问题描述

我正在将Unity 2020.1.3f1的URP与新的2D渲染器系统一起使用。 截至目前,我的对象在内置的“ Sprite-Lit-Default”材质和带有自定义的内置像素轮廓着色器的材质之间进行了更改,此处详细介绍:https://danielilett.com/2020-04-27-tut5-6-urp-2d-outlines/

这很好,但是最近我在导入设置中添加了灯光和一个精灵贴图作为辅助贴图。默认的照亮纹理在显示法线贴图时没有问题,但是当我尝试修改着色器图形以包括法线贴图时,它不会像_MainTex设置为参考时的精灵纹理那样导入。

我已经尝试了_NormalMap(这是导入器中辅助纹理的名称!)以及_NormalTex,但是它总是以不导入法线贴图而告终。我什至尝试将_MainTex更改为Texture2D,但鉴于这种情况不断引发错误,我认为这不是正确的解决方法。 (具体来说就是这个。)

Error assigning 2D texture to 2DArray texture property '_MainTex': Dimensions must match
UnityEditor.EditorApplication:Internal_CallUpdateFunctions()

我在这里想念什么吗?我在网上可以找到的所有教程都只显示了人们通过检查器拖动了法线贴图,但是这种材质将被许多不同的精灵使用,所以似乎……违反直觉。

最重要的是,默认材质/着色器对此没有任何问题,所以我觉得我要么丢失了某些东西,要么最终不得不编写我的精灵来通过代码而不是代码来更改材质动画师,只是为了这个小而烦人的怪癖。

Blackboard Properties,and nodes. This just goes into the normals input.

Inspector panel showing the missing normal map slot.

And the Secondary Textures in case I somehow misnamed it,why not?

(编辑) 因此,针对遇到此问题的任何其他人,对此进行更新。 我设法找到了section的着色器文档,这似乎是谈论此问题的唯一部分:

需要将MainTex的引用命名为_MainTex才能渲染Sprite。还建议将“蒙版”的引用命名为_MaskTex,将“法线”的引用命名为_NormalMap,以匹配此程序包中使用的“着色器”输入。

因此,根据我的了解,_MainTex是ShaderGraph中唯一自动生成的。 经过一整天的查找教程,我注意到它们中的每一个都只是将法线贴图和多余的纹理设置为默认纹理,因此它们会显示出来而无需手动分配。

我认为使用手写着色器可以做到这一点,但我决定只在手绘的精灵轮廓上使用一个简单的未照明着色器图形,该图形显示在作为主要对象的单独游戏对象上。 我不会将其发布为答案,以防将来有人找到解决方案,因为这在我眼中并不是真正的解决方案。

解决方法

我不知道你是否已经解决了这个问题,但我会尽量回答,因为我遇到了同样的问题。创建一个新的 Texture2D 节点,将其转换为一个属性,并将其引用为 _NormalMap,将其正常连接到示例纹理 2D 节点,并将其插入 sprite lit master。现在进入精灵编辑器,将法线贴图指定为辅助纹理,并确保名称与着色器中的名称相同,_NormalMap(或其他名称,只要它相同)。这目前对我有用,着色器图自动通过引用检测法线贴图纹理。下面附上一些有用的图像和角色精灵的最终结果,它使用我从教程中挑选的自定义着色器并将法线贴图添加到其中。 Shader Graph Sprite EditorSprite Editor 2 Normal Map result

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...