下载 App
《刀光剑影》开发者日志
角色蒙皮重构、画质链路,和一次发布环境的两连错
本期进展
1. 角色蒙皮:给"设备上一换角度就碎"做了一条兼容渲染路径
用户反馈的角色横片破碎,本地用独立观察相机做了固定姿势的前/后/侧/高俯角实拍,全部正常——问题复现不了,但截图是真的。排查收敛到一个高危点:内置 GPU 蒙皮的骨矩阵纹理存的是世界空间矩阵(角色在 470/326 米一带),一旦设备某个阶段把精度降到 FP16,光这个平移就会产生约 0.25 米的量化台阶,和"横向尖片"的形态吻合。
Lua 层没有可靠的"关闭内置蒙皮"开关(逐个 API 查过,不存在的就不编),所以自建了一条兼容路径:
- 原 AnimatedModel 保留为骨架容器,viewMask = 0 只隐藏它的绘制,骨骼照常更新;
- 把原 25,194 顶点的最高精度网格复制成独立 StaticModel:顶点色存骨索引,TANGENT 存权重;
- 每帧把 41 根骨骼的模型局部矩阵(不含世界平移的小数值)编码进一张 128×2 的 RGBA8 小纹理——每帧只上传 246 个像素,shader 内做 16-bit 解码,分项运算避开 FP16 大中间值;
- 骨架、权重、原动作(HeroAnim)、剑挂点(HeroSword)逐字节未动(哈希比对确认)。
固定姿势实拍:正面、侧面、高俯角、跑动、攻击出刀,轮廓全部完整。
[图片:暂不支持黏贴,请手动导入]
2. 抗锯齿:FXAA3 原位单遍
先按内置 EngineRes/PostProcess/FXAA3.xml 整条 append 到管线尾部——真实 GLES 下链接失败(vScreenPos/vTexCoord varying 不匹配),此路不通。最终做法:clone 当前管线,只把原 FXAA2 quad 的像素程序换成 FXAA3(preset 12),VS、位置、后效顺序全部保持。一帧验证通过,没有叠两遍 AA。
3. 角色贴图的真相:之前"拉满"其实从未生效
翻构建日志发现:角色 4K 贴图的全部压缩任务都失败在 Texture too large (4096x4096), max 2048——发布的一直是原始 JPG/PNG,mip 链从第一天就不存在,远看衣纹会闪也与此有关。本期离线补了正规管线:
| 版本 | 格式 | 内容 |
|---|---|---|
| 桌面 | BC7 全 mip | 颜色 4096²×13 层 + 法线 2048²×12 层,约 26.67 MiB |
| 移动/Web | ASTC 4×4 全 mip | 同规格,原生预算一致 |
按 GetPlatform() 路由,并做了三级回退(ASTC → BC7 → 原始未压缩图)——任何设备解不了压缩格式,角色最多变糊、不会丢贴图。
4. 地形流式:分帧建行 + 覆盖率保持的叶片 mip
近景块单帧生成 1089 个顶点是跨块卡顿的主要来源之一。改成唯一后台任务:每帧最多 8 行、行边界按 2ms CPU 预算截断(发布沙箱没有 os.clock,加了 hasClock 守卫自动退化为固定行数);裙边颜色从每帧 768 次重复计算收敛到 128 个唯一边界点的缓存。脚下缺块仍同步补齐,环湖路线 45 次射线检查最大误差 0.00003m,碰撞无回归。
叶片/花草纹理离线重建为覆盖率保持 mip(逐级 alpha 覆盖率锁定源图比例),远景树冠不再糊成实心色块。
5. 发布环境报错两连修(TapTap 错误报告)
- attempt to call a nil value (field 'getenv')——致命,启动即崩。发布沙箱的 Lua 移除了 os 库,而上期把 os.getenv("WORLD_TEST_ASTC") 测试钩子写进了 Hero3D 的正式路径。本地 CLI 有完整 os,所以一直测不出来。修复:ASTC 开关改经 Settings.Hero.forceASTC 字段传递,环境变量只在 WorldValidation.lua(发布不加载)里读取;同步清理了 CompatibleSkin 的计时 print。
- Could not find resource <official-res>/.../Skybox.ktx——引擎默认天空盒 Textures/Skybox.xml(官方资源)引用了一张 14MB 官方贴图,发布 DWP 没及时到位。尝试过自建材质文件 + 自制 cubemap DDS 覆盖磁盘路径:材质格式解析没问题,但引擎把这条路径按 TextureCube 加载时会触发另一条内部 Could not find resource Textures 查询,死胡同,放弃覆盖方案。最终改 .project/resources.json:新增 startup 组并把该 UUID 列入 preload_groups 启动预下载。已进构建产物,待发布后观察。
问题与风险
① 用户设备角色破碎的根因仍未锁定。 兼容路径是"绕开嫌疑点",不是"证明嫌疑点"。如果设备上仍然碎,下一个排查方向是设备侧实际 shader 精度与字节解码路径,需要用户设备环境的信息。
② 流畅度验收仍未通过。 软件渲染下流式测试仍有 143~317ms 尖峰;蒙皮更新 CPU+上传平均约 2ms/帧是本地数字,llvmpipe 不能外推手机。"确保流畅"目前是目标,不是结论。
③ 本地 -validate 总结果仍会被天空资源缺失标 FAIL。 本地 CLI 不带官方资源包(发布环境该文件存在),游戏自身用程序化渐变天空不受影响——但别把这条 FAIL 误读成脚本崩溃。
下期计划
- 重新发布一次,确认两条发布环境报错消失
- 用户设备反馈确认后,决定兼容蒙皮去留(内置路径成本更低)
- 流式尖峰继续压:顶点生成 / GPU 上传 / 裙边提交 / TriangleMesh 分阶段毫秒计时
- 真机验证 ASTC/BC7 原生支持与贴图内存
- 敌人 AI 与战斗节奏调整(继续欠着的最高优先级)




![《刀光剑影》开发者日志
第一期:让刀光"是画出来的",而不是贴上去的
本期进展
1. 核心玩法跑通了
玩家在屏幕上画一笔,这一笔的形状直接变成一道飞出去的刀光。画横线出横劈,画弧线出月牙,画爱心就出爱心刀光。笔画越长刀波越大,画得越快伤害越高。
技术上走的是「屏幕笔画 → 归一化形状 → 程序化几何体」这条路:把玩家的采样点降采样、居中、按最大跨度归一化到 [-0.5, 0.5],再沿着轨迹生成带截图](https://img2-tc.tapimg.com/moment/etag/FvfPjVihDzWqTvVHoCG78xT5dKzo_20261009184001.png/_tap_ugc_m.jpg)