Unity 布料仿真笔记1 弹簧质点模型

2023-11-26 13:20

本文主要是介绍Unity 布料仿真笔记1 弹簧质点模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

万物皆可盘

弹簧质点模型

我们要在三维中仿真物理世界,那么就要将物理世界中的原理在三维场景中进行建模。也就是使用数学描述去反馈自然界中的一些现象。弹簧质点(Sping-Mass)模型是一个经典的物理学仿真模型。而弹簧质点就能够用在布料仿真、一些粒子系统中。
弹簧质点模型的思路很简单:

  • 所有的节点都是一个质点
  • 节点之间的连线就是一个弹簧
  • 节点之间的受力通过经典力学公式计算
  • 弹簧受力通过胡可定律计算

知道这个之后我们就能够分析如何在Unity中去实现一个三维仿真算法。
当我们实现一个弹簧模型之后,接下来去做布料仿真效果就很容易。

分析

从头开始

最简单的弹簧质点模型莫过于两个质点之间连接一个弹簧,我们将会用这种最简单的方式来分析。
在这里插入图片描述
根据牛顿力学定律,力的作用是相互的,当我们右边的小球移动,就会带动弹簧拉伸,而拉伸之后的弹簧就会产生一个“还原”的力,使右边的小球受到弹簧向左拉的力。而左边的小球会受到弹簧向右拉的力。如果上面的画面不直观,那么可以想象一下,如果我们用两只手分别拿着一根弹簧的两端。当两只手往外拉的时候,两只手都会感觉弹簧在往里收缩,而且拉的越长,往里收缩的力就越大。而如果我们往里挤,那么也会感觉到,挤得越近,弹簧往外伸展的力就越大。
这里我们考虑一个理想弹簧,那么弹簧不管拉伸成什么样,或者挤压成什么样,都还是能遵循最初的胡克定律。当然如果我们添加一些弹簧的拉伸阈值或者挤压阈值(弹性限度),那么我们能够仿真更真实的效果。例如我们可以仿真布料被拉坏的效果。

胡克定律

胡克定律用17世纪英国物理学家罗伯特·胡克的名字命名[1]。其力的大小与伸长量或收缩量线性成正比。
公式为:
F = − k ⋅ Δ x F=-k\cdot \Delta x F=kΔx
Δ x \Delta x Δx是两个长度的差值,现在长度和 r e s t l e n rest_len restlen的长度。如果 Δ x \Delta x Δx越大,那么力也就越大。从公式可以看出,如果我们单纯从一个方向看,那么质点所受到的力是相反方向。
非常简单一个公式。接下来结合其他力,做一次力学仿真。

单纯受力分析

假设我们的弹簧,现在是躺在地上,那么地面的支撑力和重力抵消,同时我们假设地面绝对平滑,没有摩擦力。
在这里插入图片描述
左边的弹簧在拉伸的时候,会受到一个向左的力
在这里插入图片描述
因此会导致在速度为0的时候,会向左运动。当向左弹簧的长度小于Rest_len的时候,小球会受到向右的力,逐渐减速。
在这里插入图片描述
接下来,假设我们没有地面。这是一个挂在空中的小球。那么它会额外受到一个重力。
在这里插入图片描述
重力会使我们的小球自然向下掉落,同时也会带动弹簧拉伸。于是仿真效果就如同在弹簧上挂了一个小球。
在这里插入图片描述
如同没有添加小球时效果一样,小球会沿弹簧方向不断做往复运动。公式如下:
F = − k ⋅ Δ x + F g F=-k\cdot \Delta x+F_{g} F=kΔx+Fg
根据牛顿第二定律,物体的加速度与物体受的合力成正比。
F = m a F=ma F=ma
而加速度的大小会决定速度的大小,已知:

V t = V t − 1 + a Δ t V_{t}=V_{t-1}+a \Delta t Vt=Vt1+aΔt
从公式上可以分析得到:已知速度、已知时间长度、已知受力,我们就可以大致去仿真一个弹簧质点模型。
这是大家需要考虑一个问题:弹簧在长度不断变化的过程中,弹力也在不断变化,那么质点所受的力会一直变化。难道有使用定积分这样的工具来计算吗?那么我们如何去计算在一个变化过程中的弹簧的受力过程呢。
其实不然,虽然弹簧是这样一个过程,但是我们可以用一些其他方法来计算:例如欧拉积分、Verlet积分、龙格库塔积分等方法。可以去近似逼近定积分结果。

积分

有了最基本的数学分析之后,我们需要将该算法与实际速度、位置等数据进行推导。这里使用的两种工具:欧拉积分、维特积分。当然对于这两种分析,网上有非常多的详细的论证,这里就不展开将。如果后面有时间,翻译一些国外的资料过来。

欧拉积分

欧拉积分其实分为隐式欧拉显式欧拉,为了简单开发,这里使用显式欧拉方法进行积分。欧式积分,其实可以看成我们假定在一个规定的时间,物体的速度是一致的。那么在这个一致速度的时间范围内,我们就能很好去求解质点下一刻的状态。
V t + 1 = V t + a Δ t V_{t+1}=V_{t} + a \Delta t Vt+1=Vt+aΔt
X t + 1 = X t + V t Δ t X_{t+1}=X_{t} + V_{t} \Delta t Xt+1=Xt+VtΔt

Verlet 积分

Verlet积分参考
Verlet积分会使用上一个时刻的状态来推下一个时刻的状态。
X t + 1 = X t + ( X t − X t − 1 ) + a t ∗ Δ t ∗ Δ t X_{t+1}=X_{t} + (X_{t}-X_{t -1})+a_{t} *\Delta t*\Delta t Xt+1=Xt+(XtXt1)+atΔtΔt

实现结果

Verlet积分
在这里插入图片描述
显式欧拉积分
在这里插入图片描述

总结

两种方法其实都挺简单的,但是实现效果还不错。接下来将会对代码进行说明。然后利用龙格库塔积分方法,去实现绳子的模拟,之后一步一步推导布料仿真上去。
从绳子推导到布料的仿真:
布料本质上就是一系列的绳子的集合,那么可以通过不同绳子的组合来模拟布料。

附录

【1】百科百科。https://baike.baidu.com/item/%E8%83%A1%E5%85%8B%E5%AE%9A%E5%BE%8B/2307271?fr=aladdin

站在巨人的肩上。

创作不易,如果喜欢的话,请点赞,收藏,谢谢。

内容本周末再填写,可以先移步git项目

这篇关于Unity 布料仿真笔记1 弹簧质点模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选