[SceneKit专题]12.Shadows阴影
2017-04-09 本文已影响265人
苹果API搬运工
说明
本系列文章是对<3D Apple Games by Tutorials>一书的学习记录和体会此书对应的代码地址
不是所有灯光类型都有阴影,只有spot(点光源)和directional(方向光源)才有投射阴影能力.
![](https://img.haomeiwen.com/i1806489/783f1b754447b022.png)
Directional shadows方向光源阴影
方向光源在投射阴影时比较奇怪,因为节点的scale属性在很大程度上决定了阴影的范围.方向光源是平行光,所以阴影大小和光源距离无关,这就是为什么要用scale属性来控制下投影的可见范围.
如果你使用了方向光源,但是却看不到阴影,很可能你需要调整节点的scale属性.
![](http://upload-images.jianshu.io/upload_images/1806489-d906d6042e481af4.png)
下面的图片就展示出调整方向光源节点的scale属性对阴影的影响:
![](http://upload-images.jianshu.io/upload_images/1806489-7302bbd2a3153f2e.png)
当scale设置为1时,可以清晰看到方块阴影,当增加为2时,能看到圆形的身体,但是仍然没有手,鼻子和头.最终增加到5时,才能看到所有的身体部分,甚至是尖尖的鼻子.
![](http://upload-images.jianshu.io/upload_images/1806489-17b54c6d6453d617.png)
- Behaviour(行为):决定光源是否投射阴影.
- Color(颜色):决定阴影颜色,可以修改颜色和透明度等级.
- Sample radius(样本半径):产生若干叠加的阴影贴图,值小则阴影锐利,值大则阴影边缘柔软.
- Near/Far clipping(近/远裁剪):超出范围的任何物体将不会产生阴影.当有性能问题时应该设置
- Scale(比例):决定产生阴影贴图的分辨率,scale为1将产生最高的分辨率,当scale越高产生的分辨率越低.
- Sample count(样本数):该参数和Sample radius(样本半径)参数共同作用.数值越大阴影边缘越柔软.
- Bias(斜纹):有时候阴影渲染会出现问题,常称为shadow acne.可以用该属性来修复错误.
![](http://upload-images.jianshu.io/upload_images/1806489-2025dccf63294757.png)
![](http://upload-images.jianshu.io/upload_images/1806489-1525261693ca407f.png)
Spot shadows点光源阴影
![](http://upload-images.jianshu.io/upload_images/1806489-139b788d8a14e9a4.png)
其中各个属性的作用同方向光源阴影一样.
![](http://upload-images.jianshu.io/upload_images/1806489-597bb58f57f8ee59.png)