duangsuse::Echo
909 subscribers
4.79K photos
149 videos
588 files
7.19K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): a19a0b
Download Telegram
duangsuse::Echo
简直是《人类一败涂地》,就这还AI生产力觉醒呢,Jupyter和dsh都比不过。连问题出在哪都并不注意
#statement

😁 哈哈,滥竽充数公理。 放公司里还有养闲人,提升【排场】,AIGC出玄学Task和周报,提升社会参与感的副作用,但放在「像使用时那样开发,即是软件价值」的场景就会显得赛任一般扭曲了。

一定要用大名鼎鼎的破烂玩意(譬如死慢的Gradle),GH文件和主md不能小于三页,开箱即用耗时不得<10min

我真是太懂云原生了
duangsuse
光凭一个 demo,就给一家游戏公司下这样的结论,确实太草率了。这个案例做到了什么,离商业游戏还差多少,我没讲清楚,标题倒是先下了结论。 真以为任天堂不会用AIGC.png 而且,这种特效管线为0,也没融合动效、游戏脚本、玩法创新、IP和发布的东西…… 用一句话,左边实时排名,右边赛道小地图,圈数、计时、时速、集气条都齐了。 场景里的城堡、大蘑菇、起跑线,也都给你搭好了。 所以就是抄开源,内核套闭源的呗…… 试试离开AI擅长的H5技术栈,做成端游或 RTX ready 😂
这似乎在开源软件(Luanti; BlockWild.app )上改了不少? #game

刚刚说这个, #bilibili 就有人一条对话线升级了 #CG , 轻松到甚至懒得发视频

Astra:不是使用逆向编译或泄露的 Minecraft 源码,而是复用了独立开发的开源引擎 Luanti 和玩法项目 Mineclonia,再做中文界面、光影配置等修改。


云层、树冠和远景一起重新调整。 让天空真正参与照明。水面重点处理了重复高光与反射失真 (水体深度吸收、菲涅尔反射与天空盒、方块AO)

Astra 开了个Linux Chromium; py 与 SwiftShader沙盒,

用webgl离屏渲染测试的,甚至还试玩以便测试PBR( “海岸光影试验场 → 创建独立试验世界”) ,并不是 “BlockWild 使用了 Filament”

日落颜色、 雾化/光晕、水面细碎高光、水下、云内部volume明暗,LUT用预计算换实时性能都有
duangsuse::Echo
Astra 开了个Linux Chromium; py 与 SwiftShader沙盒,
#game https://github.com/RedLynx101/Blockwild

7.5号Claude起步的MC克隆,在内存较多时可以打开。居然没有一个人star,而AI发现了友军的成品就拿来加 render() 层了 😅

基本上TS脚本和操作+Rust体素引擎零依赖,源码近40万行,基本上只能靠AI的case study和HITL继续开发

📚 https://github.com/RedLynx101/Blockwild/blob/main/BLOCKWILD_AGENTIC_AUTORESEARCH_CASE_STUDY.md#architecture-built-for-both-players-and-agents


但是,真的需要500M内存才不会挂。相比之下 https://minetest.dustlabs.io/ 体素引擎在画质类似时需要20MB,只是非标地形和玩法的完成度为0

RLE和Octree的稀疏表示是3D体素引擎的常识,与最开始不支持Endless(直至现在也并非种子求差方法)且“为无头Agent优化”的BlkWild完全不同。 实际上纯函数噪声和Procedural是可以互补的,JS玩法绑定也不一定会炸GC(丰富≠胖死)

Minetest只解决了引擎,但这人用AI只剩下run crash的贴图、方块表和模型

😨 只剩下luanti了吗? 2d/3d 体素没有玩法成熟度接近MC的?


绝大多数体素开源项目都死在“写完 Chunk 网格和光照后,发现还要填 500 种方块、几十种生物 AI、流体与逻辑系统”的内容债务里。 Terraria/Necesse 横板俯视的2D体素,没有开源的位置。

fogleman/craft (2MB) 基于无限Simplex+SQLite支持光照很有创意, classicube.net 平衡的较好但世界生成是残的,老MC(估计连带着流式存档也费劲),不要红石和武器好平替也没人做出来过。

