FilmForge Motion
Las pinturas se sostienen como fotogramas de película; sin zooms, sin deriva. El movimiento proviene del interior del cuadro: partículas, niebla, parpadeo, ondulación, luz, todo renderizado en la GPU sin costo. El video pago se reserva para lo que el código no puede hacer (un vuelo real, una transformación que es el clímax de la película). Esta habilidad llena el campo motion de cada plano, aplica las correcciones de QA, exporta la línea de tiempo para el renderizador y renderiza la vista previa que el director aprueba.
Rutas: scripts/, templates/ y config/ a continuación son carpetas dentro de esta habilidad (el directorio base que se muestra cuando se carga), colocadas allí por ./install.sh. Trabajando desde un clon del repositorio, son tools/, templates/ y config/ en su raíz.
El renderizador es painted-film-pipeline (Python y GLSL; módulos nombrados a continuación). Todos los valores de píxel son 4K (3840x2160); el renderizador los escala por K = W / 3840, por lo que una vista previa a 1080p usa los mismos números.
Paso 1. Leer el plano
Para cada plano: su ritmo, el estado de ánimo de su escena y guión de color, su duración después del re-tiempo, la música debajo (frases, hits en beatmap.json), lo que ya está en la pintura (fuego, mar, cielo, vidrio). La vida debe pertenecer al mundo de la pintura: ascuas se elevan de un fuego que está pintado allí; nieve cae donde está el cielo.
Paso 2. Elegir su vida (el vocabulario)
| Efecto | Parámetro (campo del plano) | Valores |
|---|---|---|
| Banda de niebla a la deriva | fog + fogc | (fuerza 0..1, y donde comienza, y donde está completa, velocidad de deriva); color (r, g, b) 0..1 |
| Barrido de luz sobre reflejos | sweep | (periodo s, ancho de banda px, intensidad, 0) |
| Parpadeo de fogata alrededor de un punto | flick + fire | amplitud (0.07 a 0.45); (x, y, radio px) |
| Ondulación térmica en una banda | shim | (y completa, y cero, 0, fuerza) |
| Sacudida de cámara | shake | (inicio s, duración s, amplitud px) |
| Transición de entrada / salida | tin, tout | ("fade" o "white", segundos); por defecto es un corte directo |
| Reencuadre | crop | (x0, y0, x1, y1) en píxeles de origen |
| Tinte de partícula | ashc | (r, g, b) |
| Partículas | life | una receta o una lambda sobre los sistemas de partículas a continuación |
| Relámpago | bolts | lista de tiempos en el plano |
| Grieta en vidrio | crack | (inicio s, duración s) |
Sistemas de partículas (painted.py): ash(t, n, wind=(vx, vy), size=(min, max), alpha, seed) para ceniza, polvo y nieve; flakes(...) para copos grandes y suaves; sparkles(t, n, alpha, size) para destellos y estrellas; streaks(t, n, speed) para lluvia; embers(t, n, src=(x, y), spread, rise, life) para ascuas que se elevan de una fuente. Recetas de la película real (film_cut.py): SNOW(n, wind), EMB(n, alpha), GLINT, RAIN, STARS(n), GOLD. Significados completos de los parámetros: references/pipeline-modules.md; recetas probadas por estado de ánimo: references/effects-cookbook.md.
Gráficos (graphics.py, overlays.py): cintas de hilos dorados que se dibujan, se mecen con la música y chasquean (T(points, t0, draw, w)); palabras escritas a mano que se escriben de izquierda a derecha (W(text, t0, x, y, size)); nombres de lugares que se forman a partir del material de la propia escena y se desvanecen (V(...)); el final del título.
Paso 3. Dejar que la música lo impulse
graphics.Drive mide la partitura por fotograma (nivel y pulso). El florecimiento, el destello de ascuas, el brillo del hilo y la respiración del texto lo siguen, por lo que un hit hace que las ascuas brillen sin necesidad de un fotograma clave. Coloca transiciones y sacudidas en los hits de beatmap.json (shake inicio = tiempo del hit menos el inicio del plano).
Paso 4. Escribir el campo motion
En shotlist.yaml, por plano (ejemplo: un plano de bosque en llamas de Simorgh, y el haz de la polilla linterna):
motion:
life: EMB(320)
flick: 0.09
fire: [1920, 1300, 2600]
shim: [2160, 300, 0, 0.8]
ashc: [0.62, 0.55, 0.5]
motion:
tin: [white, 0.4]
sweep: [3.0, 520, 0.35, 0]
life: GOLD
shake: [0.0, 0.4, 10]
Un plano que no necesita nada recibe motion: none (la puerta quiere que cada plano esté decidido).
Paso 5. Aplicar las correcciones de QA
Para cada fix en qa.yaml: ejecuta su llamada (grade.py recolor o blue, un parche, un crop en el plano), escribe el archivo _g, vuelve a medir con ledger.py palette, luego establece done: true. La gradación coincidente (niveles de placa) y la ampliación a 4K son automáticas en el renderizador.
Paso 6. Exportar, renderizar, mirar
python3 scripts/shotlist.py export-cut shotlist.yaml --paintings art/film > code/timeline.py
imprime la línea de tiempo como líneas P_() para film_cut.py. Luego, en el renderizador:
W=1920 H=1080 python film_cut.py still out/frames 6.0 12.0 24.0 # fotogramas fijos en los hits de la historia
python film_cut.py sheet out/sheet.jpg # un fotograma por plano
python film_cut.py video film/preview_1080p.mp4 audio/score.wav # la vista previa con la partitura
Mira la vista previa con sonido. Revisa los fotogramas fijos en cada hit. Luego el director aprueba la etapa de movimiento.
Cuándo pagar por video
Solo cuando el movimiento es la historia y el código no puede falsificarlo: vuelo (el lanzamiento de Simorgh: clips reales con rampas de velocidad), un nacimiento o transformación en el clímax. Calcula su costo en budget.py (Kling 4.0: 16.25 créditos por 5 s a 1080p, más la pintura del fotograma clave); pinta los fotogramas clave primero y pásalos por QA; haz un borrador barato donde el modelo ofrezca un borrador y finaliza una toma. Todo lo demás se cuenta en poses clave pintadas que chasquean (poses: 2), como el anime sostiene una pose.
Salida
- el campo
motionde cada plano (onone) code/timeline.pyde export-cut- las correcciones aplicadas (archivos
_g,done: trueen qa.yaml) film/preview_1080p.mp4, fotogramas fijos en los hits, una hoja de un fotograma por plano
Lista de verificación de puerta
- Cada plano pintado tiene un plan de movimiento o
motion: none - Cada corrección de QA aplicada y re-medida
- La vista previa vista con sonido; fotogramas fijos en cada hit revisados
- Aprobado
Tabla de reparación
| Síntoma | Arreglo |
|---|---|
| Se siente como una presentación de diapositivas | Cada sostenido necesita una capa viva ligada a su mundo (partículas, niebla, parpadeo); varíalas por escena |
| Los efectos parecen pegados | Tiñe las partículas con ashc de la pintura; emisores en fuentes pintadas; color de niebla del cielo |
| Fotogramas ocupados y ruidosos | Menos partículas (reduce n a la mitad), menor alpha; una familia de efectos por escena |
| Los planos de diferentes generaciones no se cortan bien | La gradación coincidente está desactivada para esa placa: verifica niveles; una gradación, grano y viñeta para todos |
| Los efectos ignoran la música | Hits no utilizados: coloca sacudidas, destellos y transiciones en los hits del beatmap |
| El texto es difícil de leer | Muévelo al área tranquila de la pintura (text_area), aumenta el tamaño, reduce la velocidad de escritura |
Referencias
references/pipeline-modules.md: los módulos del renderizador y cada parámetroreferences/effects-cookbook.md: recetas probadas por estado de ánimo, de una película terminada