无资源游戏:用正弦波实时生成所有画面与音效

一个没有任何资源文件的游戏
在游戏开发领域,我们习惯了这样的流程:美术设计师绘制贴图、音效师录制音频、程序员将这些资源打包进游戏。资源文件往往占据了游戏体积的绝大部分——一款现代3A游戏的安装包动辄上百GB,其中绝大多数空间都被高分辨率纹理、预渲染过场动画和无损音频所占据。然而,独立开发者 Zanzlanz 却完成了一件看似不可能的事——发布了一款完全没有任何资源文件的游戏。
所谓"没有资源",并非夸张的营销话术。这款游戏中的每一张贴图、每一段音效,都不是预先制作并存储在磁盘上的文件,而是在游戏运行时(runtime)通过数学函数实时计算生成的。传统游戏的资源管线(Asset Pipeline)涉及一系列从创作到运行的转换步骤:美术师在DCC工具中创建资源,经过导出、格式转换、压缩、打包等环节,最终在运行时由引擎加载到内存和显存中。这个流程通常还包括LOD(Level of Detail)生成、Mipmap链构建、纹理图集打包等优化步骤。而Zanzlanz的做法则完全跳过了存储环节,将CPU/GPU的计算能力直接转化为内容输出,本质上是用计算时间换存储空间的经典计算机科学权衡。其核心技术手段,正是我们在数学课上都学过的正弦波(Sine Wave)。
正弦波是自然界中最基本的周期性波形,其数学表达式 y = A·sin(2πft + φ) 中,A代表振幅,f代表频率,t代表时间,φ代表初始相位。正弦波之所以在物理学中具有特殊地位,是因为它是简谐运动的数学描述——从弹簧振动到电磁波传播,从量子力学中的波函数到天体轨道的周期性,正弦函数无处不在。欧拉公式 e^(iθ) = cos(θ) + i·sin(θ) 更揭示了正弦波与复指数函数之间的深刻联系,这一关系是现代信号处理的数学基石。
这种做法在技术上极具挑战性,同时也展现了程序化生成(Procedural Generation)在极端场景下的可能性边界。

