Page MenuHome

Noise textures not renewed when used in composite nodes
Closed, ArchivedPublic

Description

System Information
Linux openSUSE 13.1 x64, KDE 4.13.2. Radeon HD 6870, FOSS video driver (Gallium / Mesa).

Blender Version
Broken: 2.70
Worked: 2.6x. I don't know the precise version, but I remember this method worked an year ago.

Short description of error
In some Blender Internal animations, I use a noise texture in composite nodes to simulate static noise (the grain you get on real life cameras when filming in poor lighting conditions). To do this, I create a plane, create a material on the plane, create a texture on the material, and set the texture to type "noise". This generates a grainy texture, which (most importantly) is randomized each frame. I then put the plane on a layer I don't use (it's only there so I can easily select the texture if needed), go to composite nodes, add a an Input -> Texture node, select the grain texture on it, and link it to a Mix node accordingly.

I noticed that, since recent versions of Blender, the texture was no longer randomized each frame. After digging through the problem a bit, I noticed that procedural noise textures are now only randomized when Blender sees them as being used directly... and composite nodes no longer triggers this. For example, the noise texture is changed each frame if it's present on a surface visible in that frame, or set as a world texture. As a workaround, I set a light which is always visible to use this texture for color but with 0 influence, which tricks Blender into seeing it active and therefore randomizing it.

Please make Blender also randomize noise textures when they are used in composite nodes, even if no object seen by the camera has the texture.

Exact steps for others to reproduce the error
Described above. I also posted a small blend file which shows the problem; Open it up, press F12 to render, select another render layer once it's ready, then press F12 again to render a second time. The noise applied in composite nodes doesn't change between the two render attempts. However, if you add the texture to anything visible in the scene at render time, the texture will be renewed as expected.

http://www.pasteall.org/blend/30068

Details

Type
Bug

Event Timeline

Mircea Kitsune (mirceakitsune) raised the priority of this task from to Needs Triage by Developer.

Can't repro here on Linux with d8b0470; the texture is updated no matter what. Also, could you try with 2.71?

I'm also on Linux, using x64 Blender 2.70, official download from the website. I updated to 2.71 and the problem persists.

The noise texture is really not suitable for any kind of animation IMO. It uses a global random number generator (RNG), so the result depends very much on where and when this RNG gets seeded (initialized). This can happen in a number of places, the texture itself does not use a specific seed value. In the past a lot more code features used the global RNG, but have now been replaced by localized RNGs, which could explain why the behavior became more stable (rBafb4b65).

Generally the randomness of the noise in each frame is a side-effect and not a planned feature. If you want to have noise in animation it is much better to use a "cloud" texture with really small scale, such that all smoothness gets lost between pixels. This effectively gives you a noise texture that looks the same in every frame. To make it random then you can animate the offset or the like (the same would work with the "noise" texture too though).

Thank you, I'll keep this alternative in mind. Still, I prefer the noise texture for simulating static noise, since it feels like it gives the best effect and precisely what I need. As long as this texture will exist and is possible to use of course... I can understand if development changes might make it unusable in the future.

If the new RNG system still allows for such behavior however, my only request is to have the texture being used in nodes (texture / material / composite) also trigger this per-frame RNG. This also feels like intended behavior in the end, since the texture is meant to be randomized whenever it's used, and composite nodes are an use case too.

Bastien Montagne (mont29) closed this task as Archived.Jun 30 2014, 4:47 PM
Bastien Montagne (mont29) claimed this task.

@Mircea Kitsune (mirceakitsune) Lukas gave you a nice solution, see

, Z Offset of the texture node is driven by simply the current frame (i.e. at frame 55 it uses a Z offset of 55), gives good result imho?

Anyway, thanks for the report, but think Lukas explained why it’s not a bug, so closing it for now. :)