Files
rhinelab-ui/verification/INTERNAL-OPTICS.md
T

3.1 KiB

内部模型专项打磨

日期:2026-09-09。需求:更锐利的内构边缘、半透明磨砂质感、改善两环连接处。继续采用 Blender MCP 建模;外壳与交互规则沿用现状。

几何与法线

  • art/internal_architecture.py 生成环形屋面、直立壁板、内孔薄阶、橙色嵌带、84/52 根立面细肋与连续连接薄片。art/clear_reference_details.py 保留外盖压槽、浮雕文字等已有细节。
  • 环形面沿圆周使用 192 段并平滑插值,在截面折边处使用分裂法线;不跨屋面与侧壁平均法线。切边为小平面。橙色嵌带也采用直壁截面。
  • 连接薄片为一条三次贝塞尔路径,两端导数与环切线一致,宽度 0.225–0.260,烘焙后厚度 0.008。截面角处断开法线,沿路径平滑;两端展宽、中央浅拱。
  • 导出前断言内构位于盖板与基板之间;GLB 实测内构深度 -0.0340000 至 0.142399997。没有左侧高塔。
  • 通过 Blender MCP 顺序执行 art/build_archive.py 和 art/build_assembly.py,保留单体与拆解 .blend。先导出至 art/.cache,成功后替换产品 GLB,避免浏览器读取到半写入文件。

材质

src/internal-optics.ts 定义四类内部玻璃表面:壁板、屋面、切边和连接片。使用粗糙高光与掠射角透明密度,保持薄片的平面感。闭合薄层使用正面绘制,避免前后表面重复加深。

Three.js 的外层 transmission 捕获不包含其他 transmissive 网格。因此内构先在不透明捕获序列中,以自定义 alpha 混合绘制到基板与细肋上,外盖再折射已经合成的内构。它是实时薄层透明近似;没有完整体积散射或多层路径追踪。基线灯光和外盖清晰/磨砂参数未改变。

验证

  • node --experimental-strip-types scripts/check-internal-optics.mjs:通过。外壳顶点误差 0、法线误差 0;内构三角形几何法线与着色法线最小点积 0.9997446,说明折边未再次被平均成圆角。四种半透明材料与一条连接薄片检查通过。
  • node --experimental-strip-types scripts/check-assembly.mjs:通过;六组装配与单体顶点最大差 1.688e-7,高度 3.70000005。
  • node --experimental-strip-types scripts/check-decryption.mjs:通过;包含实际 GLB 的内构空间约束与材质连续切换绑定。
  • npm run build:通过,保留既有包体大小提示。
  • reference/decryption-check.html:8 项真实应用检查通过,覆盖解密、清晰/磨砂反向切换、拆解时切换、返回详情及中途退出。
  • 浏览器复核:无遮挡的斜视、连接处 1.6 倍放大、清晰装配与磨砂装配。外盖透视正常,原片与模型仍有材质、比例及光照差异,最终效果待用户查看。

对照

reference/internal-review.html 保留本轮打磨前与当前资产,可切换三种装配显示、三个角度及放大。两边共用相同灯光与视角。网格用于展示透明层次,仅存在于本地对照页。打磨前资产为 reference/internal-study/assembly-before.glb;此前正式版本可从提交 89c7742 恢复。