可能 veloren.net #Rust 和 openclonk.org (3D+2D)的思路比较好(多细节层次体素 自己捏脸 + 类似Nealfun的对齐连续场),ECS架构先进美术也在线
duangsuse::Echo

可能 veloren.net #Rust 和 openclonk.org (3D+2D)的思路比较好
沙盒游戏 🤔🙏🏻

我认为开发的难度之一,在于【迁移调试】困难。有许多开源或MOD SDK 高度精细的,体素沙盒类游戏,它们的方块模型是通用的,理论上可以互相读档,已经能共享贴图音效包

(当然,不至于各自做load/dump兼容,可能该像MCP/剪贴板那样互通,但是xyzb实时的,带宽可能比纯函数图层/同codebase联机吃点亏)

甚至游戏AI/建筑、玩法、特殊方块的脚本,理论上都可以<3天/feat 的移植投影编辑过去,

这样,如果要重写一部分子系统或CG管线?剩余的缺口不至于全靠AI现做 OR 一抹瞎,而可以直接map到成熟的pid上去继续coplay试玩,更容易找到创新点。

搞不好还能3D体素读2D档,做成超级玛丽奥德赛那样的minigame (总之就是,有一个跨pid的协议比重造轮子强,而且是创新而非rework的基础)。 直接把Terria的算法抄到任何一个引擎里,至少有传播受益。 😨


更新即跑的跨pid模块化,确实对dev是很大的鼓励,介于MC成熟的AI和建模可以白嫖,甚至跨进程与开源杂交,这样内部测试反馈后完成落盘,想必质量上升难度下降。 纯AI弄40万行(还不含音画资产)实在不成

反正体素游戏,本就有 creature/item->[chunks dat]->proc->lazySeed纯函数 这样的管线了,联机也一样,跨引擎也不该差很多。但是强引擎对精简引擎的拉扯是生态级的,只是shader不能套皮而已。

技术上的难度也显然了。craft和?classicube都没实现TNT,换句话说,批量更新blk的优化在这些前端可能只有水流,结合【海市蜃楼】的眼前优先同步约等于1-by-1换方块。【通用方块换皮sync】对渲染器有侵入性,此外coplay只是SHM不落盘,但MC没有这样的方块属性

如果coplay实现了,就等于送了游戏TNT优化和临时方块(即便支持联机的,也不清楚是不是瞬态免求同的机制)

而且MC类游戏本质上是把2D的四象限树裁剪成顶点(留下岩浆湖之类的光方块),RLE方法剔六个面,再RLE做大贴图,这样个算法推广到3D然后噪声也调教到3D,所以前端不如说是GPU的小秘,xyzb结构被污染,SHM也不清楚能parse多快。 SoA 和多态区分多数组是必须的,可是toy前端又可能没这么想

如果硬要以xyzb为协议锚点(即便如此显然),性能也可能是1-by-1而产生大量无防抖的重算;如果以 GL AOP 的姿态,比如说只同步存档建设方块和牛羊,虽然只用关心RenderDoc和摄像机,但这太冷门了(即便理论上该和png叠图一样难)。只能说希望增加blk2gl和落盘的防抖百行以内。

但做到的话连跨引擎联机(可能通过JS脚本兼容)也不在话下了

然后还要从chunk.load事件里偷是那些方块与seed不同,才能同步旧建筑,至于老版全图加载也无所谓。这也会导致海拔不同的建筑出现浮空甚至埋了的问题,所以他们的生成器不用和存档器隔开,这里边其实差一个类似GIMP的智能选区和拖放工具,但把seed柱面一起偷来也是一种hack(-地表y0=海拔)

也可以对房子类做个简单横截面均值接地片 (当然我觉得这其实是MC创造模式自己的问题,它只是解了chest连noclip都不带。 如果下决心做的话,通过【方块类型即建筑】和脚下生成crop强行缝合存档并不难,也有相应MOD生态)

最好不要过度工程了

搞笑的趣闻:如果把平地城堡 paste -air 到半山腰,会出现内部都一半被埋了的城堡,然后你可以自己清灰…… GIMP的智能选区..

