Thank you for asking @Null - you bring this back from dead.
Answer is I cross-post over to @labris work on DUDE-STORY.
LINK: DUDE STORY - Watch Tower - Episode 001 - #6 by Vinc3r
It contains an important addition. CINEMATIC-NAMING-CONVENTIONS
We found great benefit in creating a LEXICON for describing Cinematic-Animations.
EXAMPLE 1: We call ALL animations → ANMs.
TLDR; Purpose of the text below is to capture some of the many NAMING-CONVENTIONS, a concept we found essential in PROGRAMMATIC-CINEMATOGRAPHY.
Off the top of mind…
The number 1 (surprising) takeaway recently:
- CINEMATIC-NAMING-CONVENTION.
using Theater and Movie metaphor in short capitalized bits.
We arrive at a heirarchy of:
CURTAIN, SHOW, [Manifest, Module/Asset], EPIC, SEQ, FRAME, ANM.
We think of it as an extension (or extrapolation) off of BABYLON.scene.
Cinematography gets confusing quickly. As seen below… the UPPERCASE letters is how we simplify.
OVERVIEW: we needed a STANDARD way to say:
HERO ANM POS ROT, CAM FOC OVERSHOULDER ZOOMOUT POS.
That language (we found essential) to program PRECISION … cinematography.
For the old guys… the concept is similar to … UML.
- Simple conventions above are CAMs and FOC and HERO. We call all cameras CAMS.
Simplification Example of CAMS:
initFreeCAM(); initFollowCAM();
- And frequent use of Focus Targets is simplified to FOC (short for focal point).
FOC - was the confusing ANM that inspired the language.
We needed PRECISION ways to define and track and modify ANMs.
And it gets better!
The language enabled, us to go into difficult territory and label extreemely complex things… simply.
The most interesting… POSROT dynamic PATHS.
Objects we call POSROTS and POSANMs. Trust me, there is a lot to it… check it out!
- POSROTPATHS - are JSON objects of position and rotation.
They can be very long, and ANM on SPEED. We’ve advanced them in many ways. Alll of which came as a surprise… every time (details below). In short, the following was unpredictable territory for us.
POSROTS are VISUALIZED (VIS) (with colored line) and EDITED (box) by a single line of code
Anything can be edited like this:
namespace.edit.masterEditor(any mesh or path). [inspired by gizmo]
Then at runtime, we follow a simple workflow to create many ANMs:
edit and PUBLISH POSROTPATH to console, then copy buffer.
paste the edited POSROTPATH into the code.
And comment out //masterEditor(path);
That is the workflow we use.
We extended this to work on RIBBON, PATH, and MASTER (position and rotation a mesh).
- we had to “decompose path” because too many points.
- We had to truncate the long precision numbers for shorter paths.
- Also sometimes we want to trim out ROTS for straight ANMs etc.
- Some FRAMES need TRIGGER. So we have easy way to trigger… any single frame.
- Meta objects on any ANM FRAME can TRIGGER any other ANM.
It is … fun.
PRINCIPLE: (everything precise and lightweight)
We make dynamic ZONES with a ZoneFactory.
In GameMode - ZONES often TRIGGER MOVIEs.
CONCEPT:
GAME-TO-MOVIE transition… (G2M)
And MOVIE-TO-GAME transitions switch back and forth.
There is also a few others. : )
The surprise with ZONEs?
Loading and unloading. Done per EPIC.
Principle: we dont want a single zone taking up loop-space that isn’t being used.
So we have a ZONE manifest concept. Unload everything, then load the manifest, each EPIC.
We call it EPICINIT() and EPICEND()… init/clean up ZONES, HEROs, PROPs, etc.
Other surprises…
For ZONE-TRIGGERS (and FRAMES) - there is and important simplification concept of ONETIME.
PRINCIPLE: ONE-TIME, never fire any ANM twice.
We do this with a single line of code (simple state flag) on the (frame or) trigger object itself.
if (!thisFrame.init){ thisFrame.init=1; startANM(); //ONE-TIME … }
For sequencing animations… it is used often.
- TIME. We call it DUR or SPEED.
PRINCIPLE: Simplifying time… is good.
We didnt want every ANM to be based on DUR.
Alternatively, we emphasize: SPEED, TRIGGER, DONE, then if no other resort - DUR.
Because there are often, multiple TIMEs. Each easily confusing (hard to name - magic tokens).
And we strive for PRECISION.
EXAMPLE: Curtain Fade out time, Curtain Black time, Curtain fade in time.
we reduce NAMING-CONVENTION to:
curtainFIDUR(), curtainBLACKDUR and curtainFODUR().
- Second example of avoiding time. Most HERO SEQs use TRIGGERs.
Surprise there… new movements usually occur - after HERO is DONE… talking.
So we see often, SEQ-ANM TRIGGERS on TXT.DONE. Not time.
Slow Mo is cool…
… for that we prefer reduced SPEED (not reduced DUR).
Subtle concept that simplifies animations.
We have concepts of SIMULTANEOUS ANMS, SEQUENTIAL ANMS, and ANM LOCKOUTS.
Called: SIMANM, SEQANM, and LOCKOUTs.
With loops that LOCKOUT. Is an easy way to STOP TIME.
LoopLockout - have many ANMS in a LOOP, and easily stop all of them like this…
EXAMPLE:
if(!movieMode){return} //LOCKOUT
TLDR? Yep. But, PROGRAMMATIC-CINEMATOGRAPHY is a passion. So, for that person. I hope you try. I want to help you advance faster…
TAKEAWAYS:
Programmatic-Cinematography is enhanced by a good NAMING-CONVENTION.
Interactive Movies in BABYLON are a certainty.
WHEN WILL THERE BE A FEATURE-LENGTH INTERACTIVE movie-game on the WEB?
Can’t call it FILM.
Start with YOUR STORY. Then follow your JOURNEY.
Thank you for interest in BABYLON.cinematics (concept).