How to Animate a Ping Pong Loop in 3ds Max Using Waveform Float

Published on February 04, 2026 | Translated from Spanish
Screenshot of 3ds Max showing the Waveform Float controller properties dialog configured with the Sine waveform and Ping-Pong method enabled, in the curve editor.

How to Animate a Ping Pong Cycle in 3ds Max Using Waveform Float

When you need an object in 3ds Max to move back and forth continuously, the Waveform Float controller is the ideal tool. This approach avoids having to manually duplicate keyframes and establishes a perfect base for more complex animations. 🎬

Setting Up the Wave Controller for Oscillating Movement

Start by opening the Curve Editor and select the parameter you want to oscillate, such as position on an axis. In the controller assignment dialog, select Waveform Float. The magic happens in its properties panel.

Key Steps for the Ping-Pong Effect:
  • Choose the Waveform: Use Square for abrupt transitions or Sine for smooth and natural movement.
  • Define the Period: This value controls how long each complete back-and-forth cycle lasts.
  • Enable Ping-Pong: Change the Effect option to Ping-Pong. This makes the value automatically oscillate between the limits you set, creating the infinite loop.
The main advantage is that the main timeline doesn't get saturated with keyframes. The ping-pong cycle operates as a base layer that's always active.

Adding More Animation Over the Base Cycle

The true power of this technique emerges when you want to combine movements. Since the loop is automatic, you can insert normal keyframes after the cycle range on the timeline. The new animation will add to the oscillating movement.

Practical Example:
  • A pendulum that swings (ping-pong) while simultaneously moving across the room (position keyframes).
  • A light that flickers rhythmically while changing color or intensity.
  • An object that vibrates in place while advancing along an animated path.

A Final Tip Not to Forget

Setting up the loop is straightforward, but it's easy to forget it's active. If your object starts behaving unexpectedly hours later, first check the curve editor and verify the assigned controllers. Keeping an organized workflow will save you debugging time. 🛠️