骑手与电动车比例重设计
旧版上臂与前臂合计 1.08,长于腿部两段的 0.90;较远、较宽的车把要求骑手过度伸手,120°–135° 的第一人称镜头进一步放大近处袖管。此次将人物、握把、脚踏和镜头作为一个整体调整。
参考与取舍
- Blender Rigify:骨架对齐及关节预弯:保持关节弯曲方向明确。这里使用固定骨长的双段 IK 和外侧弯曲方向,转向、拧油门和踢击时均保持弯肘。
- Honda:骑行姿态:自然握把、放松肘部,避免为了够到车把而伸直双臂。相应地收窄并后移握把,而不是单独截短手臂。
- Epic:第一人称渲染:第一人称模型可以使用独立 FOV 与缩放。这里保留 Three.js 的独立镜头和深度通道,用距离适配窄屏;外观预览显示完整身体,第一人称隐藏会挡住仪表的头胸及贴近镜头的上臂。
以下具体尺寸是本项目积木风格的美术选择,不是参考文档规定的人体标准。模型与动作仍完全由本地几何生成,不引入外部资产、纹理下载或运行时依赖。
比例变化
尺寸均为模型局部单位。
| 项目 | 原尺寸 | 新尺寸 |
|---|---|---|
| 上臂 / 前臂 | 0.56 / 0.52 | 0.36 / 0.32 |
| 手臂两段合计 | 1.08 | 0.68(缩短约 37%) |
| 大腿 / 小腿 | 0.46 / 0.44 | 0.42 / 0.40 |
| 腿部两段合计 | 0.90 | 0.82(缩短约 9%) |
| 司机鞋底长度 | 0.39 | 0.33(缩短约 15%) |
| 肩关节间距 | 0.76 | 0.66 |
| 左右握把中心间距 | 1.44 | 0.98 |
| 握把前后位置 Z | −0.86 | −0.50 |
| 轴距 | 1.94 | 1.58(缩短约 19%) |
| 第一人称垂直 FOV | 120°–135°,随体型变化 | 85°–95°,随屏幕比例平滑变化 |
人物采用收腰上衣、较窄骨盆和座垫;踢击保留固定腿长,横竖屏使用同一站位,双脚完整落在脚踏板范围。车体使用圆角盾形前围、一体灯罩、紧凑踏板及较短前叉;前轮、轮毂和挡泥板继续共用轴心。
完整外观预览中,原腿长使坐姿膝盖过度向外撑,长鞋又接近车轮直径,令车身显得偏小。缩短腿和鞋后,脚踝、鞋底高度和后跟位置保持一致,继续落在原脚踏板上。腿长由游戏与文档预览共用;乘客也使用同一套骨长,保留自己的后脚踏落点。
司机静止时让膝盖略向前收,膝间距从缩腿后的 1.106 调至 0.955,收窄约 13.6%,不移动髋部和双脚。游戏与文档共用 riderLegPole:用 smoothstep 在踢击准备阶段(动作进度 0–0.18)提前过渡回原外侧弯曲方向,避开抬脚与伸腿过程的 IK 翻转;进度 0.82–1 随脚回到踏板逐渐收拢,支撑腿仍保持鞋底落点。完整左右踢击回归检查逐帧连续性和车身/躯干净空。
模型尺寸集中在 apps/dayun-kicker/src/config/render/rider.ts。尺寸技能统一缩放整个模型,仪表触控范围继续使用实际投影位置。第一人称允许前轮下沿自然落到屏外,避免为了展示整个前轮而再次增大 FOV。
曲面、刹车与车灯
- 对手臂、关节、头部和轮胎适量增加圆周分段,使用平滑法线;手掌和前围按折角处理法线,保留积木轮廓和硬边,避免全模型细分。
- 刹车把通过夹座和转轴固定在车把上,捏闸时绕轴旋转。弯曲线管连接夹座出线口与前围入口,两端随各自的转向变换更新,复用顶点缓冲;修复旧版直线管端点沿用旧尺寸而悬空的问题。
- 白天关闭前照灯,黄昏和夜间自动点亮;灯罩发光、前方聚光照明随转向同步,刹车时尾灯增亮。游戏沿用单个无阴影聚光灯,不添加全屏泛光处理。
- 开发预览提供刹车、车灯、夜景开关及灯光视角,可以独立对比照明和刹车灯效果。
- 前挡泥板加宽至覆盖胎面,通过两侧固定片接到前叉;后挡泥板使用两根侧支撑杆连接摇臂,支架保持在轮胎外侧,前部连接随转向总成一起运动。
预览性能
- 静止时停止绘制和骨架求解,拖动镜头复用已有阴影;转向、踢腿或捏闸时才更新动作及阴影,隐藏页面时暂停调度。
- 仅合批躯干、车身外壳和前叉内的固定零件,保留手脚关节、刹车转轴、车灯及换肤材质的动态引用。
- 拖动或播放动作时限制为 120 万渲染像素、DPR 不超过 1.25;停止后恢复原有清晰度,上限仍为桌面 240 万像素。此策略仅用于开发模型预览。
- 浏览器回归直接统计 WebGL 绘制:固定测试视角下旋转为 82 次/帧,静止为 0 次,纯镜头旋转不会重算阴影;另测转向动画恢复阴影更新,以及 Retina 屏拖动结束后恢复分辨率。帧时间受本机负载和浏览器渲染后端影响,不作为稳定帧率承诺。
验证方式
- 单元测试检查固定骨长、弯肘方向、手掌和握把间隙、袖口连接、脚底落点、座垫接触、前叉轴心,以及不同视口和体型下的仪表投影。
- 刹车回归检查转向和捏闸过程中的线管端环连接、固定转轴、表面朝向和缓冲复用;灯光回归检查昼夜强度、转向照射方向及刹车灯恢复。
/rider.html提供正面、侧面和后侧视图,可检查皮肤、转向及左右踢击;此页面仅用于开发,不进入生产构建。- E2E 保存完整外观、三个固定视角、刹车连接、前灯和尾灯开关对比、桌面第一人称,以及白天/黄昏/夜晚移动端截图,并检查完整帧与渲染像素预算。
- 最终提交执行
pnpm release:check,结果记入 渲染发布记录。
单座与双座配置(2026-10-08)
同一车体支持 single 与 double。单座保留短坐垫、配送货架和现有皮肤附件;双座切换成长坐垫、后脚踏与扶手,收起配送箱、货架和鬼火音箱,尾灯与车牌移到新车尾。双座套件和乘客在首次使用时创建,反复切换复用已有资源。异步加载与换肤均尊重当前座位配置,恢复单座时恢复对应皮肤附件。
render/scooterRig.ts 将同一套车体与司机动画用于世界坐标模型,座位位置由车辆变换推导,不受横竖屏或第一人称 FOV 改变。车库预览复用该模型并接收可选 seating 配置;普通游戏座舱继续使用原第一人称适配。
render/passengerRig.ts 提供独立乘客、外观、固定脚踏坐姿、持枪、瞄准和换弹。躯干、腿与武器合批,手臂实例化;当前坐姿瞄准范围为左右 85°、上下 40°。该范围用于模型和打靶原型,后续联机与后方射击另行验证。
开发服务器的 /rider.html 增加「座位:单座/双座」、「司机视角」与「后座瞄准」。后座模式支持拖动瞄准、Space/按钮开火、R/按钮换弹和移动靶;命中来自真实枪口世界射线,并检查前方司机模型遮挡。弹匣、冷却与换弹由独立规则控制;反馈池有上限,空闲时停止绘制。切回普通视角后停用射击快捷键,窗口隐藏或图形设备中断时冻结预览。
本轮交付为双座模型与本地打靶。真实多人登车、座位权威同步和僵尸关卡仍按合作实施计划继续。
持枪姿态与预览选择
预览皮肤选择通过 RiderSkinSelect 复用公共 GameSelect,保留键盘选择、浮层避让、Esc 关闭与焦点恢复;Select 内的键盘操作不触发打靶快捷键。
乘客肩部转轴位于躯干前外侧,肩部连接块与制服合批,袖管保持固定骨长。支撑手从枪身前方握持;侧向瞄准时调整上身后仰与肘部弯曲方向,让手臂避开胸腔和司机。枪口朝向由瞄准值决定,换弹只改变表现姿态。几何回归检查实际实例盒体与乘客胸腔、司机躯干及头部的交叠。
造型参考采用固定转轴与独立持物挂点的思路:Minecraft 官方基岩版持物示例将手持物挂到手臂的子骨骼,并分别定义第一/第三人称持物动画。该示例不能作为通用自动防穿模或 IK 系统的依据;本项目仍需校准自己的转轴、握点与动作范围。
本轮持枪姿态与公共下拉的单测、原生 GPU 回归、手机截图及构建结果见补充验证记录。
袖口闪烁修复(2026-10-09)
支撑手折起时,亮色袖口靠近肩部。原袖口与前臂同为 0.125 的宽深,沿轴重叠 0.0525,四个共面侧壁造成深度争抢条纹。袖口宽深改为 0.13,每侧外扩 2.5 mm;握点、骨长和动作保持原值。新增实例盒体回归检查重叠区域侧壁间隔,既有胸腔/司机净空回归继续通过。
乘客与整车单测 18/18 通过;本轮原生 GPU E2E 3/3 通过,覆盖瞄准/换弹、座位切换/资源复用及 390 × 844 触屏操作。已对比持枪两侧截图并检查当前预览,袖口条纹消失。生产构建在类型检查阶段受工作区其他进行中改动阻塞:packages/dayun-kicker-coop/src/index.ts 导出尚不存在的 ./rules(TS2307)。此次没有改动合作包;新生产产物及预算/发布校验需在该模块补齐后重新执行,不能沿用上一轮通过结果。
持枪动作参考筛选(2026-10-09)
当前防穿模回归并不代表姿势已经自然。中性姿态的左肘比肩高约 0.203,来自固定向上的 IK pole;右肩到腕根仅约 0.151,而两段骨长合计 0.68,形成约 155° 的弯折(伸直为 0°)。双手还直接复用武器旋转,并把掌心握点当作腕根,缺少左右手独立的握持方向和腕根偏移。
已核对 Adobe 社区中 2023–2024 年的 Mixamo 持枪预览截图与讨论,确认以下参考名称和用途。它们是待筛选候选,尚未下载或重定向到本模型;本次访问 Mixamo 实时库一直停留在加载界面,不能视为实时目录验证。
| Mixamo 候选 | 用于校准 |
|---|---|
Rifle Idle | 放松持枪、肘部落点、左右手握持方向 |
Rifle Aiming Idle | 主瞄准姿势的肩、肘、腕关系,以及抬枪高度 |
Rifle Kneel Idle | 低姿态的紧凑上身与支撑手位置,供后座姿势参考 |
优先以 Rifle Aiming Idle 的上身作为姿势参考,联合调整枪位、掌心接触点到腕根的变换和弯肘方向;保留本车固定骨盆/脚踏以及枪口瞄准基准。当前程序实例模型需要显式骨骼映射与姿势校准,不能直接播放源动画便认为完成适配。只将左 pole 改为垂直向下会在抬枪时重新穿胸,仍需完整袖管/袖口/手掌 OBB 与两侧截图回归。
Adobe 的动画编辑说明确认可通过动画库搜索并在角色上预览,编辑动画速度和手臂间距;后续应在统一角色上筛选具体变体,再决定采用关键姿势还是完整上身动画。
身体旋转闪烁与几何防护(2026-10-09)
后座裤顶和腰带顶原来都位于 Y=0.14,同向重叠面积为 0.141;上身转动露出腰带顶面后,会出现随视角变化的横向条纹。将隐藏裤顶下缩至 0.13,裤底仍接触坐垫,腰带外形和髋关节位置保持原值。同步错开制服反光条/拉链、黄袍胸牌/基础徽章、黄袍侧衣片/腰带和肩部饰条的表面,内收头盔眉沿及后座发帘侧壁,嘴角与笑嘴改为边缘相接。
后座肩垫与手掌也有共面重叠。手掌会随瞄准和换弹运动,单纯平移肩垫可能在另一角度复发;肩垫前后面改为横向轻微斜面,使其法线不再与手掌的前后面相同。骨长、转轴、握点和现有瞄准/换弹动作均保持原值。持枪姿态自然度仍按上节另行校准。
建模时采用以下约定:同一重叠区域只保留一层外表面;包覆饰条要有明确几何间距,隐藏内层可以内收;拼接同材质零件应在边缘相接,避免叠放侧壁。动态部件需要检查中间姿态,不能只检查端点。此次没有关闭深度测试或添加全局深度偏移。
modelCoplanarFaces.testUtils.ts 提供测试专用的世界坐标三角面检查,支持普通 Mesh、InstancedMesh、合批几何、材质分组、绘制范围和可见性。检查正面积共面交叠,包括同一合批 Mesh 内的重复面;普通背向接面和共享边不作为缺陷,双面材质按两侧处理。它不进入游戏运行时,也不模拟骨骼/shader 变形、纹理透明或相机遮挡。身体/全套皮肤测试的面积容差为 1e-9,用于忽略 Float32 相接边碎片;后座测试覆盖头盔/头发、瞄准网格、换弹中间阶段及小角度复发案例。
最终 6 个相关测试文件共 98 项通过;独立细扫 19,440 次后座姿态,未发现共面正面积交叠。既有原生 GPU E2E 7/7 通过,另两轮近距离旋转截图检查各 1/1 通过,覆盖中性/转身裤腰、黄袍及鬼火正面;桌面和 390 × 844 手机画面已检查。截图保存在 /tmp/dayun-body-coplanar-final/ 与 /tmp/dayun-body-coplanar-aimed/,临时截图探针已删除。
本轮应用类型检查、生产构建、verify:performance 和 verify:release 全部通过(221 个发布文件,开发诊断和检测代码未打包),预算未提高。上一节构建缺少合作模块的历史阻塞已在本轮重新验证消除;合作模块本轮未修改。当前构建包含工作区其他并行更改,不把全部产物体积变化归因于此次修复。
默认服装与橙黑套装(2026-10-09)
默认骑手采用白色上衣/头盔、灰色袖口和点缀,深色裤子保持原样。构造器与换肤均读取 stock 的角色配色,胸身和头盔不再兜底为配送黄;共享反光条也读取角色的 trim 色。
默认驾驶者鞋面与鞋帮采用炭灰色 #333b40,鞋底黑色、饰条灰色;与默认乘客的黑灰鞋相配,白衣与天蓝上衣保持原配色。其他套装保留各自的鞋色。
后座默认采用独立的 DEFAULT_PASSENGER_RIDER_PALETTE:柔和天蓝色衣服/头盔、相近蓝色袖口与腰线、深色裤鞋,与司机云白衣服形成「蓝天白云」双人搭配。骑手诊断与车库双座均使用构造器的朴素配色,不再强制应用「蓝色记忆」的蓝白制服。合作渲染中,乘客的默认 stock(含旧默认 ID 和空席)也使用天蓝角色色;选用其他套装时仍按所选皮肤着装。按解析后的皮肤 ID 缓存配色,换座及离座后恢复对应的默认色。
「橙风破浪」改为橙色主体加深黑点缀:袖口、裤鞋、腰线、肩部和头盔条纹、闪电及车侧涂装统一橙黑,货箱顶贴纸为橙底黑字。车库中英文特色文案已同步;车辆功能件和配送文字标签仍保留既有读数及材质。
配色与渲染相关既有单测 89/89、合作渲染单测 7/7 通过。GPU 座位/异步换肤、资源复用、390 × 844 触屏三项通过,另配色截图检查 1/1 通过;已查看白衣/蓝衣、橙黑双座与货箱及手机截图。截图目录 /tmp/dayun-rider-colors-final/,临时截图探针已删除。本轮最终应用构建(含类型检查)、性能预算和发布产物校验均通过,221 个发布文件,预算未提高。
「蓝天白云」补充后,乘客/合作渲染相关 20/20 单测复跑通过,GPU 截图检查 1/1 通过;检查了默认双人预览及两位默认玩家的实际合作渲染,截图位于 /tmp/dayun-sky-cloud-final/。临时探针已删除,更新后的构建、性能预算和发布校验均重新通过。
原厂灰黑与独立涂装(2026-10-09)
原厂改为灰色车壳、黑色车架/座椅、灰色点缀,取消青绿色发光;配送箱默认黑色。共享皮肤配置与构造器使用同一份原厂配色,默认驾驶者白衣、乘客天蓝保持「蓝天白云」搭配。
骑手开发预览新增「车身颜色」「配送箱颜色」两个公共选择控件。车身复用门店的原厂、冰川蓝、珊瑚橙、石墨黑涂装;箱子可独立选择黑、蓝、橙、白,或「跟随车身」随最终车身色同步变化,也可恢复套装原箱色。衣服、车身和箱子独立;车辆涂装通过 rider.trimEmissive 保留服装饰条的原发光色,cargoColor 只覆盖配送箱,不改配送制服或头盔。皮肤、车身和箱子的预览选择分别记忆,支持 skin、paint、cargo URL 参数,未知颜色回退默认值。预览不会消耗改装积分或修改正式装备存档;街区门店保持已有购买/安装流程。
箱盖与鬼火音箱外壳使用独立材质;箱体贴纸及箱顶背景随箱色更新,深色背景使用浅色字,硬件、反光条与音箱灯保持功能色。重复应用保留材质与纹理缓存,恢复原色不会残留上一次覆盖。诊断读数在鬼火套装下读取实际音箱外壳。
最终 6 个相关单测文件 83/83 通过,桌面与 390 × 844 手机 GPU E2E 9/9 通过;随后补充鬼火箱色恢复检查并单独复跑通过。已查看默认黑箱、蓝车蓝箱与手机三个选择控件的截图,目录 /tmp/dayun-vehicle-cargo-final/;应用类型检查、生产构建、性能预算及发布校验通过(229 个文件,开发诊断未打包),预算未提高。工作区包含其他并行改动,产物整体变化不单独归因于配色。