UnityURPToonLitShaderExample着色器应用后,关闭项目再打开,妮露和甘雨的着色出现黑色:

 

把人物删掉,重新导入,应用Shader,人物显示正常:

关闭项目重新打开后又出问题。

妮露的头发的渲染由两个材料完成,“前蝴蝶结”渲染大部分颜色:

“后发”渲染头发上的光泽,大部分是黑的:(可以看到出问题的时候头发光泽还在)

推测原因是把“后发”这个材料覆盖在了“前蝴蝶结”上。

解决方法:后发材料勾选Alpha Clipping。这个选项的意思是把贴图里不透明度alpha值不大于Cutoff的部分设置为透明,让其他材料渲染。

关于下面的Cutoff:为0时预览材质球跟之前一样,大部分是黑的;稍微调大一点黑色消失,只剩下光泽;再调大一点光泽也消失。但是调这个对场景里的效果没影响。

但是甘雨的后背材料“肌”勾选Alpha Clipping没用。给衣服的材料“裙摆”勾选Alpha Clipping有用:

同时发现“裙摆”预览材质球的一些部分由黑色变透明,所以是“裙摆”该设置透明的部分没有透明,渲染成黑色,盖在了后背的材料“肌”上。

总之,所有预览材质球里有这种黑色部分的材料都应该勾选Alpha Clipping。如果没有,勾不勾选就没有区别。

build出来树的树叶疯狂摇晃,几秒钟后近距离模型消失

树叶摇晃应该是风的效果,消失可能是被误计算LOD距离,计算成了该剔除的距离。一开始树能显示,不太可能是着色器没包含。

在场景里放一个树的预制体,不只把树用于地形工具绘制树。后来验证无效。

打开树模型的Renderer,也警告开启了GPU Instancing,不能开static。那么把static关闭打包看看。无效。

然后打开.spm文件,把Wind Quality改成None。又去项目设置Quality把LOD bias改成1.解决了。

0221今天又出现了。

把树的所有材质里面的Wind Quality也关掉。解决了。

哪些地方有风的设置

  1. 地形工具;

  2. SpeedTree资产界面;

  3. 树的材质界面;

编辑器里运行时水面比没运行变低了

打开水面渲染组件,里面有警告说着色器启用了GPU Inatancing,不能打开static。把static关闭,解决了。

Standard Assets的水着色器在URP项目的Scene相机里让水的像素一直残留,直到水完全离开屏幕。并且报错Recursive rendering is not supported in SRP (are you calling Camera.Render from within a render pipeline?).和IsCameraProjectionMatrixFlipped is being called outside camera rendering scope.

临时解决方法

把Tags { "WaterMode"="Refractive"}删除,水的透明和反射效果关闭了,问题也消失了。

然后发现这个水身上还有C#脚本。WaterMode选Simple也没问题。

从AB包加载的人物,非内置着色器,着色器单独分包,人物眼睛变花,衣服出现黑边,效果和alpha裁剪关闭一样

我知道这种有alpha裁剪的材质应该放在alpha测试队列,于是改了材质的队列。

然后我又用编辑器写从AB包加载资源,然后加载出来的一直是紫色。

然后我又把着色器和人物放一个AB包,还是不行。

直到我把着色器加载出来,指定给模型的所有材质。

Renderer[] renderers = go.GetComponentsInChildren<Renderer>();
foreach (Renderer renderer in renderers)
{
    foreach (var mat in renderer.sharedMaterials)
    {
        mat.shader =shader;
    }
}

至此我们知道:从AB包加载自定义着色器的模型,最保险的只能是把着色器加载好,给材质全部指定一遍。在此之前必须拿到那个着色器的引用,需要一个尽量方便的方法,不如把着色器放到Resources。

然后我又运行游戏,让代码通过依赖加载人物,人物显示没问题了(没有再次指定着色器,和之前运行的区别就是把着色器和人物打一个包)。

然后又用代码在Start里加载人物,显示正常。

条件 效果
Shader单独分包,加载关卡时连带加载人物 npc和敌人效果像alpha剪裁关闭了
编辑器加载,依赖也加载,不管Shader单独分包还是放npc 紫色
Shader和npc放一个包,运行时加载,enemy也用到这个着色器 npc和敌人都正常
Shader不指定包,自动包含。 npc和敌人都正常

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