← All ideas
  • Published 6 Nov 2018

We need 4D noise in cycles for GPU.

It's simple, 4D noise is like 3D noise, but by animating along the 4th variable, it appears to transform smoothly, and will always be the same at a certain variable. It's almost exactly as efficient as 3D noise, and its uses are nigh endless, especially in animation. even in still images, it works as a "smooth seed", allowing artists to adjust their textures slightly. Everything from houdini to photoshop, After effects to unreal engine, has 4D noise or some addon created by a user to implement it.

It would be even more helpful for procedural and volumetric workflows, where you could animate a heightmap or the contents of an otherwise homogenous volume

The kicker here... almost every perlin library I've seen or used has it. In fact, it comes standard in Open Shading Language and It's also been implemented up to 3D in blender. Math doesn't make scaling up one more dimension difficult or new, it just makes it a little more tedious than the last dimension. If we wanted to save some rendering time, we could separate the 3D and 4D noise nodes, as 4D does take a little longer to calculate.

(an OSL implementation of 4d noise in blender, as seen in blender.stackexchange.com/questions/8138/how-to-animate-noise-texture-seed .) Image

t8h0i.gif

100%

Development Status: Open

Upvote 37 Downvote 0
nubnubbud
6 Nov 2018

14 Comments

Kavukamari

This is something I've wanted for a while, especially for seamless textures, since you can map circular movement in the 3rd and 4th axis to x and y to make a texture loop on both sides. However, we'd need a "separate/combine xyzw" node to use the data

2
nubnubbud Author

@Kavukamari: I never thought of using it like that, but I hear there's some magic set of variables where you can take any power of two rectangle from any point on the X and Y axis and have it tile, but maybe after effects and photoshop have their own special perlin. (it wouldn't be the first time, or maybe that's what they're doing.)

in any case, we need this, and this is just another reason that hardens my conviction, and +1 point for having separate 3d and 4d noise nodes. I never even considered the need for a fourth output. whoops!

jason

In the past (like Blender Internal), this was pretty easily done by animating the Z offset for the texture. I'd be surprised if that capability didn't still exist.

simonstoschu

@Jason van Gumster: That's not the same. Z is the third dimension. Having 4D Noise enables you to animate Noise within a volume for example and without any shift on an axis (when using auto generated texture coords)

2
jason

@Simon Storl-Schulke: Specifically what value(s) are you animating?

1
marius.oberholster

@Jason van Gumster: You are not animating an axis - it morphs - like a seed value, but smooth. Think of a tumbling cloud of smoke - everything rotates and moves in varying directions, but the overall density remains. You could label it as morph or seed, but there may be a better term for it.

jason

@marius.oberholster: I'd have to see the code for such a noise type. If it changes over time, then it's animated. But the way you're describing it, the user doesn't have any control over that animation. Is that true? If that's the case, then the animation is hard-coded... I'm not a fan of that.

1
marius.oberholster

@Jason van Gumster: No, the animation isn't hard coded at all - I am not a fan of that either. It's just like any other parameter that's animatable. He's talking about an additional "axis" that the texture can be moved on - the 4th dimension. In the 3rd dimension, it's the equivalent of pulling a 3D texture through a 2D surface (like UV mapped and animating Z-axis so it morphs instead of shifting). Only, in this case it's procedural so you don't need to UV unwrap to morph it. en.wikipedia.org/wiki/Four-dimensional_space It is a little trippy when you try to wrap your mind around it at first.

1
jason

@marius.oberholster: I see where you're coming from in this... though perhaps naming that fourth parameter "Time" (as in the OSL example) would be confusing to users. Do we have a better name for that parameter?

1
marius.oberholster

@Jason van Gumster: Time isn't a good name for it at all, since it isn't time. It's more like another axis. That's why I mentioned "morph" as an option. The author of the post suggests something like "seed", which is also fine. Warp is not, because like distort it suggests a twisting, which it's not.

1
nubnubbud Author

@marius.oberholster: most programs call it "evolution", as it's a coherent, constant change from one thing to another when mapped to time.

1
marius.oberholster

@nubnubbud: I understand why they would, but since the texture doesn't change, it simply moves through 3D space, it's not accurate enough imo... Since none of us really do things in 4D it's really hard to come up with something that really pins it down... It's like the new direction names for 4D space: ana and kata. Doesn't sound quite like up, down, left, right, backwards or forwards. Seems heavily out of place, though their reasoning for it makes sense. "Slice" makes sense in a way, because you are viewing a segmented version. "Segment" is also something that can work. Haha, "Terms from a hat!" anyone? hahaha. :)

1
nubnubbud Author

@Marius: the common terms are as listed: "slice", "W translation/transform", "time", "transform", factor, and evolution.

I hope you can see why I prefer evolution for animation. it's also become a de-facto standard, with its use in adobe suite's 3D noise.

ammusionist

(Comment Removed)