0%

对于像人体模型之类的复杂三维模型来说,可利用坐标系分层思想所带来的灵活性去简化一些问题,比如说,在为人形角色设计一个“手肘带动整条手臂一起转动”的动画时,对于整个角色来说,这是一个局部动画,如果直接以人物的单层物体坐标系来设计,会非常复杂,也很难直观地描述和进行这种变换,但如果利用分层的骨架系统就很轻易地操纵模型的变形。

从广义上来说,在计算机图形学(CG,computer graphics)中,绑定(rigging)指的是给不同物体建立关联的行为,比如说,存在父子关系的两个物体对象,如果移动或旋转了父对象,那么子对象也会跟着一起移动或旋转。

rigging_animate
《rigging》

骨骼动画(skeletal animation)就建立在这种思想的基础上,为模型绑定虚拟的骨架,使模型不同部分的网格与骨架中的骨骼建立联系,而关节的旋转会带动起骨骼转动,因此可以通过操纵关节来带动模型发生形变,这是一种更灵活且复杂的关系,比如说可以为关节施加约束来限定其旋转角度。

骨骼动画中的“​rigging”,虽然也是绑定的意思,但通常指的是为模型装配一幅合适的骨架。

骨架

以人体模型为例,可以根据躯体(body)的各个关节(joints)骨骼(bones)之间的连接关系,建立一幅骨架(skeleton,armature),这是人体移动和弯曲的基础。

naming-bones-in-the-human-rig
naming-bones-in-the-human-rig
《人物角色骨骼命名示例》
from: Bones naming in the human character rig
阅读全文 »

基本数学与理论工具

计算机图形学(CG,computer graphics)是一门高度数学化的学科,包含了非常多的理论概念,下面会以坐标系为切入点,讨论一些常用的数学和理论工具,这对于理解文中内容来说足够了。

坐标系

如果想要描述某个三维空间中,所有物体的空间位置,最简单的做法就是以空间中的某个点作为原点(origin),为这个空间建立起一个三维的笛卡尔坐标系(Cartesian coordinate system),这是一种正交坐标系统,存在 三个维度(dimension)主轴(axis)彼此垂直,在确定了每个主轴的方向(direction)以及尺度(scale)后,这个坐标系就建立完成了。

根据正轴方向的组合方式,有两种不同的约定,即左手坐标系(left-handed coordinate system)右手坐标系(right-handed coordinate system),它们的差异主要在于如何选择 Z 轴的正方向,并没有优劣之分,只是习惯的不同。

3D_Cartesian_Coodinate_Handedness

from: Cartesian coordinate system - Wiki

可以摆出图中左手坐标系的手势,然后转动手腕使中指指向屏幕,此时 Z 轴的正方向是我们的前方,如果切换为右手坐标系的话,需要保持右手食指和拇指的方向与左手的一致,即 X、Y 轴的正方向保持不变,此时右手中指就指向了我们的后方,这使得 Z 轴的正方向反了过来,因此左手坐标系更符合人眼在现实世界的观察习惯,而右手坐标系则更适合于纸面上的一些数学描述,可从下图理解这一点。

left_right_handed_coordinate
left_right_handed_coordinate

根据惯例,DirectX 使用的是左手坐标系,而 OpenGL 使用右手坐标系,不过 OpenGL 的归一化设备坐标系(NDC)会采用左手坐标系

阅读全文 »

ai-vs-machine-learning-vs-deep-learning
ai-vs-machine-learning-vs-deep-learning
from: Azure 机器学习中的深度学习与机器学习

机器学习(ML,machine learning)数据科学(data science)人工智能(AI,artificial intelligence)的一个子集(subset),也是实现人工智能的途径之一,机器学习并不是某种具体的算法,而是存在非常多的实现方式、框架、算法,具有多种不同的学习范式(learning paradigms),其在现代具有非常广泛的应用且综合性非常强,是一门跨越多领域、多学科的科际整合 / 跨学科(interdisciplinarity)

