How to change viewport frame rate?


#1

Hellow, I’m animator in korea,

I have to work cartoon style animation, It be required low frame animation like japan animation

I tried to set through time configuration(set frame rate 12) But I did not solve it even if I change it. Because viewport just show 30frame.

Should see render output and modify.

This phenomenon makes work difficult.

Help me… How to solve this problem?

I diㄸd not solve it even if I changed it.
I did not solve it even if I changed it.
It is not set even if it is setIt is not set even if it is set


#2

should be as simple as this:

Show me where it’s telling you it is at 30 fps ?


#3

You can’t without a script, max’s viewport always interpolate between frames and there is no option to disable that. A script to solve this can be found here:

https://forums.autodesk.com/t5/3ds-max-animation-and-rigging/lock-playback-framerate-in-viewport-possible/td-p/7053036


#4

CAN’T ? says who ?

//youtu.be/Qyb9s2hW7PY


#5

not convinced ? how about I make it 1fps…that should make it easier for you to count along the seconds in your head…

(This is the SAME teapot as above, moving the SAME distance across the screen, in the SAME number of frames ie. 100. the ONLY difference is naturally the fps).

//youtu.be/8hfY6Ia_-b4


#6

Scenario 1:

  • start a new scene, set frame rate to Custom, 12 FPS. Playback real time, Speed 1x
  • animate away…nothing more to be done.

Scenario 2:

  • you’ve already done your animation from frame 0 to 250 say. This was done in an NTSC file (or PAL or whatever fps…) but you want to retime this to 12fps.
  • Change to Custom, 12 fps, (you may see the numbers in Animation group changes, hit Re-scale Time. Make sure End Time is 250 (your orig end time)…Length and Frame Count should be automatically updated. Tick Re-scale keys to whole frame.

#7

You seem to misunderstand what the issue is. The issue is the viewport update times per second does not match the fps in the time configuration at low fps. In a 1 fps, the pot should move only once per frame, try running the animation at 1 fps in the time config, and then try to run this script which will make the viewport actually play at 1fps and see how different the pot animation updates will be:


for i = 1 to 100 do (
    slidertime = i
    forcecompleteredraw()
    sleep (1.0 / 1)
)


#8

oh yeah, ok…true.


#9

here’s an MCG…the orig MCG on scriptspot has Frames per Step (ie. on ‘ones’ or on ‘twos’…or ‘threes’…etc…) I’ve added FPS (frame per second) option to make life easy. You don’t even have to change Time Config, retime keys…blah blah blah.

Note: this FX is per OBJECT…not SCENE. So as in video below, you can see the sphere is not affected by the Stop Motion FX.

//youtu.be/30wWYJKwi9Y


#10

This is a very old thread, I know, but it pops up first in the Google search, and that snippet of code from @KaaF helped me to write my own somewhat more complex script to play animation w\o frame interpolation, so I figured it might be useful for other people too:

try destroyDialog PlayAnimationSM catch()
animPlayed = 0f
animSt = 0f 
animEn = 0f
rollout PlayAnimationSM "Play animation" width:150 height:58
(
    checkbutton playAN ">" width:36 height:36 align:#left offset:[0,8]
	checkbox isLooping "Loop" checked:true offset:[50,-40]
	checkbox isReverse "Reverse" offset:[50,0]
	timer clock "Clock" interval:1 active:false

	on PlayAnimationSM open do
		(
			clock.interval = ((1.0 / frameRate as float)*1000) as integer
			animPlayed = slidertime
			animSt = animationRange.start 
			animEn = animationRange.end 
		)
		
	on isReverse changed val do 
		(
			if val == true then
				playAN.text = "<"
			else 
				playAN.text = ">"
		)
	on playAN changed theState do
		(
			
			if theState == true do
			(
				animPlayed = slidertime
					if animPlayed == animEn AND isLooping.checked == false AND isReverse.checked == false do 
					(
						animPlayed = animSt
					)
					if animPlayed == animSt AND isLooping.checked == false AND isReverse.checked == true do 
					(
						animPlayed = animEn
					)
				clock.active = true
			)
		)
	on clock tick do
		(
			animSt = animationRange.start 
			animEn = animationRange.end 
			clock.interval = ((1.0 / frameRate as float)*1000) as integer
			
			if isReverse.checked == false then 
				(
					animPlayed += 1f
					if animPlayed > animEn do 
					(
						if isLooping.checked == true then
							animPlayed = animSt
						else
							playAN.state = false
					)
				)
			else 
				(
					animPlayed -= 1f
					if animPlayed < animSt do 
					(
						if isLooping.checked == true then
							animPlayed = animEn
						else
							playAN.state = false
					)
				)
			if playAN.state == true then 
				(
					if (animPlayed+1f != slidertime) AND (animPlayed-1f != slidertime) AND (slidertime != animSt) AND (slidertime != animEn) then
						(
							playAN.state = false
							clock.active = false	
						)		
					else
						slidertime = animPlayed
					forcecompleteredraw()
				)
			else
				(
					clock.active = false		
				)
		)
)
createDialog PlayAnimationSM