Introduction
SceneDirector is meant to become the Swiss Army knife of atom state management and scene scripting.It's based on my personal ScenePlugin, which was used to drive the DildoLanguage demo scene, as well as all my personal scenes. But it had no UI to speak of and was never intended for public release. This is a complete rewrite, based on similar ideas, with proper UI. Hopefully you will find one of its many features useful!
This version is considered a preview release. It's still under heavy development and probably missing some features you'd expect to be already there. But maybe not missing various annoying bugs. It's already powerful enough to drive the stand-alone release of the DildoLanguage Scene, where it's used to control the states of all atoms in the scene:
- Move the dildos around, switch their Master Presets.
- Pose and Animate the girl, now with randomized idle animations smooth transitions between the poses. Note: all animations in the scene are pose-based, this plugin is not meant to replace Timeline in any way.
- Control the UI, including the small sliding animations, dynamic text on the buttons, switching the text and images on the main panel, as well as presenting the penetration data on a text panel in the last part of the demo.
Basic Usage and Feature Overview
To start with the basics, to even check out what the plugin is all about, follow these simple steps:- This is a Scene Plugin, so add it as such.
In this preview version it does not bother checking if it's installed as a scene plugin. In fact, nothing should change if you install it on any atom - it does not care, it will control atoms you tell it to, the one it's installed on does not matter. It will just make it less convenient to use. - Tell the plugin which atoms it should control. Do that on the Atom-Add/Remove tab, which should open by default. In the images below we'll use a simple sphere.
- On the Components tab, you can choose which aspects of the atom will be controlled by SceneDirector. Let's leave it at defaults for now, that's advanced stuff.
- On the States tab, press Add State to record the first state of the added atom. This will tell all its enabled Components to capture the current state from VaM.
- If you want to, you can now tweak the state directly in the plugin's UI.
This first version does not live-update the state properties, so you will need to click the Apply State button to see the changes. - You can also rename the state to anything you want. I strongly recommend naming things in the plugin in a sensible manner, leaving everything to State N and Pose M and what not will lead to a hard to maintain mess sooner or later.
- Now move the atom around, or change its material color directly in VaM (not in the plugin, we don't want to modify the current state anymore).
- Then press Add State to capture another state.
- Now you have two different states of the atom captured in SceneDirector and you can quickly switch between them. Just select a state in the State Dropdown, and then press Apply State to apply it. You can naturally do that from triggers as well.
- By default the states will snap-apply. Or basically teleport to their captured position, and change its recorded attributes. But you can ask SceneDirector to transition smoothly between the recorded states instead:
- Switch to the Transitions tab.
- The selected state is the one we are transitioning from.
- The individual rows below show all other captured states of the atom and represent the states we would be transitioning into.
- Simply enable the toggle on the target state's row to enable the default transition between the two states (1 second long). You can tweak each transition's properties below
- And that's it, applying the states will not transition between them smoothly
Step 2: Add an atom to SceneDirector's control
Step 4-6: Capture atom's state, change the captured state, apply the state.
Step 7-8: Add and capture another state.
Step 10: Transitions
Those are the very basics, the plugin can already do much more, which will be documented in more detail below. Some of the features include:
- Many types of atoms implement components giving you access to features not available through VaM directly (for example, recoloring CUA atoms).
- There are atom components specific to the plugin that's enabled on the atom. Giving easy access to basic plugin features without having to go into each plugin's options. And letting you smoothly transition those plugin settings too!
- You can organize atom states into Poses. A pose is basically a list of atoms and which states should be applied for them. Applying a pose them applies all those states in one go.
- You can use some poses as sub-poses, which is a simple way to define default states for a bunch of poses in one go, instead of telling each atom what to do in every single pose.
- You can organize Poses into Chapters. For more convenient switching between the poses.
- For person atoms, the Placement component can capture, apply and transition not only positions and rotations of all controllers, but also their parenting state, position/rotation state and many physics settings (spring strengths). You can smoothly transition from one character pose to another, while switching to which body part is a hand parented, for example.
- For person atoms, you can capture any Morphs. You can categorize all existing morphs into groups, and then capture/apply/transition states of any of those morphs.
- Define mid-states for transitions. The transition will then first interpolate to the mid-state, before continuing to the target state.
- Enable and configure several sub-states for a state. When the state is then active, it will then automatically animate between mixes of those sub-states, according to the configured rules.
- You can define Variables and Expression. This lets you use the power of math to driver various atom properties.
This is currently under heavy development. The variables and expressions core is already quite complex and powerful, but where the results can be applied is rather limited at the moment, basically to dynamically producing texts on UI atoms.
- All dildos in the demo have a ton of states captured for them, especially the main hero common-cock-dildo (Dildo1 atom). The states record various positions in the scene, the presets they should morph into, and also fluids toggles.
- The poses are used for individual... well... poses in the demo. Telling each dildo, the girl, and the UI, what they should do.
- Each section of the demo, represented by the individual buttons on the left side, is a chapter.
- The chapter selection buttons change their state depending on which chapter is active, and use dynamically formatted text to show the progress through each chapter.
- Same goes for the penetration monitor panel that pops up during the last chapter. All texts on there are driven by variables set from the dildo's penetration monitor.
- The girl uses many poses, smoothly transitions between the poses with mid-states where a direct pose interpolation just looks plain-bad. Sub-states are used to animate all her idles.
- Live editing. Changing atom properties in the plugin's UI is not reflected until Apply State is clicked.
- Capturing more base properties of core atoms. Not all attributes you'd expected to be captured are supported yet, such as the atom scaling.
- It will be possible to configure the plugin to capture any atom properties accessible through VAM's trigger/storable system. Until that's done, the amount of properties that can be captured in states is limited to only those supported directly by the implemented components.
- A way to drive any atom property supported by the plugin (including custom ones from the step above) by expressions. You will be able to math the whole scene! For now the expression/variable system can be used only to format the results as texts on UI elements.
Terminology
Already used in the basics overview above, but here is a "short" list of the terms used in the plugin:- Controlled Atom: Atom added to the plugin on the Add/Remove tab. It does not matter on which atom is the plugin installed, it will always control just the atoms you tell it to on this tab.
- Atom Components: Depending on the atom's type and the plugins enabled on the atom, several components will be automatically enabled on the atom. Each component controls different aspects of the atom. On the Components tab you can then disable some of them if you don't want to control that atom's aspect, configure additional features of some components, or move the components around (just for UI ordering purposes).
- For example, the Placement component controls the position, rotation of the atom. Also of all its controllers. And their linking/position/rotation state. And some of their physics properties (hold spring strengths and such). Also position and rotations of their bones (for character atoms) and rigidbodies (for atoms with physical objects in them, including CUAs.
- The Material component lets you control various aspects of the object's materials, such as Diffuse Color, or glossiness attributes. To prevent UI clutter some material properties won't be exposed by default.
- The Light component controls various aspects of the light (surprise, right?!). Such as its color, intensity or range. But also properties not normally available in VaM, such as advanced shadow settings, or Unity's global Shadow Quality settings.
- Atom States: Each state stores all properties of the components enabled on the atom. You can capture a state, which will store the current atom's attributes from VaM. Or you can edit the state directly in the plugin's UI ; to some extent, for example it has no UI to move around character control nodes, naturally.
- Atom State Transitions: By default, when applying an atom's state, it snap-applies. Which means, all the captured attribute values will be applied to the atom directly. For placement for example, the atom will effectively teleport. You can define transitions for any pair of the states, then the attributes will transition smoothly from one state to another according to the transition's configuration.
- Transition Mid-State: An optional state recorded for a transition. If defined, the transition will go to the mid-state first, then to the target state.
- Atom Sub-states: One state can have any amount of sub-states recorded. If this is enabled, the atom will the automatically animate itself by smoothly transitioning between the sub-states, or mixes of the sub-states, according to the configured rules
- Poses: A pose is a collection of: a) Atom and their states ; b) Sub-poses. When a pose is applied, it tells all its atoms to apply the corresponding states. This includes atom-state pairs defined in any referenced sub-poses, recursively. If a state is defined multiple times for the same atom in the pose, the last one (top-down) "wins".
- Chapters: Each pose belongs to one chapter, making it easier to cycle through poses within one chapter, or switching between chapters. A chapter can be marked as skip-over, in which case all poses inside the chapters will be... skipped over! When cycling through poses in the scene via the prev/next triggers.
Common UI Features
The UI uses the rather traditional tabbed interface. There is not much to explain there, I believe.In addition to tabs, most of the UI sections are then split into parts by what I call Rich Separators. These separators reuse common elements:
1. Check toggle. Enables and Disables the whole section. Disabling a section not only hides the section, but also disables its effect. For example, disabling the Placement component on a controlled atom will completely stop the plugin from capturing and applying any placements for that atom (you can then control those by a timeline, for example), while using the ScenePlugin to control other aspects.
2. The up/down arrows simply move the section up or down in the UI. It has no effect on the functionality, it just lets you organize the UI to suit your needs.
3. This button lets you Collapse and Expand the section. This is also purely for UI organization, a collapsed section will simply hide its contents, but its effects will still be applied ; unlike Disabling a section (which will also hide the contents).
4. The cross button will completely Remove the section. In this example, it would delete the variable (but only if it's not used in any expressions or drivers).
5. The dot icon Captures the State. If used in the context of a component section, it will capture only properties controlled by that component, leaving everything else untouched.
6. The "play" icon Applies the State. Similar to capture, when used in a component's context, it will apply only properties captured by that component. Note that applying just one component's state is purely a UI feature. To make an atom apply only some of its components when applying its state through poses or triggers, disable that component from that atom's state instead.
Demos
Rather than writing more walls of text, I will implemented few smaller demo scenes showcasing the features of the plugin. Once it's more mature.Until then, I recommend checking the DildoLanguage Tutorial/Demo. Load it, open the scene plugin and check how it's been created.