opengl动画_物理动画流体实现流程(Physically Based Fluid Animation)
0 說在開始
發現介紹物理動畫實現流程的文章較少,入門需要一定時間,所以才有了這篇文章。此文章不具體介紹算法部分和數學公式,例如SPH、歐拉公式、NS公式、彈簧質點模型等等,而是如何去構造自己的第一個計算機圖形學動畫,其中涉及較多Reference,我會在文章最后給出,非常感謝。(其為我在實驗室做實驗時整理得到,趁熱記錄~)
因個人實驗室的代碼不方便開源,找到代替代碼,流程都是類似的:
https://github.com/douysu/person-summary?github.com所需知識、內容和工具:
- OpenGL-實時可視化運行狀態. 鏈接
- 圖形學物理仿真知識掃盲-閆令琪Animation圖形課程部分. 鏈接
- Blender、Mitsuba Renderer或其他渲染器. 鏈接
1 運行結果
Fluid Simulation(物理動畫流體模擬)展示視頻_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com知乎視頻?www.zhihu.com2 物理動畫渲染流程
其可以分為三步:
(1)物理仿真:其包括多種算法,基于粒子的物理方法。賦予粒子物理特性,例如重力,張力,相互作用力,計算粒子下一步位置。
(2)液體表面重建:無論歐拉方法還是拉格朗日方法,粒子都是離散的,都先需要進行液體表面重建,計算法向量,然后在送入Blender進行渲染。 鏈接
(3)離線渲染:在Blender中設置場景(光照、材質、攝像機)中渲染成圖像。使用工具將連續圖像序列轉為視頻。
一步步來介紹。
3 物理仿真
使用WCSPH、PCISPH、DFSPH或者其他物理仿真算法實現仿真,可視化部分使用OpenGL,如以下幾個開頭效果的仿真圖,算法實現部分和場景搭建可以查看其它Github和文章。
在仿真過程中,記錄每一幀的粒子信息到二進制文件中,這里二進制的文件格式為.pos。如下。這里需要注意,重構時,不同相的物體需要分開保存,因為渲染階段需要付給物體不同材質。例如,這里的0_0_d.pos為第一幀水杯,需要付給玻璃材質。0_0_f.pos對應流體的內容,也就是杯子中的水,需要付給水材質。
有了每一幀粒子的數據了,下一步為重構。
4 液體表面重建
得到每一幀.pos二進制文件,對每一幀中的所有.pos進行重構得到ply模型。這里對應331幀和332幀ply。
5 離線渲染
打開Blender,導入ply,設置場景(材質、燈光、視角、背景板等)點擊渲染->渲染圖像。渲染當前幀圖像。
只是一幀渲染方式,我們有很多幀動畫,不可能一幀一幀手動渲染。解決問題,Blender支持腳本編程,可以實現自動渲染,來看腳本,實現200-375幀渲染。water為保存的水材質的名稱。
# -*- coding:utf-8 -*- import shutil input_path = "K:我的資料庫YDIISPH-Three-Despace" path_ply2 = input_path + "pos" path_ply3 = input_path + "solid-ply" path_ret = input_path + "re2" for n in range(200, 375):bpy.ops.import_mesh.ply(filepath=path_ply2 + str(n) + "_c.ply")bpy.context.object.active_material=bpy.data.materials["water"]bpy.ops.import_mesh.ply(filepath=path_ply2 + str(n) + "_f.ply")bpy.context.object.active_material=bpy.data.materials["water"]bpy.context.scene.render.filepath = path_ret + str(n) + ".png"bpy.ops.render.render(write_still=True)bpy.ops.object.delete()# remove mesh from memorymesh_c = bpy.data.meshes[str(n) + '_c']mesh_f = bpy.data.meshes[str(n) + '_f']mesh_c.user_clear()mesh_f.user_clear()bpy.data.meshes.remove(mesh_c)bpy.data.meshes.remove(mesh_f)最后得到200-375連續幀圖像,在使用工具轉成視頻即可。
Reference
- GAMES101-現代計算機圖形學入門-閆令琪
- GAMES201:高級物理引擎實戰指南2020 胡淵鳴
- Blender渲染引擎Cycles教程
- Fluid Engine Dev - Jet
- 液體渲染:一種屏幕空間方法
- 以及本文出現的所有鏈接
總結
以上是生活随笔為你收集整理的opengl动画_物理动画流体实现流程(Physically Based Fluid Animation)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 研旭电子dsp配套程序_为什么自动调音D
- 下一篇: idea git 过滤target_ID