Character Controller
- 是一个反物理的系统,摩擦力几乎是无限大的
Build a Controller
Kinematic Actor:不会受物理规则影响
Shape:胶囊、box、convex
- 胶囊外有一层边缘,防止和其他物体过近
Collide with environment
- 碰到环境比如墙体不能前进时,会滑一下
Stepping:上台阶的时候,把capsule往上添加offset
Slope limits:坡度限制
Controller Volume Update:在不同姿态controller体积要变换
Controller Push Objects
Standing on Moving Platform:当controller和一个物体站在一起时,会在逻辑上将二者绑定起来
Ragdoll
布娃娃系统
Map Skeleton to Rigid Bodies:把骨骼绑定上Rigid Bodies
需要让TA细调constraints(约束)
用的是animation retargeting的思路,去把ragdoll和原骨骼匹配
参与的节点可以一一对应
Leaf joints沿用之前的animation就行
过渡性骨骼是由前后两根ragdoll的pose插值出来的
不可能永远是ragdoll,是动画和ragdoll混合的,会渐进地从动画转变到ragdoll
Powered Ragdoll:Physics-Animation Blending
Clothing
Animation-based Cloth Simulation:往衣料放上骨骼
Rigid Body-based Cloth Simulation
Mesh-based Cloth Simulation
Physical Mesh的面片数要低于Render Mesh好几倍
Paint Cloth Simulation Constraints:会在每一个Physical Mesh上画出每一个顶点可以移动的范围
Mass-Spring system 弹簧质点模型
要用spring damping的力(类似摩擦力的东西,防止数值爆炸)
对每一个点受力:重力+风力+空气阻力(取决于速度)+周边所有的弹簧施加的力(弹力和damping力)
- Verlet积分:将速度转换成位置,数学是等价的,但是位置比速度更稳定
Position Based Dynamics(PBD)
拉格朗日数学
把所有的力学关系描述成了数学的约束,用约束直接解出位置
Self Collision
自穿插问题
加大布料的厚度
把布料仿真的解算得更细,拆出substeps,设置一个maximal speed,在每一个substep检测不要插得太深,弹出来
在布料里面设置一个负的立场,给进入里面的点推出去
Destruction
- Chunk Hierarchy:把碎片组成一个树状结构
每一层之间的碎片是有连接关系的,是一个图,edge的权重就是硬度,当冲量/硬度超过阈值就会破碎
damage计算,当打到一个点后,力会以圆形分散出去
Build Chunks by Voronoi Diagram
在空间中随机撒几个种子,把空间分割成到每个种子距离都对等的边界(每个点作为圆心,不断增加半径,直到互相碰到,就形成边界)
3D Mesh中
使用 Delauny Triangulation方法生成新的三角形
需要新的texture和coordinates来处理断口处的纹理
可以设置不同的断裂模式:比如均匀、极化
当碎块碎了之后会执行很多回调函数,比如出发音效、粒子效果、navigation更新
Issues:
- 碎片多了开销大,因为每个碎片都要互相作用,互相做解算
著名破坏系统应用:NVIDIA Blast、Havok Destruction、Chaos Destruction(Epic)
Vehicle
载具模型:上面一个缸(车体),下面是轮子(弹簧,悬挂系统)
Traction Force:驱动力
Engine会输出一个扭矩,扭矩大代表加速大
会写一个发动机转速、油门、扭矩之间的关系
变速箱、差速器把扭矩拆分到各个轮子
有了扭矩就可以算出驱动力
Suspension Force悬挂力
Tire Forces轮胎力
Longitudinal force:径向力
Lateral force:切向力
重心
太靠前就会不太稳定,飞出去的时候,会头朝下
会对转弯有影响,靠前的话转向力就会不足,因为转向力臂不够大,扭矩不够
Weight Transfer
Steering angles:外侧轮转的少,内测多,因为车本身有宽度
- Ackermann steering
advanced wheel contact
single raycast
sphere raycast
Advanced:PBD/XPBD
拉格朗日力学:把力学关系描述成一系列的约束,用约束反向定义运动
圆周运动约束:
位置约束:位置的模长-半径=0
速度约束:位置约束关于x的导数乘以圆周运动的速度=0
这个J就是夹克比(Jacobian)矩阵
Jacobian矩阵更多的是表达一个趋势的变化量(感觉跟梯度下降很相似)
弹簧约束
PBD-Constraints Projection
jacobian矩阵就是算出当前姿态下,每一个joints需要进行扰动的趋势
然后不断迭代地去扰动(感觉像梯度下降找到最优解)
优点:解收敛快、稳定
Extended Position Based Dynamics (XPBD)
- 硬约束、软约束