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.com

2 物理动画渲染流程

其可以分为三步:

(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)相关推荐

  1. 物理动画流体实现流程(Physically Based Fluid Animation)

    0 说在开始 发现介绍物理动画实现流程的文章较少,入门需要一定时间,所以才有了这篇文章.此文章不具体介绍算法部分和数学公式,例如SPH.欧拉公式.NS公式.弹簧质点模型等等,而是如何去构造自己的第一个 ...

  2. layui 表格加载动画_巴州动画

    巴州动画,北京于萍画室新疆校区十九年沉淀,新疆再续辉煌北京于萍画室成立于2001年,在经历了19年磨砺与沉淀之后,已形成了师资力量雄厚,教学体系严谨,造型.设计.国画.实验艺术.建筑.动画综合齐头并进 ...

  3. canvas 擦除动画_帧动画的多种实现方式与性能对比

    作者: 前端向朔 from 迅雷前端 本文目录 Web 动画形式 应用场景 素材准备 实现方案 一.GIF 图 二.CSS3 帧动画 三.JS 帧动画 方案总结 注意事项 总结 Web 动画形式 首先 ...

  4. flutter 点击旋转动画_让动画实现更简单,Flutter 动画简易教程!

    Flutter中的动画功能强大且易于使用.接下来通过一个具体的实例,您将学到关于 Flutter 动画的一切. 难度:中级 今天,我们无法想象移动应用程序里面没有任何动画,当您从一页跳转到另一页时,或 ...

  5. css3宽度变大动画_【动画演示】流量计的工作原理,真涨见识!

    [培训]多热源联网供热技术与管网水力平衡调配技术培训班(2020年7月9-11日 泰安市) 本文转自:除灰脱硫脱硝技术联盟 流量计(Flowmeter)是工业生产的眼睛,与国民经济.国防建设.科学研究 ...

  6. 缓动动画_核心动画概念:缓入缓出

    缓动动画 With the arrival of CSS transitions, animation is now completely at home on web pages. In anima ...

  7. maya导入abc动画_人物动画极速制作宝典分享!再也不用担心项目周期不够了

    作者 | 朱亚东 订阅 | 010-86092062 项目周期有限,怎样才能完成人物动画的极速制作呢?日前,有业内"活雷锋"发现了一款人体建模软件MakeHuman,并分享了其制作 ...

  8. 怎樣制作线段动画_线条动画视频制作 如何制作线条运动图?线条动态图制作...

    上周广东终于成功入秋,但是为什么,此刻小编感觉到很热嘞~广东这个天气真的是一年四季随机循环的啊~哈哈.好啦,不说废话,来看看今天的教程方案吧!线条动画大家知道是什么意思嘛?就是画面中有线条在运动的动画 ...

  9. vue 企业发展历程动画_三维动画的发展简史

    天津三维动画作为电脑的美术的一个分支,是建立在动画的艺术和电脑软硬件技术发展基础上而形成的一种相对的独立新型的艺术的形式.早期主要应用于军事的领域.直到70年代后期,随着PC机的出现,计算机的图形学才 ...

最新文章

  1. 算法设计 (克菜因伯格 / 塔多斯 著)
  2. 用户 ‘IIS APPPOOL\IdealTest‘ 登录失败解决方案
  3. Java经典面试题:一个线程两次调用start()方法会出现什么情况?
  4. python多线程多进程多协程_python 多进程、多线程、协程
  5. 《微机原理及接口技术》第07章在线测试
  6. 宁波镇海2021年高考成绩查询,最新!2021年,宁波镇海区的这14所中小学“爆了...
  7. 95-160-024-源码-DataStream-ConnectedStreams与union合并流
  8. 常用的开源中文分词工具
  9. java 顺序执行_java程序执行顺序
  10. bash大括号参数扩展(Parameter Expansion)
  11. PathMeasure打造万能路径动效
  12. 质谱流式细胞技术 小笔记
  13. 02-Web前端知识 day03-javaScript
  14. 科学记忆单词---麦克米伦
  15. 【路径规划】基于蚁群算法的多配送中心车辆路径优化方法matlab代码
  16. DSNet: A Flexible Detect-to-Summarize Network for Video Summarizationa论文笔记
  17. 《数据结构C语言版》-栈的概念和栈的实现
  18. randomize方式总结
  19. TP5后端,VUE前端请求聚合数据驾照题库
  20. CS231n课程笔记翻译:反向传播笔记

热门文章

  1. inotifypropertychanged接受不执行_死刑立即执行很好理解,缓期2年执行是什么意思?是2年后再执行吗...
  2. endnote初始化数据库支持_服务端编程——数据库(MySQL、sequelize) - 天生笑点低你奈我何...
  3. 问题 F: 分盒子(经典)
  4. P1803 凌乱的yyy / 线段覆盖
  5. 2021亚太内容分发大会 阿里云荣获三项大奖
  6. Flink 助力美团数仓增量生产的应用实践
  7. ​Spring事务的传播行为案例分析
  8. 收藏!40 个 CSS 布局技巧
  9. Serverless 实战 —— Funcraft + OSS + ROS 进行 CI/CD
  10. AI时代的全链路监控,阿里工程师怎么做?