名画穿越
一幅画变成一个一镜到底的飞行镜头,穿过由它自己的笔触搭成的 3D 世界:画作炸成笔触隧道,镜头飞过它的地面、水面和山体,穿过云层飞进画里的一点,最后画作重新拼合。
一幅画变成一个一镜到底的飞行镜头,穿过由这幅画自己的笔触搭成的 3D 世界。画作先停留片刻,随即炸成笔触隧道,笔触再重新搭成地面、一直铺到地平线的大海、悬崖和山峰、经过时亮灯的房子、画中的人物、云层、星星和月亮。飞行路线围绕这幅画的主题来设计:先从远处露出主体,再升到它面前、慢慢从正面经过,最后飞进画里选定的一点,退出时画作重新拼合。每一笔的颜色都取自原画,整个世界都由代码绘制。
使用方法
写 scene.json,用 map.mjs 核对水面和物体的识别图以及俯视路线
在主体附近每隔一两秒看一张截帧,修正侧成一条线、悬空、穿进山体或海面到头的镜头
在 Chrome 里渲染 1920 × 1080、60 fps、带运动模糊的成片;报告里列出镜头的转动速度
常见问题
会用到图像或视频模型吗?
引擎不会。3D 世界里的每一笔都是一个从原画取色、按场景表摆放的小方块,成片在 Chrome 里用 Three.js 逐帧渲染,同一份场景每次渲染出的片子都一样。如果人物是画的重点、但扫描里只有几百个像素,可以选择用图像模型把人物重绘一次,再让人物使用这张图;莫奈示例这样做了,花费 $0.31。
什么样的画效果最好?
有清晰地平线、形状好辨认的画:村庄、海岸、田野、夜空。肖像、室内和抽象作品没有可以飞过的地面。请使用公有领域的作品,或你拥有版权的画。
人物为什么不是完整的 3D?
人物就是从原画扫描里剪下来的那个人,再推成一个浅浮雕:身体中间厚、边缘薄,背面对称。人物固定在画家安排的位置,会稍微转向镜头但永远不会侧成一条线,所以正面看是原画的样子,侧面看是圆润的体块。它不是建模出来的人:正侧面看不到手臂和侧脸。
会不会晕?
镜头朝向按 0.75 秒做了平滑,侧倾限制在 4 度左右。render.mjs 会报告整段飞行的转动速度和转动加速度;两部示例在 99 分位都低于 70 度/秒和 90 度/秒²。