惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
博客园 - Franky
V
V2EX
爱范儿
爱范儿
J
Java Code Geeks
小众软件
小众软件
Last Week in AI
Last Week in AI
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
酷 壳 – CoolShell
酷 壳 – CoolShell
The Register - Security
The Register - Security
GbyAI
GbyAI
Vercel News
Vercel News
Y
Y Combinator Blog
腾讯CDC
F
Fortinet All Blogs
I
InfoQ
N
Netflix TechBlog - Medium
B
Blog RSS Feed
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
Scott Helme
Scott Helme
T
Tor Project blog
U
Unit 42
Google Online Security Blog
Google Online Security Blog
PCI Perspectives
PCI Perspectives
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
aimingoo的专栏
aimingoo的专栏
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Stack Overflow Blog
Stack Overflow Blog
Security Archives - TechRepublic
Security Archives - TechRepublic

博客园 - SoRoMan

Scene Management - Scene Graph 思考:矩阵的级联顺序与坐标系的关系 MFC的一些宏的整理 (DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE) 关于STL Improve Performance of C++ Codes (2) -- 如何消除临时对象? Improve Performance of C++ Codes (1) -- 使用初始化列表还是赋值语句? 关于万向节死锁(Gimbal Lock)(续) 思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先,... 读书笔记:Writing Solid Code (4) 读书笔记:Writing Solid Code (3) 读书笔记:Writing Solid Code (2) 读书笔记:Writing Solid Code 笔记:Delaunay三角剖分(Delaunay Triangulation)相关知识 学习经验:逐步建立学习资源列表-计算机图形学 SL专题6:谈谈Second Life中的游戏制作(Game Dev in SL) SL专题4:Second Life畅销商品 SL专题3:Second Life市场分析 SL专题2:加入并熟悉Second Life世界 SL专题1:Second Life(第二生命)--迟早火爆世界的游戏与Web的集大成者
A 3D Real Time Fluid Solver Demo (三维实时流体解算器)
SoRoMan · 2007-05-22 · via 博客园 - SoRoMan

最近对流体模拟(Fluid Simulation)很感兴趣,参考Jos Stam的paper:Real-Time Fluid Dynamics for Games,扩展其2D solver,做了个简单的3D fluid solver,模拟简单的流体。Demo以及源代码在这里.

大话

实时流体模拟本是计算流体力学领域(CFD)的关心的事,工程人员为了通过计算机模拟获得某种流体在特定条件下的有关信息,如:流体的动量、热量和质量等。由于工程上的精确性,所需的计算一般是很复杂的。后来,实时流体模拟又成了计算机图形学(CG)的一个热点问题,不过人家是为了模拟流体的外在形象。所需的计算无需很精确,强调的是视觉效果。如:模拟烟、火、云彩、流水等,以满足电影特效或者游戏特效。

正文

我所关心的当然是CG中的流体模拟了,现实中能找的以及找不到的流体效果,都给我模拟出来,以假乱真,有趣!呵呵。在网上发现一些不同的算法,被不同的大牛发现。大概有这几种:
1.求解NSEs(拉格朗日法,欧拉法)
2.基于大规模数据采样(快速傅立叶变换(FFT))
3.参数建模(线性波组合)
4...

其中,还是求解NSEs方法得出的结果较逼真,毕竟是基于物理模型的,但缺点是计算量大,而且计算结果有时不稳定,对时间步长敏感。想要实时很难。这方面Jos Stam是个人物,他将半拉格朗日算法引入CG领域,求解NSEs,达到实时流体模拟。于是,找他的论文。好多,看到一篇Real-Time Fluid Dynamics for Games。好家伙,Real Time的,不就是想要的么。于是,看了下,其实其核心是采用Gauss-Seidel relaxation方法解线性方程组,收敛快而且稳定.详细的描述见:http://www.dgp.toronto.edu/people/stam/reality/Research/pdf/GDC03.pdf.

由于原文是针对2D的情况,于是我自己试着写了个3D的,纯属好奇,未作什么优化,速度一般。渲染部分随便弄了个alpha混合,估计用体渲染法(volume rendering)效果好点。最后渲染出来在我的旧本本上(cpu 1.4GHz),grid size为16*16*16的情况下FPS为14左右,台式机(cpu 2.6GHz)为32左右,如果想要更好的效果,需增大grid size,当然FPS肯定会下降.

    Demo

1.Grid size = 16*16*16, diff = 0, visc = 0 (散射系数=0,粘滞系数=0)

2.Grid size = 32*32*16, diff = 0.00001, visc = 0.000001