0

我正在使用 Unity 2020.1.3f1 的 URP,以及新的 2D 渲染器系统。截至目前,我的对象在内置的“Sprite-Lit-Default”材质和具有自定义构建的像素轮廓着色器的材质之间发生变化,详细信息如下:https ://danielilett.com/2020-04-27- tut5-6-urp-2d-大纲/

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

我试过 _NormalMap(这是导入器中二级纹理的名称!)以及 _NormalTex,但它总是最终不导入法线贴图。我什至尝试将 _MainTex 更改为 Texture2D,但鉴于这不断引发错误,我认为这不是正确的方法。(这个要具体。)

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

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

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

黑板属性和节点。这只是进入法线输入。

检查器面板显示缺少的法线贴图插槽。

还有次要纹理,以防我以某种方式错误地命名它,为什么不呢?

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

需要将 MainTex 的引用命名为 _MainTex 来渲染 Sprite。还建议将 Mask 的引用命名为 _MaskTex,将 Normal 命名为 _NormalMap,以匹配此包中使用的 Shader 输入。

所以从我收集到的信息来看,_MainTex 是 ShaderGraph 中唯一自动的。经过一整天的查找教程后,我注意到它们中的每一个都只是将法线贴图和额外纹理设置为默认纹理,因此无需手动分配它们就可以显示出来。

我认为这可以通过手写着色器实现,但我决定在手绘精灵轮廓上使用简单的无光照着色图,显示在主对象的单独游戏对象上。我不会将此作为答案发布,以防其他人将来找到解决方案,因为这不是......在我看来真的是一个解决方案。

4

1 回答 1

0

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

于 2021-01-03T07:56:56.867 回答