Unity网格变形开源库测评

栏目: 后端 · 发布时间: 5年前

内容简介:【博物纳新】是UWA旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。更多精彩内容请关注:lab.uwa4d.comDeform是一个Unity的网格变形工具框架,使用JoySystem+Burst编译器工作,在CPU端获得更好的性能。它拥有便捷易用的Editor工具,可实现包括Blend、Twist等内置的40多种变形效果,当然也支持用户自己编

【博物纳新】是UWA旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。

更多精彩内容请关注:lab.uwa4d.com

简介

Deform是一个Unity的网格变形 工具 框架,使用JoySystem+Burst编译器工作,在CPU端获得更好的性能。它拥有便捷易用的Editor工具,可实现包括Blend、Twist等内置的40多种变形效果,当然也支持用户自己编写的Custom Deformer。

以下为部分效果图:

Unity网格变形开源库测评 Unity网格变形开源库测评 Unity网格变形开源库测评

每一种类型的变形效果称为Deformer,而接收变形效果的网格物体称为Deformable。在每一类Deformer中会把计算量较大的顶点位置计算逻辑定位为IJobParallelFor类型的Job。

以下为预制的膨胀变形器BulgeDeformer中定义的网格顶点位置算法:

[BurstCompile(CompileSynchronously = COMPILE_SYNCHRONOUSLY)]
public struct BulgeJob : IJobParallelFor
{
    public float factor;
    public float top;
    public float bottom;
    public bool smooth;
    public float4x4 meshToAxis;
    public float4x4 axisToMesh;
    public NativeArray<float3> vertices;

    public void Execute(int index)
    {
        var point = mul(meshToAxis, float4(vertices[index], 1f));

        var normalizedDistanceBetweenBounds = (clamp(point.z, bottom, top) - bottom) / (top - bottom);
        if (smooth)
            normalizedDistanceBetweenBounds = smoothstep(0f, 1f, normalizedDistanceBetweenBounds);
        var signedDistanceBetweenBounds = (normalizedDistanceBetweenBounds - 0.5f) * 2f;

        point.xy *= signedDistanceBetweenBounds * signedDistanceBetweenBounds * -factor + factor + 1f;

        vertices[index] = mul(axisToMesh, point).xyz;
    }
}

其在运行时在Timeline中查看Job Thread上的运行情况如下:

Unity网格变形开源库测评

在运行时,所有需要应用变形的网格Deformables由一个DeformableManager管理,控制每一个网格的准备工作、变形计算、等待完成。再由每个Deformable安排其上Deformer的Job进行工作,以实现较好的性能。

开源库链接: https://lab.uwa4d.com/lab/5cabb5ad72745c25a82d8d64

使用说明

首先,你需要一个2018.3+的Unity版本,然后按照开源库中的安装说明安装一下即可。

打开Unity编辑器,可以在菜单栏中找到Tools -> Deform -> Creator Window,打开编辑面板。

点击【Create Deformable】即可快速创建一个约3000面的Deformable了。

Unity网格变形开源库测评

接下来选中Deformable Object,点击Create Window面板中想要添加的预制Deformer,即可自动完成添加,这里选择一个Bulge类型的Deformer如下图:

Unity网格变形开源库测评

然后只要修改Bulge Deformer的参数即可看到网格变形的效果了。

Unity网格变形开源库测评

此外,Deformer还支持将变形后的网格保存成资源。

Unity网格变形开源库测评

性能测评

本期的性能测评使用UWA GOT Online在小米8和三星S6两个中高端设备上进行了同屏压力测试。通过添加不同个数的Bulge Deformer的Deformable GameObject比较性能差异。测试用例的截图如下:

Unity网格变形开源库测评

得到在两个设备上的FPS帧率信息如下:

在小米8上Deformable从1个添加到45个,帧率一直稳定在59帧左右:

Unity网格变形开源库测评

而在三星S6上,当Deformable达到30个时开始掉帧,最终在Deformable添加到45个时掉到了27帧左右。

Unity网格变形开源库测评

在CPU耗时方面,主线程的耗时主要集中在DeformableManager.Update上,统计得到其耗时均值与Deformable个数的关系如下:

Unity网格变形开源库测评

同时,由于Deform应用的变形效果每一个网格都是一个实例,所以在内存中也会有同样多份的网格资源,这也是大家在使用时需要注意的:

Unity网格变形开源库测评

总结

正如作者在Release说明中提到的:

"Deform runs on the CPU. While it is incredibly fast, you should not expect to get performance comparable to vertex shaders.

Use shaders if you need speed, use Deform if you need modularity and ease-of-use."

使用CPU端来实现网格变形效率上必然比不上Vertex Shader,但如果希望有一个模块化易用性高的工具,Deform的确是一个不错的选择。

快用UWA Lab合辑Mark好项目!
Unity网格变形开源库测评

今天的推荐就到这儿啦,或者它可直接使用,或者它需要您的润色,或者它启发了您的思路......

请不要吝啬您的点赞和转发,让我们知道我们在做对的事。当然如果您可以留言给出宝贵的意见,我们会越做越好。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

REST实战

REST实战

Jim Webber、Savas Parastatidis、Ian Robinson / 李锟、俞黎敏、马钧、崔毅 / 东南大学出版社 / 2011-10 / 78.00元

为何典型的企业项目无法像你为web所开发的项目那样运行得如此平滑?对于建造分布式和企业级的应用来说,rest架构风格真的提供了一个可行的替代选择吗? 在这本富有洞察力的书中,三位soa专家对于rest进行了讲求实际的解释,并且通过将web的指导原理应用到普通的企业计算问题中,向你展示了如何开发简单的、优雅的分布式超媒体系统。你将会学习到很多技术,并且随着一家典型的公司从最初的小企业逐渐成长为......一起来看看 《REST实战》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换