zoukankan      html  css  js  c++  java
  • Unity3D Blend Shape简析

    https://www.jianshu.com/p/4ae6662a40df

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

    什么是 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 列表的渲染器,实施更改其中的权重,来改变其中的表情。



    作者:慕久久
    链接:https://www.jianshu.com/p/4ae6662a40df
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    tomcat常见错误
    tomcat——大致简介和执行过程
    JSON的基本操作
    VS Code 终端显示问题
    VS Code在本地进行调试和打开本地服务器
    重做了一下我的音乐播放器
    Treimu更新记录1.2.9.0
    Android开发中Eclipse里的智能提示设置
    一次面试经历
    正确处理WPF中Slider值改变事件的方式
  • 原文地址:https://www.cnblogs.com/nafio/p/12598011.html
Copyright © 2011-2022 走看看