欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3D模型和动画播放

程序员文章站 2022-03-26 17:22:56
...

1)笔记

1)导入和显示3D模型:
  (1)3D模型是美术制作的, fbx格式-->可以携带有【模型+动画】	
      visual studio打开模型,点击一下显示出来网格

  (2)fbx+贴图
    贴图的类型一般是Texture(纹理):3D

    但是还有:
    	normal map(法线贴图)
    	sprite-frame(UI贴图): 一般是2D 
    	texture cube(立方盒贴图,做天空盒用到)

    cocos creator又把里面部分给分割出来了:
       Body:网格Mesh
       Material: 只读的材质,没办法改写
       Take 001: 动画文件
       UnnamedSkeleton: 骨骼

    在cocos creator如何使用:
      直接拖拽到场景一放即可,但是发现材质没有正确关联
      我们关联上正确材质和shader的办法: 自己创建一个材质-->材质就是一个配置文件,选择effect-->builtin-unlit(高效且不受光照影响)
      USE TEXTURE勾选-->MainTexture--》纹理对象穿起来

  (3)一般做web游戏时,选择effect-->builtin-unlit(高效且不受光照影响)
      其它的,选择standard,带的有法线贴图

  (4)替换材质,材质在渲染组件上,首先你找到3D渲染组件,因为材质是在模型渲染组件上带上的,在这里设置到GPU配置对应的Shader;
       蒙皮网格渲染
       模型渲染

2)模型动画的切割
  (1)模型往往要带上动画,FBX是可以内置动画的,美术可以把素哟偶的3D动画做到一个动画clip里面,也可以分几个动作来处理;
     所有的都做一个,你就看到一个动画:Take 001

  (2)creator有工具可以把一整套动画分割开来;
    一整套动画是: 把各种各样的动画都做到一个点上:idle、攻击、跳跃、奔跑、死亡

    动画分割,没事会提供你一些参数txt: 0~多少s是什么动画, 这样就可以把动画分割出来了

3)2个creator3D物体的显示的常用组件
  (1)cc.ModelComponent: 绘制3D物体的组件-->普通网格   MeshRender, 你到底选择哪个网格(读取到形状),使用哪个材质(读取到shader);
     Mesh:组件绘制的物体的网格,甚至可以把人的Mesh拖过来
     ShadowCastingMode: OFF 是否有阴影
     Materials: 材质

  (2)cc.SkinningModelComponent: 绘制蒙皮网格,如:People, 没有这个组件,则显示不出来
  	Mesh:物体的网格
  	Materials: 材质
  	Skeleton:骨骼
  	SkinningRoot: 如People就在这个地方

4)动画组件的基本原理与播放动画
  播放动画的基本原理: 读取动画组件文件里面的内容,每一帧修改网格Mesh顶点里面的位置,修改完毕-->传递给Shader-->shader绘制出来-->看到动画;
  动画组件非常消耗性能,如:同屏动画过多则卡顿;
  每次Shader绘制都是动画改变后的这些顶点的位置,这样子随着时间的推移,就产生了动画的改变;

  动画播放组件: cc.SkeletalAnimationComponent
  	clips: 是当前这个组件带了哪些动画剪辑(attack、run、idle),AnimationClip -->动画数组

  	DefaultClip: 默认的动画剪辑

  	PlayOnLoad:是否在装载的时候就开始播放,勾选上就会播放默认的AnimationClip

  代码里面如何播放动画:
    step1:获取动画播放组件实例-->cc.SkeletalAnimationComponent

    step2:动画组件的播放接口:播放你指定的动画;

    step3:播放动画的时候足以下,动画切换-->idle-->attack-->动画过度
    	play:播放我们的动画,如果没有给动画名字-->默认的动画
    	clips:获取我们动画组件上面的,所有动画剪辑-->cc.AnimationClip数组
    	defaultClip: 默认的动画剪辑
    	crossFade:切换动画加上了平滑过渡;
    	stop:停止播放动画
    	pause:暂停播放,停到某个地方