游戏引擎中的动画基础

news2024/10/5 14:04:59

一、动画技术简介

在这里插入图片描述
视觉残留理论 - 影像在我们的视网膜上残留1/24s。

游戏中动画面临的挑战:

  • 交互:游戏中的玩家动画需要和场景中的物体进行交互。
  • 实时:最慢需要在1/30秒内算完所有的场景渲染和动画数据。(可以用动画压缩解决)
  • 真实:多个动画的融合,表情的变化。

二、2D动画技术

2.1 序列帧动画

采取多个图片切换实现2d动画效果
在这里插入图片描述
采取不同视角的多个图片实现3d动画效果
在这里插入图片描述
2.2 Live2D
在这里插入图片描述
将一个图片剪裁成多个图元,通过修改不同图元的位置,缩放,旋转来实现动画效果。

三、3D动画技术

3.1 DoF(自由度)
在这里插入图片描述
这是对于自由度的一个表达术语。比如6DOF代表能在xyz空间内进行平移和旋转。3d动画的核心就是对自由度的一个表达。

3.2 顶点动画

把每个帧的顶点的位置记下来
在这里插入图片描述
在做人脸的面部动画使用的也是顶点动画,不过这时的修改单个顶点的位置时会按照权重修改附近顶点的位置,这个叫做Morph Target Animation。
在这里插入图片描述
3.3 骨骼动画
刚体骨骼在动的时候,皮也在跟着动。是因为每个顶点是多个骨骼在动。
在这里插入图片描述
在这里插入图片描述
3.4 物理模拟动画

  • 布娃娃系统
  • 衣料模拟与流体模拟。
  • 反向动画

在这里插入图片描述

四、蒙皮动画的实现

4.1 怎样制作一个蒙皮动画

  1. 制作一个模型
  2. 制作模型对应的骨骼
  3. 绘制蒙皮,蒙皮受骨骼影响
  4. 动画决定骨骼的位置
  5. 骨骼根据权重决定蒙皮的位置

在这里插入图片描述
4.2 不同的空间

  • World space: 世界坐标系
  • Model space: 我自己的坐标系
  • Local space: 局部坐标系,每一根骨骼的坐标系都不一样,动画系统中的某个坐标系是由其他骨骼的坐标系累算出来的。只有通过local space从根节点累算出他的模型坐标系,才能够算他的世界坐标系,然后才能够进行渲染。
    在这里插入图片描述
    4.3 骨骼的创建

统一骨骼结构
在这里插入图片描述
骨骼与关节
在这里插入图片描述
Root节点
在这里插入图片描述
Bind point:绑定动画当两个骨骼动画绑在一起时需要这个Bind point
在这里插入图片描述

五、旋转的数学原理

5.1 2D旋转
在这里插入图片描述
5.2 3D旋转

在这里插入图片描述
在空间任意一点的旋转都可以分解成依次绕着每个轴旋转。

欧拉角:
在对物体进行编辑,或者摆放的时候会经常用欧拉角,但是做动画的时候无法使用欧拉角。
欧拉角的问题:
(1)严格的顺序依赖:顺序不一样,他算出来的结果不一样。
(2)万向节:万向锁
(3)很难插值
(4)旋转的叠加很难
(5)很难沿着一个固定的轴旋转。

5.3 四元数
在这里插入图片描述
四元数的定义如下:
在这里插入图片描述
欧拉角转成四元数的公式如下:
在这里插入图片描述

六、动画压缩技术

由于动画的数据量很大:
在这里插入图片描述
但是缩放和位移是不变的,大部分是rotation在变化。
所以我们可以通过以下方法来压缩动画数据存储:

6.1 较少自由度存储
在这里插入图片描述
6.2 关键帧
在这里插入图片描述
只存储几个关键帧,然后用线性插值的方法来计算中间帧,永远保证你的error小于你的阈值
在这里插入图片描述
6.3 浮点数
不要用浮点数来存储动画的旋转角度,因为浮点数占据的内存大,可以用整数来表达。
在这里插入图片描述
6.4 压缩带来的问题

  • 会让这个压缩错误一直传递到错误很大。
  • 不同 的骨骼对error敏感度是不一样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1522306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言深度学习-5-深度前馈神经网络

