【Unity】shader渲染光照后场景组件等表现黑色问题

Shader渲染后场景组件等表现黑色问题

好久没有写博客了,距离上次的 图文混排第一部分,应该才过去一天吧?(笔者实在太慢)

步入正题

最近在做安卓项目的打包,发现场景加载后,在不给渲染光照信息(Lightmap Static)的时候,表现还算正常,我们先看看还算正常的情况图

在这里插入图片描述
这次的主角是蓝色水晶,其他的不用理会。

我们可以看到,在不给与光照信息的时候,这种情况还算正常(什么是光照信息??看下图)

在这里插入图片描述
怎样有印象了吧?我们继续。

这次的问题我在重复下:shader渲染光照后场景组件等表现黑色问题!shader渲染光照后场景组件等表现黑色问题!shader渲染光照后场景组件等表现黑色问题!

我们再来看看我们今天需要解决的详情图:

在这里插入图片描述
在这里插入图片描述

what??????????????????为什么会有这样的问题?吓的作者赶紧百度了两三天!!!!!!

最后什么有用的信息都没有。

我们现在来思考问题的产生因素:

  • 第一点:我们的shader是打成assetbundle来加载的。
  • 第二点:为什么我给了光照信息会变得更黑?
  • 第三点:shader为什么不接收我的光照信息?

我们一点一点来分析

shader为什么不接收我的光照信息?

我仔细检查了下shader 发现中有一句代码

#pragma surface surf Lambert alphatest:_Cutoff

可见是支持兰伯特反射的。那么我们的shader没有问题!排除三

为什么我给了光照信息会变得更黑?

这点很重要,也就是网上说的把 shader加入到 Project Setting -> Graphics -> Always Included Shaders

如果我真的需要把它放在列表里面让Unity帮我去加载,那么我就不会有第一点的疑虑(当然这样操作可以解决我们的问题,但是会有隐患,后文会提到)

既然不加入列表,那么怎么去解决?

我们都知道Unity在成包的时候shader都会帮我们去编译对应的平台(除非你不加入 Always Included Shaders 和 打Assetbundle)的渲染代码,那么既然是Unity帮我编译,那么是不是问题出现在编译的过程中?

好!定位问题,我们看看 问题shader在这里插入图片描述
492kb,或许没有问题也或许有问题,那么我们该怎么去解决呢?拆包看里面的shader编译的代码(不好意思,作者看不懂)

那么又只能google了,这次学乖了,不baidu了,既然问题已经定位到是编译时机的问题,那么几个小时的google和猛如虎的乱操作后,问题解决了。

问题根本:
Project Setting -> Graphics -> Shader Stripping -> Lightmap Modes

这里,在这里插入图片描述
我们看到,这里就是Unity 有可能帮我们接管到了实时光源,那么就有可能出现上述的问题 Shader渲染光照后场景组件等表现黑色问题。

我们只需要 在这里插入图片描述 按需要去保留即可,如果是烘焙,不要把实时光打开!!!!

选择完毕后,切记随手按下 CTRL + S 我不晓得Unity会不会有什么骚操作导致失败,然后重启Unity

然后重新打包shader

在这里插入图片描述
我们发现shader大了许多!!在这还不能证明它是准确的,那么我们进项目看看

在这里插入图片描述

正确了!猜想是正确的,Unity在帮我们编译shader的时候,应该是做了某些优化,减少shader变种!

什么是shader变种?

在这里插入图片描述
这个就是shader变种,如果shader变种数量非常多,那么我们的shader加载的第一次会非常的卡,所以unity可能是在这方面做了优化。

前文我也说了为什么不把shader 加入到 Always Included Shaders 一但shader的变种数量剧增,那么可想而知,Unity在初始化加载shader可以卡到你怀疑人生,大家可以试一下把 Standard shader 加入后试一试。

至于图文混排篇,我可能下个月才会继续写,因为实在抽不出手来写。

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值