计划你大爷计j 发表于 2021-1-9 13:21

Unity3d | 常见的模型漏光问题及解决

在unity中,偶尔会出现模型漏光问题。
我这里展示出我遇到的两种问题,并给出解决办法。
第一种,不管是bake还是realtime,模型都会漏光:

realtime,模型边缘有光线渗入
bake,模型依然漏光
这个问题所在是,你的模型只有一面,在物理世界来说就是这个模型没有厚度。在真实世界中是没有只有这样一层没有厚度的表面的物体的,这时候你需要给物体添加厚度,在建模中,使用挤出 是很好的办法,之后你可以观察到:
realtime,没有漏光


第二种,在bake模式下的模型漏光:

bake模式,模型边缘漏光
realtime,模型没有漏光
这里很奇怪,为什么realtime就不漏光,bake反而漏光了?你想一想,问题肯定出现在bake这里,是bake设置/参数的问题。
我们需要知道bake是怎么实现良好的光照效果的?
bake是提前把光照信息烘培到一张光照贴图中,然后运行的时候,按照贴图的指示来混合光照:
UV Charts view mode
light map for single object
在bake情况下的漏光,light bleeding,实际上是因为光照贴图中,模型的面之间的间隙不够/重叠了,这样就导致两个面的光互相渗透,最终视觉上的表现就是出错:
http://pic2.zhimg.com/v2-f07eeb0f94af257d974635f76b55e91_r.jpglightmap中各个面的间隙
那怎么解决这个问题呢?
如果你是用unity自动生成光照贴图,那么请进入模型的import页面,修改generate lightmap 的Pack Margin参数,这个参数决定了光照贴图中各个面的间隙:
默认值为4,你可以适量调大。
还有一个参数也会影响漏光问题。那就是模型的Meshrenderer组件的Lightmapping单元中:Scale In Lightmap。
Scale In Lightmap,决定了自己在烘焙过程中光照贴图的大小,这个参数越小则贴图的分辨率越小,有些情况下也会造成漏光。
按照上面的说明,我修改了margin和scale,得到一下结果:




参考资料 :
Unity - Manual: UV overlap
页: [1]
查看完整版本: Unity3d | 常见的模型漏光问题及解决