想了一下,实时SHM{xyzb/rpm} 区块内creature同步可行性还行,如果能复用旧存档和模型(+预处理贴图包)资产,甚至是间接偷到ModPE生态(PE脚本骨皮建模也是json),肯定对 voxel game 开发者试错有很大帮助。 如果认真要开发的话,做二开也比做竞品/PoC toy 强 😇
#algor #TIL 更适合文本的压缩格式

原文:https://github.com/iczelia/bzip3
阅读时间:4 分钟

话说谁知道 mp4格式, h264算法 不是一个东西的事情(不过mp4依赖ts切片 不断点续传 可能有体会)

既然为文本和源码优化,为什么不做语法字典和json转码等等,而用字节级算法

#ai 全语言分词器 https://fixupx.com/shuding/status/2097348783415939541?s=20
GPU比吐出htm还快点 https://github.com/huozhi/sugar-high/blob/main/packages/sugar-high/lib/lang/c.js

说到最后,git, casync, zstd “自注意训练” 还是比结构化方法效果好。 信号处理就是比古法编程强啊,诶。。

这就像CE里改个数值如此容易, git clone 后改个C字面量反而困难一样。虽然不是一个结构,但CE可以转外挂金手指,是等效的flow 😨
duangsuse::Echo
这就像CE里改个数值如此容易, git clone 后改个C字面量反而困难一样。虽然不是一个结构,但CE可以转外挂金手指,是等效的flow 😨
#ce #game 游戏为何锁60fps

当你在做「结构化编程」时,一层是一层,编译不是运行,可是CE和zstd就是用运行的方式来调的。你认为它只懂字节,它已经把XML/JS的词法给学会了 ——就差个内容编址变量名的minifier理解作用域,它连样板流控都能“搞懂”吧

一个文件里可能既有 HTML,又有内联的 JavaScript 和 CSS,"public static void main" 是一个词而结构化误以为是4个。它是 N-gram(N元语法模型)不是1gram。

结构,其实是Event的一种响应过程、消息分界符,代码不是绝对真理的“值”。


你认为LLM只懂字节,它看到和消灭的蠢货字节可比你多呢

这就像CE里改个数值如此容易, git clone 后改个C字面量反而困难一样。虽然不是一个结构,但CE可以转外挂金手指,是等效的flow 😨

我感到民科信号处理,就像对 for(A;B;C) 的每个变体手搓“简化宏”或给ChatBot设计文字游戏,以及只懂几个虚词的NLP那样古怪。 【直觉】确实比结构重要太多了,你不能用大脑说的道理优化小脑在做的事,而且那的算力不够。

如果从经济学、从历史终结的角度考虑,LLVM和GCC的实现怎么不像【通过规则集优化压缩算法,以为自己更牛/更懂】一样蠢呢? 编译器的价值在于意图确定、优化点肉眼可见的IR,而不是玄学Pass。它们甚至没有把PGO放在优化Loop里,它们假定程序是不会开箱即用的九头蛇,AOT算法不会区分CLI/GUI/Web,而Harness做到了

这些人太傲慢,还去写AI(GPGPU)编译器,实际上,即便是图算法也像用手动 for(A;B;C) 的规则集压缩一切一样,对flow知之甚少,却让人误以为充实。CE确实不能跳过make install的复杂性,template<>类型体操确实【深奥】,但frida和#[proc_macro]比你更牛。它们就是像lambda{}那样的真正【元编程】,而所谓的结构化方法,离正常人眼中的编程,太远。也太蠢。



所以,编译器/优化必须和编辑器,甚至和编程语言是一回事(像 numpy/taichi/paholes 省内存工具)。不然,以后它就被自适应的LLM优化缓存吊打。代码的优化是一个【人机接口问题】。问题要修在 root cause

#CS “(相比于LLM重构,)软件工程所做的一切技术选择都是对的” ——某人曾这样说。 真的如此吗?

这让我想到了 Handmade Hero 与《代码整洁之道》“OOP大佬”的论战—— 当性能掉50%时,是坚持 [Duck(), Cat()] is [Animal List] 还是手写两个for? 当然,有可能你完全用不了继承+实现了。如果差距拉到10倍呢? 你曾经以为,invokevirtual 就是最牛逼的优化吧?可是,它对游戏对象池一无所知(什么游戏没有vec2/vec3quat和对象池)。

