微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity和C#:如何改变整体世界照明而不仅仅是地面?其他未使用RenderSettings点亮的对象?

我刚刚使用Unity 3d进入照明,现在有一个功能可以逐步加深我的场景照明.我通过渲染设置完成了这项工作,并尝试了3种不同的照明方法,我收到了相同的结果:

RenderSettings.ambientLight = Color.Lerp (RenderSettings.ambientLight,colors2 [currentColor],changeTime * Time.deltaTime);
                RenderSettings.ambientSkyColor = Color.Lerp (RenderSettings.ambientSkyColor,colors [currentColor],changeTime * Time.deltaTime);
                RenderSettings.ambientGroundColor = Color.Lerp (RenderSettings.ambientGroundColor,colors2[currentColor],changeTime*Time.deltaTime);

我并不完全理解所有这些之间的区别,并且在照亮世界时遇到了问题 – 当颜色变化时,天空的颜色和地面(与其他游戏对象块的材料相同)它)根据照明而改变.我的白色地面变成橙色.

问题是我的地面上的块(与标准着色器相同的材料)不会受到相同程度的影响/点亮.它们通常保持白色/不受影响,而我的地面一直是橙色.无论我是在改变ambientGroundColor还是SkyColor,都会发生这种情况.

如何均匀照亮整个场景?这里出了什么问题?

问题:

enter image description here

解决方法

Unity实现了一个通常结合了实时和预先计算的照明的照明系统.您看到的影响地面的环境光可能是预计算的.但是,地面顶部的块不包含在预先计算的照明中.因此,将这些块标记为静态会将它们添加到预先计算的照明中,但也会使它们在运行时不可编辑.请查看以下链接获取更多信息.

TL; DR:

Only static geometry is considered by Unity’s precomputed lighting solutions. To begin the lighting precompute process we need at least one GameObject marked as ‘static’ in our scene. This can either be done individually,or by shift-selecting multiple GameObjects from the hierarchy panel.

Quoted from the unity 5 documentation about lighting and rendering

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