缙哥哥的博客
与你分享我的点点滴滴生活

Prophecy 的 3D 电影《彗星撞地球》是怎么压缩成 64k 图片的?

这种动画称之为DEMO(demonstration)。它跟一般的影视视频不同,不是直接靠播放器调用视频解码器解析。而是另外执行的EXE文件CPU即时演算的。

Prophecy 的 3D 电影《彗星撞地球》是怎么压缩成 64k 图片的?

Demo程序是通过直接对显卡进行操作和计算,其中只包含一些关键帧,而中间的实现效果则完全通过算法演算出来,而且,通常情况下,Demo里面的图形都是一些比较规则的多边形,里面的图案组合往往可以重复利用,这样就大大减少了整个程序的体积。 这种影像制作工具用werkkzeug。

制作完成后,需要调用UPX (the Ultimate Packer for eXecutables)算法加壳压缩。这个是专门拿来压缩可执行文件的,通常压缩过文件体积缩小50%-70%。(我试过最高压缩率是原体积8%,应该还能更低)

这片子采用了使用简单的几何图形(如正方体、立方体、圆柱等)进行组合,通过汇编语言调用Ms DirectX引擎的核心代码库来建立对象架构、三维空间位置、运动轨迹及材质信息。程序在运行时由CPU读出这些信息给DirectX渲染引擎生成三维立体的对象及其动画。它不同于其它的3D动画多采用3D Max、MAYA那些建高面数模型的软件,制作出比较复杂的场景再进行贴图;而是从一开始就注意了“节省”,采用最简单的模型、运用不断优化的算法,组合出最复杂的效果.做纹理并贴图:同制作场景的思 路相同,也尽量采用最简单的方法制作出自己喜欢的纹理,在它的最终版本中,采用了66幅256×256点大小的32位纹理,未压缩前纹理大小为16MB。里面还有一段要是正常输出有159MB的音乐,是使用LOGIC AUDIO制作出来的。音乐包含两个部分,一个是Loading Music,另外一个是Main Music。

每年都有一个叫“International Demo Competitions”国际DEMO编程动画大赛的比赛。专门有一些人做这些类似影像的。

由于一些神秘的技术技巧我们不可能完全得知,所以要达 到像国外的 SceneDemo 专业团队的水平那也是相当有难度的。

有兴趣想做做类影像的可以看看《Texturing and Modeling – A Procedural Approach》这本书。里面详细的介绍了各种过程纹理和造型技术。 介绍的 Metaball 技术就是其中的一种,在早些年的 Demo 中经 常能看到 Metaball 技术的展示:几个球或者其它形状的物体互相融合和侵彻, 可以生成极为复杂的新造型。这对于当时初学 OpenGL 仅仅知道多边形面片逼近 造型技术的我来说是很牛很新鲜的。

虽然最近几年的 64K Intro 已经几乎不使 用像 Metaball 这样的平民技术了,hacker 似乎总在追寻更强大的 过程纹理造型方法和更酷更眩的渲染技巧。而 07 年的 Best 64K Intro 似乎是完 全在炫耀作者的着色器编写技术。 但是 Metaball 却并不是像雁型阵一样过时了,它甚至在 2D 图形领域也得到了广泛的应用。

Metaball 的原理 Metaball (元球) 技术是由 Blinn 于 1982 年开发一种适用于建立可变形表面的技术。此技术利用 Metaball 建立能量场,然后通过标量域的等势面来建立3D 模型来表现软体或者隐式曲面。 简单的说, 就是在空间里布置一些 Metaball, 每个 Metaball 都有一个能量场,通常用势函数来表示。设空间里均布着无数个点。在其中某一点,它的能量为每个 Metaball 对它的势的叠加。然后在空间的所有点找出势能相同的点,就得到一个由这些点组成的曲面。至于势函数的选择就很多了, 有指数函数, 分段多项式函数等等……算了不细说了,再说又没完没了。

3D 电影《彗星撞地球》下载

参考资料

【1】计算机真实感图形的算法基础. 彭群生著

打赏
转载请注明来源于“缙哥哥的博客”及本文链接:缙哥哥的博客 » Prophecy 的 3D 电影《彗星撞地球》是怎么压缩成 64k 图片的?
分享到: 更多 (0)

评论 2

评论前必须登录!

 

  1. #1

    太巧了,哥,我现在学的专业课其中之一就是【数字图像与处理】其中压缩式讲解的重点,刚刚好看到这篇文章,充实一下,先MARK了
    !!1

    liyaodong1年前 (2016-09-09)