Unreal Engine 4 —— HairStrandPlugin开发日志
2016-09-03 19:27
323 查看
这篇博客介绍了我的个人项目 —— HairStrandPlugin的立项和大体思路。
效果查看:传送门
![](http://o7031t2fw.bkt.clouddn.com//Img/Blog/Gif/Hair.gif)
在目前来说,该插件可以使用Maya进行发型的设计,将发型导入UE4后便可以直接进行发丝的模拟和渲染了。
使用教程:传送门
墙内用户请访问:传送门
目前工具链的适配方面还有一些小问题,但是总体上不影响使用。
但是可惜除古墓丽影的TressFX已经开源外,我们这些小厂商也无法窥探到发丝技术的奥秘。又因为我当前所参与开发的项目隐龙传:影踪里主角陆天源也是长发造型,因此我便开始了这个项目,希望能够让没有太多背景的游戏开发者也可以在UE4上实现发丝的渲染。
另一方面,由于Nvidia Hairworks只公开了PC版本的库,因此针对于其他系统,Hairworks无法适配。
不支持移动平台,换句话说在Android平台上无法正常工作。
布料与发丝还是有差别,例如在Apex Cloth上的布料不会回弹。因此使用Apex Cloth模拟的发丝在表现发型上略不适应。
Apex Cloth与UE4中的Skeletal Mesh完全绑定,换句话说一个Skeletal Mesh只能绑定一个类型的布料,该布料的信息无法在runtime进行调整。假如角色从陆地进入水中,布料阻尼damp无法进行调整,因此在水中的表现将会很怪异。
初期针对于发束粒子进行Physical Simulation、Collision Detection和Constraint Solve。
然后利用结算得来的粒子进行样条插值,从而将发丝构建出来。
x(t+Δt)=x(t)+(x(t)−x(t−Δt))∗damp+aΔt2
在上面的公式中,damp为阻尼系数,阻力越大则该值越小。而a则是该粒子在该处的加速度,重力、风力或者水流等都可能影响这个值。
![](http://o7031t2fw.bkt.clouddn.com//Img/Blog/Gif/Hair2.gif)
关于Verlet Integration,我在之前的一篇博客Unreal Engine 4 —— 可交互绳索的构建也提到过。
总体来讲还是不难。
但是使用这种方法所构建的发丝所需要的图元数量太多,消耗不起。
所以最终决定将该网格朝向摄像机展开,使面片时刻朝向摄像机:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/16/4cf84a87412e950255704d09bf0fd408)
这样达到的效果我个人还是非常满意的。
Interpolation,在发丝间进行插值,减少样条曲线的运算量。
GPU Simulation,准备将Verlet Integration和Constraint Solve放到GPU上进行运算,应该回更快一些。
多线程加速,不同的发丝应该可以放到其他的线程中去达成线程加速。
开发过程中再次感觉到数学对于游戏程序员实在是太重要了,在阅读论文的过程中几乎把所有的大学时代学到的数学都过了一遍。日后看来还是要好好过一遍数学了。
<全文完>
HairStrandPlugin总览
HairStrandPlugin是我的私人项目,可以用来实现毛发的设计、模拟和渲染。目前的效果(2016-09-03之前)为可以在我个人的笔记本(GTX850M 游戏开发者居然还用着这么差的笔记本,求路过的土豪打赏……)上顺滑模拟超过2500根样条发丝。效果查看:传送门
![](http://o7031t2fw.bkt.clouddn.com//Img/Blog/Gif/Hair.gif)
在目前来说,该插件可以使用Maya进行发型的设计,将发型导入UE4后便可以直接进行发丝的模拟和渲染了。
使用教程:传送门
墙内用户请访问:传送门
目前工具链的适配方面还有一些小问题,但是总体上不影响使用。
HairStrandPlugin的立项
HairStrandPlugin在一个月前立项。在练手插件GhostMeshPlugin完成后,我便开始了HairStrandPlugin的开发,将代码托管于coding.net平台之上。小厂商的情怀
针对于发丝的模拟,各大游戏厂商都已经做的不错,例如爱丽丝疯狂回归中爱丽丝的发丝,古墓丽影中劳拉的发丝和最终幻想15中的发丝等均为高质量的发丝表现。但是可惜除古墓丽影的TressFX已经开源外,我们这些小厂商也无法窥探到发丝技术的奥秘。又因为我当前所参与开发的项目隐龙传:影踪里主角陆天源也是长发造型,因此我便开始了这个项目,希望能够让没有太多背景的游戏开发者也可以在UE4上实现发丝的渲染。
Nvidia Hairworks
实际上,Nvidia也已经推出了Hairworks,专门用于毛发的渲染,而且效果相当不错。但是以来Hairworks采用的是基于DirectX 11 的Tessellation技术,换句话说,无法在移动平台和Play Station平台上使用。另一方面,由于Nvidia Hairworks只公开了PC版本的库,因此针对于其他系统,Hairworks无法适配。
Apex Cloth
Apex Cloth是Nvidia推出的可以用于布料的模拟的工具,并且已经集成在UE4里面了。实际上在该插件还未完全实装的情况下,时至今日隐龙传:影踪也是正在使用Apex Cloth进行发丝的模拟。可是Apex Cloth在模拟发丝上还是有一些短板:不支持移动平台,换句话说在Android平台上无法正常工作。
布料与发丝还是有差别,例如在Apex Cloth上的布料不会回弹。因此使用Apex Cloth模拟的发丝在表现发型上略不适应。
Apex Cloth与UE4中的Skeletal Mesh完全绑定,换句话说一个Skeletal Mesh只能绑定一个类型的布料,该布料的信息无法在runtime进行调整。假如角色从陆地进入水中,布料阻尼damp无法进行调整,因此在水中的表现将会很怪异。
开发过程
到目前为止的开发过程大致可以分为两块:Particle Simulation和Strand Mesh Build。初期针对于发束粒子进行Physical Simulation、Collision Detection和Constraint Solve。
然后利用结算得来的粒子进行样条插值,从而将发丝构建出来。
Particle Simulation
针对发束粒子来说,整体的模拟分成力场模拟、碰撞检测和约束迭代。重力&风力模拟
在HairStrandPlugin中,我采用的是带有阻尼的Verlet Integration来进行模拟:x(t+Δt)=x(t)+(x(t)−x(t−Δt))∗damp+aΔt2
在上面的公式中,damp为阻尼系数,阻力越大则该值越小。而a则是该粒子在该处的加速度,重力、风力或者水流等都可能影响这个值。
![](http://o7031t2fw.bkt.clouddn.com//Img/Blog/Gif/Hair2.gif)
关于Verlet Integration,我在之前的一篇博客Unreal Engine 4 —— 可交互绳索的构建也提到过。
碰撞检测
目前的发束例子只进行了球形的检测,检测方法很简单:检测发束粒子与球心的距离,若距离小于半径r,则将改粒子推到球面即可。约束迭代
针对于约束,目前来讲分为Global Constraint Solve和Local Constraint Solve。Global Constraint Solve用于保持发型,Local Constraint Solve用于处理两个过远的粒子。总体来讲还是不难。
Strand Mesh Build
Strand Mesh的构建经历了一些风波。LineMesh
最开始的时候我打算使用LineMesh来进行发丝的模拟:
Mesh.Type = PT_LineList;
但是使用这种方法所构建的发丝所需要的图元数量太多,消耗不起。
TriangleList
因此最后还是决定了使用TriangleList。但是如果是使用平常的三角面片则还是无法应对多角度的视线,例如当相机与面片相切时,则完全看不到该面片。
所以最终决定将该网格朝向摄像机展开,使面片时刻朝向摄像机:
这样达到的效果我个人还是非常满意的。
后续开发
后续的开发将会着重几个方面:Interpolation,在发丝间进行插值,减少样条曲线的运算量。
GPU Simulation,准备将Verlet Integration和Constraint Solve放到GPU上进行运算,应该回更快一些。
多线程加速,不同的发丝应该可以放到其他的线程中去达成线程加速。
后记
HairStrandPlugin只由我一个人开发,从最初的什么都没有到现在能够或多或少看出海飞丝的效果,这样的成果我个人其实已经很满意。开发过程中再次感觉到数学对于游戏程序员实在是太重要了,在阅读论文的过程中几乎把所有的大学时代学到的数学都过了一遍。日后看来还是要好好过一遍数学了。
<全文完>
相关文章推荐
- Unreal Engine 4 —— Ghost Mesh Plugin的开发日志
- 使用Visual Studio开发游戏——微软宣布与Unity、Unreal Engine和Cocos展开全新合作
- UnrealEngine4.8.3 插件开发入门篇
- 基于Unreal Engine 2的救援机器人仿真平台开发(一)
- 【UNREAL ENGINE 游戏开发】开篇之为什么现在就要抱紧UE的大腿!(另附学习资料/交流群)
- Simplygon plugin for Unreal Engine 4
- Unreal Engine 4 —— Ghost Mesh Plugin的开发日志
- Unreal Engine Plugin management
- 【UNREAL ENGINE 游戏开发】开篇之UE4的BLUEPRINT(蓝图)与C++(新童鞋必看)
- 多语言代码生成器开发日志2
- [原创] Neo.Geo 视频帧浏览器开发日志
- 更多的人了解IDEA的plugin开发机制
- 封闭开发日志
- 开发日志-2005-11-3
- 多语言代码生成器开发日志2
- UltraVML开发日志
- [原创] CPS1模拟器开发日志
- [原创]今天开发日志管理系统,全选,多项删除功能。
- DotNet应用程序开发日志
- 电子书伴侣开发日志(0)