[SceneKit]Shadows阴影(九)

96
作者 里脊糖醋
2017.07.26 19:43* 字数 990

在SceneKit 中并不是所有的光都能产生阴影, 只有spot和directional能产生照射的阴影.

两个示例
Snowman

Directional shadows

与Spot shadows不同,由于与光源的距离变化,定向光投射的阴影的大小不会改变。然而,阴影的长度受到光线撞击3D对象的角度的影响,就像您的阴影长到日落时一样。
定向光在投射阴影时有点奇怪,因为节点的比例属性在确定其创建的阴影区域方面起着重要的作用。SceneKit从光节点的角度创建2D阴影贴图。定向光忽略位置信息,因为光具有恒定的方向。定向灯需要正投影。这就是为什么尺度属性控制正投影的可见范围。
如果您在场景中使用定向灯,并且没有看到阴影,则可能需要调整scale属性。


屏幕快照 2017-07-26 下午1.48.51.png

下图显示了调整方向光的节点scale对结果阴影的影响:


屏幕快照 2017-07-26 下午1.49.01.png


以1的比例,您可以清楚地看到在x和y方向上剪切的正方形阴影。 当您将缩放比例增加到2时,您将开始注意到圆形身体的阴影,但仍然没有手,鼻子或头部。 最后,通过将比例增加到5,您可以看到所有的身体部位,甚至是尖的鼻子。

下面试阴影的具体属性设置


屏幕快照 2017-07-26 下午1.49.18.png

Behaviour:确定光线是否投射阴影。
•Color:确定阴影投射的颜色。您可以修改颜色和透明度级别;这让其他颜色通过阴影显示。
•Sample radius:场景套件可以通过将3D对象的轮廓渲染到2D阴影贴图上来产生柔和的阴影;该半径用于生成几个样本阴影贴图。较小的半径将导致更清晰的阴影,而较大的半径将产生更柔和的阴影。
•Near clipping/Far clipping:来自光源的这些值范围之外的任何对象都不会产生阴影,从而剪切自己的阴影。性能开始成为问题时,该属性可以调整。
•Scale:确定生成的阴影贴图的分辨率。 1的比例将产生最高分辨率,而较高的值产生较低分辨率的阴影贴图。
•Sample count:此属性与样品半径属性紧密配合使用。指定较高数量的阴影样本会产生更柔和的阴影。
•Bias:有时渲染的阴影可能无法像预期的那样渲染到所有像素上,导致称为阴影偏差的效果。您可以使用此属性来修复这些类型的物体。

下图显示了以相当大的sample radius调整阴影sample count对spot light shadow的影响:


屏幕快照 2017-07-26 下午1.49.25.png


样本计数为2,您可以看到产生的两个不同的阴影。 将样本数量提高可产生更多的阴影样本,最终以最右侧的柔和阴影结束。

下图显示shadow scale对阴影分辨率的影响


屏幕快照 2017-07-26 下午1.49.31.png


分辨率为1,您可以看到一个很好的清脆的阴影边缘。 推动阴影映射分辨率降低会产生更为严重的阴影。


Spot shadows


屏幕快照 2017-07-26 下午1.49.46.png


下图显示了以相当大的sample radius调整阴影sample count对spot light shadow的影响:


屏幕快照 2017-07-26 下午1.49.52.png


样本计数为1会创建一个清晰,清晰和清晰的阴影。 样本计数为2,您可以清楚地看到两个不同的阴影,就像阴影是由两个接近的光源产生的。 将样品计数推至5,产生更柔和,更平滑的阴影。

SceneKit