虚幻4渲染编程(DCC工具篇---3DMax)【顶点烘焙动画到纹理工具】

我的专栏目录:

小IVan:专题概述及目录

虽然Houdini做纹理动画已经很方便了,但是有时候遇到一个比较特殊的,需要在Max里完成顶点动画烘焙的话,还是需要自己写工具。当然也可以用同样的思路烘焙点儿别的东西。

先上效果吧:

v2-65e4a74afddefcde2465849ca1e0b1c6_b.gif


做动画其实有很多种方式,除了骨骼,目标变形,物理解算外,还有Bake To TextureAnimation。其实这个和GPUSkin原理类似。

这个插件的原理是将所有顶点的位置数据拍成一列,然后再把每帧的这个数组再排到帧数组中,这样就能再Shader中读取顶点的位置,然后让顶点动画在引擎里还原了。

v2-6912fc4cbb108af7486a549b80b646ba_b.jpg

v2-a02d3d4d2e5a1a1ee309691f1d5c98a4_b.jpg

下面就来制作这个脚本工具吧


首先建个文本文件,命名为VertexAnimationTool.ms

v2-970126d86c95149dd2098d0ba864e607_b.jpg

然后用VSCode打开。我们先创建一个max的工作窗口。

        macroScript TextureAnimation category:"Texture_Vertex_Animaton" buttontext:"Vertex Animation Tools" tooltip:"Vertex Animation Tools"
(
    rollout TexMorphRollout "Vertex texture Animation Tool" 
    (
    )
    global Morph_Floater = newRolloutFloater "" 200 230 
	addRollout TexMorphRollout Morph_Floater
)
macros.run "Texture_Vertex_Animaton" "TextureAnimation"
      

v2-b573dfd6ceaae7d326feda5177a383dc_b.jpg

把脚本拖进去就能看到如下的效果了。


如果一切正常,下面我们来继续编写我们的工具。我们的工具需要指明我们需要Bake的动画帧范围,比如0到30帧的动画范围我们需要把它bake到我们的贴图里。所以我们需要一个指认动画范围的UI。同时我们的工具还需要动画的采样密度,0~30帧这个范围我们是把每帧都记录下来还是每隔一帧记录一次。然后我们还需要一个按钮,当我们设置好后,点击这个按钮后就开始bake工作流程并把烘焙的顶点动画贴图导出。

所以我们的代码变成了这样:

        macroScript TextureAnimation category:"Texture_Vertex_Animaton" buttontext:"Vertex Animation Tools" tooltip:"Vertex Animation Tools"
(
    rollout TexMorphRollout "Vertex texture Animation Tool"
    (
        group "Morpher Meshes"
        (
            spinner spinnerAnimationRangeStart "Anim Start" type:#integer range:[0,1000000,animationRange.start]
            spinner spinnerAnimationRangeEnd "Anim End" type:#integer range:[0,1000000,animationRange.end]
            spinner spinnerAnimationRate "Frame step Skip" type:#integer range:[0,1000000,0]
            button CreateVertexAnimation "Create Vertex Animation"
        )
    )
    global Morph_Floater = newRolloutFloater "" 200 230
    addRollout TexMorphRollout Morph_Floater
)
macros.run "Texture_Vertex_Animaton" "TextureAnimation"
      

把脚本拖进max你将会看到:

v2-43afaebf0394405c0e5276b76c76cbce_b.jpg

现在还没完,我们的模型UV是用来给模型纹理映射用的,那我们的这张顶点动画贴图应该怎样将保存进贴图里的值取出来然后给对应的顶点呢。答案是分第二套UV,把顶点按照顺序排列起来,然后在sample的时候直接就把值取出来给到顶点了,这是在为在引擎里还原顶点动画作考虑了。


所以我们的工具还需要给模型指认一套UV,然后把模型的UV按照一定顺序排列成一排。

v2-6dd641f904319bfacb6b9f927c36d451_b.jpg

再给工具加上Help按钮,我们的工具UI声明代码如下

        macroScript TextureAnimation category:"Texture_Vertex_Animaton" buttontext:"Vertex Animation Tools" tooltip:"Vertex Animation Tools"
(
    rollout TexMorphRollout "Vertex texture Animation Tool"
    (
        group "Morpher Meshes"
        (
            spinner spinnerAnimationRangeStart "Anim Start" type:#integer range:[0,1000000,animationRange.start]
            s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值