Eric wrote:Presently the Ramp/Sine/Tri modifiers take an input value which affects their speed. So it would be doable when selecting a global variable source.
I hadn't realised I could do this already, so I thought I'd play around a bit.
I simulated a global variable by feeding a continuous sine wave into the audio and varying the amplitude. BPM must always be positive, so I think sine wave amplitude (measured by the Volume feature) is a perfect analogue.
Modules were configured to vary Speed, Angle etc as follows
...Source: Input 0 (The continuous sine wave)
...Feature: Volume
........ Scale: (varied for desired effect)
........ Ramp: 0.0
I noticed with the RotateAxis module's angle control, and the Video module's Speed control:
- Negative values for entered for scale were ineffective and the motion stopped altogether instead of reversing direction.
- With the GLSLShader module's Speed, a negative value for scale worked as desired.
I have no problem with these behaviours, although I don't understand the restriction with RotateAxis.
Initial findings: Very promising results, with multiple shaders etc tracking the global speed control
- Could only be sustained for a short time before compromised by drift.
- Very difficult or impossible to exactly match speeds of various shaders, either with each other or with transform modules.
- Problematic not being able to control relative phase of motions within shaders, eg when bounces or direction-reversals occurred.
Conclusion: Means of controlling shaders with the same precision as videos is necessary for syncing.
- Feed a shader with an absolute time value that could be reset to a desired start time on scene change.
- Set an end time/loop point, to match one cycle of movement.
- Ideally a normalising scaling factor would then be computed automatically, needed to map one cycle of shader movement to an desired number of beats/bars.
- Perhaps have an option to cross-fade back to time-zero for looping a shader that does not have a natural or short repeat period.
- Saves having to render a shader's output to a video clip to gain phase control & looping.
- Useful to be able to sync modules directly, feeding a global variable from a particular module's music-responsive parameter.