[SceneKit]光线(五)

96
作者 里脊糖醋
2017.07.20 07:37* 字数 1247

在开始玩灯光之前,您需要首先了解它们在3D渲染引擎中的工作原理。 当您向场景添加光源时,渲染引擎可以确定光线应如何反射场景的对象。 它的因素在于:
•颜色
•方向
•位置
所有计算都是基于每个对象的表面法线。

法线是始终垂直于某平面的虚线在数学几何中法线指平面上垂直于曲线在某点的切线的一条线。法线也出现在物理学上的平面镜反射上。


屏幕快照 2017-07-23 下午12.33.12.png

•法向量:看那些红色矢量? 那些是假想的表面法线。 注意每个形状与立方体的表面形成完美的90度角。
•光源矢量:这是从左侧进入的黄色光线。
•表面阴影:查看每个表面如何具有不同的阴影? 注意光源矢量与每个表面法线之间的角度。 较小的角度产生更明亮的表面,而较大的角度产生更暗和更亮的表面。 渲染引擎执行该计算以确定表面的亮度或暗度。

曲面的法线


屏幕快照 2017-07-23 下午12.36.31.png

对于曲面,法线直观讲就是切平面的垂线,但是这个垂线的位置是比较特殊的,要过平面和曲面的交点。

SceneKit的套件中有四种光

•全方位光(Omni light):白天天空中的明亮的光芒 - 太阳 - 基本上是全能的光,意味着从太空中的单一点向所有可能的方向发光。然而,当试图在3D游戏中模仿太阳时,全能光通常不是最好的使用方式。这是一个很好的效果,非常适合像燃烧的蜡烛或从天花板悬挂的灯泡的东西。
•定向光(Directional light):这种类型在特定方向发射平行光线。当您想在3D游戏中模仿阳光时,强烈建议您使用这种类型的光。
•点光源(Sopt light):这种类型的光也是定向的,但是光从空间中的单个点发射并且以锥形展开。将其用于更集中的光源,如在一架疯狂的夜总会追逐场景中,警方直升机正在跟踪逃离劫匪的汽车。
•环境光(Ambient light):环境光源是控制场景整体亮度的源头。另一种想法是使用环境光来控制场景中阴影的黑暗度。


屏幕快照 2017-07-23 下午12.49.19.png

每一个光都有Mode, Color, Attenuation属性


屏幕快照 2017-07-23 下午12.53.36.png

这些是控制光的显示效果的
•Mode:您可以选择动态或烘焙。 对于移动的光源或将其效果应用于移动的节点,您应该使用动态光。 对于静态照明,您可以使用烘焙照明,在外部3D创作工具中创建光线贴图,然后将照明效果应用于场景中对象的纹理。
•Color:这允许您指定灯的颜色。
• Attenuation:这样可以控制光源的距离。 当节点比开始距离更近时,光应用其全部强度,而超过终点距离的节点根本不受光的影响。 默认值为0,表示衰减不适用。 坐在开始和结束之间是衰减,这是控制强度减弱的指数因素。

下面这张图更加清晰的展示了光线对于物体显示效果的影响


屏幕快照 2017-07-23 下午12.57.24.png

您可以看到每个灯光对球的影响,以及最后一列的综合效果。请注意,第一行没有环境光,而第二行具有环境光。我们来仔细看看每一步:
•无光:当你开始,球是平坦和沉闷,因为场景没有光源。场景套件在没有添加光源的情况下使用恒定的光线,因此,您会看到一个非常平坦的球。
•背光:一旦向现场添加灯光,那些不在光线中的所有东西都会变暗。场景套件停止对整个场景施加恒定的光线,并开始使用添加的光源来应用照明和阴影效果。这种特殊的光线正在作为您的背光,在球边缘产生非常微妙的边缘光线效果。
•前灯:这样可以更加亮起球,作为球上的关键灯。请注意,关键灯和背光是相互对置的。
•环境光:通过用光填充整个场景,充当场景中的补光,特别是用一些光来填充那些黑暗的阴影区域。

SceneKit