Resume          About

Lotte New Year Greeting & Season Visual









Problem-Solving: Dragon Body


Assigned to move dragon body along a path, dragon should change its speed during video
In this project, the precise depiction of the dragon's movement was crucial. I'll detail my approach in expressing its dynamic motion, the challenges encountered, and the solutions applied to bring this majestic creature to life.



   - Usual Solution’s Problems

The echo effect is a popular solution for patterned object animation. However, the effect affects the main object’s speed. Therefore Dragon Body stretches or shrinks depending on its speed 


Time Remapping of lineal speed animation is also popular. However, secondary animations, such as hair, mouth, and whiskers, move fast or slow along to body movement speed.



   
   - Expression Solution
Applied this script to a body pattern and duplicated the layer, then automatically the duplicated body pattern will located at the location value of Head  


sliderValue = thisComp. layer ("Position Controller") .effect("Control Slider") ("Slider") ;  

  • This line stores the value of the "Slider" from the "Control Slider" effect in a layer named "Position Controller" within the current composition (thisComp) into the variable sliderValue.


progressProperty = thisComp. layer ("Trace_Body_Null") .effect ("Trace Path") ("Progress')

  • This line stores the "Progress" property from the "Trace Path" effect in the "Trace_Body_Null" layer into the variable progressProperty.



numKeys = progressProperty. numKeys;

  • This line stores the total number of keyframes set in progressProperty into the variable numKeys.



startValue = progressProperty. key (1) . value;

  • This line stores the value of the first keyframe of progressProperty into the variable startValue.



endValue = progressProperty. key (numKeys) . value;

  • This line stores the value of the last keyframe of progressProperty into the variable endValue.



timeAtSlider = linear (sliderValue, 0, 100, progressProperty. key (1). time + framesToTime (165) - framesToTime ( (index-1) ×3) , progressProperty. key (numKeys) . time + framesToTime (165) - framesToTime ( (index-1) *3) ) ;

  • This line calculates a corresponding time based on converting the sliderValue from 0 to 100. This time is based on the times between the first and last keyframes of progressProperty.



prevValue = progressProperty. valueAtTime (timeAtslider - 0.0001);

  • This line stores the value of progressProperty at a moment just before timeAtSlider into the variable prevValue.



nextValue = progressProperty. valueAtTime (timeAtSlider + 0.0001);

  • This line stores the value of progressProperty at a moment just after timeAtSlider into the variable nextValue.



selectedValue = linear (sliderValue, 0, 100, startValue, endValue);

  • This line calculates selectedValue by linearly interpolating between startValue and endValue based on the value of sliderValue.


linear (sliderValue, 0, 100, prevValue, nextValue);

  • The last line returns a value linearly interpolated between prevValue and nextValue based on sliderValue.



Credits

Studio: Good Friends

Senior Producer: Megan Flaherty

Animation: Woo Young Kim, Yeulhee Kim

Design: Chae Byungrok

Composition Design: Yeulhee Kim




More Projects