【GAMES101】Lecture 21 动画

目录

关键帧(Keyframe animation)

物理仿真(Physical simulation)

质点弹簧系统

粒子系统

运动学(Kinematics)

正运动学(Forward Kinematics)

逆运动学(Inverse Kinematics)

Rigging


关键帧(Keyframe animation)

我们知道动画是由一帧一帧的图像连续播放形成,一般电影是一秒放24帧,也就是24fps,然后一般的视频是30fps的,虚拟现实要求达到90fps,那么关键帧就是指动画序列中的重要帧或关键时刻,用于定义动画中物体的位置、姿态、形状等

关键帧之间的帧称为"间隔帧"或"过渡帧",它们是通过插值方法补充关键帧之间的动画过渡效果,当然不是简单的线性插值,像我们之前的贝塞尔曲线,估计也有点关系

物理仿真(Physical simulation)

质点弹簧系统

假设有这么一个理想化的弹簧系统牵着两个质点,这个弹簧没有原长度,那么根据这个胡克定律,这个系统产生的弹力就等于两个质点的位移差乘以劲度系数,当然a和b受到的弹力大小相等方向相反

那实际上弹簧是有原长的,那就需要将拉神量减去弹簧的原本长度,同时乘以一个单位方向向量

用这个x来表示位移的话,那么\dot{x}就表示x的一阶导数就是速度,\ddot{x}表示二阶导数就是加速度

但是刚刚的质点弹簧系统还有一点问题,就是这个系统不会停下来,这个时候就需要引入摩擦力,考虑到要让它停下来那么它速度越大我这个摩擦力应该越大,摩擦力大小就等于质点速度再乘以一个抑制系数,方向和速度方向相反

但是还有一点问题,就是就是这两个质点只有在弹簧的方向上有速度才需要有这个摩擦力,如果质点在弹簧的垂直方向上有速度就不应该有这个摩擦力,因此刚刚单纯的乘以质点的速度就需要换成速度在弹簧方向上的投影

这样一个比较好的质点弹簧系统就好了,我们可以用它来组成其他的东西,比如布料,但是如果我从这个斜对角线的方向上去拉扯这个布料,这个结构不会产生弹力来抵抗我这个拉扯,因为我没有改变这个弹簧的拉伸,那这就不对

所以就在这个结构的对角线上加上弹簧,这样在对角线方向上的拉扯就会产生弹力来抵抗,但是这个结构依然没有办法抵抗水平和垂直方向的折叠,这种折叠同样不会改变目前结构的弹簧拉伸量

解决办法就是在间隔一个质点之间加上弹簧,这样当发生水平或者垂直方向上的折叠时,新加的弹簧会被压缩产生弹力来抵抗折叠

粒子系统

粒子系统本质上是想定义个体和群体的运动行为,那怎么做呢,这节课先简单说一下,对于动画里面的每一帧,根据需要选择创建新的粒子,然后计算每个粒子受到的力,更新每个粒子的速度和位置,如果有必要选择销毁某些粒子,最后进行渲染

粒子系统作用力广泛存在于吸引力和排斥力、重力、电磁力…、弹簧、推进力…阻尼力、摩擦力、空气阻力、粘度…碰撞、墙壁、容器、固定物体…、动态物体、角色身体部位等等,例如粒子系统应用于鸟群,对于一只鸟而言,它会有向鸟群靠近的这个吸引力,但是同时会有和其他鸟保持一定距离的排斥力,并且它飞行的方向是和鸟群的飞行方向一致

运动学(Kinematics)

正运动学(Forward Kinematics)

比如说我们要做一个骨架的运动,如何保证这个骨架它在运动的过程中骨架的各个部分之间的连接关系和几何关系能够保持,这就是运动学的内容

把这个关节的连接类型分成三种,一个是Pin,只能在某个平面上做旋转,一个是Ball,可以往各个方向转,还有一个是移动关节,就是可以伸缩的

