我在上一篇里面简单地讲了下CG的渲染,今天我们来聊聊CG建模方面的技术。

1.模型的表示方法

在计算机里面所有的物体都是用网格(mesh)来表示的,网格由很多单元(element)组成。这些单元可以是任意多边形,但一般都使用三角形。对于同一个物体来说,网格所包含的单元越多,模型就会越精细,渲染后的效果就会越好。

三角形越多,兔子(Stanford bunny)看起来越真实,右边是渲染的图

2.静动态物体的不同处理方法

如果是静态物体,建完模型之后就可以直接渲染了。但对于动态的物体,情况就复杂的多了。因为这个物体可能会变形或者与其它物体发生相互作用,比如碰撞,破裂,浸没和扩散等等。

我们来考虑这样一个情况:这个大理石做的兔子在下落的过程中被一颗子弹高速击中,然后破碎成小块。由于子弹出膛的速度一般都超过音速,所以破碎的部分也会获得很高的速度。这些碎片之间相互碰撞,有可能会产生更多的碎片。同时这些碎片撞到后面和侧面的墙壁也会分裂成更小的碎片。如果子弹的速度足够快,大理石材料足够脆,那么最终产生几百甚至上千的碎块也是可能的。

大理石兔子被子弹击碎后撞到墙壁

上述这个过程是生活中最常见的脆性材料(brittle material)因为碰撞而产生裂纹进而破碎的场景。然而在计算机中模拟这个简单的场景却是非常的复杂,原因主要有以下几点。首先,给成百上千个物体独立建模的工作量非常大。其次,人无法给每一个碎片规划一条符合物理规律的路径。再次,两个碎片之间的相互作用是未知的,例如怎么弹开以及弹开多远。当很多个碎块一起碰撞的时候,情况就更加复杂了。最后,物体由于碰撞产生的裂纹传播途径和传播方式也是不可知的。即使动画师能够根据生活经验进行艺术创作,那么得到的结果也会由于不符合物理规律而看起来缺乏真实感。

当艺术家的想象空间不足以构建复杂场景的时候,就需要使用物理引擎了(physics engine)。所谓的物理引擎就是在计算机中构建一个物理场,场中的物体可以被真实世界的物理规律所驱动。

3.物理引擎的原理

正如牛顿三定律是一切物理学的基础一样,各个物理引擎也是建立在牛顿三定律之上的。

在田径比赛中,如果知道铅球的初始速度和初始位置,那么一个初中生也能利用学到的物理知识计算出铅球的落地点。这是因为铅球很重且变形很小,所以与空气的相互作用就可以忽略不计,可以直接代用F=ma。现在设想另一种情况:运动员抛出的是一个灌满水的气球而不是铅球。由于液体不能维持自己的形状,所以会在空中带动气球变形。由于变形,它的重心也一直变化,就不能使用上面述那个公式了。

我们该如何处理这个水球问题呢?答案其实很简单,近似。既然水球作为一个整体在一段时间内变形很大,那么我们就在一个极短的时间(dt)内取其中极微小的一块(dv)来研究。由于时间很短且体积很小,所以它的变形也会很小,我们因此可以把它视为刚体,就可以使用F=ma了。当我们把所有的微小体都加起来并且将时间向前推进时,我们就能得到水球在任意时刻的位置和形状了。

上面使用的方法其实就是牛顿老爷子的微积分!选取很短的一段时间就是时间离散(Temporal Discretization),选择极小的一块就是空间离散(Spatial Discretization)。离散过后我们又在时间上和空间上进行积分。根据微积分的理论:当我们选取的物体足够小,时间足够短,计算的结果就逼近精确值(真实值)。这是所有物理引擎的基本原理。

图中的dt和dv都非常的小

4.物理模型的表示方法

在第二节中,我们提到计算机中渲染的物体一般是用网格来表示的。而在物理引擎中,物体除了可以用网格表示外,还可以使用粒子。粒子表示法与网格一样也是非常直观的。我们可以设想上图中的兔子底部有一个洞,允许往里面填充玻璃球。如果玻璃球的体积足够小,那么它们就能近似兔子的形状。再举个不太恰当的比喻,我们可以把原子想象成具有一定体积的圆球,而一切的物体都是由原子构成的,那么在某种程度上使用粒子方法来表示物体更符合物理规律一些。

左:14万个三角形表示的兔子;右:100万个粒子表示的兔子

无论是网格还是粒子,它们的作用都是离散物体,使牛顿定律以及由其演化出来的方程可以在每一个单元上进行计算。一般来说,网格法计算精度较高,但生成高质量的网格较为困难,且网格不适合有较大变形的物体。而粒子法不需要划分网格,适应性强,但计算精度一般比不上网格法。在实际应用中,一般根据问题的特性来选择相应的方法。

