计算机图形学
文章平均质量分 66
beidou111
研究图形学流体仿真。个人学习笔记,仅作记录,侵权必删。曾经是搞CFD流化床生物质的。现北航计算机博士生在读。联系请发邮件。私信不看。邮箱:li_cl@foxmail.com
展开
-
Houdini 组(group)的详细讲解
内容参考Houdini101首先,group可以看做是一种特殊的attribute,只是他的值只是0-1。因此他其实就是一种mask而已。在vex中,我们只要用这样的写法就能自动创建一个名为mygroup的组。这和attrb基本一致。我们键入group关键字,会发现以下节点与之有关。原创 2023-03-11 21:41:25 · 2529 阅读 · 0 评论 -
houdini快捷操作
aaa原创 2023-03-11 00:13:06 · 618 阅读 · 0 评论 -
使用太极taichi写一个只有一个三角形的有限元
公式来源GAME103。原创 2023-02-12 20:55:01 · 529 阅读 · 0 评论 -
np.roll轮转改为简单的for循环
shift表示移动几个格子,axis表示在哪个轴上移动(由于我们是一维数组,所以不用管它)我们其实可以将其改写为普通的for循环。这样,我们可以把代码迁移到比如c++上去。轮转就是把数组向右移动几个,然后多出来的部分回到起点。那么我们可以使用np.roll来实现。其实,我们就是观察下标的变化。a的第0号元素在b中为第3号。a的第1号元素在b中为第1号。a的第2号元素在b中为第2号。a的第3号元素在b中为第3号。原创 2023-02-10 13:42:52 · 170 阅读 · 0 评论 -
Houdini输出控制点每帧的位置
需求:通过对控制点的K帧得到了动画,该控制点控制vellum的运动。我们需要输出该控制点随时间变化的位置。原创 2023-02-08 21:34:24 · 540 阅读 · 0 评论 -
【Houdini】长期总结VEX用法
npoint(0)得到当前输入所有点的数目(0代表节点的第一个输入)point(0, “P",i)得到第i个点的位置。用for循环遍历所有点。原创 2023-02-08 20:46:00 · 514 阅读 · 0 评论 -
最简单的FEM实现弹性(太长不看版)
我们以最简短的方式总结下里面linear FEM计算弹性的方法。原创 2023-02-08 15:08:43 · 512 阅读 · 0 评论 -
【读论文(paper reading)】Hydrophobic and Hydrophilic Solid-Fluid Interaction
阅读时间:2022年2月上旬从左到右的几个场景:纸因为浸润自然卷曲包住液滴,较重的软体被强表面张力撑起来,液体从疏水叶子上滚落,不同浸润性流体的接触角论文地址:https://jinyuan-liu.github.io/projects/2022hydro/模拟一种新现象:软体和流体的流固耦合,重点在表面张力由于有双向流固耦合,所以第一个场景那个纸能够受力自动卷起来。这在之前是做不到的。模拟的一个核心是将contact line(接触线)模拟出来。这种力在宏观上 体现不出来,但是微观上可以其主导。一种非常原创 2023-02-07 17:57:50 · 689 阅读 · 0 评论 -
【houdini】带着uv进行模拟(冰激凌案例)
整个sop的路线图。原创 2023-01-12 14:57:54 · 574 阅读 · 0 评论 -
【Houdini】Principled shader几个最重要的参数讲解
Principled shader 是迪士尼推出的原理化着色器。因为它大而全,所以几乎把世界上所有的材质都涵盖在内了。所有的DCC软件都支持这个shader。blender之中叫原理化BSDF。Houdini则叫Principled Shader,标志就是迪士尼的LOGO。principled shader有一大堆的参数,我们一开始不必一一知晓。只需要弄明白几个最重要的参数即可。原创 2022-11-21 21:03:01 · 503 阅读 · 0 评论 -
【phsX】安装physX(从源码编译)
编译步骤。原创 2022-11-16 18:35:58 · 975 阅读 · 1 评论 -
【partio】继续探索粒子格式库partio
讲了安装与Hello World例子。原创 2022-11-10 17:32:16 · 652 阅读 · 1 评论 -
【physX】physX 5.1的笔记1:初识
5.1的笔记所有内容参考自官方文档https://nvidia-omniverse.github.io/PhysX/physx/5.1.0/index.html#所有的demo示例都被称为Snippet。源码可以在physx/snippets目录中找到。每个都是一个完整的可执行目标。在目录下是Hello World程序。是刚体的一个模拟程序。官方推荐从这里看起。一般流程:首先要:所有的程序都需要这两个全局单例对象。我们来看一个例子位于 的第81行这里我们已经提到了这里面最重要的两个对象:场景对象和原创 2022-11-09 18:29:53 · 1085 阅读 · 0 评论 -
【partio】仿真粒子数据格式转换器partio的用法
可以用来统一houdini、renderMan、Maya等不同软件中的粒子数据格式(GEO, BGEO, PTC, PDB, PDA)。partio只是个数据转换器,它在磁盘上是没有自己的格式的。但是你可以想象它在内存中具有一定的数据格式。它可以作为C++的一个库使用,也同时具有python的API。其中test.bgeo是从下载的源码的data文件夹下拷贝过来的,用于测试。我们下载好源代码,把里面的lib文件夹下面的源码拷贝到自己的项目中。partio是迪士尼2010年推出的仿真粒子格式转换器。原创 2022-11-08 11:11:07 · 903 阅读 · 0 评论 -
【houdini】网格采样粒子
更改point seperation调整疏密程度。pointsfromvolume1 节点。原创 2022-11-07 19:00:47 · 213 阅读 · 0 评论 -
【Houdini】使用Houdini的Karma渲染器渲染流体
在之前我们讲过使用默认的Mantra渲染器渲染。但是Mantra将在2024年被Houdini官方停止更新。因为他们推出了一个新的更好的渲染器Karma。与Mantra相比,不仅CPU渲染速度变快,而且还支持XPU(GPU CPU混合)。速度有了很大的提升。此外还支持流行的开源场景格式USD和开源材质包MaterialX。并且原本Mantra的材质和灯光90%以上都是兼容的。因此十分有必要学习一下。我们参考的是表面建模流程与之前一致,不再赘述。原创 2022-11-04 22:37:19 · 2720 阅读 · 0 评论 -
【Houdini】如何使用Houdini渲染流体?
版本:Houdini19.5 其他版本应该也差不多渲染器与材质是直接关联的,不同渲染器有不同的灯光、材质。我们首先讲解如何利用Houdini自带的Mantra渲染(CPU渲染,较慢),然后讲解更快的第三方渲染器Redshift(GPU渲染,较快)。但是,在此之前,有一些通用步骤,即读取流体粒子帧数据和表面重建。原创 2022-11-02 18:08:07 · 2514 阅读 · 1 评论 -
【openGL】openGL 最小化的例子 使用freeglut
openGL最小化例子原创 2022-09-07 15:53:55 · 235 阅读 · 0 评论 -
从四面体数据中提取表面
四面体网格数据是这样存储的:分为两部分:第一部分:所有顶点的三维坐标数据。第二部分每个四面体的顶点编号。原创 2022-08-21 00:26:10 · 854 阅读 · 0 评论 -
【zeno】zeno如何为自定义节点添加功能(apply函数和ZENDEFNODE初探)
上次说了,如何最小化地创建一个自定义的节点这次将如何为该节点添加功能唯一改动的是PBD.cpp文件。原创 2022-08-05 15:54:52 · 233 阅读 · 0 评论 -
【zeno】为zeno增加子模块/新节点的最小化的例子
本文旨在建立一个zeno的最小化的自定义节点(子模块)。最终,你将看见自己新建的子节点这里。原创 2022-08-04 20:41:07 · 254 阅读 · 0 评论 -
zeno使用方法笔记
对任何属性取length()(如length(@pos))可以得到数组大小。makePrimitive并且primitiveResize。getFrameTime并makeDict为dt。本文针对zeno1ubuntu20.04。引用当前粒子属性使用@(如@pos)2.为粒子增加属性(请once)引用参数使用$(如$dt)粒子也有自带属性@rad。该节点可以直接view。......原创 2022-07-31 01:43:27 · 221 阅读 · 0 评论 -
【物理模拟】PBD算法详解
参考MatthiaMuller的十分钟物理(他就是PBD算法的发明者)原创 2022-07-30 16:58:58 · 5659 阅读 · 0 评论 -
【物理模拟】最简单的shape matching的原理与实践
由于需要很多视频,就做成了ppt形式。还会录制一个b站的视频讲解。原创 2022-07-24 17:14:44 · 446 阅读 · 0 评论 -
【物理模拟】超简单的shape matching模拟刚体运动
近期我会录个视频到B站从头讲解原理和实现方法。图文版也会放到博客里。原创 2022-07-23 21:56:16 · 394 阅读 · 0 评论 -
粒子边界碰撞的处理
首先,要判断粒子是否穿透了边界,假如穿透了,才发生碰撞。这要通过碰撞检测算法来实现。这个算法很复杂,尤其在涉及多个物体和复杂表面的情况下。我们先不讨论,只讨论最简单的情况。假设我们已经检测到了碰撞,并且我们知道壁面的法向N。还知道当前粒子的速度和位置。参考games103王华民。...原创 2022-07-21 17:36:40 · 543 阅读 · 0 评论 -
【物理模拟】利用shape matching(形状匹配)算法求解刚体的碰撞--算法详解
a与法向衰减系数μ_N以及动摩擦系数μ_T有关。算法shapematching。下面为课程slides截图。games103王华民。原创 2022-07-21 15:17:48 · 693 阅读 · 0 评论 -
【图形学】刚体的旋转
旋转用四元数表示,四元数乘以原来的3维点坐标就是旋转后的点坐标四元数的更新方式是用角速度时间积分(注意有个1/2,这是四元数对时间求导得到的)更新角速度的方式是用角加速度。类比牛顿第二定律,惯性张量的逆乘以力矩就是角加速度。为此需要即使算力矩和惯性张量。计算力矩的方式是矢径乘以各个质点的力,为此要先求出质心才能求出矢径计算惯性张量较为麻烦,要用一个矩阵遍历所有质点。而且随着旋转,惯性张量总是变的。但是幸运的是可以用旋转矩阵更新惯性张量。只要计算一次,之后不断更新就好了。()https。......原创 2022-07-17 16:23:23 · 1489 阅读 · 0 评论 -
【图形学】四元数的通俗用法
四元数就是四个数。它是复数的推广。复数为a+bi四元数则多了两个虚部a+xi+yj+zk其中i,j,k都是虚数。所以i2=j2=k2=ijk=−1。原创 2022-07-17 12:43:30 · 6432 阅读 · 4 评论 -
【SPH】邻域搜索中的紧凑哈希(compact hash)算法讲解
常规的Grid-Based邻域搜索我们之前讲过:http://t.csdn.cn/Ytwuy常规方法有一个缺陷:那就是占用内存过高。想象一下:你要存储两个庞大的二维数组。第一个数组记录了每个网格里都有哪些粒子。我们姑且称为网格内粒子列表。particleInCellList第二个数组记录了每个粒子的邻域都有哪些粒子。我们姑且称为邻域列表。neighborList这两个列表的占用内存都很多。第一个列表,假设每个网格最多有100个粒子,那么就需要网格数量100 个int类型字节的内存。第二个列表,假设每个粒原创 2022-07-14 17:59:15 · 1122 阅读 · 1 评论 -
血液的材质
blenderprinciple BSDF基础色HEX: 760C10次级色HEX: 54080D比例0.8粗糙度最高效果:虽然还是不是很好。调整材质真的是一项艺术家的活。原创 2022-06-16 23:08:03 · 154 阅读 · 0 评论 -
【splishsplash】splishsplash源码算法剖析:粘性力算法
前面三个文章讲的是模拟的主流程。而splishsplash作为一个图形学算法开发人员的工具,最大的特点是方便植入和测试新算法,尤其是非压力梯度力算法。入口在TimeStepDFSPH.cpp的第125行: sim->computeNonPressureForces();这就是非压力梯度力的入口。F11步进,到Simulation.cpp的496行fm->computeViscosity();这里计算粘性力,其中fm是FluidModel类指针F11再次步进,到FluidMod原创 2022-05-20 14:50:45 · 746 阅读 · 0 评论 -
【持续更新】总结国内外图形学物理模拟相关学者和网站
总结图形学物理模拟相关学者和个人网站仅做个人笔记所用。欢迎在评论区补充!国外学者Matthias MüllerNV物理组的leader,1999年博士毕业于苏黎世理工博士论文是研究聚合物分子动力学模拟的,后研究图形学。XPBD作者之一。早期曾经研究SPH模拟变形体研究领域:PBD、SPHhttps://matthias-research.github.io/pages/Theodore Kim耶鲁大学副教授,曾任皮克斯高级研究员.曾参与寻梦环游记等动画制作PS: 2020年有一篇S原创 2022-03-30 12:23:39 · 4463 阅读 · 6 评论 -
【文献阅读】Solenthaler 2007 SPH相变
概述题目:A Unified Particle Model for Fluid-Solid Interactions流-固交互的统一粒子模型发表时间:2007年期刊/会议:Computer Animation and Virtual Worlds作者:B. Solenthaler†and J. Schläfli and R. PajarolaVisualization and MultiMedia Lab, University of Zurich, Switzerland(苏黎世大学)摘要:原创 2022-03-24 18:36:15 · 562 阅读 · 0 评论 -
【文献阅读】Peer2017 SPH弹性力
概述题目:An Implicit SPH Formulation for Incompressible LinearlyElastic Solids发表时间:2017年期刊/会议:CGF作者:Andreas Peer , Christoph Gissler, Stefan Band and Matthias TeschnerUniversity of Freiburg, Germany摘要:我们提出了一种新的用于可变形固体的光滑粒子流体动力学(SPH)公式。我们的方法的关键方面是隐式弹性力和变原创 2022-03-23 13:38:08 · 461 阅读 · 3 评论 -
邻域粒子搜索算法
前一个博文里面写了大致的思想,即基于网格的邻域粒子算法。这里讲一下具体实现,采用的语言是taichi。1 数据结构定义什么样的数据结构决定了我们思考问题的方式。我们现采用较简单的一种方式:首先定义par2Cell,即给定粒子ID,可以索引到网格ID的哈希表。由于键是唯一的,所以很好定义par2Cell = ti.field(int, numPar)其次定义cell2Par,即给定网格ID,可以索引出所有在其内部的粒子。这个哈希表同一个键对应了多个值,因为同一个网格内部可以有多个粒子。这里我们采原创 2021-10-30 22:03:36 · 2095 阅读 · 0 评论 -
taichi debug方式总结
今天听了刘天添老师的课,总结一下taichi debug的方法1 ti.init的设置(开启debug mode)进行如下设置ti.init(arch=ti.cpu, debug=True, excepthook=True, cpu_max_num_threads=1, advanced_optimization=False)第一个表示用cpu第二个表示debug mode,意味着开启断言第三个表示使得报错更加美观第四个表示单核运行第五个表示关闭高级的编译优化如图为更美观的报错如图为一原创 2021-10-23 21:00:00 · 645 阅读 · 0 评论 -
利用taichi写一个最简单的SPH(光滑粒子动力学)
1程序概述二维SPH小程序,模拟溃坝问题。如图,蓝色方块为水。初始时设置如图,程序开始后水方块溃散。编程语言:taichi2程序主要模块说明主要步骤包含:1.定义核函数2.定义邻域搜索函数3.计算密度4.计算压力5.利用核函数计算三种力并得到加速度6.时间推进7.处理边界碰撞8.初始化(只需一次)附录:A.邻域搜索具体实现B.时间步的选定C.给定密度的选定2.1核函数函数/模块名称:kernel()输入:double r,为从当前粒子中心指向相邻粒子j中心的距离作原创 2021-10-23 17:57:46 · 2361 阅读 · 0 评论 -
一个FLIP solver源代码
先mark一下,待详细研究http://rlguy.com/gridfluidsim/原创 2021-10-17 20:39:53 · 114 阅读 · 0 评论 -
【读书笔记】Fluid Engine Development选读:用于粒子系统的数据结构
对应章节和代码书 Page 100 2.2节代码头文件include/jet/particle_system_data3.h(主要)源文件src/jet/particle_system_data3.cpp主要内容1 最简单的数据结构示意:结构体(SOA)本书是采用面向对象的方式编程的按照书中的说法,流体粒子的数据结构主要为(semi-SOA,structure of array)格式,即先定义一个大结构体(或类),结构体中包含了许多个数组,每个数组代表一种属性,如速度、位置、受力。原创 2021-10-08 17:45:22 · 224 阅读 · 0 评论