如果你打开这篇文章并迅速滑到最后,那么恭喜,就在刚刚,你被消耗了 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 的原因:
自由,不用迎合市场和大众的眼光