luma field
luma文件拖进编辑器时,插件会依次调用LumaLoader中的CreateLumaMaterialFunction、CreateLumaMaterial、CreateLumaBlueprint函数,基于luma文件生成UE资产。
CreateLumaMaterialFunction是核心,其读取luma文件中的HLSL代码模板和field参数,生成MaterialFunction,这个MaterialFunction就包含了渲染这个field的核心逻辑,其中最核心的部分是里面用HLSL调用LumaRaymarch的那个custom节点:LumaRaymarch的大概意思就是发射进入NeRF包围盒的射线,查询从神经网络烘焙出的field LUT(也就是luma文件里的参数),把路径上累积的RGBA以及PDO(Pixel Depth Offset)打包返回给材质
CreateLumaMaterialFunction会生成带背景/不带背景几个版本的MaterialFunction(背景是在luma文件里被拆分好的)。生成出来长这样:
有了MaterialFunction之后,CreateLumaMaterial把它包一层(也是对应带背景/不带背景的几个版本,分别生成几个Material),包完的这个Material只暴露裁剪和Quality等参数出去。生成出来长这样:

然后CreateLumaBlueprint再给Material包一层,生成BP,BP里就一个挂对应材质的static mesh节点,蓝图父类LumaField里有裁剪相关的参数成员,其类默认值(会生成不同材质/不同类默认值的几个不同版本的BP)就会通过ALumaField::ApplyShaderParams()传给材质。生成的BP长这样:

3DGS
luma生成field之后提供两个版本文件下载,一种是luma field(luma自己的格式),一种是3DGS(ply格式的高斯球点云)。这两种field在UE里的逻辑有很大不同。
加载3DGS的逻辑在LumaSplatLoader,它先调用DLL里的接口LumaDLLLoader::LUMA_UE_chunk_gaussians给ply空间划分成多个chunk,然后对每个chunk调用CreateGaussianChunkLuma将其中的数据打包成pos_data、rot_data、scale_data、col_dat

最低0.47元/天 解锁文章
1722

被折叠的 条评论
为什么被折叠?



