codecamp

three.js LightShadow

该类作为其他阴影类的基类来使用。

构造函数

LightShadow( camera : Camera )

camera - 在光的世界里

创建一个新的LightShadow。这不能直接调用的 - 它由其他阴影用作基类。

属性

.autoUpdate : Boolean

启用灯光阴影的自动更新。默认为真。如果您不需要动态光照/阴影,您可以将其设置为 false。

.camera : Camera

光的世界里。这用于生成场景的深度图;从光的角度来看,其他物体背后的物体将处于阴影中。

.bias : Float

阴影贴图偏差,在确定曲面是否在阴影中时,从标准化深度添加或减去多少。默认值为0.此处非常小的调整(大约0.0001)可能有助于减少阴影中的伪影

.blurSamples : Integer

模糊 VSM 阴影贴图时要使用的样本量。

.map : WebGLRenderTarget

使用内置摄像头生成的深度图;超出像素深度的位置在阴影中。在渲染期间内部计算。

.mapPass : WebGLRenderTarget

使用内部摄像头生成的分布图;根据深度分布计算遮挡。在渲染期间在内部计算。

.mapSize : Vector2

一个Vector2定义阴影贴图的宽度和高度。较高的值会以计算时间为代价提供更好的阴影质量。值必须是2的幂,直到给定设备的WebGLRenderer.capabilities.maxTextureSize, 虽然宽度和高度不必相同(例如,(512,1024)有效)。 默认值为*(512,512)*。

.matrix : Matrix4

模拟阴影相机空间,计算阴影贴图中的位置和深度。存储在Matrix4中。这是在渲染期间内部计算的。

.needsUpdate : Boolean

当设置为 true 时,阴影贴图将在下一次渲染调用中更新。默认为假。如果您已将 .autoUpdate 设置为 false,则需要将此属性设置为 true,然后进行渲染调用以更新灯光的阴影。

.normalBias : Float

定义用于查询阴影贴图的位置沿对象法线的偏移量。默认值为 0。增加此值可用于减少阴影痤疮,尤其是在光线以浅角度照射到几何体的大场景中。代价是阴影可能会出现扭曲。

.radius : Float

将此值设置为大于1的值将模糊阴影的边缘。较高的值会在阴影中产生不必要的条带效果 - 更大的mapSize将允许在这些效果变得可见之前使用更高的值。如果 WebGLRenderer.shadowMap.type 设置为 PCFSoftShadowMap,则 radius 无效,建议通过减小 mapSize 来增加柔和度。请注意,如果[page:WebGLRenderer.shadowMap.type]设置为BasicShadowMap,将会无效。

方法

.getFrameExtents () : Vector2

由渲染器在内部使用以扩展阴影贴图以包含所有视口

.updateMatrices ( light : Light ) : undefined

更新相机和阴影的矩阵,由 renderer.light 在内部使用——渲染阴影的光。

.getFrustum () : Frustum

获取阴影相机视锥体。由渲染器在内部使用以剔除对象。

.getViewportCount () : number

由渲染器在内部使用以获取需要为此阴影渲染的视口数。

.copy ( source : LightShadow ) : this

将source中的所有属性的值复制到该Light。

.clone () : LightShadow

克隆与此相同属性的新LightShadow。

.toJSON () : Object

序列化这个LightShadow。

源码

src/lights/LightShadow.js


three.js SpotLight
three.js PointLightShadow
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

参考

核心 / BufferAttributes

渲染器 / WebXR

开发者参考

WebGL渲染器

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }