最后的效果,左为顶点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中顶点动画相关推荐

  1. 【Flutter】Animation 动画 ( Flutter 动画基本流程 | 创建动画控制器 | 创建动画 | 设置值监听器 | 设置状态监听器 | 布局中使用动画值 | 动画运行 )

    文章目录 一.创建动画控制器 二.创建动画 三.设置值监听器 四.设置状态监听器 五.布局中使用动画值 六.动画运行 七.完整代码示例 八.相关资源 Flutter 动画基本流程 : ① 创建动画控制 ...

  2. VAT (Vertex Animation Texture) on Unity HDRP examples

    VAT (Vertex Animation Texture) on Unity HDRP examples VAT 使用Houdini 和SideFX Labs. 实现. https://github ...

  3. css情景动画,css3中的动画属性animation应用场景及编写代码教程

    讲解一下css3中的动画属性animation应用场景及编写代码教程 以下讨论的是和css3 动画 属性 animation 相关的css3中的动画属性animation应用场景及编写代码教程教程文章 ...

  4. unity从模型中抽取动画文件(animation)

    由于模型是由第三方的软件制作的,用unity不能直接编辑模型里的动画文件(read-ony),比如为动画绑定事件,所以要把模型中的动画文件抽取出来,这样文件是可写的了. usingUnityEdito ...

  5. 2022-05-14 Unity核心7——2D动画

    文章目录 一.序列帧动画 二.骨骼动画 -- 2D Animation 三.反向动力学 IK 四.换装 五.骨骼动画 -- Spine 一.序列帧动画 (一)什么是序列帧动画 ​ 我们最常见的序列帧动 ...

  6. swiftui动画之tab自定义切换动画_Unity动画系统详解1:在Unity中如何制作动画?

    摘要:在场景中加入动态的物体,可以让整个场景更加生动.真实.Unity场景中的物体可以通过制作动画,让物体动起来.简单的动画如物体的移动.旋转(比如旋转的风扇.闪烁不定的灯泡等),复杂的动画如游戏中角 ...

  7. Unity动画系统详解1:在Unity中如何制作动画?

    摘要:在场景中加入动态的物体,可以让整个场景更加生动.真实.Unity场景中的物体可以通过制作动画,让物体动起来.简单的动画如物体的移动.旋转(比如旋转的风扇.闪烁不定的灯泡等),复杂的动画如游戏中角 ...

  8. activity 转场动画不生效_replugin插件化,插件转场动画失效的问题解决

    说明 随着应用功能的丰富,Android程序的安装包也逐渐变大,这成为应用程序现有框架下难以摆脱的瓶颈.所以引入了rePlugin插件化框架,将应用按功能拆分为插件,以此减小apk的大小并同时增加应用 ...

  9. 3dMax 骨骼动画导入到Unity

    3dMax做的骨骼动画导入到unity中的时候需要注意的事项: 在使用3dMax导出的时候一定要勾选3DMax 导出选项中的"烘焙动画",否则导出的动画在unity中无法正常动作.

最新文章

  1. 全球著名音乐抓轨软件EAC 设置详解
  2. strlen与sizeof区别
  3. 《Android进阶之光》--多线程编程
  4. .NET体系中的源程序安全问题
  5. HDU - 4370 0 or 1(思维+最短路)
  6. Object C学习笔记13-Dictionary字典
  7. 简单粗暴的多目标跟踪神器 – DeepSort
  8. 以太坊2.0怎么挖矿_以太坊2.0即将上线 现在正是挖矿红利期 普通人如何参与挖矿?...
  9. 三体第一部(01到12节)-附带感想
  10. 如何用计算机录视频,如何在电脑上录制正在播放的视频?原来方法这么简单
  11. 38241415106——胡应兰(实验一)
  12. dell笔记本驱动安装失败,Dell Vostro 5470 在安装读卡器驱动时失败
  13. HTML中如何将字体加粗-前端入门
  14. CODEVS 1258 关路灯
  15. 新零售运营独白,如何联合线上线下
  16. js 获取json数组里面数组的长度实例
  17. 页面版权声明©xx公司写法
  18. 全屏抗锯齿技术-FSAA
  19. Acitivity(页面)之间的跳转,ProgressBar 进度条,PopupWindow 弹出框,Dialog 对话框,Spinner下拉框
  20. 网站更换服务器对于SEO有哪些影响?

热门文章

  1. 科技云报道:FONE:半年融资过亿元,打造EPM领域“最强国货”
  2. kali2021安装百度网盘
  3. IDEA创建父项目和子项目
  4. 适合手机页面微信页面pc页面用的幻灯片
  5. Laravel 中使用 Laravel-Excel 美化
  6. 镂空三角形(for循环找规律)
  7. windows应用(vc++2022)MFC基础到实战(1)-基础(1)
  8. Markdown:如何修改插入图片的大小或比例
  9. 一般对称性和轮换对称性
  10. 新版Logcat使用指南