3dmax顶点动画导入unity_Mesh Vertex Animation In Unity | Unity中顶点动画
最后的效果,左为顶点shader,右为蒙皮 10根骨骼
有些远景动画、小动画,用骨骼蒙皮来做太费了。一个好的办法是用顶点动画。比如在顽皮狗GDC的分享Technical Art Techniques of Naughty Dog:Vertex Shaders and Beyond用这种方法模拟鸟的人群的运动。
Houdini集成了Game Development Tools里可以做到导出顶点动画,直接看这篇教程就好。Houdini官方做了Game Development Toolset的工具包,直接可以用的,在Github上有。包含了Houdini中的一些节点和Unity的shader。
制作流程
安装
首先要安装Houdini Game Development Toolset,看上面github即可不必多说。
导入
fbx导入houdini,在out窗口内找到Vertex Animation Textures(Beta)。注意,是带beta的这个。这个来自于Game Development Toolset。原生也有一个Vertex Animation Textures,那个不能正常工作。(不知道16.5修复没有)
生成
选上模型,方法用soft就行。目标尺寸看顶点数和帧数最大值,对我来说128就够了。方法还有几种,rigid刚体,fluid流体,sprite粒子,在Game Development Toolset附带的unity package中可以看到相关范例。
导出
记下BBOX数字和帧数,之后要填入Unity的shader。
贴图设置
导出的贴图,在unity里要设成Editor GUI,Wrap选Repeat,NonPowerOf2不管。(所以格式是不能压缩的NPOT,会比较大,如果压缩的话运动起来会有噪波)
贴图大概这样子:
横向是顶点,竖向是帧
Unity材质
shader选上houdini给的vertex_soft_body这个shader,填上刚才记下的BBOX和帧数的数字,BBOX需要除以100。应该就好了!(下图是我自己改写的shader)
原理
要看shader
位置
首先,模型存了一个UV2,X坐标是顶点序号/总顶点数
所以shader里用
float4 texturePos = tex2Dlod(_posTex,float4(v.texcoord1.x, (timeInFrames + v.texcoord1.y), 0, 0));
可以取到位置贴图
这个位置是normalize到0和1之间的,所以要用BBOX的数值还原:
float expand = _boundingMax - _boundingMin;
texturePos.xyz *= expand;
texturePos.xyz += _boundingMin;
texturePos.x *= -1; //flipped to account for right-handedness of unity
v.vertex.xyz += texturePos.xzy;
1
2
3
4
5
floatexpand=_boundingMax-_boundingMin;
texturePos.xyz *=expand;
texturePos.xyz+=_boundingMin;
texturePos.x *=-1; //flipped to account for right-handedness of unity
v.vertex.xyz+=texturePos.xzy;
其实记的是模型空间中的变动幅度。
法线
有两种:Packed的会把法线记到一个通道里,
一些操作,然后一个放到前四位,一个放到后四位。
解压的时候,一些奇妙的操作。当初为什么不直接把xz压进四位呢,而是要操作一下,为了避免gamma压缩嘛。。。
float alpha = texturePos.w * 1024
float2 f2;
f2.x = floor(alpha / 32.0) / 31.5;
f2.y = (alpha - (floor(alpha / 32.0)*32.0)) / 31.5;
float3 f3;
f2 *= 4;
f2 -= 2;
float f2dot = dot(f2,f2);
f3.xy = sqrt(1 - (f2dot/4.0)) * f2;
f3.z = 1 - (f2dot/2.0);
f3 = clamp(f3, -1.0, 1.0);
f3 = f3.xzy;
f3.x *= -1;
v.normal = f3;
不pack的时候,
textureN = textureN.xzy;
textureN *= 2;
textureN -= 1;
textureN.x *= -1;
v.normal = textureN;
很正常的解法线
笔者最后没有用到法线和PBR材质,fragment里直接采贴图了
3dmax顶点动画导入unity_Mesh Vertex Animation In Unity | Unity中顶点动画相关推荐
- 【Flutter】Animation 动画 ( Flutter 动画基本流程 | 创建动画控制器 | 创建动画 | 设置值监听器 | 设置状态监听器 | 布局中使用动画值 | 动画运行 )
文章目录 一.创建动画控制器 二.创建动画 三.设置值监听器 四.设置状态监听器 五.布局中使用动画值 六.动画运行 七.完整代码示例 八.相关资源 Flutter 动画基本流程 : ① 创建动画控制 ...
- VAT (Vertex Animation Texture) on Unity HDRP examples
VAT (Vertex Animation Texture) on Unity HDRP examples VAT 使用Houdini 和SideFX Labs. 实现. https://github ...
- css情景动画,css3中的动画属性animation应用场景及编写代码教程
讲解一下css3中的动画属性animation应用场景及编写代码教程 以下讨论的是和css3 动画 属性 animation 相关的css3中的动画属性animation应用场景及编写代码教程教程文章 ...
- unity从模型中抽取动画文件(animation)
由于模型是由第三方的软件制作的,用unity不能直接编辑模型里的动画文件(read-ony),比如为动画绑定事件,所以要把模型中的动画文件抽取出来,这样文件是可写的了. usingUnityEdito ...
- 2022-05-14 Unity核心7——2D动画
文章目录 一.序列帧动画 二.骨骼动画 -- 2D Animation 三.反向动力学 IK 四.换装 五.骨骼动画 -- Spine 一.序列帧动画 (一)什么是序列帧动画 我们最常见的序列帧动 ...
- swiftui动画之tab自定义切换动画_Unity动画系统详解1:在Unity中如何制作动画?
摘要:在场景中加入动态的物体,可以让整个场景更加生动.真实.Unity场景中的物体可以通过制作动画,让物体动起来.简单的动画如物体的移动.旋转(比如旋转的风扇.闪烁不定的灯泡等),复杂的动画如游戏中角 ...
- Unity动画系统详解1:在Unity中如何制作动画?
摘要:在场景中加入动态的物体,可以让整个场景更加生动.真实.Unity场景中的物体可以通过制作动画,让物体动起来.简单的动画如物体的移动.旋转(比如旋转的风扇.闪烁不定的灯泡等),复杂的动画如游戏中角 ...
- activity 转场动画不生效_replugin插件化,插件转场动画失效的问题解决
说明 随着应用功能的丰富,Android程序的安装包也逐渐变大,这成为应用程序现有框架下难以摆脱的瓶颈.所以引入了rePlugin插件化框架,将应用按功能拆分为插件,以此减小apk的大小并同时增加应用 ...
- 3dMax 骨骼动画导入到Unity
3dMax做的骨骼动画导入到unity中的时候需要注意的事项: 在使用3dMax导出的时候一定要勾选3DMax 导出选项中的"烘焙动画",否则导出的动画在unity中无法正常动作.
最新文章
- 全球著名音乐抓轨软件EAC 设置详解
- strlen与sizeof区别
- 《Android进阶之光》--多线程编程
- .NET体系中的源程序安全问题
- HDU - 4370 0 or 1(思维+最短路)
- Object C学习笔记13-Dictionary字典
- 简单粗暴的多目标跟踪神器 – DeepSort
- 以太坊2.0怎么挖矿_以太坊2.0即将上线 现在正是挖矿红利期 普通人如何参与挖矿?...
- 三体第一部(01到12节)-附带感想
- 如何用计算机录视频,如何在电脑上录制正在播放的视频?原来方法这么简单
- 38241415106——胡应兰(实验一)
- dell笔记本驱动安装失败,Dell Vostro 5470 在安装读卡器驱动时失败
- HTML中如何将字体加粗-前端入门
- CODEVS 1258 关路灯
- 新零售运营独白,如何联合线上线下
- js 获取json数组里面数组的长度实例
- 页面版权声明©xx公司写法
- 全屏抗锯齿技术-FSAA
- Acitivity(页面)之间的跳转,ProgressBar 进度条,PopupWindow 弹出框,Dialog 对话框,Spinner下拉框
- 网站更换服务器对于SEO有哪些影响?