本教程参考《RDeepLearningEssential》 本篇我们将学习如何建立并训练深度预测模型。我们将关注深度前馈神经网络 5.1 深度前馈神经网络 我们还是使用之前提到的H2O包,详细可以见之前的博客:R语言深度学习-1-深度学习入门(H2O包安装报错解决…

Spring炼气之路(炼气一层)

目录 一、IOC 1.1 控制反转是什么? 1.2 什么是IOC容器? 1.3 IOC容器的作用 1.4 IOC容器存放的是什么? 二、DI 2.1 依赖注入是什么? 2.2 依赖注入的作用 三、IOC案例实现 3.1下载Maven 3.2 配置Maven中的settings.xml文…

Stable Diffusion科普文章【附升级gpt4.0秘笈】

随着人工智能技术的飞速发展,我们越来越多地看到计算机生成的艺术作品出现在我们的生活中。其中,Stable Diffusion作为一种创新的图像生成技术,正在引领一场艺术创作的革命。本文将为您科普Stable Diffusion的相关知识,带您走进这…

部署一个本地的ChatGPT(Ollama)

一 下载Ollama Ollama下载地址:https://ollama.com/download 下载完后 二 安装运行 双击下载好的OllamaSetup.exe开发 安装Ollama: 安装完成后,多了一个Ollama的菜单如下图 : Ollama安装好默认是配置开机运行,如果没有运行可以在…

python的opencv最最基础初学

localhost中详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示_opencv imshow-CSDN博客 其实以下均为numpy 显示一张图片 import cv2 ####opencv读取的格式是BGR import matplotlib.pyplot as plt import numpy as np %matplotlib inline imgcv2.…

Golang协程详解

一.协程的引入 1.通过案例文章引入并发,协程概念 见:[go学习笔记.第十四章.协程和管道] 1.协程的引入,调度模型,协程资源竞争问题 通过上面文章可以总结出Go并发编程原理: 在一个处理进程中通过关键字 go 启用多个协程,然后在不同的协程中完成不同的子任…

Spark-Scala语言实战(1)

在之前的文章中,我们学习了如何在Linux安装Spark以及Scala,想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark及Scala的安装https:/…

图像处理ASIC设计方法 笔记11 像素误差与字长优化

P108 P105 定点误差分析与字长优化 1 像素误差是什么原因导致的? 在本书所说的算法中,像素误差是由几次定点运算累加导致的: 首先由行(列)号与定点正弦/正切值计算出该行(列)的小数平移量,然后将这些小数平移量截取一定字长用来计算插值核,再将这些插值核也截取一…

VMware Worksation 问题

几个晚上在虚拟机装了好多东西,配置mysql,配置docker、Git工具等等,可能废寝忘食导致太困强制关了虚拟机,结果第二天晚上回来发现打不开,心态直接崩了。 问题: 疯狂百度告知要删除后缀为.lck的文件夹及文件…

pytorch 实现线性回归(Pytorch 03)

一 线性回归框架 线性模型的四个模块:训练的数据集,线性模型,损失函数,优化算法。 1.1 数据集 使用房价预测数据集,我们希望根据房屋的面积和房龄等来估算房屋价格。 1.2 线性模型 预测公式, 价格 权重…

蓝桥杯练习系统(算法训练)ALGO-969 N车

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 给定NN的棋盘,问有多少种放置N个车使他们不互相攻击的方案。 输入格式 一行一个整数,N。 输出格式…

又是一场心碎的div2

真要破防了,还是没做出C题,感觉这次C已经很简单了。 C题这么多人过,反观D题这个人数有点诡异。但是这么多人过我都没过。看了一个半小时就是没看出哪写错了。 就完全是浪费这么多时间。我真碎了。受不了了。还是晚安吧,每天抄作业…

RT-Thread之USB组件的使用记录(SD卡和USB同时挂载)

前言 使用usb-host组件读取u盘记录同时挂载sd和u盘用到的芯片为stm32f407zgt6u盘的格式为fat 组件选择 文件相关的宏定义 /* DFS: device virtual file system */ /* 设备虚拟文件系统 */ #define RT_USING_DFS #define DFS_USING_WORKDIR #define DFS_FILESYSTEMS_MAX 3 //…

MIT线性代数-方程组的几何解释

文章目录 1. 二维空间1.1 行方向1.2 列方向 2. 三维空间2.1 行方向2.2 列方向 假设有一个方程组 A X B AXB AXB表示如下 2 x − y 0 (1) 2x-y0\tag{1} 2x−y0(1) − x 2 y 3 (2) -x2y3\tag{2} −x2y3(2) 矩阵表示如下: [ 2 − 1 − 1 2 ] [ x y ] [ 0 3 ] (3)…

Python基础入门 --- 4.循环语句

文章目录 Python基础入门第四章:4.1 while循环语句4.1.1 while循环的嵌套4.2 for循环语句4.2.1 range语句4.2.2 变量作用域4.2.3 for循环的嵌套应用 4.3 循环中断 continue和break Python基础入门 第四章: 4.1 while循环语句 语法结构: w…

Day66:WEB攻防-Java安全SPEL表达式SSTI模版注入XXEJDBCMyBatis注入

目录 JavaSec搭建 Hello-Java-Sec搭建 Java安全-SQL注入-JDBC&MyBatis Java安全-XXE注入-Reader&Builder Java安全-SSTI模版-Thymeleaf&URL Java安全-SPEL表达式-SpringBoot框架 知识点: 1、Java安全-SQL注入-JDBC&MyBatis 2、Java安全-XXE注…

html编辑器

HTML 编辑器推荐 html可以使用记事本编辑 但是更建议使用专业的 HTML 编辑器来编辑 HTML,我在这里给大家推荐几款常用的编辑器: VS Code:https://code.visualstudio.com/WebStorm: https://www.jetbrains.com/webstorm/Notepad: https://no…

相机与相机模型(针孔/鱼眼/全景相机)

本文旨在较为直观地介绍相机成像背后的数学模型,主要的章节组织如下: 第1章用最简单的针孔投影模型为例讲解一个三维点是如何映射到图像中的一个像素 第2章介绍除了针孔投影模型外其他一些经典投影模型,旨在让读者建立不同投影模型之间的建模…

考研C语言复习进阶(6)

目录 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 ​编辑​编辑 2.2 编译本身也分为几个阶段: 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 2.2.3 #define 替换规则 3.2.4…

MySQL语法分类 DQL(6)分页查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…