HuldaGnodim 发表于 2022-9-26 18:38

曲线解决方案插件之Curvy Spine(二)

一、简介

Curvy Spine是一款优秀的曲线骨骼解决方案,可以实现unity中各种曲线的绘制,曲线路径的追踪,同时还可以通过曲线绘制各种mesh等强大功能,同时兼顾优化并提供了方便的编辑器工具,笔者强烈推荐有曲线需求的小伙伴前来研究。
篇幅(一)中,笔者已经介绍了插件的基础使用以及几个常规案例,本篇将围绕generator(即通过曲线生成mesh、布置对象的编辑器)展开。
二、Generator基础知识

2.1 常用变量及名词解释


[*]TRS。位置旋转缩放。
[*]Use Cache。使用缓存,不勾选曲线会根据公式计算位置,勾选则会生成多个采样点,位置通过采样点进行线性计算。
2.2 generator介绍

generator作为本文的主角,也是curvy spline的核心,必须着重介绍一下。
首先是入口,可以通过右键菜单中curvy/generator创建。插件demo中的从场景10开始的demo都和generator有关,可见其重要性。
其次是作用,它可以给使用者提供一个类似shadergraph的节点编辑界面,大家可以通过此界面来编辑各种曲线从而生成各种曲线mesh效果、同时也可以将gameobject布置到曲线上、还可以生成曲线的linerenderer等,功能很强大;
最后,请欣赏一个通过此插件生成的管道效果如图1所示,还不错,对吧,这只是一个简单的案例,还有很多复杂的效果等着大家去探索,那么下面就开始进入正题了。



图1 管道案例

2.3 小案例之生成一个模板管道mesh

generotar有20多种节点,每种节点还有很多属性,一起介绍怕是吃不消,还是从简单的模板开始吧。
首先创建一个generator,通过2.2中的入口即可创建。然后,选中generator,在检视版中的generator组件下点击edit graph按钮(如图2所示),打开节点编辑界面;
接着,在generator编辑器内空白区域右键点击可以看到,操作节点相关的菜单,可以大致浏览下可以add的节点,有20多种,为了简化操作,先使用add template的方式添加一组可以直接看效果的节点。
可以看到,菜单add template下有3中模板:

[*]shape extrusion。生成形状。可以通过管道曲线及管道横截面曲线生成曲线mesh效果。
[*]spot gameobject。布置游戏对象。可以把prefab按一定规则布置在曲线路径上。
[*]spot mesh。布置mesh对象。可以把mesh按一定规则布置在曲线路径上。



图2 edit按钮

本小节以shape extrusion举例。那创建1个模板,可以看到共产生5个节点,如图3所示。各节点介绍如下:

[*]InputSplinePath节点,用来选择生成曲线路径基于的曲线。
[*]InputSplineShape节点,用来选择控制曲线路径横截面的曲线。
[*]Shape Extrusion节点,根据路径曲线及路径横截面曲线生成形状。
[*]volume mesh节点。根据形状产生的volume生成mesh。
[*]create mesh节点。根据顶点mesh数据生成真实的mesh。
然后就可以去场景中操作曲线来看mesh效果了,如图4所示,实现起来还算容易,至此大家已经可以快速的生成1个管道mesh了。至于布置gameobject和mesh模板,大家也可以尝试一下,可以直接看效果,就不多做介绍了。



图3 shape extrusion模板节点



图4 操作横截面曲线控制管道

三、Generator具体节点

而插件最容易劝退大家的要数这个具体节点的使用,开始时,笔者也是一脸懵逼,强行研究demo加文档逐渐熟悉了起来,现在看来简单多了,generator的节点总的来说不是特别多(20多个,比shadergraph少太多),下面笔者将按节点大类分小节一一介绍,看了笔记的介绍相信大家熟悉起来就快多了,哈哈。大家也可以去官网直接看文档:
3.1 Input类节点

相对简单的节点,用来给后续节点传入必要的数据。有以下几种:

