2
$\begingroup$

I've searched and found some ineffective "solutions" to the issue I am experiencing.

I am animating a flickering candle flame and there is probably a much easier/more effective way to do this, however, I'm extremely new to Blender and CGI in general.

I have an object that I applied my candle flame shader to and opted to use a Noise modifier in the Graph Editor to manipulate the X, Y and Z scale of said object.

Mixing in an emission shader to the object did not give the effect I was going for. I opted to add a point light behind the object and again, use a Noise modifier in the Graph Editor to manipulate the Power and Z location. I also added a low Watt point light in front of the object, to illuminate the front surface, since the light behind washed out the flame shader due to transparency. (I believe)

I've been able to closely match the power of the light to the flame "flicker" size as well.

Where I'm falling short is the seamless loop of the animation. My first and last frames are not even close so there is a stutter at the end/beginning of the animation loop.

I have tried to manually set keyframes at the start and end of the animation. (Did not work) I have tried to use the Restrict Frame Range setting with just the Noise modifier. (Did not work) I tried to switch from Eevee to Cycles and use the Restrict Frame Range setting with that as well. (Did not work)

I really want to stick with Eevee as the Render Engine using Blender 2.8.

I suppose the gist of all this are the questions I have. 1) Is there a more effective/more simple way to achieve this effect using Eevee? 2) Is there a way to make the loop seamless while using the Noise modifier without having to endlessly tinker with the Noise settings to align the first and last frames?

The video is here: https://youtu.be/qjzqhZsvGBw

There is no audio since I don't have a mic yet.

$\endgroup$
1
$\begingroup$

To loop a noise-based animation

One approach, I can't guarantee it's the snappiest, but it has some advantages.

You could use the NLA editor, to make an action loopable, in much the same way as you would make an image tileable in an image editing application. For an image, you might split it down the middle, swap left and right halves, and blend across the discontinuities at the center. Same here.

Here's a noise-based animation, 100 frames, which doesn't loop.

enter image description here

  1. In the Graph Editor, take the curves with noise modifiers, and convert them to actual keyframes, by using Header menu > Key > Sample Keyframes

enter image description here

  1. Switch to a Dopesheet > Action Editor window, and crack open an NLA window below it. An action should automatically have been created, which you can Push Down to the NLA editor, as a working strip.

enter image description here

  1. In the NLA editor, you can ShiftA add a track. Put the cursor halfway down your strip, select it, and Right-Click menu, or Y, split the strip under the cursor.

  2. Now you can select the halves of the strip separately, drag one of them to the spare track, and swap the halves, so the cuts are against the ends of the animation. You will have to shorten the overall length, so there's an overlap between the strips:

enter image description here

  1. To get the automatic mixing in the overlap between the strips you will have to set the Auto Blend in the NLA's N panel:

enter image description here

This example produced a looping 86-frame animation:

enter image description here

.. Which can be baked into an action in its own right by using 3D View > Header > Object > Animation > Bake Action. You can reuse and adjust the loopable noise action with other objects, so long as the same properties are being animated, or even cut and paste the keyframes between channels of different types.

$\endgroup$
0
$\begingroup$

I would try to adjust the animation length so that it fills two conditions:

  • animation ends with curve going the same direction as when it ends - in your example, at start your curve 'falls down', so you should end your animation when curve falls down.
  • I would make sure it ends just before reaching same value as it had on start.

It might not be perfect, due to different momentum, but might get you close enough

$\endgroup$
1
  • $\begingroup$ Thanks for the info. I didn't realize the curves were not going in the same up or down direction at the start and end. I am aware of the offset frames to make things smooth with either a -1 start or +1 end so the last frame is not identical to the first frame. Again, this is taking so much tweaking, which I'm trying to avoid, but seems like I'll just have to spend the time. $\endgroup$ – Digitz Dec 19 '19 at 15:06
0
$\begingroup$

Have you tried adding the F-curve modifier? Make it cyclic, and I believe it should start the animation on the correct frames. I think the hotkey is ctrl + shift + M ?

$\endgroup$
0
$\begingroup$

Since the time of posting, some textures have been updated to 4 dimensional, which may change the parameters of the question.

However, I have a related answer here that I thought would be applicable. In particular, if you offset the coordinate space origin and then rotate in such a way that the noise texture moves upwards through the flame it should provide you with texture distortions that rise just as the hot gas from a flame would rise through the surrounding atmosphere.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.