从电影《雄狮少年》看CG技术(二)相关推荐

  1. 从电影《雄狮少年》看CG技术(一)

    2019年成本仅6000万的电影<哪吒之魔童降世>成为了国漫之光,最终拿下了50亿的票房.而去年众多大咖站台的电影<雄狮少年>投资接近<哪吒>的5倍,到现在却连成本 ...

  2. 计算机3d影视的应用,浅析CG技术在3D电影场景设计中的应用

    [摘要] 3D电影的场景设计在造型手法.空间表现上和传统电影有着相当大的区别,这得益于计算机CG技术,能够创造出完全由计算机虚拟而传统手法无法获取的形象和镜头运动,实现了科学技术和艺术的完美结合.计算 ...

  3. 在线看电影,在线看视频运用p2p技术加快网速

    在线看电影,在线看视频网络高消耗带宽应用,在网吧等高带宽环境,可以顺畅的运行,但对于1-2M的家庭网络,慢得像蜗牛的绝大多数中国校园网,很多公司,企业事业单位的网络,带宽就捉襟见肘了.下载工具讯雷,快 ...

  4. 10部不为人知的机器学习电影,你看过几部?

    全文共3563字,预计学习时长11分钟 图源:firefox.zol 假期进度条读取中-- 美好的假期怎么能不补几部精彩绝伦的电影呢? 提起著名科幻电影<终结者>系列,任何一个80后或90 ...

  5. 看人机对话技术一步步突破与发展

    哈尔滨工业大学刘挺教授:历经50年,看人机对话技术一步步突破与发展! | CCF-GAIR 本文作者:思颖 2017-07-21 09:09 导语:下一步,让机器分析你的言外之意 雷锋网按:2017 ...

  6. deep deepfm wide 区别_个性化推荐如何满足用户口味?微信看一看的技术这样做

    原标题:个性化推荐如何满足用户口味?微信看一看的技术这样做 编辑导读:很多人每天都会习惯性地点开微信公众号阅读,除了朋友圈和转发等渠道以外,我们还可以通过看一看发现更多有趣的文章.那么,看一看是怎么实 ...

  7. 【大疆DJI】安卓开发实习历程- 0.前期准备到面试(HR电话初面+技术一面+技术二面/终面+OC)

    目录 前言 实习选择 0. 腾讯云 1. 面试复盘 2. 海投简历 大疆HR电话初面 大疆技术一面 0. 面试形式 1. 问题准备 2. 面试经过(70 mins) 大疆技术二面(终面) 0. 面试形 ...

  8. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)    邮箱: happylifemxy@163.com 本篇文章里,我们首先对Direct3D之中固定功能流水线中的 ...

  9. 电影《少年的你》影评分析

    文章目录 前言 数据展示 评星比例图 地理位置分布图 词云图 完整代码 总结 前言 今天我将用数据告诉你电影<少年的你>到底值不值得看,废话不多说,直接进入今天的正题吧! 数据展示 数据是 ...

最新文章

  1. 错过CVPR 2017?绝对不能错过GAIR大讲堂——上海交大专场开启报名
  2. PyQt4 进度条和日历 代码
  3. 黄哥漫谈Python 生成器
  4. makefile与make
  5. Couchbase 101:从Java应用程序创建视图(MapReduce)
  6. openfire服务器
  7. Spring Cloud Hystrix的请求合并
  8. 破五唯后,高校从“唯论文”变成了“唯纵向”?​
  9. ffmpeg threads_用ffmpeg命令行转压视频
  10. opencv有基于c语言的教程吗_VS2019配置opencv详细图文教程和测试代码的实现
  11. 【iOS10】使用XCode8、Swift3. 操作SQLite3数据库的步骤(包括配置环境和SQLite语句)
  12. redis bigkey 删除问题
  13. Windows Server 2008官方(MSDN)简体中文正式版试用心得
  14. PostgreSQL 的 target_list分析(三)
  15. MATLAB安装教程
  16. dll文件编写、查看和调用
  17. RS485两台设备用了半年,今天突然没数了,并上串口一直时不时有多余FF等乱码输出。单独串口接电脑试都正常,共地就正常了
  18. 【转载】Unity3D研究院之静态自动检查代码缺陷与隐患
  19. css的after右箭头,偷师成功,纯CSS绘制右箭头及其他——灵动外卖开发笔记
  20. html 链接excel表格,excel表格超链接设置

热门文章

  1. (三)搭建容器云管理平台笔记—安装前准备工作
  2. barManager的设置
  3. C语言游戏开发丨源代码丨开发教程
  4. 【题库】上海市学校心理咨询师-普通心理学-考点解析 11.2 智力理论
  5. 【离线文本转语音文件】java spring boot jacob实现文字转语音文件,离线文本转化语音,中英文生成语音,文字朗读,中文生成声音,文字生成声音文件,文字转语音文件,文字变声音。
  6. 2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?
  7. 周五,说点你们不爱听的大实话
  8. java bcd 压缩_压缩BCD编码的Java实现
  9. git 错误 10054
  10. 维密新零售模式源码开发