图形小史——那盏嘚瑟的茶壶

2023-10-12 21:20
文章标签 图形 小史 那盏 茶壶

本文主要是介绍图形小史——那盏嘚瑟的茶壶,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

美国加州山景城有个著名的计算机历史博物馆,这里展出了如IBM深蓝计算机、Google第一台商业服务器、Apple I 等计算机历史上最重要的一些角色。

不过,有一件很特殊的展品同样名列其中——一盏白瓷茶壶

为什么一盏茶壶会出现在满是电路板的计算机博物馆呢?其实如果你有心观察的话,这盏茶壶简直无处不在。比如《玩具总动员》:

又比如《辛普森一家》:

不光电影要向它致敬,很多3D软件里还可以一键生成它,其地位堪比程序员们熟悉的“hello world”。

每年皮克斯动画公司在图形界最有名的大会——Siggraph大会上派发的纪念品也是在这个茶壶基础上设计的发条玩具。他们更为茶壶创作了一段音乐动画。

http://v3-default.ixigua.com/946551c3dcf0966b45784396d6b32a8a/5e6f57c0/video/tos/hxsy/tos-hxsy-ve-0004/44e07a41a4e64d3baf83182e46775a4d/?a=2011&br=0&bt=306&cr=0&cs=0&dr=0&ds=1&er=&l=202003161738340100140470742B52B3C5&lr=&qs=0&rc=M2UzdGlqOWtuczMzNTczM0ApOWk1NWZlNWVoNzpnNDhnaWdxbC80bnFmYWtfLS1iLS9zczJgLjIzYS4vYmAxMDBgNmA6Yw%3D%3D&vl=&vr=

熟知计算机图形学的人一定认得,它就是在图形学历史上拥有重要地位的——

犹他茶壶

犹他指的是犹他州立大学。这所学校诞生了数不清的图形学先驱。可以说没有这所学校,就没有今天的皮克斯和Adobe。时间回到1974年,当时还是博士生的图形学研究者Martin Newell开发了一种新的3D渲染算法(PS:博士论文是第一生产力~)。这种新的算法可以绘制阴影,有反射效果的贴图。还可以通过旋转显示隐藏的曲面。但是他发现当时被图形学算法研究采用的几种常见3D物体都太过简单了。

一天下午茶的时候,Newell告诉他的太太Sandra,他需要一个更有趣的3D物体。太太于是建议他把家里用的茶具数字化到计算机里。这个建议实在是太妙了!因为这个茶壶的平滑曲面特别适合图形学算法的展示。并且它的壶把手可以将阴影投射到茶壶自身,这是过去简单的3D曲面都做不到的。于是Newell开始动手,把茶壶的坐标在纸上画了出来。

今天我们可能觉得3D扫面是个很简单,很天经地义的事。但是在那个年代,3D“扫描”需要人们一个点一个点地输入坐标。这些坐标成为一种数字曲面,Bezier曲面的控制点。

Newell回到犹他大学的实验室,在一台Tektronix电脑上完成了坐标的录入。这样最有名的3D模型,犹他茶壶就诞生了。从那以后,茶壶出现在了很多图形学算法的研究论文当中。不仅如此,它很快就引起了Newell的同事Blinn的注意(著名的Blinn着色算法发明人)。Blinn决定将茶壶的数据公开,成了图形学最通用的模型。可以说,这盏茶壶对于计算机图形学的作用就好像小白鼠对于生物学研究的作用一样,非同小可。

Newell对茶壶的建模可以说非常精简。总共由16个控制点和32个面组成。甚至有传言,很多图形学的研究者可以背下来这个茶壶的坐标。怎么能用这么少的点来描述一个这么复杂的三维图形呢?这是因为这16个点并不是茶壶身上的坐标,而是描述一组参数化曲面的关键点。这种曲面就是由Pierre Bezier在1962年发明的Bezier曲面(Pierre Bezier当时在汽车公司雷诺上班,雷诺1970s的数字建模系统UNISURF 后来成为达索公司CATIA软件的重要组成部分,详见文章“CAD前世今生”)。

今天,茶壶成了最能代表计算机图形的吉祥物。人们通过3D打印,把它重新复制回真实世界。Newell更是无奈的表示,虽然他为计算机图形贡献了那么多算法,可最后他最被人铭记的,还是他那“该死”的茶壶。

既然讲到犹他大学和茶壶。我们不妨也来看看世界上第一个被3D“扫描”的物体。同样也是诞生在犹他大学的甲壳虫汽车模型。

