GAMES101-现代计算机图形学入门(Animation/simulation)

目录

  • 一些科普
    • [Keyframe Animator](#Keyframe Animator)
    • [Physical Simulation](#Physical Simulation)
    • [质点弹簧系统 Mass Spring Rope](#质点弹簧系统 Mass Spring Rope)
    • 粒子系统
    • [运动学 Forward Kinematics](#运动学 Forward Kinematics)
    • [逆运动学Inverse Kinematics](#逆运动学Inverse Kinematics)
    • Rigging
    • [Motion Capture](#Motion Capture)
  • [第二次课 cont.](#第二次课 cont.)
    • [Single Particle Simulation](#Single Particle Simulation)
    • [流体模拟 Fluid Simulation](#流体模拟 Fluid Simulation)

GitHub主页https://github.com/sdpyy
games101项目作业代码https://github.com/sdpyy1/CppLearn/tree/main/games101

一些科普

Keyframe Animator

Physical Simulation

利用物理公式来模拟

质点弹簧系统 Mass Spring Rope

下面开始描述这个系统

胡克定律描述弹簧或弹性体所受的回复力 F 与形变量 x 成正比, k s k_s ks是劲度系数,但是弹簧本身也有长度
考虑弹簧原始长度 , b − a ∥ b − a ∥ \frac{b - a}{\|b - a\|} ∥b−a∥b−a这个向量用来表示方向,但问题是这样写,弹簧一旦拉开就不会不停的运动下去(动能和势能相互转化),所以还需要引入摩擦力

引入摩擦力之前先引入一些符号表示位置、速度、加速度

给物体一个相反与速度方向的力,但还有问题,这样会导致所有的运动都停下来,假设AB两个物体同步向右走,他俩都有速度,但相对之间没有速度,所以应该没摩擦力,但是用下面的公式,只要物体有速度,就会受到摩擦力而停止

我们在逐渐完善弹簧系统,摩擦力应该跟着物体AB的相对运动而产生,下图用两个物体速度差来表示相对速度,另外还需要考虑这个速度差是沿着弹簧方向才行,所以点乘 b − a ∥ b − a ∥ \frac{b - a}{\|b - a\|} ∥b−a∥b−a来投影到ba方向

下面看一些弹簧结构

模型的行为是由结构连接来决定的,下面看如果一块布这样设计,很明显是不合理的,图中展示了2种原因(布可以抵抗切变力但这个结构不行,布会对抗对折)

先来改进切变,加入蓝色弹簧来抵抗

再加另外一个方向,但不能解决第二个问题

最终版

粒子系统


运动学 Forward Kinematics

已知角度求P的位置

逆运动学Inverse Kinematics

已知P的位置求角度

Rigging

Motion Capture

![请添

第二次课 cont.

Single Particle Simulation

首先学习单粒子运动,假设粒子的运动由一个速度向量场决定,速度向量场的速度由位置和时间决定

要计算粒子在某个时间的位置,需要解下图所示的常微分方程

用欧拉公式来解微分方程,用上一步的数据来计算下一步的位置

欧拉方程的误差与步长大小有关

欧拉方程的不稳定性,在一个螺旋速度场中,本来应该旋转,但是不管步长选的多小都一定会飞出去。第二幅图的运动模拟也不合理。

如何解决呢,有人提出了中点法,先用欧拉算出a点,但不用a点,取中点b,考虑b点的速度,应用b点的速度回去重新算欧拉

进一步,有人用中点思想,算两次欧拉方法,不是回原点重新算,而是去中点算,如果算出来和第一次算出来差不多就不算了,说明步长够小了

还有隐式的欧拉方法

Runge-Kutta Families

Position-Based / Verlet Integration

刚体(不会发生形变)模拟

流体模拟 Fluid Simulation



这门课的动画模拟更多都是在科普。

相关推荐
玖釉-21 小时前
Vulkan Specialization Constants 详解:在“运行时配置”和“编译期优化”之间取得平衡
c++·windows·图形渲染
charlie1145141912 天前
通用GUI编程技术——图形渲染实战(四十五)——D3D12资源与堆管理:从上传到驻留
开发语言·3d·图形渲染·win32
玖釉-3 天前
Vulkan 中 Shader 的 vert、frag、mesh、comp 全面解析:作用、关系、特点与工程实践
开发语言·c++·windows·算法·图形渲染
玖釉-3 天前
Vulkan 示例解析:gltfscenerendering.cpp 如何渲染一个复杂 glTF 场景
c++·windows·图形渲染
玖釉-3 天前
Vulkan 示例解析:pipelines.cpp 如何在一个 Render Pass 中切换多条 Graphics Pipeline
c++·windows·算法·图形渲染
做cv的小昊3 天前
计算机图形学:【Games101】学习笔记06——几何(曲线和曲面、网格处理)、阴影图
c++·笔记·学习·游戏·图形渲染·几何学·光照贴图
郝学胜-神的一滴6 天前
[简化版 GAMES 101] 计算机图形学 11:频域·卷积·抗锯齿
c++·unity·图形渲染·opengl·three·unreal
RReality10 天前
【Unity Shader URP】水面效果 实战教程
unity·游戏引擎·图形渲染
郝学胜-神的一滴13 天前
[简化版 GAMES 101] 计算机图形学 10:反走样与深度缓冲核心解析
c++·unity·godot·图形渲染·three.js·unreal engine·opengl
玖釉-15 天前
旋转图像:从矩阵转置、镜像到坐标变换的系统理解
c++·windows·算法·图形渲染