365bet游戏开户-约彩365官旧版本网客户端下载-365双试投注

Est. 1980 · 每日复古新闻

阴影(shadow)

阴影(shadow)

how it works?

在一次渲染之前,three会给每一个支持阴影的灯光做一次渲染

这些渲染和照相机类似, 模拟灯光 的相机看到的内容

在此期间,material 会被替换成 MeshDepthMaterial 获取深度(depth) 越远就越黑(模糊)

这些灯光渲染的内容将被保存为一个阴影贴图,然后这些阴影贴图将会被应用到支持

阴影(开启receiveShadow)的material中去,然后投影到几何体上

需要遍历每个object是否投射阴影和接收阴影,尽可能少的开启阴影

shadows map 就是 灯光看到的图像的纹理

如果有 100 个灯,就会产生 100个 shadow map,这就是灯光耗费性能的原因

renderer.shadow.enabled = true 渲染shadow map

只有 点光源 平行光 聚光灯才能产生阴影

产生阴影很简单,怎么优化阴影才难

mapSize.set() 改变阴影贴图大小

可以查看 阴影 light.shadow.map / camera 等信息

默认情况下 阴影大小 是 512 * 512 这是阴影贴图的宽和高,越大效果越好

必须使用 2的次方 大小 这也有 mip mapping

聚光灯: near / far 控制产生阴影的范围,这要在这个范围内才会有产生阴影

平行光: 是正交相机

设置 top / bottom / left / right 缩小相机的范围 有些地方不需要也没必要产生阴影

这样相机的范围小了之后,就可以获得更大的内容 和更多的细节 就越清晰了

如果有一些值过小,比如 far ,得到的阴影可能会被裁减,因为远的地方不会产生阴影

设置阴影模糊 radius 和光源远近无关

阴影贴图算法 有很多种(主要任务就是鉴别出点是否在阴影中)设置在renderer上 renderer.shadowMap.type =

BasicShadowMap 性能好,失去质量

PCFShadowMap 默认

PCFSoftShadowMap 比上一个好点,性能更高 最好二选一,不支持radius

VSMShadowMap 更高的性能 而且可能会有意想不到的结果

聚光灯性能提升

多个灯光共同产生的阴影不太好看,也不太真实,所以最好不要在同一个位置产生多个阴影

同样需要修改 mapSize 来 越大阴影越清晰

因为它是一个透视相机,可以改变角度 fov far near

点光源相关

相机是一个方向 朝下的 透视相机

实际上不太准确,因为它向四周发光 6个方向(上下左右前后) 就像环境贴图一样,help显示的是最后一个方向的照相机所看到的

6次渲染为每个方向,这就是电光源最耗费性能的原因

无法控制 fov 因为6个方向都有,所以不要去改变 fov,否则可能会有问题

仍然可以控制 near / far

多个光照射在同一个地方产生多个阴影,效果并不是那么好,需要使用其他方法

Baking Shadows:阴影被baking 在texture 中

先关闭阴影功能,它只是不会产生阴影了,但是还是有光照的效果,有照亮的范围

用已经制作好的 一个阴影贴图,然后在 plane 上加上 map 贴图

使用普通材质即可,但是问题是当移动物体时,无法改变

baking shadows alternative 不如上面那个真实

2个平面不同带下完全处于一个 平面就会造成 闪烁,因为不知道渲染哪一个层级(z-fighting)

把它放在球体的下面,然后跟着球体 左右移动

要使用 alphaMap,因为需要改变 opacity

如果球体上升,就降低透明底opacity,下降就增加透明度

创建一个率高于地面的平面,用普通材质就可以了

baking可以对各个物体 结合起来用,不用的场景使用不同的方式

鬼屋

Fog(color, near, far)

near 和 far 是距离照相机的远近 在这个区间才有雾的有效范围

当小于near 事不会有雾的,大于 far 就完全 不透明 看不见了

解决 草地的边 很明显的问题

设置 setClearColor 解决 plane四边形 太明显问题 和fog的颜色一样即可

优化 shadow near / far

相关文章