type
Post
status
Published
date
Oct 8, 2023
slug
volumetric-light-beam-note-2
summary
Volumetric Light Beam体积光插件笔记(2)
tags
Unity
解决方案
着色
category
学习思考
icon
password
 

起始设置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()函数获取新模型
      • 更新材质与AABBUpdateMaterialAndBounds()
        • 用MaterialPropertyBlock设置一堆材质参数
        • 根据设置手动对transform.localScale重新赋值(必须在MeshSkewing步骤前完成,需要用到
        • 根据MeshSkewing设置重新计算Bounds并赋值
        • 如果开启GPUInstancing则额外手动赋值两个坐标系转换的矩阵
    • 开启VolumetricLightBeamSD.CoPlaytimeUpdate()协程
      • 用于获取灯光信息获取新的参数数据然后定期运行UpdateMaterialAndBounds() 以实时更新

Update函数整个仅用于Editor ,用于更新模型、更新材质参数和生成新Bounds

Volumetric Light Beam源码笔记(一)- 总览关于LayerMask与CullingMask