GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总

本文主要是介绍GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 0 入门资料
  • 1 物理引擎
    • 基本概念
      • Actor & shapes
      • Rigid body dynamics
      • Collision Detection
      • Collision Resolution
    • 应用与实践
      • Character controller
      • Ragdoll

0 入门资料

  • GAMES104-现代游戏引擎:从入门到实践_课程视频_bilibili
  • GAMES104官方账号 - 知乎
  • 课程主页
  • 课程小引擎Piccolo
  • 课件:
    • GAMES104_Lecture10_Physics System_Basic Concepts.pdf
    • GAMES104_Lecture11_Physics System_Applications.pdf

1 物理引擎

  • 物理引擎的用途:
    • 碰撞检测
    • 解决碰撞、其它约束限制
    • 更新所有物体的世界坐标(world Transform)

基本概念

Actor & shapes

Actor

  • 静态 static actor:不会移动,阻碍你
  • 动态 dynamics actor:符合动力学原理,可以被 forces、torque、impulse影响
  • 触发器 trigger
  • kinematic actor:可以违背物理学,让它按照设计的运动

Actor Shapes

  • 求交点
Shapes图例备注
Spheres 球体在这里插入图片描述
Capsules 胶囊体在这里插入图片描述- 人体
Boxes 盒子在这里插入图片描述
Triangle Meshes 三角在这里插入图片描述- 必须是密闭的

- Dynamic actors 不能使用
Height Fields在这里插入图片描述- 用于地形

Shape 的属性

  • 质量/密度 Mass and Density
  • 质心 Center of Mass
  • 摩擦力/弹性 Friction & Restitution :受到物理材质的影响
  • 力 Forces:常见的力包括拉力、重力、摩擦力
  • 冲力/冲量 impulse:例如爆炸
  • 移动 movement

半隐式欧拉积分
在这里插入图片描述

  • 【优点】
    • 容易模拟
    • 较稳定
  • 【缺点】
    • 实际消耗时间比真实时间要久一点

Rigid body dynamics

粒子动力学 Particle Dynamics刚体动力学 Rigid body Dynamics
位置 Position x ⃗ \vec{x} x 旋转 Orientation R \boldsymbol{R} R
线速度 Linear Velocity v ⃗ = d x ⃗ d t \vec{v}=\frac{\mathrm{d} \vec{x}}{\mathrm{~d} t} v = dtdx 角速度 Angular velocity ω ⃗ = v ⃗ × r ⃗ ∣ r ⃗ ∣ 2 \vec{\omega}=\frac{\vec{v} \times \vec{r}}{|\vec{r}|^2} ω =r 2v ×r
加速度 Acceleration a ⃗ = d v ⃗ d t = d 2 x ⃗ d t 2 \vec{a}=\frac{\mathrm{d} \vec{v}}{\mathrm{~d} t}=\frac{d^2 \vec{x}}{d t^2} a = dtdv =dt2d2x 角加速度 Angular acceleration α ⃗ = d ω ⃗ d t = a ⃗ × r ⃗ ∣ r ⃗ ∣ 2 \vec{\alpha}=\frac{\mathrm{d} \vec{\omega}}{\mathrm{d} t}=\frac{\vec{a} \times \vec{r}}{|\vec{r}|^2} α =dtdω =r 2a ×r
质心 Mass M = ∑ m i M=\sum m_i M=mi转动惯量 Inertia tensor I = R ⋅ I 0 ⋅ R T \mathbf{I}=\mathbf{R} \cdot \mathbf{I}_{\mathbf{0}} \cdot \mathbf{R}^{\mathrm{T}} I=RI0RT
动量 Momentum p ⃗ = M v ⃗ \vec{p}=M \vec{v} p =Mv 角动量 Angular momentum L ⃗ = I ω ⃗ \vec{L}=\mathbf{I} \vec{\omega} L =Iω
力 Force F ⃗ = d p ⃗ d t = m a ⃗ \vec{F}=\frac{d \vec{p}}{d t}=m \vec{a} F =dtdp =ma 力矩 Torque τ ⃗ = d L ⃗ d t \vec{\tau}=\frac{d \vec{L}}{d t} τ =dtdL

Collision Detection

  • 碰撞检测:东西是否撞上了
碰撞检测的两个阶段方法
粗筛1. 直接用AABB找到相交的刚体

2. 找到潜在的重叠刚体对
1. BVH Tree

2. Sort and Sweep
细筛1. 进一步检测重叠

2. 得到相交信息

1. 相交点

2. 相交法线

3. 穿透深度
1. Basic Shape Intersection Test

2. MinkowskiDifference-based Methods

3. Separating Axis Theorem
  1. Basic Shape Intersection Test
圆与圆碰撞圆与胶囊体碰撞胶囊体与胶囊体碰撞
在这里插入图片描述在这里插入图片描述在这里插入图片描述
  1. MinkowskiDifference-based Methods
碰撞未碰撞
在这里插入图片描述
在这里插入图片描述
  1. Separating Axis Theorem(SAT)
  • 一定能找到一根轴,分离两个凸包
碰撞不碰撞
2D 情况在这里插入图片描述在这里插入图片描述
3D 情况在这里插入图片描述在这里插入图片描述
  • 连续碰撞检测 Continuous Collision Detection(CCD)

Collision Resolution

  • 如何处理碰撞?分离
方法具体方法
加入Penalty Force分离加一个反向的惩罚力
转为约束问题解决速度约束不断尝试给一个冲量
解决位置约束见 ragdoll - joint constraints

应用与实践

Character controller

  • 反物理的系统:摩擦力无穷大
  • 用 Kinematic Actor
    • 不受物理规则影响
    • 推动别的物体
  • 形状
    • 双层胶囊
  • Sweep test
    • 与物体碰撞后,往旁边平移
  • Stepping 爬楼梯
    • 尝试往上提,再往前走

Ragdoll

在这里插入图片描述

  • 人体的 joint 约束(joint constraints)
Hinge

铰链
Ball-and-socket 球窝Pivot 枢轴Saddle

鞍状
Condyloid

髁状突
Gliding

滑行
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

这篇关于GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/615644

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