正运动学就是每个关节旋转多少,然后找这个移动的位置

逆运动学(Inverse Kinematics)

逆运动学就是我想要移动到某个位置,我怎么旋转每个关节才能实现,这个就很难

这个问题有可能是无解的,也有可能是多解的,那一般怎么做的呢?先有一个初始的位置,然后定义这个误差的度量(比如目标和当前位置距离的平方和),计算误差的梯度,使用梯度下降法求解

Rigging

所谓rigging就是操作这个人物如何运动,像这个王者荣耀里面元歌操纵傀儡那样

对应的就会有这个操作点,也就是关键点,那么在关键帧之间的过渡帧就可以通过这些关键点的插值来实现

因此我们可以通过动作捕捉在真人上检测关键点的移动来反应到动画人物上的关键点移动

在动画制作过程中,动画人物建模完成上纹理后就通过rigging产生动作后再渲染

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

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

相关文章

Centos7安装nginx yum报错

Centos7安装nginx yum报错,yum源报错解决办法: 1、更新epel源后,出现yum报错 [roothacker117 ~]# yum install epel-release(安装成功) [roothacker117 ~]# yum install nginx(安装失败,提示如…

STM32 STD/HAL库驱动W25Q64模块读写字库数据+OLED0.96显示例程

STM32 STD/HAL库驱动W25Q64 模块读写字库数据OLED0.96显示例程 🎬原创作者对W25Q64保存汉字字库演示: W25Q64保存汉字字库 🎞测试字体显示效果: 📑功能实现说明 利用W25Q64保存汉字字库,OLED显示汉字的时…

opencv 图像色彩空间转化

今天看了b站贾志刚的课,觉得不错,特地做学习笔记来和小伙伴分享 贾志刚的这个好像是2.0版本,30小时的,语言更加精炼,适合初级入门学习 第一节是常规安装 看他的步骤装就行了,记得配置完点应用再点确定,我第一次就是 没点然后就失败了,又得重配置一次…

重温阿里云宝塔面板部署前后端项目

首先祝大家新年快乐啊! 回到老家,便打算趁这一段空闲时间提升一下自己,重点是学习实践一下echarts相关内容,很多公司项目都需要实现可视化,所以在bilibili上找了黑马的一个教程开始学习,不同的是&#xff…

苍穹外卖实操笔记六---缓存商品,购物车功能

苍穹外卖实操笔记六—缓存商品,购物车功能 一.缓存菜品 可以使用redis进行缓存;另外,在实现缓存套餐时可以使用spring cache提高开发效率;   通过缓存数据,降低访问数据库的次数; 使用的缓存逻辑&#…

bert-vits2本地部署报错疑难问题汇总

环境: bert-vits2.3 win 和wsl 问题描述: bert-vits2本地部署报错疑难问题汇总 解决方案: 问题1: Conda安装requirements里面依赖出现ERROR: No matching distribution found for opencc1.1.6 解决方法 需要在 Python 3.11 上使用 Op…

【Spring学习】Spring Data Redis:RedisTemplate、Repository、Cache注解

1,spring-data-redis官网 1)特点 提供了对不同Redis客户端的整合(Lettuce和Jedis)提供了RedisTemplate统一API来操作Redis支持Redis的发布订阅模型支持Redis哨兵和Redis集群支持基于Lettuce的响应式编程支持基于JDK、JSON、字符…

HiveSQL——用户行为路径分析

注:参考文档: SQL之用户行为路径分析--HQL面试题46【拼多多面试题】_路径分析 sql-CSDN博客文章浏览阅读2k次,点赞6次,收藏19次。目录0 问题描述1 数据分析2 小结0 问题描述已知用户行为表 tracking_log, 大概字段有&…

如何从 iPhone 恢复已删除的视频:简单有效方法

无论您是在尝试释放空间时不小心删除了 iPhone 上的视频,还是在出厂时清空了手机,现在所有数据都消失了,都不要放弃。有一些方法可以恢复这些视频。 在本文中,我们将向您展示六种最有效的数据恢复方法,可以帮助您从 i…