这款模型同样也是70年代诞生的。那个时代的电脑还很原始,像冰箱那么大。显示功能非常有限,基本上只能绘制线段和点。正是在这样原始的设备上,图形学的先驱Sutherland决定开发可以和3D物体互动的程序(Sutherland,1963年博士期间缔造了CAD行业世界上第一款CAD sketchpad,1981年其联合创始的公司收购的3D建模内核Romulus发展成为CAD历史上最有名的内核之一:parasolid,详见文章“CAD前世今生”。再次感叹:博士论文是第一生产力)。

那时候他们同样也是需要一个更复杂的3D物体。但是当时连建模软件都没有。没有办法,他们只能手工将物体剖分成零散的面片,然后精确测量,录入电脑中。

这个甲壳虫汽车是人们第一次用3D模型来绘制的真实物体。它成了早期图形学研究的珍贵数据。包括Phong的渲染算法也是借助这辆汽车展现的。它也成了世界上第一个写实风格的计算机渲染的物体。有趣的是当时参与了数据采集的一名学生计算了采集这部甲壳虫汽车所用的人力成本和在计算机上的耗时成本,发现它竟然高于当时甲壳虫汽车的市价。

从原始的手工测绘到今天已经以假乱真的计算机图形,我们走过了很长的路。感谢这些计算机先驱,让电脑游戏,CG电影和工业设计成为可能。下次再在影院里看到这盏茶壶出现在动画影片里,希望你不会感到意外。(或者你也可以把它当做彩蛋找一找)

 

感谢stewie的友情约稿,stewie,计算机图形学博士,NVIDIA工程师。

EverCraft.co

 

这篇关于图形小史——那盏嘚瑟的茶壶的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/198536

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形

一个图形引擎的画面风格是由那些因素(技术)决定的?

可能很多人第一直覺會認為shader決定了視覺風格,但我認為可以從多個方面去考慮。 1. 幾何模型 一個畫面由多個成分組成,最基本的應該是其結構,在圖形學中通常稱為幾何模型。 一些引擎,如Quake/UE,有比較強的Brush建模功能(或應稱作CSG),製作建築比較方便。而CE則有較強的大型地表、植被、水體等功能,做室外自然環境十分出色。而另一些遊戲類型專用的引擎,例

「大数据分析」图形可视化,如何选择大数据可视化图形?

​图形可视化技术,在大数据分析中,是一个非常重要的关键部分。我们前期通过数据获取,数据处理,数据分析,得出结果,这些过程都是比较抽象的。如果是非数据分析专业人员,很难清楚我们这些工作,到底做了些什么事情。即使是专业人员,在不清楚项目,不了解业务规则,不熟悉技术细节的情况下。要搞清楚我们的大数据分析,这一系列过程,也是比较困难的。 我们在数据处理和分析完成后,一般来说,都需要形成结论报告。怎样让大

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

Android shape 图形

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <!-- "oval","rectangle", "line","ring" 形状--><!-- 圆角 --><cornersandroid

QGraphicsView、QGraphicsScene和QGraphicsItem图形视图框架(二)疑难杂症

疑难杂症1 1.问题: 设置场景的背景图片时,采用setBackgroundBrush()方法和重写drawBackground()函数得到的结果很不一样,而且通过setSceneRect设置场景原点位置之后得到的结果也有很大区别。 如下图 第一个和第三个中重写了QGraphicsScene的drawBackground()函数,区别在于第一个的场景原点在左上角,第三个的原点在中心。

图形API学习工程(0):工程目的环境配置

工程目的 我想要不借助引擎,而直接使用底层图形API(如DirectX和OpenGL等)来生成图像。 我认为这将有利于图形学算法与渲染框架相关的学习,因为: 游戏引擎往往对渲染进行了豪华的封装,而不利于看到图形学算法本质。UE4虽然开放了源代码,但是想要完全掌握渲染方面的代码也需要较高成本。 另外,我想对不止一个主流API进行封装,而是多个图形API进行封装,包括: OpenGLD3D1

图形API学习工程(12):讨论当前工程里同步CPU与GPU的方式

工程GIT地址:https://gitee.com/yaksue/yaksue-graphics 简单讨论CPU和GPU间的交互 《DX12龙书》在【4.2 CPU与GPU间的交互】章节中讨论了这个问题,简单来说: 为了最佳性能,CPU和GPU这两种处理器应该尽量同时工作,少“同步”。因为“同步”意味着一种处理器以空闲状态等待另一种处理器,即它破坏了“并行”。 但有时,又不得不进行二者的同步

图形API学习工程(11):使用纹理

工程GIT地址:https://gitee.com/yaksue/yaksue-graphics 目标 实现纹理采样。 参考教程/代码范例: OpenGL: 纹理 - LearnOpenGL CN Vulkan: Images - Vulkan Tutorial D3D11: DirectX11官方SDK范例【Tutorial 7: Texture Mapping and Constant