[*]GameObjects节点。编辑器面板中可以放入多个prefab对象,输出为gameobject数组,常用来根据曲线批量布置gameobjects时提供gameobjects。
[*]Meshes节点。编辑器面板中可以放入多个Mesh对象,用来根据曲线布置Mesh时提供Mesh。
[*]Spline Path节点。输入曲线路径,参数为spline组件,为后续节点提供曲线路径。
[*]Spots节点。可以用来输入多组输入位置信息、旋转,比例信息供后续节点使用。
[*]Spline Shape节点。输入曲线横截面形状曲线,参数为曲线,后续节点会根据此节点数据生成曲线对象的横截面。
3.2 Create节点

该类节点主要是放在最后,用来创建各种对象。

[*]GameObject节点。根据输入的gameobject及位置信息,生成gameobject。
[*]Mesh节点。根据输入的mesh及位置信息,生成gameobject,同时还可设置生成的meshrender属性、collider属性等。
[*]Path Line Render。根据Rasterize path生成lineRenderer。rasterize是光栅化的mesh及将曲线转化为三角面后的数据。
3.3 Build节点

构建节点。将generator过程中生成的中间数据转换成可以使用的数据,如mesh,rasterize path等。

[*]Rasterize Path节点。输入为曲线path,输出为光栅化路径。

[*]Range和Length分别控制生成路径的两端的位置。
[*]Resolution负责生成mesh的3角面数,越多细节表现越好,当然也会影响性能。
[*]Optimize。勾选可以优化曲线,主要是根据相邻三角面的角度来进行合并,值越大合并的越多,棱角越分明。

[*]Shape Extrusion节点。2.3小节曾使用过。输入为管道曲线路径和管道横截面形状,输出为一个体积数据和镂空的体积数据。

[*]Path属性。同Rasterize Path的属性。
[*]Cross属性。主要设置横截面效果。
[*]Scale属性。控制曲线管道各段的比例大小。
[*]Hollow属性。控制镂空Volume数据。

[*]Volume Mesh。将输入的volume转化成mesh。
[*]Volume Caps。将输入的volume转化成曲线横截面的mesh。
[*]Volume Spots。根据volume和bounds生成位置信息,而bounds可以之前节点产出的gameobjects或者meshes。
3.4 Modifier节点

主要用来对输入的shape、path等数据进行混合等2次修改。

[*]Conform Path。求路径投影在指定方向带碰撞的物体上的路径,可以参考插件场景24的demo,不过这个不是很好用,效果经常会出现多余的线,或陷入碰撞体中,大家可以自己尝试。
[*]MixPaths。这个比较简单,将两条路径根据指定值做融合,得到一个新的路径。
[*]MixShapes。同MisPaths,只不过混合的是横截面。
[*]PathRelativeTranslation。将路径沿着侧面的方面扩大或缩小指定距离,具体可以测试下。--todo
[*]TRS Mesh。调整mesh的位置,旋转,比例。
[*]TRS Path。调整Path的位置,旋转,比例。
[*]TRS Shape。调整Shape的位置,旋转,比例。
[*]Variable Mix Shapes。通过曲线混合Shape。
3.5 Debug和Note节点

调试用的debug会增强目标的显示效果,而Note节点,代码中似乎没有处理,仅仅是用来展示下文本。
四、结语

不同于篇幅一,本文没有介绍具体场景demo的实现方式,而是着重介绍了节点的作用,主要是因为案例demo中都是对这些节点的组合,了解了节点的作用,再去看demo,理解起来已经很容易了。
篇幅一的阅读量蛮低的,捂脸笑,可能是大家对曲线这块的需求不是那么多,或者有更好的解决方案,但笔者是真心觉得这个插件不错,O(∩_∩)O哈哈~,只能献给有缘人了。
至于组件的扩展,笔者目前还没有这样的需求,先暂不介绍了,不过笔者大致了解了下generator这套节点的扩展,还是比较容易的,建议大家在学习插件的时候也可以看看插件的源码,能学到不少编辑器扩展的知识,也能更好的运用插件~
页: [1]
查看完整版本: 曲线解决方案插件之Curvy Spine(二)