🦄 🎉 哦不,invokedynamic 的函数级site优化也于事无补(说句实话:没人懂这个,除了谷歌D8R8的更新日志,也没人看)

只有数据流,而数据流,需要【声明式类型】甚至【F12式的性能反馈】。这与通用编译优化,就是一条歧路。一辆拖拉机换上了 F1 赛车的火花塞。 🚀

仅仅是这样的宏而已,脱离Types和GC写优化Pass,它会变成万行代码的地狱(或天堂。谁知道呢)

SIMD仅仅是GPU小蜜的优化,酷炫的光效又是另一个地狱(或天堂。谁知道呢),为什么他们抓不住重点。


把Vector2(xy)独立分配,或内嵌Px.Rect{int x,y},绝对是正确的。 [].push 绝对没错,LLVM也是学术热门,可是结果就是慢了。没人知道,没人关心,好像vec2/vec3quat和多态属性forEach是难以启齿的需求。 在今天能为120fps区分逻辑判定帧和渲染帧(FixedUpdate),也异常困难。 明明在玩家看来理所当然的事,因为一个“优雅命名”和deltaTime的耦合变成「2倍速移速0.5倍」这样

UpdateRules(dt) 或许比 FixedUpdate 这些准确的多,你还可以return true来表示玩家有运动(从而优化联机等需求)。为何有人敢把 if{} 也写在图形管道里?为何实现逻辑-渲染切分后不能录制回放和TTD? 锁帧30fps或许不像y2k那样致命,而且有修改器workaround,但你失去的是一系列配套的【可能性】,比如服务端秒封开挂

🥱 但这就像现代编程语言的 await .. 和阻塞操作放一个函数里一样,是不知道一些事情。就像把if{}和渲染写一起一样的怪事,像async..while(1)的怪事

不如我点破吧: vec2/vec3quat 不难猜到,new ECS 也不难优化,可是加上forEach和UpdateRules, 把三者结合起来设计,就成了送命题。

perf toy 是不会有错的,demosence 也不会卡,但是放在一起,去年的Game PC就有错了。 许多人的【数据结构】【算法】,是不运行的。我说的不是perf toy运行

#game #dev
你的Entity定义上是否包含vec2/v3quat和Verlet插值?Comp是否像CSS一样有层次且动态可组合?

entities.forEach(entity => entity.update()) 藏了太多 50% case 的共识。同类型复用(Arena)、SoA和多态分区存储?这些东西引擎层似乎都没见过,就像DOM有矩阵和Rects照样人人手搓Vec2

如果不包含xyz,它就是time/System。E仅仅是ID?这就像是把指针当成“对象”,把列表多态SoA优化泄露成了全新设计 SystemA(){elms.forEach(Component1)}, SystemB(){..Component2},这甚至是无师自通的。CSS的标签和类名,却支持区块与事件的自由分布

“幽灵是Elm不是Sys理论上更统一”让我想到了RISC-V的兼容性系统。就连query一个feat是否受支持的ABI,也是个feat。扫码电话亭的理论正确。

二层级CSS和SQL/ECS的关系式用起来不同。CSS可以通过classList改style,动态规则集也更解耦。ECS 不是一个无聊的内存池化,没想到在幽灵实体上命名都这样的错。就像UpdateRules(dt) 本来比 FixedUpdate 准确的多。



已经见怪不怪了啊…… 究竟在优化些什么,有资格说LLM不如自己懂 Code Arts.
duangsuse::Echo
#game https://github.com/RedLynx101/Blockwild 7.5号Claude起步的MC克隆,在内存较多时可以打开。居然没有一个人star,而AI发现了友军的成品就拿来加 render() 层了 😅 基本上TS脚本和操作+Rust体素引擎零依赖,源码近40万行,基本上只能靠AI的case study和HITL继续开发 📚 https://github.com/RedLynx101/Blockwild/blob/main/BLOCKWILD_AGENTIC_AU…
昨天作者无意中修好了crash,大致试玩了一下,发现内存占用200M

因为是Agent自己Loop,完成度还挺高的,只是无论代码或玩法都过于复杂

