【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的探索与尝试相关推荐

  1. 关于TP5400锂电池充放电一体模块 电感“尖叫”(升压Boost电路中 电感有可听见的高频振荡的问题探索与尝试改善)

    TP5400锂电池充放电一体模块电感"尖叫" 前言 电感高频振荡人耳可听问题 1.怀疑是电感问题 2.芯片升压功能本身振荡频率低? 3.芯片坏了? 4.选用电感有问题? 猜想 验证 ...

  2. MaskGAN:谷歌大脑让AI学做完形填空的新尝试

    岳排槐 发自 凹非寺 又见一篇神标题论文. 来一起感受一下. MaskGAN: Better Text Generation via Filling in the __ 这又是什么鬼?标题里竟然还有需 ...

  3. 蚂蚁金服 Service Mesh 实践探索

    作者 | 敖小剑 本文整理自蚂蚁金服高级技术专家在 QCon 上海 2018 上的演讲. 大家好,我是来自蚂蚁金服中间件团队的敖小剑,目前是蚂蚁金服 Service Mesh 项目的PD.我同时也是 ...

  4. 计算机网络安全六要素,六要素教学在计算机网络教学中的探索与反思

    <六要素教学在计算机网络教学中的探索与反思>由会员分享,可在线阅读,更多相关<六要素教学在计算机网络教学中的探索与反思(5页珍藏版)>请在装配图网上搜索. 1.六要素教学在计算 ...

  5. 闲鱼研发框架应用和探索

    简介:Flutter是开源的UI工具包,其能够帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台.在AliFlutter 系列第二场直播中,阿里巴巴闲鱼无线技术专家梁治 ...

  6. js滤镜灰度计算_案例分享爱奇艺边缘计算探索与实践

    摘要: 随着云原生技术的发展和 5G 商用的到来,边缘计算随"风"而起.本文将从提升视频播放体验和降低带宽成本的两个目标,介绍爱奇艺在边缘计算服务平台和边缘缓存应用场景两方面的实践 ...

  7. 美团搜索中查询改写技术的探索与实践

    猜你喜欢 0.[免费下载]2022年1月热门报告盘点1.腾讯QQ信息流推荐业务实践2.小红书推荐中台实践3.微信视频号的实时推荐技术架构分享4.预训练模型在华为信息流推荐系统中的探索和应用5.腾讯PC ...

  8. 南京:探索实施“电子围栏”管理新模式 缓解商圈周边道路交通拥堵

    来源:交通言究社 导 语 城市商圈周边道路普遍存在拥堵.秩序混乱等问题,南京新街口商圈周边道路常年拥堵,而且在南京全市各区域中车辆运行速度最低.为缓解拥堵,南京交警分析拥堵原因,创新管理模式,深化警企 ...

  9. 一些我们关于端到端语音翻译的思考和尝试

    截止至2019年,世界上共有200多个国家和地区,人们使用的语言数量也高达7000多种,其中还不乏上千种濒危语言或者是不成文语言 (unwritten language),语言不通往往是不同地区政治. ...

最新文章

  1. 大数据时代:从1.0到3.0 | 专访清华社会学系教授罗家德
  2. mac mysql premium_详解 Navicat Premium Mac 版常用功能
  3. 我的第三个jquery插件——promptForK13内容提示插件
  4. Mysql 索引-1
  5. 利用scipy包计算表格线的峰值,还原表格得到表格结构
  6. iOS Programming UIWebView 2
  7. 敏捷开发免费管理工具——火星人预览之一:需求与故事树
  8. Angular官方教程采坑
  9. 用Python实现GB与BIG5码的转换
  10. 去掉 win7 “测试模式 windows7 内部版本7601” 字样
  11. A. Vasya the Hipster
  12. 浏览器标准模式和怪异模式之间的区别是什么?
  13. c语言找最大数字,C语言: 键盘输入任意10个整数,找出最大数及最大数的序号。...
  14. 七参数/六参数坐标转换(小角度)-- 公共点间接平差
  15. Z律师:创业项目如何玩转股权众筹?
  16. 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求介绍 入学信息早知道...
  17. ES插件在谷歌浏览器的安装
  18. SkeyeVSS智慧社区综合安防视频管理系统方案 助力小区安防建设智能化
  19. HDMI 之 CEC
  20. Arduino提高篇11—烟雾传感器MQ-2

热门文章

  1. java唱歌打分系统原理_哦,这就是java的优雅停机?(实现及原理)
  2. 一款好用的下载神器Motrix
  3. SAP-S4HANA中新增的委外销售订单库存怎么玩
  4. enigma机加强版:兼容汉语和标点符号、阿拉伯数字
  5. 怎么做网站呀?如何做网站?
  6. 商业源码网 java_java新闻发布系统JAVA商业源码下载
  7. *** glibc detected *** java: free(): invalid next size (fast): 0x00000000024b19d0 ***
  8. java第二次上机实验程序_20165104-JAVA第二次实验
  9. Python自动化操作PPT看这一篇就够了!
  10. access的papersize命令_自定义报表纸张大小的函数