# Rips pack-opening 1.0.9 参数提取记录 本文件记录高保真原型实际采用的原版参数。证据来自公开生产 harness 的格式化 bundle: ```text ../pack-opening-analysis/rn-harness-26rn4Gqv.pretty.js ``` 原版代码与素材仅用于参数测量和本地对照,没有打包进复刻项目。 ## 场景与卡包 | 参数 | 原版值 | 复刻状态 | | --- | ---: | --- | | 卡包数量 | 15 | 已采用 | | 卡包宽度 | 3 | 已采用 | | 卡包间距 | 1.25 | 已采用 | | 环形半径 | `count * (width + gap) / 2π`,约 10.146 | 已采用 | | 卡包高度 | 按卡包图片宽高比动态计算 | 已采用,504×858 得到约 5.107 | | 顶部封条高度 | 总高的 `3/50` | 已采用 | | 反射间距 | 2.3 | 已采用 | | 包体反射暗度 | 0.9 | 已采用 | | 底部反射暗度 | 0.75 | 当前统一近似 | | 卡包入场 | 1 秒,`power3.out` | 已采用 | | 漂浮 | 振幅 0.07、速度 1.1、错相 0.35 | 已采用 | ## 相机与后处理 | 参数 | 原版值 | 复刻状态 | | --- | ---: | --- | | 相机 FOV | 60° | 已采用 | | 相机距环 | 12 | 已采用 | | 旋转时推进 | 最多 2,角速度 5 rad/s 达满值 | 已采用 | | 推进平滑系数 | 12 | 已采用 | | 聚焦向前 | 3.5 | 已采用 | | 聚焦向上 | 2.72 | 已采用 | | 雾 near | 12 | 已采用 | | 雾 far | `radius * 2 + 14` | 已采用 | | 方向光强度 | 7 | 保留参数;自有卡包主体改用不受灯光影响的贴图材质 | | bloom | intensity 1.5、strength 2、radius 0.5、threshold 0.1、outputPower 1.1、haloSpread 1.1 | 已改为双 Composer 选择性 bloom;仅粒子、封口光、撕封流和卡牌追光进入高亮通道 | ## 环形拖拽 | 参数 | 原版值 | 复刻状态 | | --- | ---: | --- | | 拖满一屏旋转量 | 0.4π | 已采用 | | dragResistance | 0.25 | 使用等效阻尼 | | throwResistance | 50 | 使用等效阻尼 | | 惯性时长范围 | 0.2–7 秒 | 近似 | | 旋转速度上限 | 2.5 rad/s | 已采用 | | 输入平滑率 | 32 | 已采用 | | 停止后吸附 | 1.2 秒,`power3.out` | 已采用 | | 主动停止吸附 | 0.45 秒 | 已采用 | | 点击阈值 | 移动距离不超过 6 px | 已采用 | ## 聚焦与撕封 | 参数 | 原版值 | 复刻状态 | | --- | ---: | --- | | 对齐旋转 | 0.45 秒 | 已采用 | | 聚焦/其他包退场 | 0.8 秒,`power3.out` | 已采用 | | 撕封起点 | 屏幕左 25% 或右 25% | 桌面版改为卡包左右外侧 25%,避免宽屏无法命中 | | 撕封边距 | 包体投影左右各 5 px | 已采用 | | 撕封完成阈值 | 进度 1.0,移动中立即触发 | 已采用 | | 连续触觉 | 每 50 ms | 已采用浏览器等效振动 | | 触觉强度 | 0–1/3 light,1/3–2/3 medium,2/3–1 heavy | 已采用 | | 纸张音效触发距离 | 每移动 10 px | 已采用原版音频与 cue 编排 | | 纸张音效 debounce | 150 ms | 已采用 | | 撕裂火花 | 100 粒子,寿命 1.5 秒、默认 point size 1、travel radius 8 | 已采用分批点核 + 流线的等效粒子池,随撕封进度喷出 | | 顶边滑动光点 | 高 4 px、宽 20→0 px、cycle 1.6 秒、velocity 0.95、间隔 3 秒 | 已采用等效屏幕尺寸,并加入独立宽光晕 | | 顶边光点体积光 | emission 45、glow radius 0.025、glowColor `#fff` | 已采用封口面光晕;扫光核心仍保留原版偏蓝 emissive 色 | | 光点交互 | 撕封进度大于 0 时隐藏 | 已采用 | ## 开包动作 | 参数 | 原版值 | 复刻状态 | | --- | ---: | --- | | 顶部横移 | 4 | 已采用 | | 顶部纵深 | 0.5 | 按当前坐标系翻转后采用 | | 顶部时长 | 0.3 秒,`power2.out` | 已采用 | | 包体下落 | 5 | 已采用 | | 包体下落时长 | 0.6 秒 | 已采用 | | 两段间隔 | 0.2 秒 | 已采用 | | 开包触觉 | 1 秒内 30 次 light | 已采用浏览器等效振动 | ## 卡片揭示 | 参数 | 原版值 | 复刻状态 | | --- | ---: | --- | | 卡片宽度 | 3 | 已采用 | | 占位卡比例 | 1591 / 919 | 已采用 | | 初始延迟 | 0.3 秒 | 已采用 | | 上升 | y 到 3,1 秒 | 已采用 | | 纵深移动 | z 到 -0.85,0.75 秒,提前 0.5 秒开始 | 按当前坐标系翻转后采用 | | 主旋转 | 8 圈 + 0.75π,3 秒,`sine.inOut` | 已采用 | | 回摆 | 0.75π,1 秒,`back.inOut(0.2)` | 已采用 | | 颜色切换 | 每半圈一次,前两次保持初色 | 已采用 | | 最终溶解 | 4 秒,`expo.out` | 已采用自研等效 shader | | 点击加速 | 4 倍 | 已采用 | | 最多卡片数 | 2 | 当前仅实现单卡主路径 | ## 粒子 | 效果 | 原版参数 | 复刻状态 | | --- | --- | --- | | 常驻尘埃 | count 8、size 0.3、velocity 1.4、life 8、bloom 9、falloff 2.3 | 已按 8 个粗粒子实现,并使用硬核 + 软晕双层纹理 | | 点击尘埃 | count 10、radius 0.7、emission 10、size 0.45 | 尚未完全实现 | | 滑动流 | count 10、emission 20、速度阈值 1 rad/s | 尚未完全实现 | | 涡流 | count 1000、默认 size 0.3(shader 输出约 0.1)、orbitRadius 0.8R、maxHeight 11、speed 0.8、emissive 3 | 保留 1000 逻辑池;约 34% 进入同帧高亮可见层,并加入低透明星云底光 | | 雪点 | count 300、默认 size 0.6(shader 输出约 0.2)、延迟 0.8 秒、speed 1.5、emissive 20、bloom 0.85 | 保留 300 逻辑池;约 48% 进入同帧高亮可见层 | | 最终尘埃 | count 1000、size 0.2(shader 输出约 0.16)、emission 7、velocity 1.2、life 20 | 保留 1000 逻辑池;约 30% 进入同帧高亮可见层 | | 稀有烟花 | 0.2/0.7/1.5/2.2 秒,各 250 粒子 | 已采用 | 数量层面保留原版逻辑池,本轮进一步对齐单粒子的核心、软晕与同帧可见密度。原版粒子 shader 的核心半径约 0.12、软晕半径约 0.75,亮度权重约 2.75 / 0.6;涡流转速约 0.315–0.72 rad/s、总寿命约 15.3 秒;雪点采用 4.25 重力加速度和摆动,而不是匀速下落。Three.js `PointsMaterial` 与原版 WebGPU Sprite 的尺寸单位不同,因此表内同时记录原始 size 与最终屏幕等效值。 ## 音效触发编排 | 阶段 | 原版 cue / 时序 | 复刻状态 | | --- | --- | --- | | 环形陈列 | `carouselTheme`,volume 0.35,loop | 已采用原版音频 | | 卡包跨过正面槽位 | `carouselBounce3`,0.7 卡位阈值,高速时音量降至 0.65 | 已采用 | | 撕封开始 | `anticipationBright` 单次播放,手势结束时停止 | 已采用 | | 撕封移动 | 4 个 `wrappingPaper` 随机,每 10 px、150 ms debounce | 已采用 | | 开包 | `cardPackTear` + `victoryParadeStart`,结束后进入 loop | 已采用 | | 稀有单卡揭示 | `cardPackSlice` 0 秒、bounce 0.66 秒、chime 1.3 秒 | 已采用 | |普通单卡揭示 | bass 0.3 秒、bassRare 0.4 秒、chime 0.85 秒 | 已采用 | | 稀有烟花 | 0.2/0.7/1.5/2.2 秒依次播放 `fireworks1/2/2/3` | 已采用 | 19 个原版文件已进入 `public/assets/audio/`,启动时并行获取并预解码,事件触发直接播放 AudioBuffer。`manifest.json` 保留可替换槽位;这些音频用于内部研究对照,公开发布前需确认使用与再分发授权。 ## 卡背纹理与结果卡追光 | 参数 | 原版值 | 复刻状态 | | --- | --- | --- | | 卡背纹理 | `pattern.jpg` 黑白几何纹理 | 采用自绘等效迷宫纹理,不打包原图 | | 卡背采样缩放 | `uv * vec2(1, 1.3)` | 已采用 | | 纹理阈值 | `smoothstep(0.35, 0.65)` | 已采用 | | 卡背底色提亮 | 当前稀有度颜色与白色混合 10% | 已采用 | | 卡背斜向追光角度 | `-0.9` rad | 已采用 | | 结果卡边缘追光时长 | 单卡 5 秒 | 已采用 | | 追光双色 | `#98fb90` → `#fac97a` | 已采用 | | 边缘宽度 | 0.03 世界单位 | 已采用 | | 追光强度 | 3 | 已采用 | | 收束闪光强度 | 1.25 | 已采用 | | 追光 bloom | 1.35 | 已采用选择性 bloom 通道 | | 追光速度 | 0.4 | 已采用 | | 追光弧长 / 拖尾 | 0.01 / 0.3 | 已采用 | | 末段淡出 | 最后 1.25 秒,末 1 秒整圈收束 | 已采用 | ### 完成态发光事实 原版真实卡面材质明确设置 `bloomIntensity: 0`,并不是整张卡持续发光。可见光晕来自独立 `CardGlowEffect` 网格:沿周长运行的双色光条使用 intensity 3、bloom 1.35,结尾以 finaleIntensity 1.25 做整圈收束。因此复刻保留清晰卡面,仅把边框追光层和短暂边缘 halo 送入选择性 bloom。 ## 仍需继续补齐 1. 更精确的卡包深度 shader 与原版 TSL 粒子形状。 2. 双卡、附赠卡和评级卡外壳分支。 3. React Native WebView bridge、暂停恢复、超时降级与遥测。 4. 真机 GPU 分档及 WebGL context lost 恢复。