4

我刚刚开始使用 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,都会发生这种情况。

我怎样才能均匀地照亮整个场景?这里出了什么问题?

问题:

在此处输入图像描述

4

1 回答 1

0

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

TL;博士:

Unity 的预计算照明解决方案仅考虑静态几何体。要开始光照预计算过程,我们需要在场景中至少有一个标记为“静态”的游戏对象。这可以单独完成,也可以通过从层次面板中选择多个游戏对象来完成。

引用自 unity 5 关于光照和渲染的文档

于 2016-05-26T21:25:59.987 回答