UE5 Luma NeRF插件源码分析及实测

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文件里被拆分好的)。生成出来长这样:

“你要的shader写好了”

有了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值