splishsplash
文章平均质量分 60
splishsplash
beidou111
研究图形学流体仿真。个人学习笔记,仅作记录,侵权必删。曾经是搞CFD流化床生物质的。现北航计算机博士生在读。联系请发邮件。私信不看。邮箱:li_cl@foxmail.com
展开
-
【splishsplash】Houdini粒子的导入与导出
在Houdini中使用file导入任意几何模型使用points from volume采样点,使其粒子化使用file导出粒子化之后的模型,后缀写bhclassic创建json场景文件(建议放到MyScences文件夹)我们可以复制Scences/ViscousBunny.json然后修改particleFile这一行即可同时建议将bhclassic复制到models文件夹下结果。原创 2023-02-01 12:10:57 · 1223 阅读 · 0 评论 -
解决导入obj模型时出现模型镂空的问题
使用houdini的divide节点就能将任意面片转化为三角形面片。这实际上是因为导入的模型采用四边形而非三角形的面片,导致splish采样不全。原创 2023-01-12 15:36:00 · 352 阅读 · 0 评论 -
【SPlishsplash】Simulator\CMakeLists.txt设置详解
【代码】【SPlishsplash】Simulator\CMakeLists.txt设置详解。原创 2022-11-03 15:34:30 · 193 阅读 · 0 评论 -
【splishsplash】获取键盘输入
我们要把按键传递给我们的中介类Interactive当中。所以我们增加control + wasdfb。于是在中介类中新建一个枚举来区别按键类型。原创 2022-10-31 14:14:42 · 97 阅读 · 0 评论 -
【splishsplash】PBD探究
上次我们探究了PBD是如何引入plishsplash的,以及其控制流。这次我们来讲如何在自己新建的类中控制PBD刚体。上回说到中的函数是控制PBD的关键。PBD刚体对象的指针为于是我们操作rb指针即可。我们首先要看看rb对象能干什么点开rb[i]->getVelocity()函数,跳转到这个函数里面的所有public方法就是可操作的。其中我们比较关注的当然是setPosition于是我们测试一下是否可以。原创 2022-10-30 16:35:14 · 385 阅读 · 0 评论 -
【splishsplash】PBDWrapper分析
其中add_dependencies这个命令的作用只是让SIMULATION_DEPENDENCIES先编译,从而保证链接库的时候,依赖项是存在的。那么,CMake是怎么知道这个Simulation是PBD外界库的Simulation类而非Splishsplash内部的类呢?前面的PBD::SimulationModel::RigidBodyVector是它的类型。我们所有的程序都是从这个目标开始的。回归我们的原问题:include的时候怎么知道这个Simulation类是PBD的?原创 2022-10-28 14:51:51 · 322 阅读 · 0 评论 -
SPH中的粒子初始排列问题(两张图解决)
因此对应代码为(改自太极k-ye的pbf2d.py)其中delta就是dx=dy=dyoffs其实是初始偏移的位置num_floor就是每层有多少(8*8)个num_particles_x就是每排有多少(8)个delta就是dx=dy=dz原创 2022-07-03 20:55:07 · 371 阅读 · 0 评论 -
【splishsplash】splishsplash linux版本的一个小BUG:必须先进入bin目录再运行SPHSimulator
一言以蔽之:解决方案:必须先进入bin目录再运行SPHSimulator如果企图像这样在根目录下运行是会报错的,报错如下:原因:这是因为linux版本加载json文件依赖于路径。所以必须在exe所在目录下执行,才能顺利的找到json...原创 2022-07-01 14:17:49 · 237 阅读 · 0 评论 -
【splishsplash】关于如何在GUI和json上接收/显示用户参数、MVC模式和GenParam
splishsplash中采用了MVC设计模式。该设计模式最大的特点就是将用户界面与后端数据计算分开,也就是俗称的“前端”和“后端”分开。实际上,只要是涉及到GUI或者图形学的程序,都几乎或多或少要有MVC设计模式。MVC中的三个字母代表的是Model View ControllerModel负责数据的计算,View负责用户IO(也就是显示界面和接收用户输入),Controller负责两者的通讯。通过Controller,我们彻底截断了后端和前端。实现了系统的解耦。splishsplash中的Model不原创 2022-06-30 22:59:11 · 315 阅读 · 0 评论 -
pysplishsplash导出结果(官方示例代码错误纠正)
官方的示例代码同样是错误的会报错:has no attribute ‘VTK_EXPORT’我在Github上提出了一个issue,作者回答了https://github.com/InteractiveComputerGraphics/SPlisHSPlasH/discussions/187把相应的代码换成如下位置即可...原创 2022-06-17 16:07:48 · 121 阅读 · 0 评论 -
pysplishsplash中创建场景的方法(官方文档有误)
原本的官方文档为复制这个代码,会发现报错解决方法是https://github.com/InteractiveComputerGraphics/SPlisHSPlasH/discussions/188替换代码为关键在于:getScene()这个方法被放到了pysplishsplash.Exec.SceneConfiguration.getCurrent()之中。也就是文档没有及时更新。......原创 2022-06-17 15:25:53 · 177 阅读 · 0 评论 -
【splishsplash】如何利用blender渲染出流体结果
分为以下几步:对应视频教程splashsurf表面重建blender渲染表面重建后的流体ffmpeg转换图片序列为视频利用一个名为Splashsurf的开源库进行表面重建重建后输出的是一系列OBJ文件然后利用stop-motion-obj这个blender插件导入OBJ序列首先增加shader玻璃BSDF然后选择渲染器为Cycles设置输出路径和文件名。后缀0001,0002会自动补充。按F12渲染选择渲染->渲染动画。输出图片序列。利用FFmpeg来转化图片序列为视频输出结果....原创 2022-06-13 15:05:11 · 1993 阅读 · 1 评论 -
【splishsplash】重复输出splashsurf的脚本
splashsurf表面重建原创 2022-06-12 23:38:08 · 249 阅读 · 0 评论 -
【splishsplash】自定义导出器
自定义一种导出器格式原创 2022-06-12 18:26:05 · 317 阅读 · 0 评论 -
Splishsplash架构介绍
视频Splishsplash架构介绍原创 2022-06-09 16:32:03 · 218 阅读 · 0 评论 -
【splishsplash】发现一个imgui相关的BUG
假如使用调试模式,不采用OMP,不使用AVX。则在调式过程中更改GUI中的粘性模型会出现运行时错误。编译是可以通过的。且非调试模式无此BUG,只要不更改模型也不会出现该BUG。一开始不打断点,也无该BUG该BUG报错如下:点击重试,出现在imgui.h。可认为是imgui出现的BUG......原创 2022-06-07 13:47:52 · 357 阅读 · 0 评论 -
【splishsplash】记录一个并行时无法用if的错误
在修改SPlisHSPlasH\Viscosity\Viscosity_Weiler2018.cpp的函数void Viscosity_Casson::matrixVecProd(const Real* vec, Real *result, void *userData)时出现了编译器错误 C2451查询MSVC文档发现如下即不能对自定义的类型B使用if语句。如果要使用,if里面必须的是整数型或者bool型。我希望在AVX并行的时候,使用如下语句去判断xj是否处于某个立方体区域内然而该语句是不能编译通原创 2022-05-31 22:42:34 · 105 阅读 · 0 评论 -
【splishsplash】extern目录下17种第三方库简介
文章目录概述1. Eigen2. json3. partio4. zlib5. cxxopts6. tinyexpr7. toojpeg8. pybind9. glfw10. hapPLY11. imgui12. AntTweakBar概述splishsplash中一共使用了17种第三方库,其中前12种是他人编写的开源库,后5种是他们自己编写的库(但处于其他github repo中)。所有17种第三方库的源代码都被放在主目录下的extern文件夹Eigenjsonpartio原创 2022-05-28 21:18:29 · 577 阅读 · 0 评论 -
【SPH】DFSPH算法详解--1跟着paper学原理
前言DFSPH是目前图形学领域最新最快的压力求解SPH算法,值得被首先关注。我们将分为三部分来讲解DFSPH学原理:论文讲解读代码:splishsplash源码剖析动手实践:在taichi上从零开始实践该算法本文属于学原理DFSPH 原理在原理方面,参考文献为(摘抄自Splishsplash):[BK15] Jan Bender and Dan Koschier. Divergence-free smoothed particle hydrodynamics. In ACM SI原创 2022-05-25 22:34:05 · 1248 阅读 · 0 评论 -
【splishsplash】splishsplash安装并使用python binding
简介python binding不是本体,而是使用了一个叫pybind11的c++库,将c++的API暴露给python。这样就能用python去调用c++库中的函数和类了。pySplishsplash这个文件夹下面的源码都是为了暴露API而写的。我们这里不管这些,只要安装和使用即可。安装1 在cmake中指定-DUSE_PYTHON_BINDINGS=On选项这个用cmake-gui是找不到的,必须用命令行形式cmake -S . -B build -DUSE_PYTHON_BINDINGS原创 2022-05-25 02:20:04 · 688 阅读 · 1 评论 -
【splishsplash】对象何时实例化?--搜索所有= new语句
搜索“= new”关键字一般来说,很难找到面向对象程序中是何时开始实例化的。而对象何时创建,何时消亡是对理解对象的生命周期及其关键的。一种不是那么严谨的方法是看文件中哪些地方使用了new语句。利用VS Code全局搜索功能搜索“= new”关键字,排除extern文件夹(即第三方库)以后得到33个文件中的149个结果。如图所示再进行人工手动筛选,去掉Utilities、Tools、Test、Exporter等相关的。再去掉Boundary、PBD相关的折叠之后得到这里面显然可以分为三组:原创 2022-05-24 22:13:34 · 168 阅读 · 0 评论 -
【splishsplash】整个软件的静态结构
面向对象的程序有两种结构:一种是静态的,一种是动态的(运行时的)。静态结构可以根据继承树和文档看出来,动态的需要一步步调试走出控制流。Splishsplash 静态结构值得提前说明的是:我们将splishsplash分为多个模块。其中Splishsplash模块是一个类库,是核心功能模块。其余的GUI模块,仿真启动器Simulator,或者工具类我们暂不考虑。类名splishplash源核心职责SimulationSimulation.cpp/h初始化模拟单例,管理所有流体原创 2022-05-24 17:26:31 · 511 阅读 · 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 · 858 阅读 · 0 评论 -
【splishsplash】splishsplash的工具3:partio2vtk
Tools文件夹下的源代码会生成6种工具:FoamGeneratorMeshSkinningpartio2vtkPartioViewerSurfaceSamplingVolumeSampling生成的工具在bin目录下可生成exe文件,可独立运行。下面我们讲逐一讲解。(链接可点进去看已经讲解的工具。)partio2vtk功能简介splisplash中流体粒子仿真结果的导出方式有两种:partio(生成bgeo文件,用PartioViewer打开)vtk(生成vtk文件,用Pa原创 2022-05-13 15:59:17 · 544 阅读 · 0 评论 -
【splishsplash】splishsplash的工具4:PartioViewer
Tools文件夹下的源代码会生成6种工具:FoamGeneratorMeshSkinningpartio2vtkPartioViewerSurfaceSamplingVolumeSampling生成的工具在bin目录下可生成exe文件,可独立运行。下面我们讲逐一讲解。(链接可点进去看已经讲解的工具。)PartioViewer简介这个很简单,就是查看导出的流体结果的。类似于游戏中的“回放”功能。用法1.运行仿真并导出勾选partio exporter按空格运行一段时间,然原创 2022-05-13 15:46:59 · 381 阅读 · 1 评论 -
【splishsplash】splishsplash的工具1:FoamGenerator
Tools文件夹下的源代码会生成6种工具:FoamGeneratorMeshSkinningpartio2vtkPartioViewerSurfaceSamplingVolumeSampling生成的工具在bin目录下可生成exe文件,可独立运行。下面我们讲逐一讲解。(链接可点进去看已经讲解的工具。)FoamGenerator功能简介用于生成泡沫粒子。注意,是泡沫粒子,仍然是粒子,不会自动表面重建出特效中的泡沫。例如封面图的泡沫就是这工具生成的。实质上,就是让流体粒子多出一些原创 2022-05-13 15:41:06 · 305 阅读 · 0 评论 -
【splishsplash】splishsplash的工具6:VolumeSampling
用处简介这是一个自动将OBJ网格文件转换为粒子的工具。因为SPH法中处理可动固体的时候,会把固体先离散化成粒子(被称为Sampling采样,有两种:Volume sampling 和Surface Sampling)。该工具嵌入到主程序中自动调用,也可以手动调用,这里讲手动调用的方法。用法在bin目录下VolumeSampling.exe这一工具只能用命令行打开终端输入 VolumeSampling.exe --mode 4 -i ..\data\models\Dragon_50k.obj原创 2022-05-13 15:20:10 · 299 阅读 · 0 评论 -
【splishsplash】splishsplash中的按i打印粒子信息(addField)功能
功能展示这个功能是用来展示debug信息的。当你暂停GUI运行,用鼠标框选一定粒子,然后按下"i",会在终端上打印出来一系列的粒子信息。如图所示显然这非常有助于debug功能实现(addField)这一功能是通过addField来实现的。打印出来的粒子信息,我们姑且称之为field变量(物理学中的场),他们在每一个粒子都有值。因此从cpp的角度是个Vector如何新增一个自己的field呢?例如我想增加ccf field这一个新的field1头文件类定义中增加std::vector&原创 2022-05-12 12:15:58 · 240 阅读 · 0 评论 -
【splishsplash】修复catch.hpp的问题
最新的splishsplash编译的时候是有BUG主要是因为catch2这个第三方库过时了(2018版本的)只要去github下载更新的catch.hpp然后替换掉旧的就行了。这是github上面我提出的issuehttps://github.com/InteractiveComputerGraphics/SPlisHSPlasH/issues/174这是catch2的github主页,去Release下面可以找到https://github.com/catchorg/Catch2..原创 2022-05-11 18:54:30 · 424 阅读 · 0 评论 -
【splishsplash】splishsplash入门使用
本文档的目地为总结splishsplash的使用方法splishsplash是一个C++开源流体引擎,主要用于产生流体动画。 它的核心算法是SPH法。资源汇总github: https://github.com/InteractiveComputerGraphics/SPlisHSPlasH文档:https://splishsplash.readthedocs.io/en/latest/算法论文:https://interactivecomputergraphics.github.io/SPH-T原创 2022-05-07 15:06:02 · 3066 阅读 · 4 评论 -
【splishsplash】输出结果的后处理、重现和保存
splishsplash自带两种后处理器:一种叫partioViewer一种叫vtk计算的时候需要勾选上相应的exporter,就能把结果导出。下面的rigid body是刚体的导出。(流体粒子没有OBJ导出格式)输出默认在bin/output下面partioViewer导出以后,是bgeo文件格式,但是请注意:这不是houdini的格式,而是一个叫partio的开源库(可以在GitHub搜到)的格式。导出以后,如何重现呢?需要利用bin目录下的partioViewer.exe这个e原创 2022-05-05 16:10:22 · 576 阅读 · 0 评论 -
【读splishsplash源码】NonPressureForceBase类
这次我们从类的角度来观察NonPressureForceBase文件位置:D:\codes\SPH\SPlisHSPlasH\SPlisHSPlasH\SPlisHSPlasH\NonPressureForceBase.hUML 类图understand 自动生成的其父类为:ParameterObject其子类为:DragBaseElasticityBaseSurfaceTensionBaseViscosityBaseVorticityBase一共五个其成员函数和成员变量为:原创 2022-04-13 19:31:30 · 306 阅读 · 0 评论 -
【读splishsplash源代码】一步步调试3-- TimeStepDFSPH::step()
回顾上回说到,我们来到位于\SPlisHSPlasH\DFSPH\TimeStepDFSPH.cpp的第86行,即TimeStepDFSPH::step()函数入口此文件夹(DFSPH)中只有四个文件这次我们讲解TimeStepDFSPH.cpp中的代码流。1 TimeStepDFSPH::step()位于\SPlisHSPlasH\DFSPH\TimeStepDFSPH.cpp如图所示两个指针:sim和tm。前者指向大部分模拟数据对象。后者指向时间对象。局部变量h是时间步,这里是0原创 2022-03-31 18:33:39 · 464 阅读 · 1 评论 -
【读splishsplash源代码】一步步调试2--SimulatorBase::timeStep()
上回我们从main函数开始,讲了GUI外壳。现在到了Simulator文件夹下的SimulatorBase.cpp文件的timeStep()函数。上回链接:【读splishsplash源代码】一步步调试概览1–GUI外壳本文将继续讲解一步步的调试流程文章目录SimulatorBase::timeStep()part 1: 进入SimulatorBase::timeStep()函数part 2: //Simulation codepart 3: for循环附录:为VS debug程序传入参数的方法Si原创 2022-03-30 17:05:28 · 738 阅读 · 0 评论 -
【读splishsplash源代码】一步步调试1--GUI外壳
我们将采用调式的办法一步步跟随程序运行,从而认识大概程序运行的轨迹1 入口:main.cpp入口在main.cpp,main函数总共只有大概30行。做的就是三件事:创建一个SimulatorBase对象并初始化(通过加载json文件)选择是否使用GUI和哪种GUI运行,并且运行结束后删除实例。首先,实例化一个SimulatorBase的对象,名为base1.1 初始化并加载场景文件然后调用init方法,输入参数该步骤会弹出选择窗口让你选择scene文件如图选择Dambr原创 2022-03-03 11:33:12 · 693 阅读 · 0 评论 -
【splishsplash】splishsplash添加新的粘性类
如何为splishsplash添加新的方法原创 2022-04-08 11:10:57 · 900 阅读 · 0 评论 -
splishsplash库 windows调试debug方法
1 准备工作VS-2019社区版本下载好代码https://github.com/InteractiveComputerGraphics/SPlisHSPlasH解压并新建一个文件夹在该文件夹下新建一个build文件夹下载好cmake gui版本https://cmake.org/官方dochttps://splishsplash.readthedocs.io/en/latest/build_from_source.html#installation-instructions-windo原创 2022-02-28 13:40:50 · 595 阅读 · 1 评论