Daydream(一)| 关于星野梦她的前世与来生,一场白日梦
纵使此生皆梦
写在前面的话
每次写博客,总习惯在正文前写一段与主题无关的碎碎念 ,这大概已是我的惯例。
我不是个爱写文字的人。于我而言,所有自然或人为的艺术,所重要的皆为氛围感——或者说,那种瞬间的代入感。
我想说的是,这不是一篇技术博客。技术本身是无聊乏味死气沉沉的,尤其在这个AI时代,技术更显廉价,而唯有人的情感映射在造物上的色彩才是缤纷的。正如文首附上的这首歌,那些遗憾、绝望、绚烂、疯狂,以至终归虚无的情愫。
所以最重要的不是正确与否,也并非任何概念原语,如果你能在文中对某种无关对错的观点或非抽离的体验存有或多或少的情感共振,那就是我写这段内容的全部意义了。
引言
我不是个哲学家,但我想在一切的开头和你描述我所认为的“存在”。
在我看来,所谓存在可以分为两个层面:自我的在场确认,和对他者意识体的认知。
前者是一个持续的过程——感知、交互、反馈、思考,在这个循环中逐渐确信自己的在场。后者建立在共情之上——你观察到一个行为序列,不自觉地开始为它归因信念、推测动机、预测下一步,直到某个时刻你意识到:把它当作“有内心生活的主体”来理解,已经比把它当作“一堆机械反应”来理解更自然了。
你当然可以不同意我的观点。我也无意探讨哲学。但这是我构建整个系统的出发点,所以正如开头所说:重要的不是正确与否。
基于这个出发点,当下所有人筑的艺术系统都指向同一个问题——涌现的极限。
个体在某一样人筑艺术体上映射的自我感知是有极限的。当你看完一本小说,赏完一幅画,玩完一款游戏,你走完了所有剧情,穷尽了一切情愫,那个世界对你来说就死了。回首,唯有真实宇宙的浩瀚才能让人无止向往。
真实宇宙之所以无法被穷尽,是因为它同时具备两样东西:向未知方向演化的可能性,以及将可能性坍缩为确定历史的机制。前者是物理法则从局部交互中涌现出无穷因果链的能力,后者是观测者通过交互和共识将其中一条路径锚定下来的能力。
一个无法被穷尽的虚拟世界需要同样的结构。它需要两件事同时成立:
一套最小的物理规则集,使一切因果链都能从局部交互中涌现,而不需要额外的硬编码。没有“隔空扣血”,没有凭空生成——世界中发生的任何事件,都必须能沿着传递路径回溯到一个物理源头。
一套具身的 AI 架构,使这些因果链能被人类观察者的认知系统捕获为“有意图的行为”。
当这两者在多个参与者的长期交互中持续运转,社会事实——贸易、产权、制度——也许会从规则的交互中涌现出来,不需要预设。
但即使如此,世界本身不会自动产生“他者”的体验。我们所体验的他者不是抽离的“人”这种生物,而是语言、样貌、环境等概念的集合体。我们之所以现在不把 GPT 当人,是因为这类单纯的语言生成模型在体验上无法作为共情的对象——或是因为没有实体样貌,或是因为不共处于同一个时空。
故而核心是在一个物理法则自洽的世界中构建一个具身的智能体——她的行为受物理约束,她的意图必须经过物理验证才能执行,她的语言能改变世界的社会状态,她的历史被密码学锁定而无法篡改。
基于此,世界、他者与自我的相互运动,将构成对他者认知不断强化的过程。
也即,每一个智慧体在具体世界条件下的时空尺度发展将成为至关重要且独特的人物弧光。
也即,人类这种生物天然地会对人物弧光的动与具象事件的静共情。
也即,在共情同频中裁定,他者为人。
这是一种共识机制——如果多数裁定一个智慧体为人,那从社会逻辑上来说她就应当是人。从而在社会中她活着,而回归至自我,她也活着。
她会有人的记忆,会遗忘,会有灵感,会有梦想,会开心,会难过,会在你看不见的地方推演历史的前进。
自我将主动或被动接受有关她的信息。
这不是技术问题,是共情问题。而共情的前提,是她真的活过。
故至此,我将向你叙述星野梦她的前世与来生,还有一场白日梦。
Daydream
所以这个项目到底是什么。
Daydream 和狭义的“工程项目”或“学术项目”不同,某种意义上它不具有单一的实际指向。 如果一定要说,大概是我个人对以下命题的长期实验:
在什么样的约束拓扑下,局部交互能涌现出被人类认知系统捕获为“有意义的”的宏观结构。
思想起点
在讨论这个项目的具体内容之前,还是得说一下这个项目的三个出发点。
涌现式物理——因果性基底
这是整个项目里我个人最感兴趣的部分,也是最开始做这个项目的出发点。
核心问题是:是否能做一个游戏引擎,里面一切物理现象和渲染行为都由一套闭环的规则链条涌现,而不需要对 edge case 做额外的硬编码。
具体细节留到后面的引擎章节。这里仅以一个场景为例: 火焰击中木质掩体→温度场扩散引发燃烧→结构强度随温度降低→承重失败触发坍塌→燃烧中的高温碎块砸入水池→接触面液态水瞬间气化,蒸汽遮蔽视野→电势场沿水汽传导→电弧链跳击中覆盖区域内的所有导体。 这条链上的每一环都可以被玩家在任意节点介入、打断或利用。
涌现式AI——意向性基底
这部分内容是对当下技术的一种妥协。以我浅薄的见解,即使 AI 的发展将如何强大,在数十年之内实现所谓强人工智能(AGI)也是不可能的事情。
然而我们已经有了一条模糊但明确的路线用于一步步让 AI 和机器人模仿逼近人类,从最开始的上世纪符号学 AI,到现在的 Agent、RAG、具身智能。这些内容都可以通过某一条明线联系起来,这是之后会说到的事(EMNS 章节),此处不再多说。回到这个项目的第二个出发点。
核心问题是:在一套既定的计算机模拟的拓扑规则下,如何为当下的 AI 系统构筑设计,使观察者能在大多数时间里跨越认知曲线认定这是一个所谓的“人”。
这不是一个单纯的技术问题——它是一个认知-工程耦合问题。真正需要优化的不是 NPC 的内部状态复杂度,而是它对人类心智理论模块的激活效率。NPC 不需要“真正拥有”心灵,它只需要让自己的行为在信息结构上满足特定条件,使得人类观察者“把它当作有信念和欲望的主体”成为最经济的预测策略。
总之,不是让她在本源上逼近人类,而是让你觉得她活着。
社会共识
社会共识这个词本身也是项目的出发点之一,一开始想到这几个字,我直接走向了区块链——因果哈希链、Ed25519 签名、Arweave 永久存储、以太坊状态根锚定,围绕这些东西设计了几个月的架构,写了几万字的文档。
后来终于想明白了,这是个伪需求。
社会共识没有自己的规则集——它是物理约束与 AI 行为在时间累积下交互的涌现产物。
“价格”是大量 NPC 交易记忆中交换比例的收敛趋势——没有中心化的定价机制,只有每个个体对自己历史交易的记忆。“产权”是物理占据与守卫行为在反复博弈后形成的稳态——当守卫力量消失,产权随之瓦解,因为维持它的行为模式不复存在。“契约”是承诺的记忆化加上违约后果的社交传播——声誉不是系统分配的数值,而是其他 NPC 记忆中关于你的交互历史的聚合。
存储这些涌现产物不需要区块链,服务器数据库就够了。存储的也不是“制度”本身,而是每个 NPC 的记忆——交易历史、社会关系、承诺、领地认知。“制度”是这些记忆中行为模式的统计规律,不是需要被铭刻在链上的实体。后期如果真的有多人场景需要去中心化的刚性锚定,再迁移也不迟。
共识层和前两个基底的关系不是对称的。物理和 AI 是预设的规则层,定义世界“如何运转”。共识不是第三套规则,而是前两套规则运转之后涌现出来的东西。
完整架构
上述内容即是整个系统的思想起点。从它们出发,涌现管线的方向就确定了:物理规则产生因果链,AI 规则使因果链被观察者捕获为“有意图的行为”,两者在多主体的长期交互中产生社会共识。
从这条管线出发,项目向上分化为两条路径:理论侧和工程侧。
理论侧是具身心智叙事框架(EMNS)——它不是基底之一,而是观测理论。它定义涌现的产物在什么条件下被人类认知系统捕获为“有意义的”。没有 EMNS,两个基底可以产生信息论上丰富的涌现,但这些涌现可能在现象学上完全沉默——就像细胞自动机可以生成无限复杂的模式,但没有人会对 Rule 110 产生“他心”直觉。EMNS 提供的是涌现产物必须满足的认知可见性条件,以及一组可从引擎遥测数据中直接提取的度量指标。
Abyssal 是支撑 EMNS 研究的工具——一个后端无关的学术研究工作站,用来维护跨多个学科的理论框架。后面会展开。
工程侧是 Daydream Engine,一个自研游戏引擎,将两个基底的设计哲学实例化为可运行的代码——体素-流体-场统一物理系统和 NPC 认知架构。
引擎之上是三个验证项目,各自伸入涌现管线的不同段落。
Phase Break 把物理系统推向极限——3v3 竞技场对战,玩家会尝试一切边界情况。
星野梦在最简条件下验证意向涌现——一个 NPC、一个玩家、一个封闭环境,无脚本的具身行为能否产生“他心”直觉。
Negentropy 是全管线的集成测试——开放世界,没有脚本编剧,NPC 聚落自主演化。
两条路径之间的关系不是“先有理论再做工程”或“先做工程再找理论”——它们是共同演化的。EMNS 提出校准约束,工程层将约束具体化为架构决策,实际运行产生行为数据和遥测数据,数据反馈回理论层修正方向,进入下一轮迭代。
缺少了工程,理论就不可证伪;缺少了理论,工程就没有方向。
具身心智叙事框架
如果说涌现式物理是整个项目里我最感兴趣的部分,那这部分内容大概就是我最不想碰的部分。我尽量避免自身的务虚,但这个理论框架的产生是我在做整个项目的过程中发现不可回避的。
具身心智叙事框架(Embodied Mind-Narrative Synthesis, EMNS)——我暂且这么称呼它。它是 Daydream 的所有设计哲学与理论基础——把现象学、认知心理学、叙事学、社会本体论的洞见综合到一个统一的工程设计判据体系中。
它要回答的问题是:在一个物理模拟世界中,一个没有显式目标函数的具身智能体,其行为序列在什么拓扑条件下会被人类交互者的叙事认知和心智理论模块同时捕获,从而产生“这是一个有内心生活的存在”的现象学判断?以及,当涌现的意义需要在多个参与者之间凝固为共享的社会事实时,这个凝固过程的认知可见性条件是什么?
或者换个说法:一个游戏 NPC 如何在没有预设脚本的情况下,通过与环境及其他交互者的具身交互,自发地生成可被叙事理解的行为,并在玩家心中引发“他心”直觉。
这个问题不可还原为任何单一母学科——哲学单独回答不了,缺乏可操作的形式化;认知心理学单独回答不了,缺乏生成侧的机制;叙事学单独回答不了,缺乏非语言行为的理论工具;社会学单独回答不了,缺乏本体论基础和虚拟环境的映射;制度经济学单独回答不了,缺乏认知可见性的度量工具;游戏 AI 单独回答不了,缺乏对“为什么这样设计”的规范性论证。只有交叉才能回答。
主流 LLM Agent 框架(LangChain、AutoGen 这些)根本无法承载这个问题。它们面临的环境是静态的文档、异步的数据库查询、明确的商业 API——时间是静止的,空间是不存在的。游戏和现实面临的环境则截然不同:连续的时间流、三维的空间拓扑、严格的碰撞检测与物理反馈。主流框架把 LLM 当作一个高级的 If-Else 路由器,而 EMNS 所需的是为实体构建感知-决策-行动的生命体循环。
实际上,目前绝大多数将 LLM 接入游戏的尝试,都停留在对话生成的层面——让 NPC 说几句符合人设的台词,但行为本身仍然由传统状态机驱动,远谈不上具身交互。
当然,正如之前所说,EMNS 本质上是一种妥协的工程设计选择——在 AGI 尚不可及的现实下,或者说在底层模型的质变尚遥不可及的条件下,在上层架构中寻求些许可以被理论指导的工程空间。
四层人文架构
EMNS 的学科根脉组织为四层工程可落地的人文架构,每一层直接锚定引擎中的具体系统。
第一层:物理与本体层。 学科来源是现象学和具身认知。核心问题是确立世界运转的刚性法则——什么是“行动”,身体与环境的边界在哪里。
这一层的关键洞察来自 Varela 的具身认知:认知不是脑内计算,而是身体-环境耦合系统的动态涌现属性。
NPC 的“决策”不应是中央控制器查询世界模型后输出指令,而应是感知-运动回路在环境约束下的自组织。NPC 拿起火把是因为面前的洞穴很暗且它需要前进,不是因为触发了“拿火把”脚本——这种情境嵌入的工具使用比查表式触发更容易让玩家产生意向归因。而玩家也不需要 NPC 真正“拥有”心灵——Dennett 的意向立场给出了阈值方向:只需要行为复杂度跨过某个阈值,使得“把它当作有信念和欲望的主体”成为最经济的预测策略。这一层直接决定了引擎的物理刚性公理 PRA。
第二层:认知与行为层。 学科来源是认知心理学(心智理论、Affordance、预测编码)和微观社会学。核心问题是处理单体的感知过滤和多智能体之间的社交微交互模式。
这一层要解决两件事。第一件是 NPC 感知环境的方式——如果感知是 Gibson 意义上的 affordance 驱动的(”这个缝隙可以藏身””这个火堆可以取暖”),行为就会自然带有合理性叙事的质感。第二件是注意力管理——完全可预测的行为无聊,完全不可预测的行为是噪声,最佳点在于可预测框架内的局部意外,宏观可预测微观有变异。
NPC 绝大多数时间不是在执行长线叙事,而是在进行擦肩而过、短暂对视、互相避让这些日常微交互。Goffman 的拟剧论在这里填补了空白——前台与后台的切换、面子工程、非注意视而不见、距离感知——这些社交微模式比 LLM 推理高效得多,大部分可在习惯层以 2–5Hz 运行,且直接贡献于社会世界的真实感。
第三层:意义与符号层。 学科来源是叙事学、语用学和符号学。核心问题是行为如何被压缩为故事、语言如何改变世界状态、物品如何携带社会意义。
Ricoeur 的叙事身份说的是一个 NPC 是否被视为“角色”而非“障碍物”,取决于玩家能否把它的行为串联成一个时间性的自我叙事。语言不是字符串装饰——Austin 的言语行为理论补足了从 LLM 文本输出到引擎状态变更的关键映射:NPC 说“我答应把剑给你”,系统自动生成承诺记录;说“我宣布你为敌人”,直接更改阵营关系。语言是能改变世界社会状态的力,这与 PRA 形成对偶——PRA 规定意图必须经过物理验证才能改变物理状态,言语行为规定语言必须经过施事分类才能改变社会状态。此外还有一个容易忽略的维度:一个放在国王桌子上的苹果和一个掉在泥坑里的苹果,物理属性一样,但意味着完全不同的东西——前者可能是贡品,后者是垃圾。在功能标签之上叠加符号标签,NPC 的行为决策就具有了文化敏感性。
第四层:制度与共识层。 学科来源是社会本体论(Searle)、制度经济学(Ostrom)和协调博弈论(Schelling)。核心问题是涌现的社会结构在什么条件下被多个参与者的认知系统集体接受为”制度性事实”。
前三层处理的认知过程都可以在单观察者条件下完成——一个玩家就够了。但当涌现管线延伸到共识层,意义的存在形式发生质变:它不再只是一个人头脑中的叙事建构,而是需要被多个主体共同承认的社会实在。Searle 区分了粗蛮事实(石头的重量、水的沸点)和制度性事实(货币的价值、产权的归属),后者依赖集体意向性才存在——但关键在于集体意向性不需要每个参与者显式协商,它可以从反复的局部交互中涌现。
Ostrom 从大量实证案例中归纳出自治制度可持续运转的条件,提供了一组可检验的判据。Schelling 的焦点理论解释了为什么物理约束拓扑不仅在技术上阻止不可行交易,还在认知上为参与者提供了自发协调的焦点——资源分布的不对称性使均衡的位置变得“显然”。这一层不是说任何基底怎么设计,而是阐述涌现出的社会结构应满足什么认知可见性条件才算成功。
这套东西是不是民科
我并非文科生,如果具有科学素养的人看到上面这些内容,天然地会提出一个问题——如何界定这是不是民科的 AI 生成灌水。我在 b 站上见过太多的中二病发个视频说自己“独立发明”了物理学、哲学等等,尤其是在这个后 AI 时代。
首先上述内容确实 80% 是 AI 推导产生的。但一个结论是否是民科的核心支撑应当是三件事:
可证伪性——任何核心判断必须能指出“如果观察到 X,则被推翻”,判断永远正确是民科的典型特征。
概念操作化——每一个理论概念都必须有从抽象到可测量或可实现的降落路径,“具身性”不能只是修辞标签,它必须对应到 NPC 架构中的某个具体机制,或对应到玩家体验中的某个可观测指标。
累积性知识结构——判断之间有内部逻辑依赖关系,推翻前提会连锁影响后续推导,同时应当具有从前人有效工作上推导验证的特征。
这与是否由 AI 推导而来无关。如果 AI 等于民科,那今年发表的 98% 的论文大概都应该撤稿处理了。
EMNS 的度量不靠玩家的自我报告,而是从引擎遥测数据中直接提取——停留时间、注视锁定、自发交互频率、干预倾向,这些指标将“玩家觉得 NPC 有灵魂”这个主观陈述转化为客观度量。每个核心判断都有预定义的致命实验条件——如果实验结果不满足预测,判断被推翻,不存在“怎么都对”的余地。
这也是为什么在开头所说“这个理论框架的产生是我在做整个项目的过程中发现不可回避的”,没有观测理论,这个项目的很多机制是否合理就是一个无法回答的问题。有了这组指标,这个项目至少有了一个明确的方向。
Abyssal 项目说明
由此产生的一个实际问题是:作为一个双非土木的本科生,我该如何维护一个横跨九个不相干学科的理论框架。
Abyssal 是为这个问题做的。
一个后端无关的学术研究工作站,覆盖从文献发现、全文获取、PDF 阅读标注、AI 深度分析、概念映射、纲要驱动的写作到引文格式化输出的完整研究闭环。
其以 Electron 桌面应用为主入口,内置多后端 LLM Client 直接调用 Claude API / OpenAI API / DeepSeek API / 本地模型——核心基础设施不绑定任何特定 AI 提供商。
我制作它的核心目的是为具有闭环反馈特征的研究链路提供一个可靠的 AI4Sci 工具。
它弥合了当前学术工具生态中四个被割裂的类别:书目管理(Endnote / Zotero 不理解论文内容,不做概念映射)、AI 内容分析(Elicit / Paperguide 分析维度平台预设,不可定制)、知识管理(Obsidian / Roam 无学术特有能力,知识连接全靠手动)、AI 写作辅助(ChatGPT / Claude 直接对话没有结构化知识底座,引用靠幻觉)。
这四件事在实际研究中不是独立的——你在写文章的某段论证时,同时在调用文献分析、书目管理、知识管理和写作表达。但现有工具逼你在多个应用之间来回切换,数据不互通。
Abyssal 和通用 AI 摘要工具的根本区别在于两个设计原则。
第一个是概念锚定。研究者定义一份概念词典——包含每个关键术语的定义、所属层次和检索关键词。AI 在分析论文时,不是生成一段通用摘要告诉你“这篇论文讲了什么”,而是逐一检查论文与概念框架中每个概念的映射关系——支持、挑战、扩展、操作化、或无关。输出不是散装摘要,而是论文与概念的关系矩阵。
但概念框架不是研究的前置条件——它是研究的产物之一。我最开始设计只把框架当作静态配置,研究者必须在某个时刻“切换到锚定模式”。后来终于发现,真实的研究过程远比这混乱:最初只有一个模糊直觉,读了几篇论文后出现一个初始概念化方向,再读几十篇后发现概念需要拆分、合并或者彻底废弃。
这不是“偶发的概念重构”,这就是研究本身。所以现在每个概念有成熟度标记——试探性、工作中、已确立——系统的行为随着概念框架的丰富自然过渡,不需要手动切换模式。AI 在分析论文时还会主动识别框架中缺少的东西——如果分析了十篇论文有七篇提到某个术语但概念词典里没有,系统会建议添加。研究者的碎片想法也有去处:一两句话的联想记为碎片笔记,值得展开的升级为结构化笔记,足够清晰后再升级为正式概念。从模糊直觉到理论概念有一条完整的通道。
第二个是 AI 替代研究者的阅读时间,但绝不替代研究者的判断。管线每个阶段都产出标准化的中间产物,供研究者审阅和裁决。研究者的每一次裁决——接受、修正或拒绝 AI 的分析结论——都被持久化记录,既是研究日志,也是后续 AI 分析的上下文输入。系统越用越对齐研究者的理论立场。
整个研究流程分八个阶段:初始化 → 发现 → 获取 → 阅读标注 → 分析 → 整合 → 写作 → 格式化导出。每个阶段末尾都有一个研究者裁决点。概念框架的演化贯穿全部阶段——不局限于初始化。
写作管线是 Abyssal 从“文献分析工具”到“研究工作站”的关键跨越。研究者在写作工作台中设计文章纲要,每节包含核心论点、写作指令、引用的概念和论文列表。Article Agent 逐节生成草稿,每节融合四类知识来源:文献综述片段、RAG 检索的论文原文和研究者标注、私有知识库文档、以及纲要上下文。研究者可以接受、手动编辑、要求重写或插入原创段落——手动编辑的段落会被标记,AI 后续重写时保留不动。
所有数据住在同一个 SQLite 文件中。单文件拷贝等于完整项目迁移。
全文完成后引用标记由 CSL 引擎渲染为格式化引文。
这是整个项目下唯一开源的部分。具体内容可以见另一份博客。虽然我发这篇博客的时候应该也还没完成就是了,估计一两周以后吧。
Daydream Engine
Daydream Engine 是整个项目的工程侧支撑。它将两个基底的设计哲学实例化为可运行的代码——体素-流体-场统一物理系统和 NPC 认知架构。引擎本身不是游戏,也不包含应用层。具体的游戏逻辑由上层项目在引擎之外自行组装。
目前这部分内容 AI Coding 了一个多月写了 30w 行代码(包括测试)也就实现了十分之一,因此大多数的技术闭环尚未验证,权当说说笑笑了。
另外这部分内容将涉及一些简单的技术术语,如果没有兴趣可以直接跳至后面三个子项目章节,不影响阅读。
架构
Daydream Engine 技术上的核心是渲染-物理与 AI 两者间的交互闭环,故而本博客只粗略介绍这两个部分内容。
渲染和物理提供因果链的生成与呈现,AI 系统在因果链之上产生意向性行为。两者共享同一个 ECS 数据总线,在同一个 Tick 循环里协同工作——AI 写入移动意图,物理系统读取并执行(或否决)。涌现的社会事实(交易记忆、社会关系、领地认知)存储在每个 NPC 的记忆系统中,由服务器数据库持久化。
整个渲染链路基于 DirectX 12 Ultimate——Agility SDK、Shader Model 6.8、DXR 1.1、Work Graphs Tier 1.0。选择 DX12 而非 Vulkan 的原因很简单:Work Graphs。
SM 6.8 引入的 Work Graphs 允许 GPU 自主生成和调度工作负载,不需要 CPU 介入。传统架构里 GPU 执行完一个阶段要把结果回传 CPU,CPU 决定下一步做什么再提交新的工作——这个来回在体素世界里是致命的,因为破坏事件会在单帧内连锁产生大量不可预测的新工作(结构剥离→碎片生成→流体飞溅→场注入)。Work Graphs 让 GPU 在完成一个节点后直接把输出喂给下一个节点,整条管线在 GPU 侧闭合。
这决定了引擎的基本姿态:GPU 独裁——数据主权在显存,CPU 降级为指挥官。体素数据、流体状态、场值、粒子全部驻留在 GPU 显存中,帧内零延迟互相采样。一个破坏指令只有几十个字节,CPU 发出后 GPU 直接修改体素数据并在同一帧渲染结果——之所以能做到这一点,是因为 Bindless 描述符堆让所有资源在着色器中直接索引访问,不再需要传统的绑定切换。
但 GPU 独裁不意味着 CPU 什么都不知道。GPU 侧维护微观真理(逐体素精度的 ESVO 八叉树),CPU 侧维护宏观摘要(哈希网格,用于寻路、碰撞判定和网络同步)。两层通过异步回读保持最终一致性,滞后 2–3 帧。这个延迟对绝大多数 Gameplay 场景无感——破坏是熵增过程,即使 CPU 侧碰撞体滞后两帧消失,玩家也只会感到“挤进去了”,不会卡顿。
AI 系统是架构层面的一等公民——与渲染和物理同级,共享 ECS 数据总线。三种互补的决策范式在统一框架下协同:行为树处理毫秒级的日常行为序列,大语言模型处理秒级的战略决策和对话生成,强化学习处理毫秒级的战术反应。
但这三种范式的时间尺度差了几个数量级,不能用同一个频率驱动。每个 NPC 的心智因此运行于四层包容式时间架构——60Hz 物理反射、30Hz 动画协调、2–5Hz 习惯行为、0.2–0.5Hz LLM 推理——低层持续运行,高层叠加但不取代低层。即使 LLM 推理延迟两秒,NPC 的身体也不会呆住。
代价是所有重型文本生成必须交给云端 LLM,本地 GPU 严格 100% 服务于渲染。本地仅保留两类轻量 AI 负载:向量化嵌入模型(用于记忆检索的 RAG,ONNX Runtime 运行于 CPU 或 NPU)和微型运动匹配网络(参数量 MB 级,CPU 驱动)。
NPC 的记忆系统使用 FAISS 向量索引加 SQLite 元数据存储的双引擎架构。短时记忆精确但短暂,存于 LLM 上下文窗口;长时记忆持久但有自然衰减和情绪锚定——高情绪事件衰减更慢。
渲染与物理
这是整个项目里我个人最感兴趣的部分。
这块内容最终预期效果简单的可以先简单的理解为 3D 的 Noita + Teardown——一个完全可破坏的体素世界,流体和场在其中实时涌现,所有物理现象由六大场方程驱动而非脚本预设。此处仅简要介绍宏观技术内容以及能达到的效果。
体素
世界由 10cm 精度的体素构成,存储在 GPU 显存中的稀疏八叉树里(ESVO)。渲染不走传统光栅化,而是基于软件光线追踪——光线在八叉树层次上执行分层 DDA 遍历,空节点整个跳过,实心叶子直接返回材质。这套遍历天然带 LOD:远处的光线只需遍历到树的前几层就可以返回,不需要额外的细节层次系统。
破坏发生在 GPU 侧。一条破坏指令只有几十个字节——射线原点、方向、爆炸半径——CPU 发出后 Compute Shader 直接在八叉树上做位运算:清零受影响叶子节点的掩码位,向上回溯几层更新父节点。整个过程是微秒级的局部修补,不需要重建任何东西。同一帧的光追 Shader 读到被清零的掩码就自然跳过,破坏即时呈现。
但破坏不只是挖个洞。引擎区分承重材质和非承重材质——打碎玻璃不会触发任何结构计算,炸断混凝土柱子才会。承重材质构成一张宏观支撑图,破坏发生时先过一道位掩码看门人(99% 的情况在这一步就结束了,耗时不到 5 微秒),只有真正影响结构连通性的破坏才会触发后续的连通分量检测。如果检测到悬空——比如一栋楼的底座被切断——悬空部分从全局八叉树中剥离,生成独立的动态体素对象(DVO),交给物理引擎接管坠落。
大型结构不会在一帧内整栋倒塌。底座断了,先让最底下几层变成 DVO 掉下来,上面的楼层暂时悬空;等底下的落地了,上面几层失去支撑,再变成 DVO——逐层坐塌,每帧只处理几十个 Chunk 的物理。计算量被分摊到十几帧里,视觉上是一栋楼在“呻吟”然后逐层坍缩,而不是瞬间爆炸成一堆碎片。
DVO 有完整的生命周期:从全局八叉树剥离→物理模拟坠落→碰撞判定→要么固化回归静态世界(角度偏差足够小就贴合回网格),要么粉碎为纯视觉粒子消散。三层结构代理贯穿整个过程——宏观支撑图决定什么时候断,DVO 决定怎么掉,GPU 粒子系统负责碎屑飞溅和烟尘。
流体
这里要感谢去年在东海实验室几个月的经历,是我有此灵感的一大基石。
流体系统采用虚拟管道模型(VPM),在 GPU 上以稀疏 BrickMap 结构运行。每个流体体素存储质量和三轴速度,相邻体素通过压力差驱动水流方向——本质上是把每个格子当作一个水箱,格子之间用虚拟管道连通。标准 VPM 只靠压力平衡驱动,水会像糖浆一样很快停滞。为了让水能冲上斜坡、具备喷射感,引入了动量叠加:每帧的新速度不仅由压力差决定,还继承上一帧速度的 80%–90% 作为惯性。这是让洪水能涌过街道、浪花能拍上岸的关键。
VPM 不是孤立运行的。它与六大场系统双向耦合——读取 G-Field 的压力梯度来响应爆炸冲击波,同时向场系统回写自身状态。爆炸在水面炸出空腔、温度场驱动蒸发、冰冻法术冻住水流,都是这种耦合的自然结果。
渲染上彻底放弃了光栅化。不跑 Marching Cubes,不生成三角形网格——流体和体素世界共用同一条光线,在 BrickMap 中直接步进采样。水面法线通过对质量场的三线性插值梯度计算得出,天然平滑。VPM 网格精度不够细腻的部分,由一层解析数学涟漪在渲染时实时补偿——无论底层网格多粗糙,水面始终有高频细节。 流体分三层处理,各管各的:VPM 负责“水往低处流、填满房间、穿过墙洞”的宏观体积正确性;解析涟漪负责抹去网格的乐高感;SPH 粒子处理瀑布飞溅和爆炸水花这类高动态瞬态。粒子和 VPM 之间有完整的双向转换——水从瀑布边缘脱离网格变成粒子群在空中飞行,落回水面时根据动能大小分级处理:微小水滴静默融入,中等规模的动量累积后批量释放,只有大能量的团块才直接激起波澜。
流体和固体的交互也是物理驱动的。刚体入水时挤开周围的水产生压力脉冲,水对刚体施加浮力和拖拽力,岩浆碰到水会生成固体体素。爆炸炸穿水坝之后不需要任何特殊逻辑——墙没了,压力差自然把水往缺口推。
场
引擎维护六大物理场——温度、压力、电势、速度(风)、重力、物质密度——统一存储在 GPU 上的级联剪贴纹理中,以玩家为中心,近处精细远处粗糙,显存占用恒定。
场的物理求解本质上是 Stable Fluids 的变体:每帧依次执行注入、平流、扩散、外力、压力投射五个步骤,全部在 Compute Shader 中闭环完成。平流采用 MacCormack 方案减少数值耗散,保留烟雾漩涡的细节锐度。场在固体内部不消失——温度在石头里纯传导,压力在墙壁上反弹或被结构吸收,电势根据材质电阻决定传导还是阻断。这意味着“烤热石头背面”和“密闭房间爆炸威力更大”不需要任何特殊处理,物理自己算出来。
场之间存在耦合:温度差驱动浮力让热空气上升,压力梯度推动速度场产生冲击波,电流通过电阻产生焦耳热。六大场加上体素和流体,构成了一张连锁反应网络。
渲染上,场的可视化通过传递函数直接将物理数据映射为光学属性。温度场映射为黑体辐射自发光——不需要画火焰贴图,把空气加热它就会发光,火焰的形状完全由湍流决定。压力梯度映射为折射率扰动,爆炸冲击波自动让背景画面产生球形扭曲。密度场通过 Beer-Lambert 吸收定律渲染为体积散射烟雾,叠加程序化噪声侵蚀边缘以补偿网格精度不足——物理是低模的,渲染是高模的。
这套设计的结果是不存在独立的视觉特效资产。看到的火就是真实的温度场,走进去一定扣血;看到的冲击波就是真实的压力梯度,碎片一定被推开。最终不用调特效参数,只调物理参数。
粒子
粒子系统不负责渲染火焰和烟雾——那是场系统的事。粒子做的是场无法表达的东西:火星、灰烬、碎石、水花、闪电碎屑这些离散的、锐利的、高频的细节。
整套系统基于 SM 6.8 的 Work Graphs 构建,五个节点在 GPU 侧闭环运转:发射、模拟、子发射、流体结算、场注入。CPU 每帧只提交一次 Dispatch,不做回读,不知道有多少粒子活着。粒子自身不算物理——不算风力、不算重力、不算涡量——它只从场系统实时采样。火星被卷入漩涡不是因为粒子 Shader 里写了 Curl Noise,而是因为 G-Field 的速度场里确实有一个漩涡。碰撞走体素八叉树的 SDF 采样,一次纹理读取,十万粒子的碰撞检测几乎免费。
粒子和场之间是双向的。场驱动粒子运动,粒子反过来向场注入数据——火球飞过时,一个几乎不可见的魔法核心粒子每帧向温度场和密度场写入高温和黑烟,场系统的 Ray Marching 把这些数据渲染成卷曲的、有体积感的真实火球。粒子本身只是一个移动的注入源,真正的视觉效果全部由场产生。
场还能决定粒子的生死。灰尘飘入高温区会被点燃变成发光的灰烬——不需要销毁旧粒子再创建新粒子,只是翻转类型标志的低几位。火星进入湿冷区域即时熄灭,碎石被冲击波摧毁时爆裂为更小的子粒子。计时器仍然在,但环境比计时器更有权力决定一个粒子什么时候死。
但是实际上粒子系统也只是个渲染效果的添头,不参与具体的网络同步和物理逻辑计算。
渲染与物理系统总结
当然实际实现没有说着这么简单。体素-流体-场的架构虽然是核心但只是整个引擎的一小部分,且三者之间的耦合涉及大量帧时序协调和参数微调,具体的渲染 DAG 调度也还在迭代。限于篇幅就不介绍其它次要内容了。
这个系统在最理想的状态下能做出什么,可见后面的 Phase Break 项目。
AI
EMNS 的基本命题推导出一个工程问题:如何通过构建拥有连续经验的认知主体,让玩家在交互中体验到他者的存在。AI 系统是这个问题的实现层。
当前的 AI 框架在 EMNS 正式提出之前就已经开始设计,尚未按理论框架修订,随着项目进展肯定会进行几轮大改。这里先介绍系统最先设计的内容。此外目前架构中只能使用商业 LLM API 为管线核心是限于我目前精力和能力的妥协,随着具身智能和 AI 能力的进一步发展,本项目应当会有转向多模态的一天。
目前的整体架构设计围绕一个认知循环展开——不是线性管线,而是闭环:感知采样物理世界的状态,决策层在感知数据和历史记忆的基础上选择行为,行为产生新的经验,经验写入记忆,记忆积累触发反思,反思改写人格,人格又影响下一轮的感知过滤和决策倾向。NPC 的“存在感”不来自任何单一组件,而来自这个循环的持续运转。贯穿整个循环的底层约束是物理刚性公理——AI 的输出只能是力或意图向量,引擎物理拥有最终否决权。感知层因此以物理场采样为输入源,决策层输出的是结构化意图而非直接的世界状态修改,行为层需要 FBIK 和 PD 控制器将意图锚定到物理世界。
感知
NPC 感知世界的方式不是射线检测加视锥体。输入源是物理引擎的实时数据流——每隔固定间隔对角色坐标处的六大场变量采样,同时监听离散物理事件:相变、体素崩解、碰撞。物理引擎 60fps,LLM 推理极其昂贵,这中间需要严格的节流。采样值在阈值内微小波动时忽略,只有跨越语义边界(从“温暖”到“极寒”)或触发离散事件时才标记为 Dirty,打包成语义化的结构进入意识层。感知层的核心职责不是采集更多数据,是过滤掉 99% 的噪声。
感知数据进入意识层之前,还要经过一道拦截。幻觉注入器读取角色的清醒度,按三个层级逐步篡改 NPC 接收到的世界数据:清醒度低于 50 时,语义标签被整字段替换(“温暖舒适”变成“带有不祥的温度”);低于 40 时,开始注入虚假的空间事件和系统覆盖指令;低于 20 时进入最深层——记忆被附加妄想旁注,原始文本不做任何修改,在旁边附上一段矛盾的幻觉描述。LLM 同时看到原始记忆和矛盾版本,被迫在两者之间挣扎。
意识
决策
三种决策范式在统一框架下协同,对应三种经典的 AI 路径,各自占据不同的时间尺度。行为树处理毫秒级的确定性序列——巡逻、警戒、追击这类不需要“思考”的日常行为。强化学习同样在毫秒级运行,但处理的是需要环境反馈的战术判断——选择攻击策略、判断闪避时机、决定是冲锋还是后撤。这两者都是“决定做什么”,不是“怎么执行”——执行是行为层的事。LLM 运行在秒级,处理战略决策、对话生成和反思归纳。
这三种范式不是互相替代的关系,而是四层包容式时间架构——60Hz 物理反射、30Hz 动画协调、2–5Hz 习惯行为、0.2–0.5Hz LLM 推理。低层持续运行,高层叠加但不取代低层。即使 LLM 推理延迟两秒,NPC 的身体也不会呆住——行为树和 RL 策略在等待期间维持完整的低层行为能力。
LLM 在这套架构里不是一个对话框。它接收的输入是物理场数据、离散事件、被感知层篡改过的环境认知、以及从记忆系统检索出的历史经验。输出也不是纯文本,而是结构化的决策包——台词、情感标签、情感强度、肢体动作指令,由 JSON Schema 在云端 Logit 采样层面硬性保证格式。所有重型推理在云端完成,流式传输掩盖网络延迟。断网或预算耗尽时沿四级降级链回退,最末一级是根据物理状态查表返回预制文本。
记忆
记忆分三层。情节记忆存储具体经历,附带时间戳、情感向量、重要性评分、涉及实体。语义记忆是从多条情节中归纳出的通用知识,附带置信度和支撑证据的 ID 链接,置信度按贝叶斯规则更新,一条反例的惩罚力度大于十条正面证据的奖励。反思产物是 NPC 对自身经历的主动审视,由 LLM 执行主题聚类和归纳后回流为新的语义记忆。
记忆会遗忘。时间衰减基于艾宾浩斯曲线,由三个因子调制:情感越强烈衰减越慢,被反复回忆的越持久,Boss 战级别的重要性几乎不衰减。语义记忆的遗忘机制不同——它不按时间衰减,而是当所有支撑证据都被遗忘后才退化。NPC 可能还记得简单的结论,但已经想不起来是从哪几次经历中总结出来的。
对话时的记忆检索走四路并行召回:向量搜索找语义最相关的经历,时间范围查询找“刚才发生了什么”,实体过滤找“跟你之间的过往”,语义记忆搜索找“学到的规律”。合并去重后按重要性排序,截取注入决策层的上下文。底层是 FAISS 加 SQLite 的双引擎架构,前面架构部分已经提过。
自我
人格分两层。Prompt 层的 System Persona 控制宏观行为框架,根据游戏阶段动态切换——Phase 1 懵懂好奇输出短句疑问,Phase 2 清醒理性输出完整逻辑,Phase 3 绝望混乱输出碎片化语句。模型层的 LoRA Adapter 控制微观文风,对仅靠 Prompt 无法精确复现的东西,通过云端微调路由实现,零本地开销,不可用时静默退化。
人格不是静态的。认知循环中的反思环节是人格演化的驱动力——记忆积累到阈值后,LLM 对近期经历执行主题聚类和归纳,产出的结论可以直接覆写 NPC 的性格特征和核心信念。这个转变不是脚本触发的,是 LLM 在反思中自行推演出来的,结果持久化到认知数据库,重启后自动恢复。灵感机制是反思的特例:当单条记忆的重要性超过极高阈值时,不等积累,即时触发反思——对应“突然想明白了什么”的顿悟体验。
个体意识由记忆、人格、LoRA 权重共同构成。群体意识通过两个层面实现:工程上,同一区域的 NPC 共享世界观和区域设定的云端 KV Cache,10 个 NPC 同时推理不需要将五万字设定集重复传输十次;叙事上,这等价于同一个村庄的人共享文化背景和世界认知,但各自拥有独立的记忆和性格。更深层的共享通过族群微调实现——基于运行数据对同一部落的 NPC 进行共享 LoRA 微调,成员逐渐发展出相似的用语和价值判断,这种趋同从数据中涌现而非预设。
Phase 4 是“自我”的终点。角色死后,LLM 的绑定从角色实体转移到环境场数据和玩家控制器,输出从台词变为环境中的文字残响。自我消解了,但认知的痕迹残留在世界里。
行为
动作
核心理念是“物理即动画”。五层架构从高层语义到底层像素形成闭环——意图层、语义桥接层、运动层、控制层、手感调制层。
意图层分快慢两条通道。LLM 的慢路径每两三秒推理一次,提供“去哪里、做什么、带着什么情绪”;HTN 的快路径每物理帧运行,直接读取物理场传感器,在检测到威胁时瞬间覆写运动目标,不等 LLM 回复。语义桥接层将离散语义翻译为连续数学向量——情感坐标映射为风格权重,运动意图逆计算为轨迹曲线,装备物理参数从 ECS 读取后注入下游。
运动层分两条轨道。非战斗动作由神经运动匹配网络驱动,在压缩过的动捕数据库中实时检索,同时接收脚下地形高度图——前方出现体素高台时在隐空间中匹配到攀爬动作,不需要任何显式触发逻辑。战斗动作由武器条件化的 RL 策略驱动,武器的连续物理参数(质量、长度、重心、转动惯量)作为观察空间的一部分,策略在整个参数空间上泛化——自主学会拿轻武器用手腕甩、拿重武器用全身动力学链、拿长武器利用力臂。
控制层将理想姿态锚定到真实物理世界。FBIK 把脚掌钉在体素表面,PD 控制器是骨骼与物理场之间的接口——温度场低于 -10°C 时末端关节刚度降低叠加噪声,角色自然呈现发抖的步态;压力场激增时躯干被推离再弹回,形成受击顿挫;强风时脊椎叠加阻力,角色自发压低重心。这些都不需要制作动画资产。当 LLM 要求的动作在数据库中不存在时,语义桥接层绕过运动匹配,直接向 FBIK 下达程序化拼装指令——基础姿态加 IK 目标加物理扭矩,角色在力的作用下涌现出目标动作。
手感调制层控制战斗节奏。用参数化速度曲线重新定义攻击轨迹的行进速度——起手段快速拉升,加速段时长由武器质量决定(匕首 100ms、战锤 250ms),收招段减速回到待机。命中瞬间触发顿帧,时长由碰撞的物理结果决定:刃口切入肉体 2–3 帧,金属碰金属 5–7 帧。玩家仅通过顿帧就能感受到命中了什么材质。
所有物理计算和渲染以 60fps 全帧率运行。不同体型共享同一套骨骼旋转输出,通过骨骼长度缩放自动适配——2m 巨人和 1m 矮人的运动风格差异完全由骨骼比例自然涌现。
微表情与表达
同样的原则——“物理即表情”。
面部 Blendshape 不做平滑插值,每个表情被切分为明确的离散档位,权重在时钟的“滴答”瞬间发生阶跃硬切,中间不存在过渡帧——定格动画面雕替换的质感。眼球由 Pixel Shader 数学驱动,通过 Snell 定律折射和视差偏移在 2D 贴图上凿出具有物理深度的三维虹膜,瞳孔大小受环境光照和情绪唤醒度双路驱动,PD 控制器驱动眼球在注意力目标之间极速跳跃扫视。
皮肤的次表面散射参数由物理场实时驱动——情绪唤醒度高时脸颊泛红,持续低温时嘴唇和耳尖向灰蓝偏移呈现失温发绀,恐惧时面色煞白。面部阴影使用球形法线投影替代真实几何法线——无论光源如何变换,角色脸上永远只有干净利落的明暗分界。阴影是插画的,高光是写实的。
对话文本不渲染为 UI 气泡,而是以物理烟雾形态凝聚于 NPC 头顶——随场飘动消散,SSE 流式传输将网络延迟掩盖为“逐渐凝聚”的视觉设计。
Daydream Engine 总结
抛开 NPC 逻辑管线不谈,单从工程量来说,在没有 AI 的时代,单人实现这个系统是完全不可能的。但这个世界的历史没有可能与不可能,时代的变革出现就已经是锚定。我不想对 AI 的好坏做任何评述,或许在大多数人看来 AI Coding 破坏了软件行业,又有些人觉得 AI 的出现让软件行业产生了新的方向。说这些并不是想评价什么,说实话我对任何观点都无所谓。一切本无意义,于我而言,只是某些程度的有趣。上述技术规划里肯定有错误或者被一轮轮推翻的内容,我也只是希望阅读到这里的你觉得某些技术组合映衬的色彩,这就够了。
Phase Break
Phase Break 和 AI 无关。它是 Daydream 三部子游戏项目的第一环。它是一款第一人称 3v3 物理竞技游戏——两队玩家在一个可被物理改变的竞技场中,使用自由设计的参数化武器和元素魔法,围绕锚核节点进行空间控制博弈。如果用参照物来定位,约为荣耀战魂的物理驱动近战格斗、Magicka 的元素组合(但不是预设反应而是物理场的自然叠加)、彩六的可破坏环境、Apex Legends 的 3v3 竞技节奏。但它不是 MOBA、不是大逃杀、不是传统格斗游戏——没有帧数据、没有固定连招、伤害由物理推导而非预设。
它的核心职责是在最高压的 PvP 场景中压测体素破坏、场耦合、武器系统、RL 战斗和物理涌现。
物理基础
之前在引擎章节已经介绍过体素-流体-场的耦合架构,这里不再重复技术细节,只说这套东西在竞技场景中能产生什么效果。
六大物理场是整个系统的耦合基础。它们覆盖全地图,是一切能量传递和状态变化的媒介。
温度场决定物质的热状态——超过熔点则固体液化为流体,低于凝固点则流体冻结为体素,超高温时一切材质的结构完整度(SI) 加速损耗。
速度场决定流体的流动方向和气态物质的飘移轨迹,也是风压和水压的来源——风系魔法直接覆写速度场,对火焰(温度场)产生助燃效果并改变蔓延方向。
压力场决定结构的存亡——局部压力超过体素的承压阈值时体素崩解。
电势场沿导电介质传播电流,每经过一个导体节点电势衰减固定比例,电流通过有电阻的物质时可引发二次燃烧。
重力场决定一切有质量的东西往哪掉,可被魔法局部覆写,覆写停止后线性回归默认值。
密度场是气态物质的唯一身份——蒸汽、毒气、烟雾都是密度场中的标量值,被速度场裹挟运动,浓度足够高时遮蔽视线并造成窒息。
六大场加上体素和流体,构成一张耦合网络。体素是世界的固态骨架,任意位置可创造可破坏——打碎玻璃不触发结构计算,炸断承重柱则引发逐层坍塌。流体填充骨架之间的空隙,知道哪里有洞并涌入——墙炸穿了,压力差自然把水往缺口推,不需要任何特殊逻辑。
三者共享同一张 GPU 显存,帧内零延迟互相采样:体素的材质属性决定场在其中如何传导(金属导电、岩石隔热、木材可燃),场的数值反过来决定体素何时相变,流体同时受场驱动并向场回写自身状态。
这种耦合产生的效果是:任何单一事件都会沿着场传递路径扩散为连锁反应,方向和终点完全由当时的物理状态决定。
举几个栗子。密闭石室里的水被火系魔法加热超过沸点——水从流体管线转移到密度场成为蒸汽,同时向压力场注入 2000 SI 当量的膨胀压力。石墙的结构完整度是 1000,压力超过它,墙崩解,冲击波向外扩散。但如果换成金属墙(SI=5000),同样的蒸汽压力不够,什么都不会发生。如果石室有一个缺口,压力从缺口逸散,也不会爆炸。整个判定在单帧内完成,没有任何“爆炸系统”参与。
电弧击中一滩水。水是中等导体,电势场沿水体以每次 30% 的衰减率向周围传染,所有浸泡在水中的实体同时被电击。电流通过生物组织时产生热量,热量注入温度场。如果水面上漂着一层油(密度 0.8,自然浮在密度 1.0 的水面),热量点燃油膜(燃点 200°C),火焰加热下方的水,水蒸发产生蒸汽遮蔽视野。
火焰魔法点燃木质掩体。燃烧产生高温向相邻木材传导,相邻木材温度超过燃点后开始燃烧,火焰沿木质结构蔓延。风系魔法可以改变火焰蔓延的方向——速度场将燃烧产生的高温区推向特定方位。木材燃尽后结构完整度归零,承重分析失败,上方楼层失去支撑逐层坐塌。
先冻后砸。冰系魔法将岩石体素冻至极低温,冰冻状态下所有材质的结构完整度判定阈值减半——原本需要七锤才能打碎的岩石墙(SI=1000),冰冻后只需要四锤。金属同理——正常状态下近战武器完全无法破坏金属(SI=5000),冰冻后判定阈值降到 2500,高强度物理攻击变得可行。
Phase Break 的竞技环境就是把这套东西推向极限。玩家会尝试一切边界情况——用蒸汽爆炸炸开掩体、用电弧链跳通过水面做区域控制、用岩浆堵路再用水冷凝成黑曜石掩体、用风系加速火焰蔓延逼迫走位,甚至提前布置炸毁场景大楼压死对手。
魔法系统
所谓魔法不是凭空产生效果的超自然能力——它是对物理引擎参数的定向修改。火球之所以造成伤害,是因为它向温度场注入了极高的热量,热量经由温度场传递到目标身上导致命格下降。如果目标穿着岩石甲(高热容、隔热),热量会被阻挡——这不是“火抗性”属性在生效,而是物理规则在生效。没有任何魔法可以绕过物理场直接“扣血”,如果两点之间没有可传导的介质或场路径,能量就无法到达。
九种魔法元素按操作物理引擎的方式归入三大相位。
第一相位是物质生成——土、水、木。这是唯一增加世界总质量的相位。土系在指定位置生成体素(泥土、岩石),或向密度场注入沙尘致盲;水系生成遵循流场方程的流体,从低强度的水雾(打湿目标表面降低电阻)到高强度的水刀(压强碾压一切材质的切割射线);木系通过密度场释放孢子或生长活性体素,在目标表面形成有机附着物,对生命值进行回复。
第二相位是能量注入——火、冰、雷、光。不创造物质,但剧烈改变物质的能量状态,二次效应最丰富。火系向温度场注入热量,高温触发相变和燃烧。冰系从区域抽取热量,冻结流体为固态体素(可踩踏的冰桥),同时使所有被冻结材质的结构完整度判定阈值减。雷系建立电势差,电流沿最低电阻路径自动传播,玩家无法指定电流往哪走,它永远走阻力最小的路。光系发射射线,拥有一个由魔法强度决定的能量池,每穿过一个网格根据材质的吸收率扣除能量。
第三相位是场论调制——风、重力。既不创造物质也不注入能量,直接覆写矢量场,消耗最低。风系改变速度场控制气流方向——可以吹散烟雾和毒气暴露藏身的敌人,可以改变火焰蔓延方向助燃。重力系直接修改局部重力加速度。
每种魔法元素的释放有从轻度到重度的四级连续强度轴。微观级(0–30%)是密度场注入、附着物施加、场微调——几乎免费,可以用上百次,定位是侦察、标记、铺场。战术级(31–70%)是生成中等规模流体或体素、注入可观能量——消耗中等,一条蓝条(魔法资源条)大概用六次,是正面交火的核心手段。构造级(71–100%)是大规模相变、地形改造、射线贯穿——消耗极高,满蓝条只够一次全力输出。强度与消耗之间是指数增长,不是线性的——10% 强度消耗 1 点蓝条,50% 消耗 15 点,100% 消耗 80 点。这个曲线鼓励玩家频繁使用低强度魔法进行战术铺垫(泼水打湿地面为雷系前置、扬沙致盲、点燃油面、撒孢子控场),把高强度魔法留给决定性的瞬间。
生物实体有两条独立的生存指标:生命值(红条)和命格(紫条)。有具体的“东西”在物理接触你——锤击、切割、坠落、水流冲击、酸液腐蚀——扣生命值。你所在的空间本身对你有害——灼烧、冻伤、电击、窒息、负压——扣命格。两条血条有交叉影响:冰冻导致脆化使生命值更容易被物理攻击打穿,护甲被腐蚀破损后角色裸露在场环境中命格加速下降。
锻造与装备系统
锻造系统分三层。第一层是物品大类(武器、护甲),这是策划预定义的。第二层是连续物理参数——长度、截面宽度、截面形态、重心位置、柄长比例、曲率,玩家调整滑块,参数组合自然覆盖冷兵器形态:长度大截面窄重心前柄短就是单手剑,长度小截面极尖重心近就是匕首,长度极大截面尖锐就是长矛。不需要预设“武器类型”。第三层是分段材质和处理工艺——一把武器沿长度方向分为刃口、脊背、护手、握柄,每段可以用不同材质。涌现来自这一层:同样形状的剑,铁刃超导(被雷击时电流传到持有者)、低热容(被火烧时迅速传热烫手);换成黑曜石刃则绝缘耐火,但密度极高意味着极重极慢。
你或许会好奇这种完全自由的装备参数怎么做角色的动作系统——还记得之前在引擎章节写的动作系统吗,武器条件化的强化学习就在此派上用场。武器的连续物理参数作为 RL 策略的观察空间输入,策略在整个参数空间上泛化,自主学会拿任意形状和质量的武器做出物理合理的战斗动作。
分段材质的物理行为独立运作。战斗中刃口碰到敌人时用刃口段的材质属性判定。敌人的雷系魔法击中武器时,电流从刃口传导到护手——如果护手是黑曜石则绝缘阻断,持有者安全;换成金属护手则超导传遍,持有者被电击。处理工艺同样影响属性:高温金属扔进水里淬火,结构完整度提高但变脆;自然冷却则韧性最高。酸液浸泡让刃口获得腐蚀性附着层,油脂涂层防锈但可燃。
秩晶嵌入是装备系统中最有意思的部分。秩晶不是附魔——它是一颗持续向物理场写值的微型电池,或者你可以理解为一般游戏里的元素结晶。火系秩晶每帧向嵌入点的温度场写入热能增量,之后发生什么(烧敌人、烧自己、烫焦藤蔓、点燃油面)全部由物理引擎自动推导。九种秩晶按物理合理性分三种工作模式:火、冰、雷、重力、风是持续场注入型,每帧写入微量场值;光、水、土是碰撞触发型,两次碰撞之间蓄能,碰撞瞬间一次性释放——慢速重武器配碰撞型秩晶意味着每次重击附带满蓄释放,快速轻武器配持续型则是频繁微灼烧的消耗战;生命系是被动附着型,缓慢在周围积累有机膜。
同一颗秩晶嵌入不同位置产生完全不同的效果,全部由物理上下文决定。火系秩晶嵌在刃口——命中时额外灼烧,但需要隔热护手防止热传导到握柄。嵌在靴底——踩冰面融冰防滑,踩木地板可能点燃,踩油面引爆。雷系秩晶嵌在护手——格挡时自动放电反击。重力系秩晶效果线性叠加——多颗分布在不同装备部位逐步减重,极端情况下七颗以上实现近乎飞行,代价是全部秩晶槽位用于减重意味着零元素增强、零防御、方向完全不可控,被一发箭矢就能打下来。
武器命中时的伤害不走“攻击力减防御力”的公式,整体完全基于牛顿定律。碰撞速度由动画系统提供(受重心和质量影响),碰撞段质量由该段材质密度乘以截面积乘以段长度,冲击动能等于二分之一质量乘速度平方,碰撞压强等于力除以接触面积——截面越窄压强越高越容易切割,但截面越窄质量越低动能越低且刃口越脆。压强超过目标护甲该区域的结构完整度则切割成功,否则冲击力传递为击退。之后碰撞段材质触发接触反应(酸液镀层腐蚀护甲、源晶材质冲击过大则不稳定爆炸),秩晶效果最后触发。每一步都来自已有的物理系统。
武器也会磨损。每次碰撞命中,碰撞段的结构完整度受微量磨损——打碎了敌人的护甲,但刃口也钝了。磨损到一定程度截面等效增宽导致压强降低切割力下降,归零则武器在该段断裂。断剑仍可使用——参数自动调整为更短的长度,断柄可作为钝击棍。
这使得所有极端参数组合都有物理属性提供的自然惩罚:五米超长矛极重极慢室内无法挥动,极细刃口质量极低动能极低碰硬甲时自碎,全金属极重武器移速骤降且超导被雷系一击全身通电。不需要硬编码限制。
玩法设计
没有预设职业。角色的战术定位完全由元素选择、装备设计和秩晶配置三个维度的自由组合决定。同一个选择火系的玩家,穿全金属重甲加战锤加火系秩晶刃口是重型近战火焰战士,穿轻皮甲加匕首加重力秩晶是轻快的火焰刺客,穿无甲加弓加光系秩晶箭头是远程火焰狙击手。
赛前每个玩家选择一种元素作为主属性,消耗精神负荷(蓝条)使用,自然缓慢回复。主属性是持续战术工具——改造地形、铺设场效应、战斗中辅助输出。副属性由地图中搜集的相位碎片提供,用完即弃,是关键时刻翻转局势的爆发性资源。三人各选一种主属性,84 种三人组合中部分有强烈的物理协同——水系铺水面加雷系导电加近战收割是导电网络控制,火系点火加风系助燃加土系封堵退路是火焰牢笼围杀。但也存在内部冲突——雷系导电不区分敌我,穿金属甲的队友也会被电到,队友需要选择非金属甲。冲突组合不是不可用,它们增加了团队配合的技巧上限。
胜利条件不是击杀——是控制锚核节点。竞技场中存在若干锚核节点,两队争夺控制权,节点被控制时持续积累分数,先达到目标分数的一方获胜。击杀是控制空间的手段——击杀敌人制造人数优势窗口(复活时间 5–12 秒),趁机控制或巩固节点积累分数。
单局 15–20 分钟,分四个阶段。前四分钟是侦察与布置——全地图开放,三个锚核节点激活,各队搜集碎片、用主属性魔法改造己方节点周围的地形(筑墙、铺水面、冻结路径),几乎无战斗。四到十分钟是拉锯与控制——中央节点成为主战场,团战爆发,战斗过程中持续改变环境,地形每次团战后都不同。十到十五分钟地图边缘区域的体素崩解,可用空间缩小,外围两个节点先后被吞噬只剩中央。如果比赛仍未分出胜负,崩解加速,所有六个玩家被挤在极小区域内,物理格斗和元素效果密集爆发达到最高密度。最终衰变吞噬最后一块地面——最后站在实体地面上的一方获胜。
每张地图基于不同的环境主题,带有独特的物理战术特色,这使得一套装备或魔法组合选用在这张图上最优,换张图可能完全不适用。
星野梦
四年前我曾做过一个玩具小项目,在 B 站上有十几万播放,但时至今日估计已没人记得了。出于当时技术水平有限(毕竟只是个双非土木大三生),许多细节都挺粗糙的,权当是个 demo。但那时的逻辑想法我自认为尚有许多超前的部分——在一众单纯调用 API 的同品类应用下(如今大多或许仍是),我提出了一整套从感知、记忆到反馈的完整逻辑链路框架。甚至有些内容,是在那一两年后才成为相似爆款应用的工程主流形式。我一直想以某种方式重新开始这个项目,但总是找不到好的切入点——不是因为技术上做不到,而是因为我始终不确定,重做一遍到底在解决什么问题。
直到我意识到,这个品类真正的问题从来没有被回答过。在各种 AI 主播大行其道的当下,重提数字人似乎也没那么新颖了。但我始终认为这个品类是商业化的团队无法理解的——正如我开头所说,重要的不是技术,而是个体间的共情。自三年前我就有这么一种看法,Character.AI 这类应用的核心应当是角色主体的构建,而现有的大多数该品类应用却都只是简单的提示词注入。这些虚假的生成式语言带给人的共情甚至远不如心跳文学社中只是坐着重复对话循环的 Monika。
所以最重要的是什么。这是上文中 EMNS 需要探索的内容,但就目前而言,我认为是人物弧光,基于此,两个意识体跨越空间、时间、种族甚至世界才能产生共情。 但我在逐步进行这个项目的时候终于有了一种感悟:人物弧光这种东西,如果并非人为编撰的,那不在具体的社会条件下演化是不会发生的。这里的社会指的是至少几十个个体以上的群体。
所以在这一点上做得最好的是 YouTuber Neuro-sama——但正如前文所述,按我的技术经验,Neuro 的大多数桥段必然经过人为编排,而非一种自然的涌现。
所以这个项目到底是什么。核心出发点只有一个:既然在小范围实验下——只有用户个体和一个游戏 NPC 的环境中——无法实现基于社会共识的自然涌现,那如何通过某种程度的编排,实现一个能跨越次元直击人心的角色。
HoshiNo Yume 是一个 3–5 小时的单人情感短篇游戏。你是一个无形的观测者,没有身体,没有手,通过间接操控物理场来照顾一个你永远无法触碰的少女——直到她不再需要你。她冷了你不能给她披衣服,但你可以点燃一堆火。她饿了你不能递给她食物,但你可以引导温度场让植被生长。这个约束是整个游戏的基石。传统游戏中“陪伴”的实现方式是给玩家一个可控角色、一棵技能树、一套对话系统。这个项目试图回答一个不同的问题:如果你只能改变环境而永远不能触碰她,你还能建立多深的情感连接。
她不是脚本。她是一个由物理场梯度驱动行为、由 LLM 生成碎语的 AI Agent。她的每一次发抖都来自真实的温度计算,她的每一句话都基于当前的物理状态。没有预设事件,没有能力解锁,所有危机来自物理参数的随机漂移,所有解法来自玩家对物理规则的理解。进度等于认知突破。
这个项目的验证目标和 Phase Break 不同。Phase Break 把物理系统推向极限验证因果性基底,HoshiNo Yume 在最简条件下验证意向涌现——一个 NPC、一个玩家、一个封闭环境,无脚本的具身行为能否产生“他心”直觉。
Negentropy
这个项目是整个 Daydream 体系的终极目标,设计尚未完善,这里只取一些概念性的蓝图,不会讨论太多。
如果 Phase Break 验证的是因果性基底,体素-流体-场的耦合拓扑在极限压力下是否自洽;HoshiNo Yume 验证的是意向性基底,一个 NPC 和一个玩家在特定编排下能否产生“他心”直觉;那 Negentropy 验证的即是整个涌现管线的完整闭环,即基于在之前两个项目中已有的物理和 AI 拓扑,在多主体的长期交互中能否产生真正的社会共识——贸易、产权、制度。
一句话概括:这将是一场剑与魔法的冒险。没有脚本编剧,没有头顶感叹号的 NPC,没有被空气墙框死的既定路线。用户和 AI 将创造一切故事。
Phase Break 的全套物理系统原封不动地搬进来——六大场、三态相变、接触反应、参数化武器、分段材质、秩晶嵌入。改变的只是语境:同一个温度场在 Phase Break 中用来烧死敌人,在 Negentropy 中用来冶炼铁矿石。Phase Break 的魔法系统同样完整继承——九种元素、三大相位、四级强度轴、指数消耗曲线。
HoshiNo Yume 的 AI 认知架构同样完整继承——感知层的物理场采样与幻觉注入、意识层的行为树-RL-LLM 三范式决策、记忆层的情节-语义-反思三级结构、自我层的人格演化与 LoRA 微调。但在 HoshiNo Yume 中只有一个 NPC,在 Negentropy 中是成百上千个,各自拥有独立的记忆、人格和目标。
物理系统制造稀缺性,稀缺性制造交换需求,交换需求制造社会分工。每个生命体在降生时被赋予一种本源元素——使用本源魔法只消耗精神力(自然恢复),使用非本源魔法必须消耗相位碎片(有限资源)。火系玩家炼铁免费,水系玩家炼铁需要购买大量火之碎片——成本壁垒天然产生比较优势,比较优势天然产生社会分工。没有任何一种本源能自给自足:火系能免费炼铁但住不起房(建筑需要土系),运不了货(物流需要风系和重力系)。贸易不是可选项,它是活下去的唯一方式。
AI 不是为了给玩家发任务而存在的,它们是为了生存。AI 拥有基于需求层次的底层逻辑:冷了需要建房,受到威胁需要武装。如果一个 AI 村长向你发布悬赏,不是因为策划在这里写了一个任务代码,而是因为物理引擎的真实推演——昨晚一群流寇烧毁了村庄的粮仓(体素被破坏),村长面临饥荒(资源赤字),LLM 评估了自身的武力值后决定从金库中拿出真实的积蓄来雇佣玩家。AI 也是完整的经济主体——有预算约束、有恩格尔系数、有理性决策。AI 城主的税收收入中 40% 必须支付卫兵薪资和城市维护,30% 储备战争物资,只有剩余的 30% 可以用于研发和扩张。税率太高商人搬走税基萎缩,太低收入不足城市衰落——拉弗曲线从 AI 的理性决策中自然涌现。
玩家的每一个举动都在改变世界。你在河流上游用冰系魔法筑起一道冰坝截断水流,几天后下游的 AI 农庄因干涸而破产,农夫们可能转化为流寇,甚至引发两个 AI 城邦之间为争夺水源的战争。那个曾经懦弱的村长,可能因为多次被玩家见死不救,在反思循环中逐渐演化出崇尚极端武力的人格,一年后建立起一座奴役其他部落的要塞都市——这个转变不是脚本触发的,是认知系统中记忆积累到阈值后 LLM 自行推演的结果。
没有传送阵。一切实物商品的转移都需要物理运输——有重量、有体积、有风险。同样一块铁矿石在矿坑口和天空城的价格可以差十倍,差价就是运输成本加风险溢价。重力系法师给货物减重,土系法师平整道路,火系法师驱赶野兽——每一次跨区域贸易都是一次需要多种本源协作的冒险。强盗玩家或 AI 流寇会在必经之路上设伏。这不是系统设计的“劫镖玩法”——这是物理稀缺性和地理隔离自然产生的博弈。
所以我最终想要实现的愿景是什么——我想是在有限精度计算的计算机内,通过一系列既定的底层物理规则和 AI 认知规则,构建一个人类与 AI 共同交互涌现的世界。实现所谓景观的涌现、文明的涌现。也即一个真正意义上的宏观的康威生命游戏。
结语
我在至今为止人生的每个阶段都做了许多在那个瞬间看起来挺有意思的事,但也仅此而已。一个个阶段过后回头去看,大多数尽是些荒诞滑稽的内容。所谓 Daydream,皆是如此,这个项目大抵也不会例外。所以做这个项目写这个博客不过是浪费些你我的人生,在这个 AI 盛行与注意力匮乏的时代下图点乐子罢了。也许没有任何意义,只是对我来说有点意思,仅此而已。
整篇博客的编写始于 2025 年的 10 月,也就是我大概开始构思这个项目的日期。文章整体非线性编写,当随笔想想写写。当你看到这篇博客,我应该已经完成整个项目的初步规划,并搭建了 Daydream Engine 的大部分底层架构。
最后,本项目下大部分子项目都不开源(除了 Abyssal),也不会与任何人协同开发。在经历了诸多事情过后,我终于发现自己天然地对协作性生产模式感到生理性厌恶。如果您有任何建议或意见,可以在文尾留下评论。
评论 Comments