时长3分钟的激情大片,体积只有4kb?

更新时间:2024-03-11 19:57:00作者:无忧百科

时长3分钟的激情大片,体积只有4kb?



如果你打开这篇文章并迅速滑到最后,那么恭喜,就在刚刚,你被消耗了 43 mb 的流量。

这个流量,可以让你刷 5 个短视频。

循环 12 遍 MP3 格式的《 只因你太美 》。

保存 3400 张“ 差评 ”二字的 GIF。

或者下载 5500 次,时长 2 分半,名为《 羊与花 》的动画视频。

差评君可没写错

因为这个视频大小只有——8kb。



这个视频 ” 是差评君冲浪时无意发现的,不过,它的准确说法并不是 “ 视频 ” ,而是 “ demo ” 演示( 不是游戏 demo )。

看到这,可能有差友要拍大腿了:如果 D 盘用 demo 来存资料,岂不是。。。

别急嘛,差评君保证你不会用它来学习的。

因为它不能快进: (

demo 的格式并不是各位熟悉的 mp4 、 avi ,而是 exe 可执行程序。



双击打开后,你的电脑就开始实时生成画面和音频。



出于好奇心,差评君搜了一下 demo ,发现网上还有类似的存在。

下面这个 2016 年,时长也是两分半的 demo ,大小只有恐怖的 4kb 。

大家可以欣赏下,耳机党注意音量,想跟着音乐摇摆的可以拉满。

怎么说,没看够,可以再看看这个海底探险故事的 demo 。

水纹、光线、阴影、模糊反射与折射、背景音乐要啥有啥,但你能猜到它只有 64kb 吗?

看到这里,你肯定好奇这玩意怎么做到的。

有一个可能比较反认知的事情是:想让电脑播放一段图形和音频,可以完全依靠代码。

我们平时看到的视频,就是一张张图片组成的。那每一张图片怎么组成的呢,就是告诉屏幕在什么位置生成什么颜色。



Demo 也是类似,只是它不和屏幕沟通,而是和 CPU 和 GPU 。两兄弟接收到代码后,要先猛算一下,再把答案告诉屏幕,哪个位置放什么颜色。

运行 demo 时, CPU/GPU 会被拉满



举个简单例子。

我在着色器上输入一行公式:fragColor = vec4 ( 1.0 , 1.0 , 1.0 , 1.0 )

此时计算机会先算出结果,然后告诉屏幕:显示白色。

如果更换括号里的任何数字,我就可以让屏幕显示成千上万种颜色。



那么我想画个彩虹,只需要把稍微复杂一点的公式告诉电脑,电脑算出答案后,再告诉屏幕在哪些位置画哪个颜色就行。

除此之外,纹理、 3D 效果、运动轨迹也能用更复杂的公式让电脑运算出来。

比如在着色器里输入这么几行公式:

vec3 lightAbsorption = pow(mediumColor, vec3(mediumDensity * lightDistance));

vec3 lightIntensity = distanceAttenuation * lightColor * lightAbsorption;

vec3 surfaceAbsorption = pow(mediumColor, vec3(mediumDensity * surfaceDistance));

vec3 surfaceColor = LightEquation(E, N, material) * lightIntensity * surfaceAbsorption;

就大概能生成光源进水后光线变淡,远处更暗的效果。



搞清楚了 demo 的画面是怎么生成,现在再来说它的背景音乐怎么做。毕竟一首 MP3 怎么也得好几 M 吧。

Demo 音乐制作方式有很多种,最主流的是基于 Tracker 。

首先制作者要先采集音频样本,把外界的模拟音频信号转为数字音频信号。而 Tracker 说简单点,就是一个样本排序工具。

世界上第一款 Tracker 工具,采用了一种类似表格的页面。第一个纵列表示时间,另外四个纵列代表旋律、伴奏、低音、打击乐器,下面一个个表格里放的就是样本信息。

我们只要在 Tracker 里调整样本顺序,再调点音量音频,就可以编排出一首歌曲的 “ 乐谱 ” 。

你把这段乐谱交给电脑,它就能播放音乐了。



是不是有点不可思议。

但一开始,差评君并不看好 demo 。

因为视频要做出这种效果并不难,咱觉得牛逼,在于它建立在 4kb 、 8kb 基础上。

除了能证明开发者能敲得一手好代码,demo 似乎没啥商业价值。

所以这顶多就是一两个代码仙人,纯粹为耍酷才会做的事情。

不过在查了一圈后,我发现我错了。

耍酷的人哪里是一两个,分明就是一大波人,甚至多到已经形成一种数字亚文化了。

这种亚文化叫 demoscene ,已经持续 40 多年了。



你不要一听到专业术语就慌,想想小区理发店的托尼老师,想想颗粒度对齐,就一代号而已。

“demoscene ” 直译过来,就是 “ 演示场景 ” 。

其实类似 rap 代表街头说唱文化, demoscene 则代表在聚会玩 demo 的文化。

就像这样:



还有这样:



对,就是一群技艺高超的程序员做着酷炫的 demo ,线下 PK 。

随着差评君继续探索下去,我发现 demoscene 影响力远比我们想象中要大得多。

demoscene 的内核,是不断探索机器性能的极限,尽可能做出高质量的程序。

奉承着 “ 用最少代码,做最酷场景 ” ,在 demoscene 的文化里,那种体积小到可怜,却能让电脑生成顶级画面和效果的 demo 比比皆是。

像这样一个气势磅礴的大作,它的体积只有 4kb 。

还有这个 64kb demo 做出了光追效果。



虽然你明白了 demo 生成图形的原理,但看到这里,你肯定会纳闷它到底为啥只有 64kb ,甚至 4kb ,这里面可都是 3D 模型啊。

我只能说,奇技淫巧只有你想不到的,没有 demoscene 玩家做不到的。

像下面国际象棋和杯子的模型,其实只需要几行复杂的公式就能实现。



我们在左边填写几个横纵坐标,来标记一些散落的点。

接着,敲一段公式让电脑把连成线,这样,就形成了一个



然后我们再用一段公式,让电脑把这些绕着中心轴旋转,那么此时就得到一个立体的棋子 3D 模型了。

这样一个模型有多大呢?一串坐标数字和几行公式。

另外,这些公式可以复用,一套东西你可以用来生成 N 套模型。

如果你仔细观察下图,会发现只有两种形状,立方体和圆柱体。盒子、桌子、墙壁都是变形后的立方体组成的。台灯、铅笔、锤子都是用圆柱体组成。

别看个个都挺有特色的,大家都一个妈生的,顶多就生的姿势不一样。



现在你明白,为什么这些 3D 模型只有这么一点大小了吧。

但这对 demoscene 玩家来说:还不够!得抠!

怎么抠?禁掉 C++ exception 异常!

这个功能是代码出现错误时,可以先抛出一个异常提示而不是直接崩溃,但它会让你多出很多行代码。

别急,还能抠!

敲完代码,再压缩一下代码。

就好比把堆成山的代码打包进一个小箱子,接着在箱子外放一串解压缩代码( 作为钥匙 )。这样计算机要先拿钥匙开启箱子,然后再把代码解读给屏幕。

嗯, CPU 是烧了,但起码代码小了。

嘶嘶。。。



可以说, demoscene 就是一个追求极限的编程修罗场。

在这里,一代代程序员编程技术得以精湛。在 N-Gage 和 OVI 功能手机时代,诺基亚还通过赞助现金鼓励 demoscene 活动举办,给大家磨练技能。

说出来你可能不信, demoscene “ 培养 ” 出的大佬案例多到数不过来。

拿游戏行业举例。

1993 年 Assembly demoparty 上 PC demo 组的冠军作品《 Second Reality 》,来自芬兰团队 Future Crew 。后来 Future Crew 创建了游戏公司 Remedy 。

不熟 ? 他们后来做出了第三人称射击游戏《 马克思佩恩 》



《 战地 》系列闻名的 DICE 游戏工作室,前身就是瑞典 demoscene 团队 The Silents 。

《 愤怒的小鸟 》首席设计师 Jaakko Iisalo ,在 90 年代也是 demoscene 圈内知名人物。

成立于 1998 年 9 月,推出《 杀手 》系列的丹麦游戏公司 IO Interactive ,也是由 demoscene 团队 Reto-Moto 和老牌工作室 Nordisk Film 合并而成。



用一句话概括, demoscene 就是一个欧洲游戏行业的黄埔军校,华尔街青训营。甚至前些年,一些老牌游戏公司的老板还经常参加 demoscene 活动,去挖掘一些编程小天才。

因为 demoscene 的文化影响深远,前两年它甚至被芬兰、德国、波兰、荷兰列入联合国教科文组织国家非物质文化遗产名录,成为第一个被列入非遗的数字亚文化。

Demoscene 玩家庆祝



说实话,光是看到这些 demoscene 光荣事迹,就已经让差评君惊掉下巴了,但在研究完它的起源后,我只能说:焯,下巴掉早了。

被四国申遗的文化,居然是始于盗版游戏的交流会?

时间拉到上个世纪 80 年代。随着家庭电脑的普及,游戏行业也在迅速发展。

那会破解游戏的,大多是一些买不起游戏的小年轻。毕竟买电脑送编程指南,启动游戏都要输入 BASIC 命令的年代,玩着学着就是个野生程序员了。

这些小年轻破解完游戏,会互相分享。那时互联网没普及,交换盗版游戏最快的办法,就是带着软盘去好基友家里复炸粘贴。

当好基友们越来越多,一种被称为 CopyParty 的同城线下聚会出现了。

在这里,大家分享和炫耀最新的破解游戏。



在盗版游戏加载之前,人们往往都会看到一段来自破解团队的动画。

这段动画叫 “ crack-intro ” 破解介绍。

因为破解游戏开发者设下的层层加密手段,对小年轻们来说,是一件非常值得炫耀的事。

这代表着他们在与开发者的技术竞赛中获胜了。

1987 年,盗版 Fairlight 出现的页面



一开始的 crack-intro 呢,就只是写一下游戏是谁谁破解的,提升一下声望,嘚瑟两下就行。



但渐渐地,大家开始在 intro 上卷起来了。

小年轻嘛,年轻气盛,互相之间总想炫技。而除了破解游戏,能展现技术水平的最直观最迅速的办法,只有 intro 环节。

一开始,大家就是单纯比谁能在 intro 里玩到极限,比如每一帧内谁能放满更多的图形元素。到后来开始比谁的文本滚动特效更炫酷,谁的画面和音乐更屌。



甚至到最后, intro 都已经做得和游戏本身没关系了,用的技术都比游戏超前了。

有一天大家就发现,不对啊,这 intro 都成为炫技的重心了,那 intro 也不是非得放在盗版游戏前面不可。

再加上软件游戏行业和司法体系对盗版软件打击越来越严,很快噢,线下 CopyParty 就拆分出一个全新分趴,大家就专注于这种画面、音频的艺术创作。



这种脱离盗版游戏,独立存在的 intro ,后来被统称为 demo 。

Demoscene 文化就这样形成了。



在这个文化成熟的过程中, demo 效果随着硬件发展也逐步提升,团队分工也更加明显,出现了程序员、制图师、音乐制作人,而社区也演变出了几种比赛项目类别。

比如有不限制体积大小,让你随意发挥的 “ DEMO ” 类别,也有限制体积的 4KB-INTRO 、 64KB-INTRO ,还有更小的 1 KB 、甚至是 256 B 、 64 B 类别。



有体积限制,也是因为早期的电脑性能不够,比如销量之王 C64 的 RAM ( 内存 )仅 64 KB。

不过几十年过去了,电脑性能翻了成千上万倍,这些限制级项目并没有被抛弃。

与其说是保持传统,更不如说 demoscene 的存在,就是为了打破束缚和边界,完成不可能完成的任务。

这,就是一种极客精神。



差评君在写这篇文章时,发现和商业公司合作过的 demo 团队屈指可数,而且绝大多数 demoscene 大会要么设立很小的奖品,要么干脆不设。



这种没有商业价值的文化能延续下去,根本原因就在于它非常纯粹。

大家其实不需要什么物质奖励,这里最流通的货币,是声望,是认同。

他们千里迢迢从各个城市奔赴过来,他们最想要的奖品,是大屏幕上播放自己作品时,底下观众能够报以掌声和欢呼。



尽管这一群极客的作品到达了世界级水准,编程水平接近人类极限,但作为一种小众亚文化, demoscene 的公众关注度一直都不高,大部分人的作品都得不到应有的曝光。

但 demoscene 玩家们并不在乎这些。

毕竟爱好从来不是为了取悦别人,能照亮自己的一方小世界就已足够。

就像他们当初喜欢上 demo 的原因:

自由,不用迎合市场和大众的眼光

本文标签: 电脑  动画  KB  游戏  编程  代码  激情大片