unity为什么有的shader材质不能一键转换为默认支持URP的shader

  • Post author:
  • Post category:其他


在unity项目中切换为URP之后,可能大部分材质都会变成粉色(错误状态),这时候我们可以点击Edit-Render Pipeline-Universal Render Pipeline下的选项来进行自动转换为支持URP的材质,但是有的时候会出现


“xxx material was not upgraded. There’s no upgrader to convert xxxx shader to selected pipeline UnityEditor.Rendering.Universal.UniversalRenderPipelineMaterialUpgrader:UpgradeSelectedMaterials() (at

Library/PackageCache/com.unity.render-pipelines.universal@7.3.1/Editor/UniversalRenderPipelineMaterialUpgrader.cs:37

)”


这是因为现在unity还不支持将一些自定义的shader文件一键转换为支持URP的shader文件,具体情况可以通过代码来了解。

在我们点击自动转换的选项之后,会在UniversalRenderPipelineMaterialUpgrader脚本中执行UpgradeSelectedMaterials函数:

在UpgradeSelectedMaterials函数中调用了脚本中的GetUpgraders函数:


重点就在这个函数,可以看到这个函数只把unity原本一些自带的shader添加进了upgraders变量中

,所以在我们之后会调用UpgradeSelection,然后调用Upgrade函数,之后在Upgrade内部执行GetUpgrader函数时会进行一层判断

如果在upgraders变量中都找不到与要转换shader对应的名字,那么会返回null,就会出现文章开头的提示。

所以说目前unity还是只可以自动转换其自己的标准着色器。还是建议手动进行转换。



版权声明:本文为wang568270833原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。