图为Codex对MC替代品的无脑大杂烩——“没影龙”? (房子内部空的)

商店没有MOD系统就内置了,人机协作必须自带Wiki。那 Skill, Spell 这些过度多余的系统有七八个

天气、武器、AI纯音乐和光方块都有,但方块太少了,操作也非常不顺畅(比如Ctrl+方向是奔跑,Shift却是下降.. 😓)

基本上是Claude把MC为用,大杂烩为体(但哪个正经游戏要wiki才会玩啊),你进去后有种【只读访问】的感觉

#vibe #game ps. 这个游戏目前基本只有Agent们知道名字…… 虽然域名都有了 0 star
这个cave生成模式还挺有趣的,像葫芦一样,也可以说是bug。感觉需要配合藤蔓来探索

不要对体素游戏的玩法有太多刻板印象。可是AI又不懂乐趣,我觉得 Creative Coding 上包容AI犯的错,将错就错会更值得一看
游戏玩法设计非常失败,完全被法学博士牵着走了,一堆莫名其妙(冷门MOD级别)的野生玩法

神™还做了 Capture Orb contract,和任天堂的《Pokémon Pokopia》一比就知道滥用AI,啥都不砍会怎么样了……

这种东西放repo里就是占用开发者的精力。 参考上图的玩家口袋,找不到几个正常的方块,拾取也不方便

🌲 比较满意的创新:生物/植物面板。把seedgen的规则可视化为HTML内容,让云原生相比于Java/Rust的优势展露出来(点开即玩也是主要优势)

确实不能像2D体素能用GIMP那样拿Blender去调教噪声seedgen,所以有界线感。但这地图质量也没很高啊..)
duangsuse::Echo
这个cave生成模式还挺有趣的,像葫芦一样,也可以说是bug。
真正的bug除了玩法和操作的调教很差(以及AIGC的生物模型/动画有些古怪)

就是seedgen性能太拉垮了(可以在左上角看到minimap)。 一个柱面要半分钟,在这之前玩家都是穿模的

#algor
(其实也不必看seedgen看的太高,API上就是把无头画板+pixelArt推广到3D,处理下就成MC了。

其中基于几何/噪音/分布的可以免费升维,种树凿河开洞之类/管线依赖自动机的要重选,理解为瞎JB甩墨水然后抹一下,叠几层也可以。重点在边叠边(咋)变样

https://duangsuse.github.io/NebulaRemix/

物件碰撞检测xyz网格hash就够了,为了防止挤出bug,MC有挤压窒息伤害。箭还要单独防穿墙。


体素游戏中 XZ-pillar 和 xyzb2vert 的实现思路:

XZP(16x16xH lazyload) 和 X2V(Airy blocks) 都属于RLE思路。就像Blender右上角Gizmo那样,对柱子转到3个视角,让它的背面往 not Airy 那边挤,拉宽

X2V的过程就是把数组 [1110011110] 变成 [A1B] [] [A2B] [] 的创建指令以addQuad,考虑到贴图ID和朝向

如果完全被遮住则可以剔除,否则材质/渲染阴影属性稍有不同则保留,开启下一条。一般用64bitstruct调用GL而不存浮点

玻璃、透明,原木、方向性贴图。 水草火把、AO,台阶、半砖和流体高度,这些,需要多态存储而不只是贴图ID

如果完全被遮住则可以剔除,否则材质/渲染阴影属性稍有不同则保留,开启下一条。
此外贴图可以用palette优化,编辑防抖可以存连续数组,只要碰撞检测OK大体上就行;近处加载和TNT爆炸优化,光照传播、流体更新也是坑


MC 1.0 通常是在一个world.H/2的海拔高度以下生成水,水边生成一圈沙子。海岸线残的。洞穴空气是多个球形或椭球+CA蚀刻,形不成矿脉。远不及后来的3D噪声洞穴。草地树木完全同理

fogleman/craft 使用 fBM 2D Simplex 打底,3D Simplex Noise 瑞士奶酪生成洞穴内空气,tree_noise(x, z) 种树,模型直接硬编码,但 (x, y, z) -> b 是纯函数图层混合 cave无需跨 Chunk 边界画完,直接省了上游的轮询
😂 🎮