Unity3D Blend Shape简析

最近项目中要做表情,因此用到这个概念,但是却在网上找不到太多的了解,特地自己来记录一下。

什么是 Blend Shape?

  • 它其实是单个网格变形以实现许多预定义形状和任何数量之间组合的技术,在Maya/3ds Max 中我们称它为变形目标,例如单个网格是默认形状的基本形状(例如无表情的面),并且基本形状的其他形状用于混合/变形,是不同的表达(笑、皱眉、闭合眼皮),这些被统称为混合形状或变形目标。

如何使用 Blend Shape 制作表情呢?

  1. 要在 Maya 或者3ds Max 里面制作一个含有 Blend Shape 的形变动画 Avator。

  2. 把Avator导入到 Unity 中

  3. 给预制的 Avator 添加组件代码这里我们叫 BlendShapeDemo.cs,来控制 Avator 的表情变化,代码如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class TestBlendShapeBehaviour : MonoBehaviour {
    
            int blendShapeCount;
            SkinnedMeshRenderer skinnedMeshRenderer;
            Mesh skinnedMesh;
    
            void Awake ()
            {
                 skinnedMeshRenderer = GetComponent<SkinnedMeshRenderer> ();
                skinnedMesh = GetComponent<SkinnedMeshRenderer> ().sharedMesh;
            }
    
            void Start ()
            {
                blendShapeCount = skinnedMesh.blendShapeCount; 
            }
    
            void OnGUI()
            {
                //21,是指模型中设定发生形变张开嘴巴  0:左眼闭合 1:右眼闭合
                if (GUI.Button (new Rect (100, 100, 150, 80), "张开嘴巴 && 闭眼")) {
                    skinnedMeshRenderer.SetBlendShapeWeight (0, 100);
                    skinnedMeshRenderer.SetBlendShapeWeight (1, 100);
                    skinnedMeshRenderer.SetBlendShapeWeight (21, 100);
                }
                if (GUI.Button (new Rect (100, 200, 150, 80), "闭合嘴巴 && 睁眼")) {
                    skinnedMeshRenderer.SetBlendShapeWeight (0, 0);
                    skinnedMeshRenderer.SetBlendShapeWeight (1, 0);
                    skinnedMeshRenderer.SetBlendShapeWeight (21, 0);
                }
            }
    }
    

    SkinnedMeshRenderer就是含有 blendshapes 列表的渲染器,实施更改其中的权重,来改变其中的表情。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ps:缓慢翻译中...bezier曲线部分给我翻译吐了... 路径(path)定义了一个或多个形状, 或者子路径(...
    Falme丶阅读 4,874评论 2 2
  • Animation Blend Shapes Preparing the Artwork Once you hav...
    段然丶阅读 4,538评论 0 0
  • 18- UIBezierPath官方API中文翻译(待校对) ----------------- 华丽的分割线 -...
    醉卧栏杆听雨声阅读 4,717评论 1 1
  • (轨去何方)明月千山照,一轨天涯路。君辞旧岁去,儿行去何方。同行万里远,万里不相连。同志心不悔,首望在君旁。
    甘朝武阅读 1,618评论 0 0
  • 祝女神姐妹们天天快乐! 话说女神今天真忙啊! 上午做了大扫除,房间实在太脏了! 网购若干物件,可惜没一个是给自己的...
    美丽草原TJ阅读 1,170评论 0 7