IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 在Blender中使用代码控制人物模型的嘴部动作 - 嘴部张开 -> 正文阅读

[游戏开发]在Blender中使用代码控制人物模型的嘴部动作 - 嘴部张开

在Blender中使用代码控制人物模型的嘴部动作 - 嘴部张开

flyfish
环境
无需iphone,不限制平台

原始的3D模型
在这里插入图片描述

控制之后的样子

在这里插入图片描述

3D模型部分

中英文对照
在这里插入图片描述
在这里插入图片描述
此次使用的是形态键(Shape Keys)控制,
如果遇到Blendshapes,Morphs,Morphtargets,Sliders也都是形态键的意思

eyeBlinkLeft	左眼眨眼
eyeLookDownLeft	左眼目视下方
eyeLookInLeft	左眼注视鼻尖
eyeLookOutLeft	左眼向左看
eyeLookUpLeft	左眼目视上方
eyeSquintLeft	左眼眯眼
eyeWideLeft	左眼睁大
eyeBlinkRight	右眼眨眼
eyeLookDownRight	右眼目视下方
eyeLookInRight	右眼注视鼻尖
eyeLookOutRight	右眼向左看
eyeLookUpRight	右眼目视上方
eyeSquintRight	右眼眯眼
eyeWideRight	右眼睁大
jawForward	努嘴时下巴向前
jawLeft	撇嘴时下巴向左
jawRight	撇嘴时下巴向右
jawOpen	张嘴时下巴向下
mouthClose	闭嘴
mouthFunnel	稍张嘴并双唇张开
mouthPucker	抿嘴
mouthLeft	向左撇嘴
mouthRight	向右撇嘴
mouthSmileLeft	左撇嘴笑
mouthSmileRight	右撇嘴笑
mouthFrownLeft	左嘴唇下压
mouthFrownRight	右嘴唇下压
mouthDimpleLeft	左嘴唇向后
mouthDimpleRight	右嘴唇向后
mouthStretchLeft	左嘴角向左
mouthStretchRight	右嘴角向右
mouthRollLower	下嘴唇卷向里
mouthRollUpper	下嘴唇卷向上
mouthShrugLower	下嘴唇向下
mouthShrugUpper	上嘴唇向上
mouthPressLeft	下嘴唇压向左
mouthPressRight	下嘴唇压向右
mouthLowerDownLeft	下嘴唇压向左下
mouthLowerDownRight	下嘴唇压向右下
mouthUpperUpLeft	上嘴唇压向左上
mouthUpperUpRight	上嘴唇压向右上
browDownLeft	左眉向外
browDownRight	右眉向外
browInnerUp	蹙眉
browOuterUpLeft	左眉向左上
browOuterUpRight	右眉向右上
cheekPuff	脸颊向外
cheekSquintLeft	左脸颊向上并回旋
cheekSquintRight	右脸颊向上并回旋
noseSneerLeft	左蹙鼻子
noseSneerRight	右蹙鼻子
tongueOut	吐舌头

上述名字可以和自己模型中的名字进行对应 例如eyeBlink_L就是EyeBlinkLeft
这里定义左右是对于3D人物模型的左右。例如3D人物模型的eyeBlinkRight,我们看到的实际在左边。
数值说明以张嘴为例,数值是浮点类型值,张嘴程度值的范围为[0,1],0表示没有张嘴,1表示完全张嘴。
代码部分
在这里插入图片描述
根据人脸关键点计算嘴部纵横比,将结果赋值给JawOpen
根据已经定义好的jawOpen,代码可以这样控制嘴部

import bpy

ob=bpy.data.objects['Body']
shape_keys = ob.data.shape_keys.key_blocks
shape_keys['jawOpen'].value = x
shape_keys['jawOpen'].keyframe_insert(data_path='value')

如何通过关键点计算x的值呢
x的数值是浮点类型值,张嘴程度值的范围为[0,1],0表示没有张嘴,1表示完全张嘴
这里需要用到两个shape key,先使用一个jawOpen
在这里插入图片描述
大图在这里https://flyfish.blog.csdn.net/article/details/122448347 下载下来看

在这里插入图片描述

def mouth_aspect_ratio(image_points):
    p1 = image_points[78]
    p2 = image_points[81]
    p3 = image_points[13]
    p4 = image_points[311]
    p5 = image_points[308]
    p6 = image_points[402]
    p7 = image_points[14]
    p8 = image_points[178]

    mar = np.linalg.norm(p2-p8) + np.linalg.norm(p3-p7) + np.linalg.norm(p4-p6)
    mar /= (2 * np.linalg.norm(p1-p5) + 1e-6)
    return mar

嘴部纵横比的值肯定会有大于1的情况,而这里3D模型限制最大值是1。也可以根据3D模型和嘴部纵横比再调整下。
这样将每次检测出的关键点,计算出嘴部纵横比赋值给模型就可以了。

参考网址 动图展示各个Shape Key的样子和3D的样子

https://arkit-face-blendshapes.com/
https://hinzka.hatenablog.com/entry/2021/12/21/222635
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:15:39  更:2022-01-24 11:16:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:24:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码