当光源在侧面时,为什么我的统一对象的底部比顶部暗?

Why is the bottom of my unity object darker than the top when the light source is to the side?

我的游戏中有一颗行星,它靠近太阳(我项目中唯一的光源。) 正如预期的那样,面向太阳的一面更亮,背向太阳的一面更暗。但是,如果您查看球体的暗面,在编辑器和游戏中底部都比顶部暗得多。太阳在球体的一侧,所以这没有意义。这是照明设置的一部分吗?如果可以,我该如何关闭它?

TL;博士

在环境光照设置中,“Ground”是指“向上”,“Sky”是指向下,“Ground color”将所有网格面都指向下方,而向上则相反,你应该改变环境光照设置。

说明

颜色倍增发生在您的着色器内部,大概是标准着色器(它是您在 material 顶部标记的那个)。

此着色器与 Unity 的渲染管道交互以渲染诸如阴影和环境光之类的东西,在您的情况下,您明确设置了“天空颜色”,使用环境光的渐变选项(检查您的照片 - 环境光).

“天空”和“地面”指的是场景中的“上”和“下”,或者Vector3(0, 1, 0)和Vector3(0, -1, 0)(勾选https://docs.unity3d.com/ScriptReference/Vector3-up.html). 在外面space,没有“天”在下,“地”在下。

标准着色器与这些设置交互,并使您的“天空颜色”成为示例,它是网格所有向上的面的颜色的乘数(从技术上讲,网格的点有它们的颜色)正常向上),你的“底色”更暗,所以当它乘以你星球的颜色时,结果更暗(接近 0 的颜色值更暗,通常在着色器中从 0.0 到 1.0,当颜色乘以白色,即1.0、1.0、1.0,结果颜色相同,乘以接近黑色的颜色,如0.1、0.1、0.1,结果颜色也接近黑色)

(法线是从网格中的点指向的向量)

你可以:

  • 将环境颜色更改为您的天空盒,unity 将根据您的天空盒颜色计算环境颜色
  • 将环境颜色更改为单一颜色(不是渐变)并使其成为您喜欢的颜色。
  • 将“天空颜色”和“地面颜色”设为相同的颜色,就像在您的环境中一样,外部 space,没有“地面”和“天空”。
  • 使用 unity CG (HLSL) / shader lab(取决于您的渲染管道)编写您自己的着色器,根据您的喜好为星球着色。