【taichi】关于SPH_Taichi的探索与尝试
【taichi】关于SPH_Taichi的探索与尝试
这是太极实习生张铭睿同学做的SPH太极库。请看
https://www.bilibili.com/video/BV1mg411y7i9?p=10&vd_source=e15eb8f98a9dde1c9cc874314025b575
是作者的讲解。
我们来探索一下这个库。
这只是个笔记,写得会比较细碎。
安装问题
除了requirements里面的安装,还要安装一些库。其中pyglet如果安装不正确版本会报错。
pyglet==1.5.27
控制流
为了调试方便,我们指定默认
由于采用了python,所以走一遍控制流是比较简单的。
入口和参数解析
先从run_simulation.py进入
然后采用argparse这个第三方库来进行命令行参数的解析。
使用json这个第三方库进行场景json文件的解析。这一步放在了SimConfig这个自定义类内。位于config_builder.py
这时命令行会打印出
{'Configuration': {'domainStart': [0.0, 0.0, 0.0], 'domainEnd': [5.0, 3.0, 2.0], 'particleRadius': 0.01, 'numberOfStepsPerRenderUpdate': 1, 'density0': 1000, 'simulationMethod': 4, 'gravitation': [0.0, -9.81, 0.0], 'timeStepSize': 0.0004, 'stiffness': 50000,
'exponent': 7, 'boundaryHandlingMethod': 0, 'exportFrame': False, 'exportPly': False, 'exportObj': False}, 'RigidBodies': [{'objectId': 1, 'geometryFile': './data/models/Dragon_50k.obj', 'translation': [3.5, 0.05, 1.0], 'rotationAxis': [0, 1, 0], 'rotationAngle': 0, 'scale': [1, 1, 1], 'velocity': [0.0, 0.0, 0.0], 'density': 1000.0, 'color': [255, 255, 255], 'isDynamic': False}], 'FluidBlocks': [{'objectId': 0, 'start': [0.1, 0.1, 0.5], 'end': [1.2, 2.9, 1.6], 'translation': [0.2, 0.0, 0.2], 'scale': [1, 1, 1], 'velocity': [0.0, -1.0, 0.0], 'density': 1000.0, 'color': [50, 100, 200]}]
这个其实就是读取的json文件。由于下面这个print所打印出来的。
接着output_xxx字样,显然是为了导出结果用的。从这里我们可以看出场景文件的用法。
所有json的键值对都被读入到config这个对象当中了。从这个对象可以获取任何参数。比如
substeps = config.get_cfg("numberOfStepsPerRenderUpdate")
这句话就是调用config对象的get_cfg方法,读取numberOfStepsPerRenderUpdate这个键,得到的值就是substeps。
构建粒子系统
接下来的这三行
是核心步骤,实际上就是实例化对象。
这个对象是ParticleSystem类的。
把config传给它,就是把场景参数传递给它。
然后builde_solver是构建流体解算器。然后初始化解算器。
ParticleSystem init
让我们从ParticleSystem的 __init__开始
由于东西太多,我们大多数都略讲。
注意@ti.data_oriented是taichi的面向对象的用法。因此这是个太极的类。
从上到下依次步骤:
- 接收config
- 设定计算域
- 设定计算方法(DFSPH/WCSPH)
- 设定材料(流体/固体)
- 设定粒子半径
- 设定支撑半径和初始体积
- 设定粒子数量(可变)
- 设定网格尺寸、数量、padding
- 设定碰撞体
- 设定流体块:设定流体粒子数目(通过计算流体块大小得出、在方块内排排坐)
- 设定刚体块
- 设定刚体:通过voxelize实现,定义在load_rigid_body函数内
- 设定总粒子数(加和得到)和刚体数目
- 分配内存(TODO)
体素化采样
SPH_Taichi采用trimesh体素化采样粒子。每个体素中间放一个粒子
把这段代码随便拷到一个文件,运行一下(要记得更改模型文件路径哦)
import taichi as ti
import trimesh as tm # load the triangle mesh
import numpy as npdef main():ti.init(arch=ti.cuda)mesh = tm.load("E:/Dev/SPH_Taichi/data/models/Dragon_50k.obj")voxelized_mesh = mesh.voxelized(pitch=0.02).fill()voxelized_points_np = voxelized_mesh.points num_particles_obj = voxelized_points_np.shape[0]voxelized_points = ti.Vector.field(3, ti.f32, num_particles_obj)voxelized_points.from_numpy(voxelized_points_np)
# np.savetxt("voxelized_points_np.csv",voxelized_points_np)window = ti.ui.Window("Test voxelize", (768, 768))canvas = window.get_canvas()scene = ti.ui.Scene()camera = ti.ui.make_camera()camera.position(5, 2, 2)while window.running:camera.track_user_inputs(window, movement_speed=0.005, hold_key=ti.ui.LMB)scene.set_camera(camera)scene.ambient_light((1, 1, 1))scene.point_light(pos=(0.5, 1.5, 1.5), color=(1, 1, 1))scene.particles(voxelized_points, color = (0.68, 0.26, 0.19), radius = 0.01)canvas.scene(scene)window.show()if __name__ == "__main__":main()
展示结果
【taichi】关于SPH_Taichi的探索与尝试相关推荐
- 关于TP5400锂电池充放电一体模块 电感“尖叫”(升压Boost电路中 电感有可听见的高频振荡的问题探索与尝试改善)
TP5400锂电池充放电一体模块电感"尖叫" 前言 电感高频振荡人耳可听问题 1.怀疑是电感问题 2.芯片升压功能本身振荡频率低? 3.芯片坏了? 4.选用电感有问题? 猜想 验证 ...
- MaskGAN:谷歌大脑让AI学做完形填空的新尝试
岳排槐 发自 凹非寺 又见一篇神标题论文. 来一起感受一下. MaskGAN: Better Text Generation via Filling in the __ 这又是什么鬼?标题里竟然还有需 ...
- 蚂蚁金服 Service Mesh 实践探索
作者 | 敖小剑 本文整理自蚂蚁金服高级技术专家在 QCon 上海 2018 上的演讲. 大家好,我是来自蚂蚁金服中间件团队的敖小剑,目前是蚂蚁金服 Service Mesh 项目的PD.我同时也是 ...
- 计算机网络安全六要素,六要素教学在计算机网络教学中的探索与反思
<六要素教学在计算机网络教学中的探索与反思>由会员分享,可在线阅读,更多相关<六要素教学在计算机网络教学中的探索与反思(5页珍藏版)>请在装配图网上搜索. 1.六要素教学在计算 ...
- 闲鱼研发框架应用和探索
简介:Flutter是开源的UI工具包,其能够帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台.在AliFlutter 系列第二场直播中,阿里巴巴闲鱼无线技术专家梁治 ...
- js滤镜灰度计算_案例分享爱奇艺边缘计算探索与实践
摘要: 随着云原生技术的发展和 5G 商用的到来,边缘计算随"风"而起.本文将从提升视频播放体验和降低带宽成本的两个目标,介绍爱奇艺在边缘计算服务平台和边缘缓存应用场景两方面的实践 ...
- 美团搜索中查询改写技术的探索与实践
猜你喜欢 0.[免费下载]2022年1月热门报告盘点1.腾讯QQ信息流推荐业务实践2.小红书推荐中台实践3.微信视频号的实时推荐技术架构分享4.预训练模型在华为信息流推荐系统中的探索和应用5.腾讯PC ...
- 南京:探索实施“电子围栏”管理新模式 缓解商圈周边道路交通拥堵
来源:交通言究社 导 语 城市商圈周边道路普遍存在拥堵.秩序混乱等问题,南京新街口商圈周边道路常年拥堵,而且在南京全市各区域中车辆运行速度最低.为缓解拥堵,南京交警分析拥堵原因,创新管理模式,深化警企 ...
- 一些我们关于端到端语音翻译的思考和尝试
截止至2019年,世界上共有200多个国家和地区,人们使用的语言数量也高达7000多种,其中还不乏上千种濒危语言或者是不成文语言 (unwritten language),语言不通往往是不同地区政治. ...
最新文章
- 大数据时代:从1.0到3.0 | 专访清华社会学系教授罗家德
- mac mysql premium_详解 Navicat Premium Mac 版常用功能
- 我的第三个jquery插件——promptForK13内容提示插件
- Mysql 索引-1
- 利用scipy包计算表格线的峰值,还原表格得到表格结构
- iOS Programming UIWebView 2
- 敏捷开发免费管理工具——火星人预览之一:需求与故事树
- Angular官方教程采坑
- 用Python实现GB与BIG5码的转换
- 去掉 win7 “测试模式 windows7 内部版本7601” 字样
- A. Vasya the Hipster
- 浏览器标准模式和怪异模式之间的区别是什么?
- c语言找最大数字,C语言: 键盘输入任意10个整数,找出最大数及最大数的序号。...
- 七参数/六参数坐标转换(小角度)-- 公共点间接平差
- Z律师:创业项目如何玩转股权众筹?
- 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求介绍 入学信息早知道...
- ES插件在谷歌浏览器的安装
- SkeyeVSS智慧社区综合安防视频管理系统方案 助力小区安防建设智能化
- HDMI 之 CEC
- Arduino提高篇11—烟雾传感器MQ-2
热门文章
- java唱歌打分系统原理_哦,这就是java的优雅停机?(实现及原理)
- 一款好用的下载神器Motrix
- SAP-S4HANA中新增的委外销售订单库存怎么玩
- enigma机加强版:兼容汉语和标点符号、阿拉伯数字
- 怎么做网站呀?如何做网站?
- 商业源码网 java_java新闻发布系统JAVA商业源码下载
- *** glibc detected *** java: free(): invalid next size (fast): 0x00000000024b19d0 ***
- java第二次上机实验程序_20165104-JAVA第二次实验
- Python自动化操作PPT看这一篇就够了!
- access的papersize命令_自定义报表纸张大小的函数