【LeetCode每日一题】二维前缀和基本概念与案例

二维前缀和 根据某个块块 的 左上角坐标,和右下角坐标 求出 块块的累加和。 304. 二维区域和检索 - 矩阵不可变 /*** param {number[][]} matrix*/ var NumMatrix function(matrix) {let row matrix.length;let col matrix[0].length;// 初始化一个二维数组&am…

综合项目---博客

一.运行环境 192.168.32.132 Server-Web linux Web 192.168.32.133 Server-NFS-DNS linux NFS/DNS 基础配置 1.配置主机名静态ip 2.开启防火墙并配置 3.部分开启selinux并配置 4.服务器之间通过阿里云进行时间同步 5.服务器之间实现ssh免密…

antdpro框架npm install 报错,切换tyarn安装成功。

报错日志 有时间补 当前版本 解决办法 进入工作目录 安装官方推荐的tyarn工具:npm install yarn tyarn -g 进行依赖安装:tyarn 启动项目 :tyarn start 注意: 技术迭代较快,建议查询官网后实践,以上作为…

Java LinkedList 实现栈和队列

Java LinkedList 实现栈和队列 package com.zhong.collection;import java.util.LinkedList;public class LinkedListDemo {public static void main(String[] args) {// LinkedList 创建一个队列LinkedList<String> queue new LinkedList<>();// 进队System.out…

《UE5_C++多人TPS完整教程》学习笔记4 ——《P5 局域网连接(LAN Connection)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P5 局域网连接&#xff08;LAN Connection&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…

nodejs爬虫框架

nodejs爬虫框架 在Node.js中&#xff0c;有一些常用的爬虫框架可以帮助你实现网页抓取和数据提取的任务。以下是几个流行的Node.js爬虫框架&#xff1a; 1. **Puppeteer**: Puppeteer 是由 Google 开发的一个用于控制 headless Chrome 或 Chromium 浏览器的 Node.js 库。它提供…

AlmaLinux右键菜单(基于GNOME桌面)

文章目录 前言前提说明在文件上右键在文件夹上右键 前言 在使用VSCode的过程中&#xff0c;AlmaLinux没能像Windows一样在右键菜单上显示打开方式&#xff0c;所以找了一下解决方案&#xff0c;罗列出来 前提说明 虽然说无论是media还是StackOverflow都推荐使用这条命令&…

CSP-202104-1-灰度直方图

CSP-202104-1-灰度直方图 解题思路 比较简单&#xff0c;直接上代码 #include <iostream> using namespace std; int main() {int n, m, L, aws[300] {};cin >> n >> m >> L;for (int i 0; i < n * m; i){int pixel;cin >> pixel;aws[pi…

第五篇:MySQL常见数据类型

MySQL中的数据类型有很多&#xff0c;主要分为三类:数值类型、字符串类型、日期时间类型 三个表格都在此网盘中&#xff0c;需要者可移步自取&#xff0c;如果觉得有帮助希望点个赞~ MySQL常见数据类型表 数值类型 &#xff08;注&#xff1a;decimal类型举例&#xff0c;如1…

搜索二维矩阵[中等]

一、题目 给你一个满足下述两条属性的m x n整数矩阵&#xff1a; 【1】每行中的整数从左到右按非严格递增顺序排列。 【2】每行的第一个整数大于前一行的最后一个整数。 给你一个整数target&#xff0c;如果target在矩阵中&#xff0c;返回true&#xff1b;否则&#xff0c;返…

关于java的多线程初识

关于java的多线程初识 我们从今天开始&#xff0c;正式学习java的多线程&#xff0c;我们在前面的文章中学习到了java的基础&#xff0c; 但是距离我们工作实战还差的很远&#xff0c;我们学习好了基础&#xff0c;以后的文章会逐步的深入&#xff0c;去讲解各种前端框架&…