上一帧shadowmap数量,动态增减光源,uniform的shadowmap的GPUBuffer大小会变化, 这个值如果与this.shadowArrayOfDepthMapAndMVP.length相同,不更新;不同,怎更新GPUBuffer
环境光
1、在PBR中,尽可能小
2、在非PBR,设置在0.01比较合适。原有设定为0.21
@group(0) @binding(1) var
所有光源的uniform ,直接生成默认最大光源数的Buffer 对应system.wgsl中的struct ST_Lights scene 的MVP使用中的lights
todo:20250105,目前写成固定的
是否动态增加了光源
光源的shadow map 和 MVP的存储结构 在addLight()中动态增加,按照count(1或6)增加
shadowmap数量的计数器:indexID,从0开始 shadowmap的数量不一定和lights的数量对应(一个light可能有多个shadowmap,以及光源是否产生shadowmap) MVP和depth texture使用,根据增加的光源的shadow而自增,从0开始( GPUOrigin3DDict 的 depthOrArrayLayers)
@group(0) @binding(3) var U_shadowMap_depth_texture : texture_depth_2d_array;
shadowmap的depth texture texture_depth_2d_array 动态的:根据光源的数量、种类和是否产生shadowmap,动态增加shadowmap的数量
@group(0) @binding(2) var
render scene 用的每个 light 的shadow MVP.是uniform的GPUBuffer 对应system.wgsl中的结构 ST_shadowMapMatrix;
更新所有光源的入口之前的预处理
生成所有光源的MVP,是MVP*lightNumber的大小
GPUBuffer
创建光源的shadow map的uniform buffer(GPUBuffer),渲染shadow map 使用
光源的ID
Optionalm4: Float32Array<ArrayBufferLike>光源的MVP
光源的shadow map的uniform buffer
shadow map render RPD 创建shadowMap的RPD,每个MVP对应一个RPD(因为depth textrue 是array)
光源的selfIndex,当前位置后的便宜了
生成shadow map 的所有光源的MVP,是MVP*lightNumber的大小
1、在scene render 中system uniform 使用:@group(0)@binding(2) var
GPUBuffer
生成shadow map 的 texture_depth_2d_array
1、用途两种:
A、render 每个light的 shadow map 的RPD使用
B、scene render的system uniform 使用,@group(0)@binding(3) var U_shadowMap_depth_texture
2、目前是使用固定光源数量*6的最大array(point light 需要6个depth texture)
3、后期更改为动态
GPUTexture
获取光源的ID和matrixIndex,根据mergeID
光源的mergeID:由光源的ID,和matrixIndex组成
光源的ID和matrixIndex
目前使用的模式,shadow map render 生成光源shadowmap渲染的bindGroup和bindGroupLayout
GPUBindGroup, GPUBindGroupLayout
目前的版本没有采用,shadow map render 根据pipeline auto 模式生产BindGroup
GPUBindGroup
待检查:20250918,这个应该是从light中取的,目前来看是一个从this.shadowArrayOfDepthMapAndMVP[] 获取当前光源的index的MVP
获取当前光源的MVP
光源的合并ID
光源的MVP
获取光源数量
number
获取光源的uniform buffer(GPUBuffer)
system camera 使用:@group(0) @binding(1) var
光源的uniform buffer
获取光源的shadow map 的MVP
string, light id
number, 光源的矩阵index,0-5,点光源有6个shadow map
GPUBuffer | false
获取shadowMap的depth texture view,根据ID和matrixIndex
光源的ID
光源的selfIndex
光源的shadow map的depth texture view
获取shadowMap的depth texture view,根据mergeID
光源的mergeID:由光源的ID,和matrixIndex组成
光源的shadow map的depth texture view
获取shadowMap的RPD,
光源的ID
光源的selfIndex
GPURenderPassDescriptor | false
获取光源的shadow map的uniform buffer(GPUBuffer)
system camera 使用:@group(0) @binding(2) var
光源的shadow map的uniform buffer
获取shadowmap的结构数组 BaseEntity 调用此函数
light_shadowMapMatrix[]
获取shadowMap的RPD,
GPURenderPassDescriptor | false
获取当前光源的UUID
光源的ID
光源的UUID
OptionalscendValue: any更新所有光源的storageGPUBuffer(uniform ),MVP,RPD
更新所有光源在主渲染过程中的system uniform 的GPUBuffe 在WGSL是一个struct ,参见“system.wgsl”中的 ST_Lights结构。
光源的GPUBuffer,大小=16 + 16 +(this.list.length ||1) * lightStructSize,
1、更新所有光源的shadow map的uniform :@group(0)@binding(2) var
写入MVP到GPUBuffer
光源的MVP
光源的shadow map的uniform buffer
*上一帧光源数量,动态增减光源,uniform的光源的GPUBuffer大小会变化,这个值如果与this.lights.length相同,不更新;不同,更新GPUBuffer