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丶阅读 210评论 2 2
  • 三维动画制作软件 : 《侏罗纪公园》、《第五元素》、《泰坦尼克号》这些电影想必大家都看过了吧,我们为这些影片中令人...
    白桦林H_L_Peng阅读 473评论 0 4
  • Animation Blend Shapes Preparing the Artwork Once you hav...
    段然丶阅读 265评论 0 0
  • 18- UIBezierPath官方API中文翻译(待校对) ----------------- 华丽的分割线 -...
    libing0924阅读 299评论 1 1
  • (轨去何方)明月千山照,一轨天涯路。君辞旧岁去,儿行去何方。同行万里远,万里不相连。同志心不悔,首望在君旁。
    甘朝武阅读 26评论 0 0