name: perspective-illusion description: Crea un vídeo 3D ilustrado en bucle que juega con la percepción, al estilo de los artistas japoneses de ilusiones (p. ej. @garments__): una escena aplastada por una lente teleobjetivo se transforma en una perspectiva profunda, objetos que parecían estar uno al lado del otro resultan estar a diferentes profundidades, y elementos intercambian silenciosamente su posición mientras la vista es plana. También para recrear un vídeo de ilusión de referencia, o una nueva escena (calle, supermercado, estación, habitación) en ese estilo. Úsalo cuando te pidan un vídeo de ilusión perspectiva/óptica, un efecto "dolly zoom" o "plano a 3D", o para recrear uno de estos clips.
Ilusión de perspectiva
Las plantillas en templates/ son escenas completas y funcionales, así que empieza desde una:
street.htmles una calle japonesa con postes, conos, un cruce y un cielo rojo.market.htmles un supermercado japonés con un pasillo, expositores de extremo, cestas rojas y filas de luces.
Ambas comparten el mismo montaje de cámara, línea de tiempo y pasaje de ilustración. Solo la sección de la escena es diferente.
Configuración (por carpeta de proyecto)
mkdir -p ~/Movies/edits/<fecha>-<nombre>/stills && cd $_
printf '{"type":"module"}' > package.json && npm i [email protected] [email protected]
cp ~/simcraft/skills/perspective-illusion/templates/{street.html,render.mjs} .
node render.mjs street.html x --stills=0.2,1,2,4,6 # verifica fotogramas primero (stills/st_<t>.png)
node render.mjs street.html out.mp4 # bucle de 7 s, 1920x1080, desenfoque de movimiento de 4 subfotogramas (~2.5 min)
El truco, en cuatro partes
- Dispón la escena a lo largo de un eje largo (una calle o un pasillo que se aleja a lo largo de -z), con elementos alineados detrás de otros: postes o columnas en la misma x, un edificio o pared al fondo. Un teleobjetivo de 2° desde 400 m aplasta todo en una sola elevación. Los postes alineados se apilan en uno, y las paredes laterales largas desaparecen de canto.
- Nunca inclines ni gires la cámara. Siempre mira directamente a lo largo del eje, nivelada, para que las verticales se mantengan verticales. Para "mirar hacia abajo" o "mirar hacia arriba", usa el desplazamiento del lente (
H, la posición del horizonte en el fotograma), como un lente tilt-shift. Cada toma es{x, y (altura de la cámara), zf, W, fov, H, lay, cs}. - Transforma entre tomas como dolly zooms.
Wse mantiene encuadrado en el plano de enfoquezfmientras el fov cambia. Cada parámetro sigue una única curva cúbica monótona a través de todos los fotogramas clave, por lo que la velocidad nunca salta. - Haz trampas mientras la vista es plana. Los objetos (conos, cestas) se deslizan hacia o desde la cámara solo durante las pausas planas, donde ese movimiento es invisible. Así es como una fila se convierte en una diagonal ("intercambio de frente y fondo"). También se pueden dibujar más grandes en la vista plana (
cs).
Cómo recrear un vídeo de referencia (haz esto, no lo calcules a ojo)
- Extrae sus fotogramas en cada toma. Luego, para cada toma, mide:
- dónde están el punto de fuga y el horizonte (obteniendo
H), - dónde aterrizan dos objetos de ancho conocido (obteniendo
xyW), - el borde cercano y lejano de algo de longitud conocida, como un cruce (obteniendo la altura de la cámara
y, la distancia y el fov). Los números resueltos están en los comentarios de la plantilla.
- dónde están el punto de fuga y el horizonte (obteniendo
- Agrupa sus fotogramas en una paleta (k-means sobre 4 fotogramas) y usa esos colores exactos.
- Compara sus fotogramas lado a lado con los tuyos en las mismas marcas de tiempo después de cada cambio.
El pasaje de ilustración (por qué se ve dibujado, no renderizado)
La página renderiza tres pases: color (sombreado plano de dos tonos), normales en espacio de vista con profundidad, y una máscara de sombra solo del sol. Un sombreador final hace tres trabajos:
- Líneas de tinta dondequiera que la profundidad (segunda diferencia, para que el suelo plano visto de canto no se entinte) o las normales cambien. El peso varía según el ruido y la búsqueda se tambalea ligeramente, para que las líneas no sean perfectamente rectas. El umbral de profundidad crece con la distancia.
- Sombreado solo en la sombra proyectada: tono frío y finos trazos diagonales, desvanecidos en superficies vistas casi de canto.
- Cielo (o techo) pintado plano donde no hay geometría.
Problemas encontrados, para que no los repitas
- Un comentario
//añadido en una sentencia de una línea se tragóscene.add(sun), lo que dejó la máscara negra y todo sombreado. Usa/* */, o una nueva línea. - Los pisos coplanares superpuestos parpadean a lo lejos. Haz que las piezas del piso se encuentren borde a borde.
- Una luz que roza las paredes con un ángulo poco pronunciado da sombras propias manchadas. Mantén la luz clave a unos 45° del frente, y evita que columnas de altura completa y accesorios de techo proyecten sombras.
- El texto nunca va en imágenes generadas ni en letreros. Los letreros son solo formas.
- Verifica los fotogramas fijos antes de cada renderizado completo, y ejecuta la verificación de movimiento (
motion_check.pyde vox-explainer).