起始设置Start
- 初始化时先按照配置生成对应的模型
VolumetricLightBeamSD.GenerateGeometry()
- 其中包含参数设置ValidateProperties
- 开关设置AssignPropertiesFromAttachedSpotLight
- 参数限制ClampProperties
- 生成模型信息
- 生成新对象并挂载控制器 → Utils.NewWithComponent<BeamGeometrySD>
- 控制器初始化 BeamGeometrySD.Initialize
- 获取或新建MeshRenderer并设置各类开关(都为Off)
- 按设置依据Shader生成并应用材质
- 重启Fadeout协程 →
BeamGeometrySD.CoUpdateFadeOut()
- Fade out效果通过协程执行材质参数设置实现
- 执行一次回调CallOnBeamGeometryInitializedCallback
- DynamicOcclusion的执行注册在该回调中,函数名ProcessOcclusion —— 参见后文DynamicOcclusion部分解析
- 重新生成模型BeamGeometrySD.RegenerateMesh
- GameObject的layer与tag等参数设置完成之后销毁旧MEsh
- 依据当前gemMeshType类型生成心动Mesh并赋值给meshFilter
- Custom模式从MeshGenerator.GenerateConZ_Radii()函数获取新模型
- Shared模式从GlobalMeshSD.Get()函数获取新模型
- 更新材质与AABB
UpdateMaterialAndBounds()
- 用MaterialPropertyBlock设置一堆材质参数
- 根据设置手动对transform.localScale重新赋值(必须在MeshSkewing步骤前完成,需要用到)
- 根据MeshSkewing设置重新计算Bounds并赋值
- 如果开启GPUInstancing则额外手动赋值两个坐标系转换的矩阵
- 开启
VolumetricLightBeamSD.CoPlaytimeUpdate()
协程 - 用于获取灯光信息获取新的参数数据然后定期运行
UpdateMaterialAndBounds()
以实时更新
Update函数整个仅用于Editor ,用于更新模型、更新材质参数和生成新Bounds
- 作者:Reguluz
- 链接:https://reguluz.site/article/volumetric-light-beam-note-2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章