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

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
H
Help Net Security
小众软件
小众软件
N
Netflix TechBlog - Medium
C
Check Point Blog
量子位
Last Week in AI
Last Week in AI
GbyAI
GbyAI
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
博客园 - 聂微东
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
D
DataBreaches.Net
Project Zero
Project Zero
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
Security Latest
Security Latest
Cisco Talos Blog
Cisco Talos Blog
Recorded Future
Recorded Future
I
Intezer
L
Lohrmann on Cybersecurity
Cyberwarzone
Cyberwarzone
博客园_首页
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog
P
Palo Alto Networks Blog
V
V2EX
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
The Exploit Database - CXSecurity.com
The Hacker News
The Hacker News
Blog — PlanetScale
Blog — PlanetScale
G
GRAHAM CLULEY
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
The Register - Security
The Register - Security
L
LINUX DO - 热门话题
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
F
Full Disclosure
博客园 - 司徒正美
Recent Announcements
Recent Announcements
IT之家
IT之家
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Attack and Defense Labs
Attack and Defense Labs
Cloudbric
Cloudbric
Help Net Security
Help Net Security
The Last Watchdog
The Last Watchdog

博客园 - 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