标签、特征与模型

标签(label)特征(feature)模型(model)是在机器学习中普遍存在的三个基础概念,同时也是核心概念。

标签预测(prediction)所得到的目标(target)值,这里以监督学习(SL,supervised learning)常见的分类任务(classification)回归任务(regression)来看,它们所得到的分别是定性(qualitative)输出和定量(quantitative)输出。对于分类问题,标签可能是某些离散(discrete)类别,也就是对输入进行定性,比如说,使用某个模型对图片进行物体分类检测,并预测出图片中的物体是一只“小狗”。对于回归问题,标签可能是某些连续(continuous)数值,可理解为在某一范围内任意的一个确切值,比如说,根据最近的天气情况,来预测明天的“气温”。以上的小狗和气温,分别就是对应的分类任务和回归任务根据输入所预测出的目标(标签)。

特征是从原始数据中通过特征工程所提取出来的,为数据自身的固有属性,例如:某个人的年纪、性别、出生地等信息;某字体文字图像根据特定算法计算出某文字的特征值等。数据中可能包含着大量的特征信息(如例子中的个人信息就包含了多个特征值),现实数量可能成百上千,甚至百万以上都有可能,这些特征组成了数据的特征集(feature set),每个特征可使用权重(weight)来表明其对模型输出结构的贡献程度,或者说特征的重要程度。如果特征数量太多,有些特征可能是不必要的,通常会使用特征选择来对原始特征集进行精简,得到一个特征子集(feature subset)

标签和特征可以是任何东西,也可以有任意数量,并没有什么硬性的规定,而是根据实际需求而定。

模型是通过机器学习训练出来的,特征和标签是构建这些模型的基础,而模型定义了特征标签之间的映射关系(mapping),根据要解决的问题的不同,模型的种类有很多。模型通常都具有泛化能力(generalization),即具有能够对未知(新)数据进行有效预测的能力,对于多数简单的情况,在实际应用模型时,通常可以将特征视为模型的输入,而将标签视为模型的输出

数据集

阅读全文 »

特征缩放(feature scaling)

在数据处理中,归一化 / 规范化(normalization)标准化(standardization / z-score normalization)是对数据集(dataset)进行特征缩放(feature scaling)的两种常见技术,这通常是数据处理非常重要的一环,一般在数据预处理(data preprocessing)阶段执行。

可从一个例子来体会这种处理的重要性,假设有一个数据集,其有多个特征值,而每个特征值的原始取值范围差异很大,且量纲(dimension)也可能不同,如果不对这些特征进行处理的话,算法可能会偏向于某一个特征,从而影响算法结果的精度和准确度。

归一化和标准化都可看作是对数据集的重新映射,使特征的取值范围更为集中,收敛(converge)到同一数量级上,从而加快算法的收敛速度(rate of convergence)、提升结果精确度和可靠性、甚至带来性能的提升。此外,这还可消除不同特征中的量纲影响,使特征无量纲化(nondimensionalization),进而使算法可更方便地一起处理具有不同量纲的特征,这在处理多维度、多类型数据集时尤为关键。归一化或校准化的数据集甚至可以兼容不同的算法、模型、环境参数、应用情景。

在不同的数据集情景和需求下,归一化和标准化的实现方式、含义和应用情景可能不相同,而是否需要对数据集进行归一化或标准化也得视具体的情况而定,不是所有的数据、模型或算法都需要执行这种处理。

归一化(normalization)

归一化一般也称为最小-最大值规范化(min-max normalization),即根据取值范围的极值(最小值和最大值)将特征收敛到 之间,归一化对异常值 / 离群值(outlier)敏感,所以不太适合于存在异常值的数据样本。归一化一般适用于以下情况:

  • 存在多种不同尺度(取值范围或量纲)的特征,且各特征的极值明确
  • 数据较为稳定
  • 对输出结果的取值范围有明确要求

标准化(standardization)

阅读全文 »