节点ID node ID
mipmap设置
节点名称 node name
节点是否以及GPU准备好 node is ready of GPU
blending混合的状态interface
1、如果是undefined,说明不混合 2、如果是object,说明混合
透明材质是否有alpha透明的部分 ,是否有BLEND。 两种情况: 1、使用统一的透明度(opacity) 2、使用来自texture的透明度(alpha)
VS bind group 1、 key :string 采样E_materialTypeForBindGroup的值 2、不使用[key in E_materialTypeForBindGroup] 的原因: A、不是所有类型会有用到,防止不必要的创建 B、目前TTP、TTPF暂停中;20260419
VS bind group layout
材质的默认绑定组,默认是2
材质的更新命令队列 1、有materialManager调用,每帧更新一次。 2、非必须,比如video材质的External就需要
默认的sampler
材质的sampler是否存在,不存在就创建一个。
默认的2D纹理
默认的3D纹理
实体世界矩阵,shader中使用,默认为单位矩阵
是否使用实体世界矩阵 1、默认为false,不使用实体世界矩阵 2、如果需要使用实体世界矩阵,需要在使用setEntityWorldMatrix()设置实体世界矩阵
是否用户自定义更新函数
是否用户自定义更新函数,在update()函数最后调用
材质的SHT模板,key:材质类型,value:SHT模板。
纹理收集器
节点类型 node type
材质的uniform Buffer 的指针,用于快速访问
1、PBR、phone需要使用
common的uniform Buffer 的指针,用于快速访问
节点UUID node UUID
获取状态
派生类材质写入uniformcommon
opacity and TO :forward,defer,MSAAInfo 通用
I_bindGroupAndGroupLayout
检查是否需要创建bind group 1、如果材质类型不存在,创建 2、pointer 不存在或 rebuild,需要更新bind group 3、如果材质类型存在,但是dynamic texture,创建
Optionaluuid: string1、检查材质的sampler是否存在,不存在就创建一个。 2、设置this._samplerBindingType:GPUSamplerBindingType
IV_BaseMaterial 材质的输入参数
GPUSampler 材质的sampler
检查透明状态,如果是透明的,就设置为透明.(color 透明的除外,需要在color material中验证) 默认:alpha透明,没有设置alphaTest,图像本身alpha=0.0的将透明(diacard) )
IV_BaseMaterial 基础材质的初始化参数
组合shader模板输出
创建uniformcommonPointer
20260402 增加:DC可以获取当前材质的bind group和bind group layout 获取当前材质的bind group和bind group layout
MSAA的需要camera的GBuffer中的texture作为uniform输入,需要指定mergeID。
I_bindGroupAndGroupLayout
获取混合状态
GPUBlendState | undefined 混合状态,undefined表示不混合
获取混合模式: writeUniformCommon()中调用
number 混合模式 0、预乘标准混合 todo:20260517 1、 为A-Buffer设计,目前默认0=预乘标准混合。 2、其他混合模式,目前未设计与实现
按照materialType获取bind group的entry
Optionaluuid: string按照materialType获取bind group layout的layout entry
按照materialType获取bind group的groupAndBindingString
延迟渲染的shader模板输出
OptionalstartBinding: numberI_materialBundleOutput 不包含光影的GBuffer,但GBuffer的输出中需要按照延迟渲染的约定进行。
获取uniform 和shader模板输出,其中包括了uniform 对应的layout到resourceGPU的map 涉及三个部分: 1、uniformGroups:uniform,一个组的内有多个binding 的uniform。 2、singleShaderTemplateFinal:shader模板输出,包括了shader代码和groupAndBindingString。 3、uniform layout 到ResourceGPU的Map操作
I_materialBundleOutput
MSAA 材质输出shader模板
1、MSAA:只输出color和depth 2、inforForward:输出其他GBuffer信息
获取当前材质的指针的byte size
材质是否已经准备好, 判断两个值, 1、this._readyForGPU:延迟GPU device相关的资源建立需要延迟。 需要其顶级使用者被加入到stage中后,才能开始。 2、this._state:材质自身的初始化是否完成。
true:可以使用,false:需要等待。
是否为透明材质
boolean true:是透明材质,false:不是透明材质
获取透明材质的渲染模式:writeUniformCommon()中调用
number 透明材质的渲染模式
获取用户自定义的shader代码
string
初始化材质 一、两种初始化模式 1、程序化控制模式: A、初始化时可以不传递scene对象,只关注材质参数。 B、scene传递和与其相关的参数在entity的init中,通过调用_material.init() 来初始化。 2、加载场景模式(编辑器,加载): A、初始化时需要传递scene对象。 B、然后使用 await xxx.init(scene) 来初始化,有异步的操作。 二、通过判断this._state,来判断是否已经初始化完成。 三、异步操作说明 1、派生类的redadyForGPU()会有异步操作; 2、texture的加载,url等
场景对象
三段式初始化的第三步:readyForGPU 当前对象的GPU已经可以用时,执行此调用。 when GPU is ready, call this function
设置实体世界矩阵
正常更新,从上到下
Clock 时钟
是否调用自身的updateSelf(),默认=true 此参数可以方便子类重载时,决定调用的updateSelf()的时间顺序或是否调用updateSelft()
写入uniformBuffer
是否动态材质 :video材质的External就需要动态材质