用途:用文本字符渲染动态画面,输出轻量且辨识度高,可用于浏览器(<pre>/canvas)、终端(ANSI)以及叠加在 Three.js 3D 场景上。适用场景包括终端/CLI 开场、加载器、横幅、复古风格,图片/视频帧/3D 场景转 ASCII,以及生成式文本场(等离子、正弦波、噪声、隧道)。
主要能力:核心是亮度映射(brightness ramp),把亮度 0..1 映射到墨密度匹配的字符,按暗到亮排序,用 Math.round(lum * (ramp.length - 1)) 取索引;提供 10 级、16 级和 Paul Bourke 70 级等常用 ramp。相对亮度按 sRGB 感知权重计算:const lum = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255。需注意字符单元宽高比约 0.5,采样行数应少于列数:rows = Math.round(cols * (imgH / imgW) * fontAspect),fontAspect ≈ 0.5,否则画面会纵向拉伸。
使用方式:网页渲染可用 <pre> + textContent(简单,约 120×60 字符、30fps 内可行)或 canvas fillText(支持逐字符颜色、更大网格、60fps)。图片/视频转 ASCII 时先绘制到小尺寸离屏 canvas,再用 getImageData 逐像素映射;视频按帧重复。3D 场景用 Three.js 的 AsciiEffect 包裹渲染器,循环中调用 effect.render(scene, camera) 而非 renderer.render。终端动画用 ANSI 转义码:隐藏光标、光标归位、打印帧,节流到 12–24fps,退出时恢复光标。
交付与验证:独立网页作品交付为一个可直接打开的 HTML 文件,内联 <pre>/canvas、ramp 和 requestAnimationFrame 循环,无需构建步骤。帧应由可注入时间驱动并固定随机种子,支持 ?t=N 冻结单帧以便截图复现;可用 npx playwright screenshot 等无头工具在多个模拟时间点截图检查。完成前应确认无控制台错误、字体已加载、无纵向拉伸或反色错误,并尊重 prefers-reduced-motion。
限制:资料未提供收费、价格、平台支持范围等信息;具体实现细节以技能内 references/rendering.md 和 scripts/img-to-ascii.mjs 为准。