https://www.jianshu.com/p/4ae6662a40df
最近項目中要做表情,因此用到這個概念,但是卻在網上找不到太多的了解,特地自己來記錄一下。
什么是 Blend Shape?
- 它其實是單個網格變形以實現許多預定義形狀和任何數量之間組合的技術,在Maya/3ds Max 中我們稱它為變形目標,例如單個網格是默認形狀的基本形狀(例如無表情的面),並且基本形狀的其他形狀用於混合/變形,是不同的表達(笑、皺眉、閉合眼皮),這些被統稱為混合形狀或變形目標。
如何使用 Blend Shape 制作表情呢?
-
要在 Maya 或者3ds Max 里面制作一個含有 Blend Shape 的形變動畫 Avator。
-
把Avator導入到 Unity 中
-
給預制的 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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。