Vellum —— 简介

目录

一,介绍

二,原理

三,PBD算法

手动实现PBD的拉伸


一,介绍

        Vellum是一个解算模拟框架,使用更高级的PBD(XPBD,extended position based dynamics),是2nd Order Integration(传统的PBD使用的是1nd Order Integration),不像PBD子步和迭代次数的刚性依赖(迭代越多越硬);由于Vellum Solver需对约束重复计算,为提高效率并行计算,引入Graph Color技术;Grain是使用PBD来模拟沙子或颗粒物的;

        可被用于创建许多不同的东西,包括cloth、hair、softbodies、balloons、及grains;基于位置方法的主要优势,是其可控、稳定、快速生成可信结果;GPU友好对于并行约束解算,特别是使用graph color(Breaking Frequency会re-color);

        Constraint Iteration约束迭代,对于高刚性和高精度使用更高的约束迭代,提高子步效果更好但也更贵;Collision Iteration碰撞迭代,关联到detangle节点,在约束迭代间穿插执行;Smooth Iteration平滑迭代,默认约束迭代使用Gauss-Seidel方法快速收敛,对于不可能的配置(如无限刚性和0.5倍的restlength)等无法完全收敛的则使用Jacobi方法更慢的收敛来分散错误;

        每个vellum类型均可相互交互,即可直接将各个类型的发射源合并(merge)起来,还可使用POP Force,POP Stream等;通常cloth使用三角面;

几种类型的柔体:

  • Cloth + Pressure,vellum configure balloon
  • Cloth + Structs,vellum configure struct softbody
  • Distance along edges + Tetrahedral volume
  • Tet Conform + Tetrahedral Stretch,vellum configure Tetrahedral softbody

对布线不均的模型,应remesh使对象均匀布线,以为后续解算,最后在用解算的对象驱动原模型;

二,原理

        本质上是点(有碰撞半径的球)及约束组成,PBD是一个动态系统,试图一个点一个点地relax约束和碰撞,只有再足够高的迭代次数下才会产生合理的结果;

        有三种类型的约束:Distance/Length/Stretch 保持点间的距离(可认为是线性弹簧),Rotational/Bend 保持面间的角度(可认为是旋转弹簧),Volume 保持几何体的体积(tetrahedron); 在实际应用中,可以是其中一种或多种的组合;

三,PBD算法

  • 循环所有粒子,根据力及速度,计算新位置X_{i}; 
  • 循环所有约束,修正新位置X_{i}; 
  • 循环所有粒子,根据最终的位置和起始位置,更新速度V_{i}

迭代iteration和子步sub-steps

【文献导读】XPBD: Position-Based Simulation of Compliant Constrained Dynamics_beidou111的博客-CSDN博客

【物理模拟】PBD算法详解-CSDN博客

手动实现PBD的拉伸

参考: Implementing A Position Based Cloth Solver From Scratch – Entagma

// Verlet Integration
vector cur_P = @P;
vector old_P = v@old_P;
vector force = v@force;@P = 2*@P - old_P + force * pow(@TimeInc,2);@old_P = cur_P;
//satisfy constraints
int constraints[] = pointprims(1, @ptnum);vector displacement = set(0,0,0);
float weight = 0;foreach(int con; constraints){int con_pts[] = primpoints(1, con);vector posa = point(0, 'P', con_pts[0]);vector posb = point(0, 'P', con_pts[1]);vector delta = posa - posb;float delta_len = length(delta);float restlength = prim(1, 'restlength', con);    float error = (restlength - delta_len) * 0.5;float dir = 1;if(con_pts[0] != @ptnum)dir = -1;displacement += normalize(delta) * error * dir;weight += 1.0;    
}@P += displacement/weight;

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何隐藏自己的代码(很酷)

1.引入 幻想当我们成为一名优秀的程序员,有着各大公司想要买我们的代码,但我们并不想要让他们知道我们代码的实现,毕竟一复制便可以解决,这里我们希望有一种方法可以把我们的核心代码给隐藏掉,那我们又应该怎么去实现呢…

测试/测开——接口基础面试高频问题

前言 本文是将自己在面试前找工作的部分笔记重新整理了下,不少内容当时是查阅的知乎、博客园、书籍等。我自己在牛客上也学习了很多面经和经验帖,收获了好几家大厂offer。最近整理出来这些,希望能对找测开岗的朋友们有帮助! 一、…

vue中列表渲染

列表渲染 实际开发中,使用每条数据的唯一标识作为key,也就是对于数组列表,对象中的属性如:id、手机号、身份证号、学号等唯一值,对象列表同理 只要不对列表的逆序添加,逆序删除等破坏顺序的操作,仅用于渲染…

验收材料-软件质量保证措施

一、 质量保障措施 二、 项目质量管理保障措施 (一) 资深的质量经理与质保组 (二) 全程参与的质量经理 (三) 合理的质量控制流程 1. 质量管理规范: 2. 加强协调管理&…

普冉PY32系列(十二) 基于PY32F002A的6+1通道遥控小车III - 驱动篇

目录 普冉PY32系列(一) PY32F0系列32位Cortex M0 MCU简介普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单普冉PY32系列(四) PY32F002A/003/030的时钟设置普冉PY32系列(五) 使用JLink RTT代替串口输出日志普冉PY32…

YOLOv8改进实战 | 更换主干网络Backbone(六)之轻量化模型VanillaNet进阶篇

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

【Java开发】 Springboot集成Mybatis-Flex

1 Mybatis-Flex 介绍 1.1简介 Mybatis-Flex 是一个优雅的 Mybatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper 亮点帮助我们极大的减少了 SQL 编写的工作的同时&#xff…

记录一次较为完整的服务打包发布流程

文章目录 1. Spring Boot编程2. 打包成jar服务3. 使用Docker Compose发布服务 1. Spring Boot编程 使用Spring Initializr 选择基本工具 导入常用工具 配置多环境 参考https://blog.csdn.net/qq_37992410/article/details/121008415, https://blog.csdn.net/xiao…

实现点击一个选框 使得一个组件的可选性修改

实现效果 代码 html <div class"divrow"><el-checkbox-group v-model"isSendTag" :max"1"><el-checkbox v-for"(item, index) in isSendTagOptions" :key"index" :label"item.value">{{item.…

机器学习入门(第二天)——感知机

概述 每个算法都是为了解决一类问题&#xff0c;或者说解决之前的问题所创造出来的&#xff0c;而感知机&#xff0c;在解决一类问题的时候也暴露了很多问题&#xff0c;变相的推动了以后的算法的改进方向。 知识树 苹果表示相对重要的 直观介绍 现在有一盘红豆和绿豆&#…

使用 Lhotse 高效管理音频数据集

Lhotse 是一个旨在使语音和音频数据准备更具灵活性和可访问性的 Python 库&#xff0c;它与 k2 一起&#xff0c;构成了下一代 Kaldi 语音处理库的一部分。 主要目标&#xff1a; 1. 以 Python 为中心的设计吸引更广泛的社区参与语音处理任务。 2. 为有经验的 Kaldi 用户提供…

01 原神 选择题

以下这个不确定