正弦波如何生成视觉与听觉
声音的本质就是波
从音频角度看,这个思路非常自然。声音在物理上就是空气的振动,而最纯粹的音调恰恰就是一条正弦波。数字音频的采样本质,就是在每个采样点上计算波形的振幅值。以CD品质的音频为例,每秒需要计算44100个采样点的振幅值,每个点的值就是一个简单的数学运算结果:amplitude = A × sin(2π × frequency × t)。
这里的44100Hz采样率并非随意选择的数字。根据奈奎斯特-香农采样定理(Nyquist-Shannon Sampling Theorem),要完整重建一个连续信号,采样频率必须至少是信号最高频率的两倍。由于人耳可感知的频率上限约为20kHz,理论最低采样率为40kHz,而44.1kHz则提供了约10%的安全裕度。这一标准由索尼和飞利浦在1980年代制定CD规格时确立,至今仍是数字音频领域的基准参考,它确保了数字系统能够无损地表达人类听觉范围内的所有频率信息。
除了采样率之外,数字音频的另一个关键参数是比特深度(Bit Depth),它决定了每个采样点可表达的振幅精度。CD标准使用16位量化,提供96dB的动态范围和65536个离散振幅级别;专业音频制作通常使用24位(144dB动态范围)甚至32位浮点格式。在程序化音频生成中,由于数值由数学函数直接计算得到,理论上可以达到任意精度,不受录音设备底噪的限制——这是程序化方法相对于录制方法的一个有趣优势。
通过控制正弦波的频率(决定音高)、振幅(决定音量)以及叠加多个不同频率的波形(决定音色),开发者完全可以在运行时合成出各种音效和音乐,而无需存储任何 WAV 或 MP3 文件。这本质上是一种最基础的波表合成与加法合成技术。
波表合成(Wavetable Synthesis)是一种通过存储单周期波形并以不同速率回放来产生音调的技术,最早应用于1980年代的PPG Wave等硬件合成器。而加法合成(Additive Synthesis)则基于傅里叶定理——任何复杂的周期波形都可以分解为一系列不同频率、振幅和相位的正弦波之和。傅里叶分析的核心思想由法国数学家约瑟夫·傅里叶于1807年提出,这一看似简单的数学发现深刻改变了信号处理、图像压缩、量子力学等众多领域。在实践中,即便只用少量谐波分量,也能产生丰富多变的音色,从模拟管风琴的暖厚到电子蜂鸣的锐利。除加法合成外,还存在减法合成(从谐波丰富的波形中滤除特定频率)、FM合成(通过一个振荡器调制另一个振荡器的频率,由John Chowning于1967年发明,后授权给雅马哈用于著名的DX7合成器)等多种方法。这意味着理论上,通过叠加足够多的正弦分量,可以重建任何声音——这正是Zanzlanz所利用的数学原理。
用数学函数"画"出贴图
更令人惊叹的是视觉部分。将正弦波应用到贴图生成上,需要更巧妙的数学思维。通过对屏幕坐标(x, y)应用正弦函数的组合,可以生成周期性的、渐变的图案。多个不同相位、频率的正弦波叠加后,能够产生条纹、波纹、渐变色块乃至类似云雾的纹理效果。
具体而言,一个简单的木纹效果可以通过类似 color = sin(x * freq1 + sin(y * freq2) * distortion) 的公式实现,其中通过嵌套正弦函数产生非线性扭曲,模拟自然材质的不规则纹理。更复杂的效果则可能需要数十层正弦波的叠加和变换,每一层控制不同尺度的细节。这种多频率叠加的思路与Perlin噪声的分形布朗运动(fBm)方法异曲同工——后者由Ken Perlin于1983年为电影《创》(TRON)开发,通过对多个频率(称为"八度")的平滑随机函数进行叠加来产生自然外观的纹理,至今仍是《Minecraft》等游戏世界生成的核心算法。Perlin因这项发明获得了1997年奥斯卡技术成就奖,此后又发展出计算效率更高的Simplex噪声、适合生成细胞纹理的Worley噪声等变体,这些噪声函数共同构成了程序化纹理生成的基础工具箱。值得注意的是,Zanzlanz的项目仅使用正弦波而非这些更高级的噪声函数,进一步提高了技术约束的严苛程度,也更纯粹地展示了最基本数学工具的表达潜力。
这种技术在图形学中有着悠久传统,早期的 Demoscene(演示场景) 社区就以在极小体积(如 64KB)内塞进华丽的音画演示而闻名,其核心手段之一正是这类程序化生成算法。Demoscene起源于1980年代的欧洲计算机爱好者社区,最初是软件破解组织在游戏开头展示技术能力的"intro"片段,随后演变为独立的数字艺术运动。参与者在严格的文件大小限制内(常见类别包括64KB、4KB甚至1KB)创作实时渲染的音视频演示。2020年,Demoscene被联合国教科文组织认定为非物质文化遗产(首先由德国和芬兰提名)。知名作品如.kkrieger是一款仅96KB的第一人称射击游戏,其所有3D模型、纹理和音乐均由程序实时生成;另一个标志性作品是Farbrausch团队的"fr-041: debris",在177KB内呈现了一段长达数分钟的城市毁灭场景,画面质量堪比同时代商业游戏的过场动画。
Demoscene社区发展出了一系列独特的压缩和生成技术,包括可执行文件压缩器(如Crinkler、kkrunchy)、程序化网格生成、软件光栅化器等。许多Demoscene成员后来成为游戏和图形行业的领军人物:.kkrieger的开发团队Farbrausch成员后来参与了多款商业游戏的开发;Remedy Entertainment(《Control》《心灵杀手》开发商)的多位创始人来自芬兰Demoscene社区;DICE(《战地》系列开发商)的图形程序员中也有大量Demoscene背景的人才。这个社区培养的底层优化思维和对硬件极限的追求,深刻影响了现代实时渲染技术的发展方向——Zanzlanz的项目正是站在这一技术传统的肩膀上。
为什么这件事值得关注
极致的体积压缩
最直接的收益是游戏体积。当所有内容都由代码生成时,游戏的"资源"实际上就是那几行数学公式。这意味着整个游戏可以被压缩到极小的尺寸,在追求极限的技术挑战和某些特殊分发场景下具有实际意义。
要理解这种压缩的惊人程度,可以做一个对比:一张1024×1024的未压缩RGBA纹理占据4MB存储空间,而生成同等复杂度纹理的数学公式可能只需要几百字节的代码。这意味着理论上的压缩比可以达到数万倍。这种压缩与传统的图像压缩算法(如JPEG、PNG)有本质区别——后者仍需存储某种形式的数据,只是用更紧凑的编码方式;而程序化生成则完全用算法替代了数据,本质上是将"信息"编码为"过程"。这一思想与柯尔莫哥洛夫复杂度(Kolmogorov Complexity)的概念密切相关——一段数据的柯尔莫哥洛夫复杂度被定义为能够输出该数据的最短程序的长度。程序化生成的纹理之所以能被如此极端地"压缩",正是因为它们具有低柯尔莫哥洛夫复杂度——即存在简短的程序(数学公式)可以完整描述它们。在网络带宽受限的早期互联网时代,以及当今物联网设备存储空间极度有限的场景下,这种技术有着超越艺术表达的实用价值。
技术教育价值
据社区用户的反馈,开发过程介绍视频质量很高,并且将复杂的数学概念解释得清晰易懂。这正是此类项目最大的价值所在——它把抽象的三角函数、傅里叶思想、信号处理等知识,转化为看得见、听得到的具体成果。
对于学习图形学和音频编程的开发者而言,这是一个极佳的教学案例:它剥离了引擎和资源管线的复杂性,让人直面"内容从何而来"这一根本问题。在现代游戏引擎(如Unity或Unreal Engine)高度封装底层细节的今天,许多开发者对内容的数学本质缺乏直觉理解。这类项目迫使学习者回到最底层:一个像素的颜色值从何而来?一个音频采样点的数值如何确定?这种"第一性原理"式的思考方式,与Elon Musk等技术领袖反复强调的思维方法一脉相承——不是依赖现成的抽象层和工具链,而是从最基本的物理和数学定律出发推导解决方案。在教育层面,类似的项目还有Daniel Shiffman的《The Nature of Code》和3Blue1Brown的数学可视化系列,它们共同构成了一个用代码理解数学、用数学创造艺术的学习生态。
程序化生成的启示与局限
创意约束下的独特表达
这个项目提醒我们,技术约束往往能激发创造力。当开发者放弃了传统的美术资源,转而只用数学函数表达时,反而形成了一种独特的、统一的视听风格。这种"约束驱动的美学"在独立游戏和艺术编程领域一直备受推崇。
历史上不乏类似的例子:早期8位游戏机的调色板限制催生了像素艺术的独特魅力;芯片音乐(Chiptune)在极度有限的声道数下发展出了独特的音乐风格——早期红白机(NES)仅有5个音频通道(2个脉冲波、1个三角波、1个噪声和1个采样),作曲家在这种极端限制下创作出了如《超级马里奥兄弟》《塞尔达传说》等至今仍被传唱的经典旋律;Twitter上的140字符限制曾催生出"Tweetcart"——在一条推文长度内写出完整的图形程序。在视觉艺术领域,Oulipo文学运动(潜在文学工坊)的作家们自愿施加严格的形式约束来激发创作,如Georges Perec的小说《La Disparition》全文不使用字母"e"。约束不仅不是创造力的敌人,反而常常是其最好的催化剂——心理学研究也证实,适度的约束条件能减少决策疲劳,帮助创作者更快进入心流状态。
现实开发中的取舍
这种极端做法在商业游戏中并不实用。实时计算所有贴图和音效会带来性能开销,而且用正弦波生成的内容在艺术表现力上有明显天花板——很难用它画出一个精致的角色立绘。因此,主流做法仍是"混合模式":用程序化生成处理地形、纹理细节、环境音等重复性内容,用手工资源处理需要精细控制的关键元素。
不过,值得注意的是现代GPU的片段着色器(Fragment Shader)天然适合这类逐像素的数学运算,因为GPU拥有数千个并行计算核心,可以同时对屏幕上所有像素执行相同的数学函数。这种架构被称为SIMD(Single Instruction, Multiple Data),即用一条指令同时处理大量数据——现代GPU如NVIDIA RTX 4090拥有超过16000个CUDA核心,理论上可以同时对数万个像素执行相同的数学公式。着色器程序使用GLSL(OpenGL Shading Language)、HLSL(DirectX)或Metal Shading Language等专用语言编写,这些语言提供了丰富的内建数学函数(sin、cos、smoothstep、mix等),使程序化纹理的编写变得简洁高效。
Shadertoy等在线平台上,开发者仅用几十行GLSL代码就能实时渲染出照片级真实感的场景。Shadertoy由Inigo Quilez(前Pixar技术总监)和Pol Jeremias于2013年创建,已积累超过70万个着色器作品,成为程序化图形艺术的重要社区和学习资源。其中大量作品使用Ray Marching(光线步进)技术——一种通过沿视线方向逐步前进来寻找表面交点的渲染方法,特别适合渲染由数学函数(称为Signed Distance Function/SDF)定义的几何体。与传统的多边形光栅化不同,SDF方法可以用简洁的数学表达式描述无限精细的几何细节——球体只需一个减法,环面只需几行代码,通过布尔运算和平滑混合可以组合出任意复杂的形状。Inigo Quilez在其个人网站上记录了超过100种SDF原语和操作函数,形成了一个完整的程序化建模工具包。
在商业领域,《No Man's Sky》通过程序化算法生成了超过18万亿颗行星,每颗行星都有独特的地形、生态和色彩方案;Houdini等DCC工具中的程序化工作流已成为3A游戏美术制作的标准流程,允许美术师通过参数化规则而非逐像素手绘来创建大规模环境。这种方法已经被应用于游戏中的体积云渲染(如《地平线:零之曙光》)和电影级特效制作中。然而,复杂的程序化计算仍可能导致帧率下降,特别是在需要大量迭代(如光线步进中的数百次步进)的场景下,因此实际应用中常采用预计算缓存策略——将程序化生成的结果"烘焙"为传统纹理,在运行时直接查询而非重新计算——来平衡质量与性能。
结语
Zanzlanz 的这款"无资源游戏",与其说是一款完整的商业作品,不如说是一次精彩的技术实验和数学艺术表达。它用最基础的正弦波,验证了程序化生成在音画两个维度上的潜力,也为开发者社区提供了一个学习图形与音频底层原理的优秀样本。
在 AI 生成内容席卷行业的今天,这种回归数学本源、用纯粹算法"凭空造物"的方式,反而透出一种别样的工程浪漫主义。当我们越来越依赖大型语言模型和扩散模型来生成内容时,或许偶尔也值得停下来思考:一条正弦曲线,究竟能走多远?AI生成方法(如扩散模型Stable Diffusion、DALL-E)通过学习海量训练数据的统计规律来产生新内容,本质上是数据驱动的黑箱过程;而程序化生成是规则驱动的白箱方法,每个输出都可以用确定性的数学关系精确解释和复现。两种范式各有优劣:AI方法易于产生自然、多样且超出人类设计能力的结果,但难以精确控制且需要大量计算资源和训练数据;程序化方法提供完全的可控性、可复现性和极低的存储需求,但设计复杂效果需要深厚的数学功底和大量手工调参。未来最有前途的方向,或许是两者的融合——用AI辅助发现程序化生成的参数和规则,或用程序化方法为AI生成提供可控的骨架结构。这种融合已经初现端倪:研究者正在探索用神经网络学习SDF表示(Neural SDF)、用强化学习优化程序化生成规则、以及用可微分渲染将程序化管线接入深度学习训练流程,让数学之美与数据之力共同塑造下一代数字内容创作的面貌。
相关推荐
观点碰撞Scaling Law再思考:参数不是唯一答案
深度解析Scaling Law从Kaplan到Chinchilla再到MoE时代的演进历程,探讨为什么盲目堆参数是误区,以及GLM-5.3如何通过后训练证明扩展存在多个旋钮。

本地AI Agent部署太慢?轻量级优化实战指南
本地部署AI Agent速度慢、频繁超时?本文从Agent框架隐藏开销、硬件瓶颈出发,提供精简配置、轻量工具选择、模型量化等针对性优化方案,并介绍通过Telegram Bot远程交互的实用技巧。

AI专业选电脑:MacBook还是NVIDIA笔记本?深度对比指南
AI专业大学生选电脑深度分析:MacBook Air M5搭配远程GPU vs NVIDIA独显笔记本,从CUDA支持、便携性、续航、性价比等维度全面对比,附实操建议。