spine 骨骼动画网格点怎样设置网格 meshes

&>&&>&&>&&>&spine骨骼动画软件
spine骨骼动画软件
上传大小:39.4MB
好东西,支持骨骼动化,还支持变形动化。全新的工具包包含完整的图形库,可以学习。
综合评分:4(27位用户评分)
所需积分:0
下载次数:319
审核通过送C币
创建者:xiaoyaoyou1212
创建者:nigelyq
创建者:jin80506
课程推荐相关知识库
上传者其他资源上传者专辑
移动开发热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
spine骨骼动画软件
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:liweizhaolili
之前研究了一下PBR(Physically Based Rendering)用于角色时的一些效果,然后我再研究了一下用于地形上面多层纹理时的情况。
我之前写了一个多层纹理的shader,作用是支持4张漫反射通道的贴图作为纹理,通过一张遮罩图片来控制叠加关系,这样的地形效果如下:
稍微做了一些修改,加入了法线贴图和高光贴图的支持,效果会变成这样:
对比起单纯的漫反射贴图,这个效果已经有了明显的凹凸和部分的高光。&
接下来我重新写了一个shader,这个shader是支持4层纹理的地形,然后支持PBR渲染,可以指定金属贴图和高光贴图,效果如下:
对比起传统的高光法线贴图效果,PBR会感觉地面的质感更强,如果高光贴图控制了某些部分的强高光,会出现像左下角石头上面的水迹的效果。&
然后对于水的效果,这一个是EasyWater里面的Water4效果:
我做了一些修改,让他变成了PBR材质,效果如下:
既然我已经做出了多种级别的效果显示,用意应该是很明显了。我就是想在手机游戏上面设置不同的显示质量。在最低质量时,将会只是显示单纯的漫反射通道效果,中级质量时,会显示高光法线效果。最高质量时将会显示PBR材质效果。
效果切换也是挺方便的,因为所有的shader都是自己写的,所以可以很容易的控制他们的结构统一性,在切换质量显示时直接切换shader就行了。具体效果可以参考最上面的视频。
这里存在一个问题,假设你是用Shader Model 2.0来写shader,如果是用Unity自带的那个PBR光照模型作为shader的基础光照模型使用,将会消耗比较多的运算符,而导致在写一些稍微复杂一点的叠加效果时会报错运算符超过最大限制。因为Shader Model 2.0在编译成汇编着色器时最多只支持64个运算符。这个问题是基本无解的,只能把shader改成Shader Model 3.0。
如果害怕某些机器不支持Shader Model 3.0。那么在切换shader显示之前可以先判断一下机器的硬件情况,获取SystemInfo.graphicsShaderLevel,如果大于等于30,那么设备就是支持Shader Model 3.0的了。
最近经常听到PBR(Physically Based Rendering)技术的讨论,我一开始其实比较抗拒的。毕竟对于画面和运行效率,我一直偏向于后者。不过最近玩了一些比较优秀的游戏作品,比如《镇魔曲》等,发现好的画面还是非常吸引人的,于是开始研究一下PBR技术的用法。
传统的贴图渲染技术,一般是使用3张贴图来表现模型的效果:漫反射贴图、法线贴图和高光贴图。物体能让肉眼看到的基本颜色,都是通过漫反射贴图来表现的,然后通过法线贴图让模型在细节上产生有凹凸的感觉。最后通过高光贴图控制模型不同部分的高光显示不一样,让人感觉到同一个模型上有不同的质感。由于光照模型产生高光的锐度不一样,还需要通过一个参数去调节高光的整体锐度。
由于传统的渲染技术是基于贴图的,所以使用同一张法线贴图和高光贴图的模型实际上产生高光的整体是一样的,只是通过法线贴图细节上的不一样,让不同部位的高光方向稍微不同,然后高光贴图等于是一张过滤图,让某些部位的高光显示强弱发生一点变化。
PBR的渲染使用了4张基本贴图:漫反射贴图、金属度(高光度)贴图、法线贴图和环境贴图。
漫反射贴图和法线贴图和传统贴图渲染使用的差别不大,区别是漫反射贴图最好把上面的光照信息(比如一些画上去或者烘焙的假光影)去掉,把这些光影的效果交给渲染本身来实现。
区别最大的是金属度贴图。金属度贴图的rgb通道代表了金属感的强弱,alpha通道代表了高光的锐度。和传统的高光贴图不一样,它使用了金属感和高光锐度两个概念,让物体的质感更丰富。高光贴图只是过滤的功能,但金属度贴图是一种物体表面的属性,你可以控制物体上面某一个部位的反光程度和高光产生的强度,让渲染的过程自动生成它该有的效果。
环境贴图,是控制物体受影响的基本环境,一般是纯黑色的,也就是完全受周围真实环境的影响。但你可以在某些部位的贴图上绘制一些固定的颜色,让贴图颜色和真实环境同时对模型产生影响。比如你要让某个部位一直发光,不受外部光线的影响,可以在环境贴图上控制。
下面做了一个例子:
我拿了一个漫威的冬兵(WinterSoldier)的模型,在完全没有贴图的情况下,他是这样的:
然后我给他赋予了漫反射贴图:
&按照传统的贴图渲染做法,我给他赋予了法线贴图和高光贴图,效果如下:
可以看得出,法线贴图和高光贴图让模型产生了质感,在手臂和腰带扣子上,产生了类似金属的质感。但也可以看出,模型计算的高光是整体的,也就是说虽然有不同的部位,但产生的高光是以整个角色一起算的,只是某些部位把高光隐藏了而已。
&接下来我把材质换成默认的Standard,默认会赋予了漫反射贴图和法线贴图
这时候的效果是这样的:
由于我现在没有设置金属度贴图,所以整个角色的金属度和高光度是一样的,看起来就像一个金属的雕像。
接下来我使用他原来的高光贴图做了一些修改,变成了金属度贴图,效果会变成这样:
现在整个角色的形象变得鲜明,不同部位的质感差别很明显,而且高光的感觉是单独的,手臂上面有单独的高光,衣服上的配饰的高光也是单独的,看起来比较细腻和丰富。
这时候4张贴图都已经使用了,由于冬兵的手臂虽然是金属,但颜色会比较白,如果金属度调得高了,会变黑。所以我在环境贴图里面对手臂部分稍微做了些调整。
这是一个比较简单粗暴的制作过程,我感觉制作高光贴图和制作金属感贴图最大的不一样,是pbr的质感是以部位来做的,你可以感觉整个部位划为一块那样做金属感贴图,也可以通过纹理细节来做一些部位的特殊效果,比如锈迹等。做法很多,效果很丰富,但需要慢慢的调节才能看到正确的效果,中间的难度比只是单纯做一张过滤用的高光贴图要难。
2016年的最后一天,在家想了很久要做些什么,最后决定画一张画。我的能力有限,只会对着画,所以上网下载了一张钢铁侠的照片,然后对着画了上面的那张画。
为什么想画钢铁侠呢?在我印象中钢铁侠经历大起大落,面对各种困难,但他仍然保持着坚强的心态,一边说出各种幽默的吐槽,一边打败敌人。
最近我渐渐养成了吐槽的习惯,每天上班都在不停的吐槽各种事情。所以我曾经吐槽自己,现在的职业应该是程序吐槽师。
值得吐槽的事情太多了,对于我来说,2016年绝对是失败的一年。从经济上来说,截止到今天,今年一分钱没有存到,还倒贴了几万。从工作上来说,项目失败被砍,顺带技术也被否定,要用别的项目的框架来开发。从生活上来说,由于各种原因,越来越少陪伴儿子,导致了儿子和我越来越生疏了。由于失败,导致了看各种事情都不顺心,自然而然的,就吐槽出来。&
如果我能有钢铁侠那么坚强,那么我可以在吐槽中崛起。但如果我只是会吐槽和埋怨,那么我可能只会在吐槽中消失。
不论怎样,2016年的失败已经是无法挽回了,只能寄望于明年,再努力一把,看能不能有所收获。
近几年做了程序员之后,很少机会画画了。趁着新项目还没开,有点空余时间,练练手。
感觉做美术和做程序最大的区别就在于精神状态。以前做3d模型的时候,我一般都是听着歌慢慢做的,那个过程基本上是一种享受来的。做骨骼动画一开始我也是听着歌来做的,后来看了迪士尼动画大师的书,知道原来听着歌做动画是不好的,动画的节奏会受到影响,所以后来就没有听歌做动画的习惯了。后来做了程序,感觉写代码是一种比较专注的事情,需要高度集中精神去做,不然很容易影响思路或者出错。所以我写代码是从来不听歌的,除非是周围的环境是在太吵,才会戴上耳机。
不过做美术是讲究天分的,这就和做音乐是一样的。我虽然爱好音乐和美术,但我却没有这种天分,所以不可能做得很好。以前勉勉强强的做了3年美工,实在感觉自己已经没有什么进步的空间了,才会转成了程序员的。
昨天一位网友加我qq,想问我是怎样从美术转程序员的。我很难回答。其实我在小学的时候就开始学编程了,那时候是学basic,在dos环境下。后来上了中学,学pascal,还在中山大学举办全国性程序比赛中拿过奖。如果不是高考的时候考砸了,我本来应该读计算机专业的,而不是和易建联、朱芳雨、杜峰他们成了师兄弟,还读同一个学院……
而我为什么会做美工,这对于现在的人来说才是奇怪的。在我读书的那个年代,正流行做网页和做flash动画。那时候根本就没有美工或者程序员这样区分得那么明显的,做网站流行用flash动画,一般都是自己画素材,自己写代码让它跑起来。所以那时候做网页的人,基本上都会Photoshop,会firework,会dreamweaver,会flash。我是从高中开始做网站的,一直做到大学毕业,第一份工作也和做网站相关。由于读大学的时候已经开始流行3d效果了,所以顺便的在学校选修里面学了3dmax课程,后来又在北京工作的时候,业余读了首都师范大学的3d影视全科班,才正式的成为了一名美工的。
现在回头看看,觉得做什么都差不多了。因为生活的压力,我没有心思像以前一样自己搞创作,做自己的小游戏。对于我来说,现在不管做什么,对于我来说也只是一种谋生的方式而已。到了空闲的时候,自己做点东西玩玩,虽然不能盈利,但只求高兴。
最近,我的项目又失败了。为什么说又?因为这是我近2年以来参与的第三个项目失败了,其中包括一个页游,两个手游。
失败的原因很多,当然我也不能推卸责任,自己的确做得不好。就拿最近这个项目来说,做了很多新的尝试,比如使用了unity5.几版本,使用了ugui,代码全部用lua写,整个游戏全部代码和资源都可以热更新。这些东西都是在之前的项目里面没有试过的。可惜的是到了项目快上线的时候,才发现遇到了不少问题。
比如游戏启动时解压缩资源,运营认为慢(实际时间是稍微不那么差的游戏是在一分钟左右解压缩完,比较差的手机在2分多钟解压缩完)。所以急急忙忙的改为了只解压缩lua代码,美术资源打在apk包里面。这样做的好处是解压缩时间很短,只需要10秒左右(其实这是自欺欺人的,资源都在apk里面,安装apk的时间本身就会变长,不过运营认为这样好)。坏处是打补丁包的时候容量会大很多。因为如果完全解压缩资源出去,那么以后只需要改了某个文件就把某个文件单独打包就行,但如果主要资源是在apk里面的,那么当某个资源改动之后,需要把依赖它的所有资源都打包出去,才能起到更新的作用。怎么想这样做都很笨,但最后我还是妥协了。
还有性能的问题,由于人手不足,单纯是把功能赶出来已经疲于奔命了,到了上线前,都还没什么机会去优化性能。或者刚打算优化,又一堆小问题来打扰。反正这些都是借口了,最后就是上线之后性能不好,场景里面玩家一多起来,就卡得不行了。
最后是内存泄漏的问题。由于对lua不熟悉,很多写法上写得比较随意,导致了lua方面产生了较多的临时内存。然后lua的自动gc似乎有点问题,导致了Mono方面申请了内存释放不了。然后玩得时间长了之后,有些手机会因为内存的问题而崩溃。这个问题在项目被砍了之后,我终于有时间去处理了,改了很多写法,能用对象池的地方都用,把调用unity的api会产生垃圾的地方都改成自己写数学方法实现。然后在一些地方加入了强制gc。这个泄漏的问题似乎是大概解决了。不过也没用了。
不过值得庆幸的是,在美术资源的加载管理上,还算做得好,没有任何美术资源上的泄漏。
其实这个项目从一开始就已经预感了会失败的了。就拿最简单的例子来说,要求公司出几千元去外包搞些技能音效,公司居然都不肯。我手下走了2个人,招聘了3个月才招到了1个人补充,原因只有一个,就是给的价钱低(要知道那时候加上我才3个人啊)。做项目无非就是人和资源。这两样都没有,公司还整天喊着要出精品,不是精品不让上线。这不是自己玩自己吗?
好了,项目失败了,我会怎样呢?没怎样,继续留在公司,继续做新项目。说真的,我都佩服我自己了。如果是年轻个4、5年,估计我在公司决定砍项目的时候就已经拍桌子辞职走人了。但现在不一样了,人穷志短,要养妻活儿,不敢轻易的离职换工了。不管被说到怎样技术不行也好,要被责任也好,没错,是我做得不好,以后改进,继续做,只要还有工资发就行了。这真不是说笑的,2016年快过完了,算了一下,我今年存到的钱,还没有我发给帮我带小孩的保姆的工资一半呢……说不定今年要倒贴了。
不管怎么说也好,留个纪念吧。虽然这个游戏自己都觉得做得很烂,也不好玩,说不定某天想起来,还是觉得有点意思的。
之前阿赵我在博客上面介绍过在unity3d里面使用Spine骨骼动画。实际上现在Unity上面开发2D游戏的人非常多,所以2D动画非常受到用户关注。现在Unity3D上面做2D骨骼动画的插件也挺多的。最近,老牌骨骼动画解决方案DragonBone(龙骨)也推出支持Unity3D的库,意味着我们也可以在Unity3D里面使用龙骨了。龙骨的优点是有强大的动画编辑器,和可以跨多个平台使用。龙骨的unity支持插件是最近才推出的,阿赵尝了个鲜,下载来用了一下,并做了一些分析。
如果不了解龙骨的朋友,可以去他们的官网看看:
/cn/index.html#.WArsoHEYzRI
上面有视频介绍龙骨的编辑器使用和游戏中的效果
如果以前用过龙骨的朋友估计对这只小龙会挺有印象的。&
这是龙骨的动画编辑器。不过这次我不打算去研究龙骨编辑器的用法,只针对龙骨在unity里面的使用情况进行一些尝试。&
以下是我在试用之后的一些体会:
一、龙骨在Unity内的表现
龙骨的demo里面带有多个范例,包括了动画播放、换装、控制等等,个人感觉表现力挺不错的,有兴趣可以自己下载来运行看看。
换装和控制的demo&
&同屏多角色的demo
二、对龙骨的资源的一些解释:
从龙骨里面导出的文件,会有三个,分别是骨骼配置(skeleton.txt)、图集配置(texture.txt)和图集图片(texture.png)
这些文件的格式并不是针对unity的,而是通用的,配置文件是json,然后图片是png。这就是跨平台的用法,在不同的平台可以用通用的动画数据。
看看详细的数据结构:
这是skeleton.txt里面的内容:包括了版本号、骨骼名称、角色骨骼支架(armature)信息和帧率&
接下来详细看看armature的信息:一个armature其实就是一个独立的角色了。这里看到这种结构的原因,说明了龙骨里面,一个skeleton.txt骨骼里面可以包含多个不同的角色,他们是用同一张图集的。
&一个armature里面会包含蒙皮信息(skin)、动画信息(animation)和骨骼信息(bone)
骨骼动画的原理我之前也有介绍过,对于骨骼动画有了解的朋友应该都知道这三个数据是做什么用的。骨骼是一个角色骨架在初始蒙皮状态时候的骨骼位置,蒙皮信息是网格模型皮肤在蒙皮状态时候相对骨骼的位置,还有收到骨骼影响的权重大小。动画信息是每一个关键帧里面骨骼对应的矩阵变化,简单来说就是位移旋转缩放之类的信息。当需要播放骨骼动画的时候,会根据动画信息算出每根骨骼当前帧应该在的位置,然后网格模型皮肤根据蒙皮信息得出网格模型当前帧需要的位移旋转缩放或者形变的情况,然后渲染出来。
&接下来是图集图片的配置数据:里面包括了图片对应角色的名称、图片的路径,还有图集里面每一张小图的位置信息:
图集配置数据&
小图片数据
图集的原理就更简单了,根据小图在大图里面的开始位置和长宽,生成出小sprite。由于这些sprite都是从同一个texture里面生成出来的,那么他们的drawcall就只有一个了。&
三、龙骨在unity里面的用法的介绍:
下面从代码层级介绍一下龙骨在unity里面的用法。
1、加载资源
在使用龙骨播放角色动画之前,需要先把上一个部分说道的骨骼和图集的信息先加载进来。使用的api是
1.加载骨骼信息:
UnityFactory.factory.LoadDragonBonesData(骨骼文件(skeleton.txt)在resources里面的相对路径,角色名称)
2.加载图集信息:
UnityFactory.factory.LoadTextureAtlasData(图集配置文件(texture.txt)在resources里面的相对路径,角色名称)
加载角色里面有一个角色名称的参数,这个参数是可以不传进去的,因为骨骼和图集里面本身是有角色名称的,如果参数不传,就会以配置里面的角色名称来使用。这个名称是很有用的,如果你指定了角色名称,那么骨骼和图集的角色名称必须要一样。因为他们加载完之后是会存在factory里面的,根据角色名称来找到对应的关系。如果两者名字不一样,就找不到对应关系了。
角色名称还有另外一个用途,就是用于资源卸载的。之后会说。
2、创建角色
在确保骨骼动画和图集数据都加载了之后,我们可以创建一个角色
UnityFactory.factory.BuildArmatureComponent(armature的名称)
刚才也说过了,骨骼信息加载完是存在factory里面的,一个骨骼里面包含了多个armature,你就可以通过api把你想要的armature加载出来。这样创建的角色对象,是UnityArmatureComponent对象。就像一般的UnityComponent一样可以直接操作的一些属性,比如transform.localPosition等
3、播放动画
获得了UnityArmatureComponent对象之后,就可以直接播放它身上的动画了,用到的API就是
UnityArmatureComponent.animation.Play(&动画名称&);
龙骨换装使用的是插槽的方式,先通过UnityFactory.factory.BuildArmature(weaponName)方法生成新的武器的Armature,然后通过 armature.GetSlot(&骨骼名称&).childArmature = 新武器的Armature
5、资源卸载
骨骼数据的卸载:UnityFactory.factory.RemoveDragonBonesData(角色名称,是否回收到池)
图集数据的卸载:UnityFactory.factory.RemoveTextureAtlasData(角色名称,是否回收到池)
看到了刚才指定的角色名称的用途了,在卸载的时候是需要用到的。然后后面有个参数是是否回收。龙骨对于这些数据是做了对象池的,默认是否回收到池是true。不过这个功能有bug。下面会说到。
四、使用龙骨的unity程序发布在手机上面的性能分析:
一开始也说到过,现在在Unity3D上面做2D骨骼的插件其实非常多,究竟哪些类型的插件会吸引我去用,主要是有那么几点的:
1、动画编辑的便捷性,也就是说是否有提供友好的编辑工具来很愉快的编辑动画
2、动画的通用性,也即是跨平台性。比如一个项目如果成功了,你会考虑移植到其他平台,比如你会想在开发了一个网页版的游戏成功了之后,把它移植到手机上,那么同样的一套美术资源,你想希望他可以直接用在unity、cocos或者html5上面。
3、运行的效率。刚才说得天花乱坠,骨骼动画的好处非常多,但如果运行效率低下,那么就什么都不必说了。
前两点,龙骨是做得非常好的。那么看看第三点效率的问题。
我把龙骨自带的多人同屏的demo修改了一下,发布成apk,分别在2台手机上面测试了一下单纯骨骼动画的效率,情况如下:
使用的就是上面截图的那个骨骼数据的角色&centaur/charactor&,它有18个骨骼。
三星note3 :稳定维持60帧:同屏50个 角色
稳定维持30帧:同屏150个 角色
&红米note1:稳定维持 60帧:同屏45个角色
稳定维持30帧:同屏100个角色
由于龙骨是做2d游戏的,而2d游戏的一般帧率是不会超过30帧的,所以也就是说一般同屏角色数可以达到100个左右。但实际同屏支持数会收到多个方面的影响,比如机器的性能,或者角色骨骼数量的多少。18根骨骼对于2d游戏角色来说算是中等偏上的一个数量吧,除非需要做很写实很多细节的角色,不然一般很少用到30多根骨骼。
以前我自己写的骨骼动画框架,是用在as3上面的,如果单纯正常的播放骨骼动画,没有能打得到这样的同屏数量。但后来我是想了个办法,在加载的时候先把动画的每帧都渲染出来,然后直接播放序列帧。那样做,加载的文件还是很小,并可以做到同屏几百人,但缺点是需要的内存会增大很多,而且不能随意的换装。龙骨在兼顾多种功能的情况下能达到这种效率,我感觉算是不错。不过有空还是要拿其他几个骨骼动画插件做横向对比才能得出准确的结果。
五、存在的一些问题:
在试用的过程中,我发现了挺多问题的,估计是因为第一版的关系吧。我这里大概说一下:
1、获取骨骼数据和图集数据时候,没有做dictionary是否为空或者是否包含该key的判断,导致如果传入的名字有误会报错
2、资源加载方面用了assets路径下面的相对路径,这样会导致发布的时候可能会有问题。最好的做法是加载这一步只封装一个纯粹一点的接口,只把加载到的字符串传入,然后生成龙骨数据,至于是怎样加载路径的,可以留给用户自己去决定
3、选择RemoveDragonBonesData回到池里面,由于调用了BaseObject的ReturnToPool方法,里面有_onClear方法是把ArmatureData的_defaultSkin置为了null,却没有把skins设置clear,,再次加载该资源时,在ArmatureData类里面的AddSkin方法,由于skins已经包含了该key,导致设置不了_defaultSkin,而在创建Armature的时候由于_defaultSkin,为空,会报错,不过就算skins设置clear了,还是有其他数据其他的数据没有清空,导致动画错乱,这个暂时没去细看
4、批量角色的创建和消耗都会比较耗时,不过这种问题可以通过游戏逻辑里面分帧处理或者在有loading条的时候再批量删除来解决
5、估计是龙骨开发人员对Unity的熟悉程度还不算高,在编写的过程中选用api方法有点随意,把一些UnityEditor的方法用上了,导致在发布的时候会出现一些问题。不过这个问题很快就修复了。
龙骨作为老牌的2d骨骼动画解决方案,在编辑器、跨平台和功能上应该是有一定的保证的,现在刚推出的Unity的支持,其实不算完善,很多方面都有待优化。如果有兴趣的朋友可以留意一下他们的网站更新。
龙骨的unity库地址:/DragonBones/DragonBonesCSharp}

我要回帖

更多关于 spine获取骨骼坐标 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信