# 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 恢复。
