![](https://www.ch-news.com/wp-content/uploads/2024/02/7a7bbd0678a2407ebb255051565e64ce.gif)
如果你打開這篇文章並迅速滑到最後,那麼恭喜,就在剛剛,你被消耗了 43 mb 的流量。
這個流量,可以讓你刷 5 個短視頻。
循環 12 遍 MP3 格式的《 只因你太美 》。
保存 3400 張「 差評 」二字的 GIF。
或者下載 5500 次,時長 2 分半,名為《 羊與花 》的動畫視頻。
差評君可沒寫錯。
因為這個視頻大小隻有——8kb。
![](https://www.ch-news.com/wp-content/uploads/2024/04/9891f8dc17864dd184eab96520ec1680.gif)
這個 「 視頻 」 是差評君沖浪時無意發現的,不過,它的准確說法並不是 「 視頻 」 ,而是 「 demo 」 演示( 不是游戲 demo )。
看到這,可能有差友要拍大腿了:如果 D 盤用 demo 來存資料,豈不是。。。
別急嘛,差評君保證你不會用它來學習的。
因為它不能快進: (
demo 的格式並不是各位熟悉的 mp4 、 avi ,而是 exe 可執行程序。
![](https://www.ch-news.com/wp-content/uploads/2024/04/b8b8003e24ed4ea4a4324a2a49a37e93.jpg)
雙擊打開後,你的電腦就開始實時生成畫面和音頻。
![](https://www.ch-news.com/wp-content/uploads/2024/04/de28650d19e6450cb9901975059a71f8.gif)
出於好奇心,差評君搜了一下 demo ,發現網上還有類似的存在。
下面這個 2016 年,時長也是兩分半的 demo ,大小隻有恐怖的 4kb 。
大家可以欣賞下,耳機黨注意音量,想跟着音樂搖擺的可以拉滿。
怎麼說,沒看夠,可以再看看這個海底探險故事的 demo 。
水紋、光線、陰影、模糊反射與折射、背景音樂要啥有啥,但你能猜到它只有 64kb 嗎?
看到這里,你肯定好奇這玩意怎麼做到的。
有一個可能比較反認知的事情是:想讓電腦播放一段圖形和音頻,可以完全依靠代碼。
我們平時看到的視頻,就是一張張圖片組成的。那每一張圖片怎麼組成的呢,就是告訴屏幕在什麼位置生成什麼顏色。
![](https://www.ch-news.com/wp-content/uploads/2024/04/d71a56c0d06145348aa10a947744b4d2.jpg)
Demo 也是類似,只是它不和屏幕溝通,而是和 CPU 和 GPU 。兩兄弟接收到代碼後,要先猛算一下,再把答案告訴屏幕,哪個位置放什麼顏色。
運行 demo 時, CPU/GPU 會被拉滿 ▼
![](https://www.ch-news.com/wp-content/uploads/2024/04/0c8a3fb2b8c34b599821471d56f7305e.jpg)
舉個簡單例子。
我在着色器上輸入一行公式:fragColor = vec4 ( 1.0 , 1.0 , 1.0 , 1.0 )
此時計算機會先算出結果,然後告訴屏幕:顯示白色。
如果更換括號里的任何數字,我就可以讓屏幕顯示成千上萬種顏色。
![](https://www.ch-news.com/wp-content/uploads/2024/04/110bc8bcee2d4df2bca31e3267a8bf8b.gif)
那麼我想畫個彩虹,只需要把稍微復雜一點的公式告訴電腦,電腦算出答案後,再告訴屏幕在哪些位置畫哪個顏色就行。
除此之外,紋理、 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;
就大概能生成光源進水後光線變淡,遠處更暗的效果。
![](https://www.ch-news.com/wp-content/uploads/2024/04/8e801b875ec04c6c8a12702b6c28bb19.jpg)
搞清楚了 demo 的畫面是怎麼生成,現在再來說它的背景音樂怎麼做。畢竟一首 MP3 怎麼也得好幾 M 吧。
Demo 音樂製作方式有很多種,最主流的是基於 Tracker 。
首先製作者要先採集音頻樣本,把外界的模擬音頻信號轉為數字音頻信號。而 Tracker 說簡單點,就是一個樣本排序工具。
世界上第一款 Tracker 工具,採用了一種類似表格的頁面。第一個縱列表示時間,另外四個縱列代表旋律、伴奏、低音、打擊樂器,下面一個個表格里放的就是樣本信息。
我們只要在 Tracker 里調整樣本順序,再調點音量音頻,就可以編排出一首歌曲的 「 樂譜 」 。
你把這段樂譜交給電腦,它就能播放音樂了。
![](https://www.ch-news.com/wp-content/uploads/2024/04/81e5aa910c2a4ffca0e42ea898ced844.jpg)
是不是有點不可思議。
但一開始,差評君並不看好 demo 。
因為視頻要做出這種效果並不難,咱覺得牛逼,在於它建立在 4kb 、 8kb 基礎上。
除了能證明開發者能敲得一手好代碼,demo 似乎沒啥商業價值。
所以這頂多就是一兩個代碼仙人,純粹為耍酷才會做的事情。
不過在查了一圈後,我發現我錯了。
耍酷的人哪裡是一兩個,分明就是一大波人,甚至多到已經形成一種數字亞文化了。
這種亞文化叫 demoscene ,已經持續 40 多年了。
![](https://www.ch-news.com/wp-content/uploads/2024/04/4f3f714c8a514b6d96e0f2cce5ba1c21.jpg)
你不要一聽到專業術語就慌,想想小區理發店的托尼老師,想想顆粒度對齊,就一代號而已。
「demoscene 」 直譯過來,就是 「 演示場景 」 。
其實類似 rap 代表街頭說唱文化, demoscene 則代表在聚會玩 demo 的文化。
就像這樣:
![](https://www.ch-news.com/wp-content/uploads/2024/04/d023d4def23f46c39e30862ef5772156.jpg)
還有這樣:
![](https://www.ch-news.com/wp-content/uploads/2024/04/ccf806f7456544bfb52293c05365693c.jpg)
對,就是一群技藝高超的程序員做着酷炫的 demo ,線下 PK 。
隨着差評君繼續探索下去,我發現 demoscene 影響力遠比我們想象中要大得多。
demoscene 的內核,是不斷探索機器性能的極限,盡可能做出高質量的程序。
奉承着 「 用最少代碼,做最酷場景 」 ,在 demoscene 的文化里,那種體積小到可憐,卻能讓電腦生成頂級畫面和效果的 demo 比比皆是。
像這樣一個氣勢磅礴的大作,它的體積只有 4kb 。
還有這個 64kb demo 做出了光追效果。
![](https://www.ch-news.com/wp-content/uploads/2024/04/2a7eb7962bbb40a2879dd5d0cd5101d7.gif)
雖然你明白了 demo 生成圖形的原理,但看到這里,你肯定會納悶它到底為啥只有 64kb ,甚至 4kb ,這裡面可都是 3D 模型啊。
我只能說,奇技淫巧只有你想不到的,沒有 demoscene 玩家做不到的。
像下面國際象棋和杯子的模型,其實只需要幾行復雜的公式就能實現。
![](https://www.ch-news.com/wp-content/uploads/2024/04/9214ef77a9c94efbb4b775c29da26425.jpg)
我們在左邊填寫幾個橫縱坐標,來標記一些散落的點。
接着,敲一段公式讓電腦把點連成線,這樣,就形成了一個面。
![](https://www.ch-news.com/wp-content/uploads/2024/04/6cc3b7003d50420a86c16a9ccf851178.jpg)
然後我們再用一段公式,讓電腦把這些面繞着中心軸旋轉,那麼此時就得到一個立體的棋子 3D 模型了。
這樣一個模型有多大呢?一串坐標數字和幾行公式。
另外,這些公式可以復用,一套東西你可以用來生成 N 套模型。
如果你仔細觀察下圖,會發現只有兩種形狀,立方體和圓柱體。盒子、桌子、牆壁都是變形後的立方體組成的。台燈、鉛筆、錘子都是用圓柱體組成。
別看個個都挺有特色的,大家都一個媽生的,頂多就生的姿勢不一樣。
![](https://www.ch-news.com/wp-content/uploads/2024/04/8786e055c393454f8aa6a58dd4d09c9c.jpg)
現在你明白,為什麼這些 3D 模型只有這麼一點大小了吧。
但這對 demoscene 玩家來說:還不夠!得摳!
怎麼摳?禁掉 C exception 異常!
這個功能是代碼出現錯誤時,可以先拋出一個異常提示而不是直接崩潰,但它會讓你多出很多行代碼。
別急,還能摳!
敲完代碼,再壓縮一下代碼。
就好比把堆成山的代碼打包進一個小箱子,接着在箱子外放一串解壓縮代碼( 作為鑰匙 )。這樣計算機要先拿鑰匙開啟箱子,然後再把代碼解讀給屏幕。
嗯, CPU 是燒了,但起碼代碼小了。
嘶嘶。。。
![](https://www.ch-news.com/wp-content/uploads/2024/04/645b4758fbe442b3b04d1cccfefae845.jpg)
可以說, demoscene 就是一個追求極限的編程修羅場。
在這里,一代代程序員編程技術得以精湛。在 N-Gage 和 OVI 功能手機時代,諾基亞還通過贊助現金鼓勵 demoscene 活動舉辦,給大家磨練技能。
說出來你可能不信, demoscene 「 培養 」 出的大佬案例多到數不過來。
拿游戲行業舉例。
1993 年 Assembly demoparty 上 PC demo 組的冠軍作品《 Second Reality 》,來自芬蘭團隊 Future Crew 。後來 Future Crew 創建了游戲公司 Remedy 。
不熟 ? 他們後來做出了第三人稱射擊游戲《 馬克思佩恩 》。
![](https://www.ch-news.com/wp-content/uploads/2024/04/e35c34b0178c4be7a649a1602bcc4094.jpg)
以《 戰地 》系列聞名的 DICE 游戲工作室,前身就是瑞典 demoscene 團隊 The Silents 。
《 憤怒的小鳥 》首席設計師 Jaakko Iisalo ,在 90 年代也是 demoscene 圈內知名人物。
成立於 1998 年 9 月,推出《 殺手 》系列的丹麥游戲公司 IO Interactive ,也是由 demoscene 團隊 Reto-Moto 和老牌工作室 Nordisk Film 合並而成。
![](https://www.ch-news.com/wp-content/uploads/2024/04/526963a492254472bee1602b4497af80.jpg)
用一句話概括, demoscene 就是一個歐洲游戲行業的黃埔軍校,華爾街青訓營。甚至前些年,一些老牌游戲公司的老闆還經常參加 demoscene 活動,去挖掘一些編程小天才。
因為 demoscene 的文化影響深遠,前兩年它甚至被芬蘭、德國、波蘭、荷蘭列入聯合國教科文組織國家非物質文化遺產名錄,成為第一個被列入非遺的數字亞文化。
Demoscene 玩家慶祝 ▼
![](https://www.ch-news.com/wp-content/uploads/2024/04/ec958b9a256a4bb380702760831afcba.jpg)
說實話,光是看到這些 demoscene 光榮事跡,就已經讓差評君驚掉下巴了,但在研究完它的起源後,我只能說:焯,下巴掉早了。
被四國申遺的文化,居然是始於盜版游戲的交流會?
時間拉到上個世紀 80 年代。隨着家庭電腦的普及,游戲行業也在迅速發展。
那會破解游戲的,大多是一些買不起游戲的小年輕。畢竟買電腦送編程指南,啟動游戲都要輸入 BASIC 命令的年代,玩着學着就是個野生程序員了。
這些小年輕破解完游戲,會互相分享。那時互聯網沒普及,交換盜版游戲最快的辦法,就是帶着軟盤去好基友家裡復炸粘貼。
當好基友們越來越多,一種被稱為 CopyParty 的同城線下聚會出現了。
在這里,大家分享和炫耀最新的破解游戲。
![](https://www.ch-news.com/wp-content/uploads/2024/04/da7e97d7d3c04d7b858f57a45aa7518a.gif)
在盜版游戲加載之前,人們往往都會看到一段來自破解團隊的動畫。
這段動畫叫 「 crack-intro 」 破解介紹。
因為破解游戲開發者設下的層層加密手段,對小年輕們來說,是一件非常值得炫耀的事。
這代表着他們在與開發者的技術競賽中獲勝了。
1987 年,盜版 Fairlight 出現的頁面 ▼
![](https://www.ch-news.com/wp-content/uploads/2024/04/a0d4f36dd2d44b83b78add2b8ca4aadf.jpg)
一開始的 crack-intro 呢,就只是寫一下游戲是誰誰破解的,提升一下聲望,嘚瑟兩下就行。
![](https://www.ch-news.com/wp-content/uploads/2024/04/a2e50479db214c6198de7b629f2e4c24.jpg)
但漸漸地,大家開始在 intro 上捲起來了。
小年輕嘛,年輕氣盛,互相之間總想炫技。而除了破解游戲,能展現技術水平的最直觀最迅速的辦法,只有 intro 環節。
一開始,大家就是單純比誰能在 intro 里玩到極限,比如每一幀內誰能放滿更多的圖形元素。到後來開始比誰的文本滾動特效更炫酷,誰的畫面和音樂更屌。
![](https://www.ch-news.com/wp-content/uploads/2024/04/7787fc516d7142b4bebd2650e0b8cfa8.gif)
甚至到最後, intro 都已經做得和游戲本身沒關系了,用的技術都比游戲超前了。
有一天大家就發現,不對啊,這 intro 都成為炫技的重心了,那 intro 也不是非得放在盜版游戲前面不可。
再加上軟件游戲行業和司法體系對盜版軟件打擊越來越嚴,很快噢,線下 CopyParty 就拆分出一個全新分趴,大家就專注於這種畫面、音頻的藝術創作。
![](https://www.ch-news.com/wp-content/uploads/2024/04/6713babb3ead46de80652a640fde39a7.gif)
這種脫離盜版游戲,獨立存在的 intro ,後來被統稱為 demo 。
Demoscene 文化就這樣形成了。
![](https://www.ch-news.com/wp-content/uploads/2024/04/d2b7f6ac3b304722a129f547bc601a4d.jpg)
在這個文化成熟的過程中, demo 效果隨着硬件發展也逐步提升,團隊分工也更加明顯,出現了程序員、制圖師、音樂製作人,而社區也演變出了幾種比賽項目類別。
比如有不限制體積大小,讓你隨意發揮的 「 DEMO 」 類別,也有限制體積的 4KB-INTRO 、 64KB-INTRO ,還有更小的 1 KB 、甚至是 256 B 、 64 B 類別。
![](https://www.ch-news.com/wp-content/uploads/2024/04/3249ce8ad2ba4a87afa433ceded69e2d.jpg)
有體積限制,也是因為早期的電腦性能不夠,比如銷量之王 C64 的 RAM ( 內存 )僅 64 KB。
不過幾十年過去了,電腦性能翻了成千上萬倍,這些限制級項目並沒有被拋棄。
與其說是保持傳統,更不如說 demoscene 的存在,就是為了打破束縛和邊界,完成不可能完成的任務。
這,就是一種極客精神。
![](https://www.ch-news.com/wp-content/uploads/2024/04/a7789e7a47014a5eb708983b656aa178.jpg)
差評君在寫這篇文章時,發現和商業公司合作過的 demo 團隊屈指可數,而且絕大多數 demoscene 大會要麼設立很小的獎品,要麼乾脆不設。
![](https://www.ch-news.com/wp-content/uploads/2024/04/df394d8727d84d759c0c293d9847e133.jpg)
這種沒有商業價值的文化能延續下去,根本原因就在於它非常純粹。
大家其實不需要什麼物質獎勵,這里最流通的貨幣,是聲望,是認同。
他們千里迢迢從各個城市奔赴過來,他們最想要的獎品,是大屏幕上播放自己作品時,底下觀眾能夠報以掌聲和歡呼。
![](https://www.ch-news.com/wp-content/uploads/2024/04/ef73908c0b494af29409922ffe09e11c.jpg)
盡管這一群極客的作品到達了世界級水準,編程水平接近人類極限,但作為一種小眾亞文化, demoscene 的公眾關注度一直都不高,大部分人的作品都得不到應有的曝光。
但 demoscene 玩家們並不在乎這些。
畢竟愛好從來不是為了取悅別人,能照亮自己的一方小世界就已足夠。
就像他們當初喜歡上 demo 的原因:
自由,不用迎合市場和大眾的眼光