I have a cube with a subdivision surface. I'm using the set position node, and a noise texture, to make the object bumpy. (See Photo) When I duplicate the object, I'd like the location of the noise to be randomly different on the other object. Is there a way to randomize the vector location of the noise texture per-object? Thanks!
-
$\begingroup$ blender.stackexchange.com/questions/250752/… $\endgroup$– BenusJan 25, 2022 at 4:12
-
1$\begingroup$ @Benus The linked solution suffers the same problem as Chris' answer. Moving the objects around changes the noise and every object will look the same as another when moving into the same location, so it's only a solution for static objects (and I guess that's not what Ryan had in mind). $\endgroup$– Gordon BrinkmannJan 25, 2022 at 8:21
-
$\begingroup$ Yeah, I would like the noise to be randomly different when you duplicate the object, but I don't want the noise to move when the object moves. To help you understand what I’m after: I’m trying to create a geometry node setup that will procedurally generate rocks. And every time you duplicate the object, it will randomly generate a different shaped rock. If this isn’t possible with geometry nodes, that’s ok. $\endgroup$– Ryan King ArtJan 25, 2022 at 17:00
2 Answers
This task seems quite simple at first glance, but on closer inspection it is quite tricky.
The problem here is that "random" is not really random in this case. From the outside it is, of course, but within a node tree it is not.
If you apply a node tree multiple times, the random value created in it will give the same result in all use cases, because the node Noise Texture
generates the values based on the positions, which are always the same in all use cases.
Normally this is not relevant, because a random value is mostly related to the positions of the single vertices/edges/faces, but exactly this position should not be variable in your case.
If you use the position as a variable, you will get exactly the result you don't want: The random value changes when you move the object.
Therefore you have (at least) two possibilities to avoid the problem:
Variant 1
Control via Group Input
One possibility would be to "feed" an individual value from outside into the nodes, so that within the nodes a unique value can always be generated.
This could look like this:
Here I have created a Group Input of type Integer, where the vector for the node Noise Texture
changes when it is modified.
This way, even when you move the object, the noise remains unchanged.
However, you have to set an individual "Seed" value for each object.
Variant 2
Control via Index
Another option would be to feed this variable value into a node tree from the outside, and create all objects in this one tree.
This could look like this:
Here I first create several Empties in a Collection. I use these as positions for the individual rocks.
Then I first use the node Collection Info
in the node tree and instantiate several cubes at the positions of the Empties in it.
After that I capture the index and the position of the instances. The index is crucial here, because with this unique value per instance I can now control the displacement.
Unlike the previous variant, however, the position of the individual objects is always relative to the zero point of the object in which the nodes operate.
Therefore, I also capture the position of the instances to be able to compensate for this difference and achieve a displacement from the center of each individual object.
you can use this node setup:
result:
Note: but yes, if it would be the same location, it would be the same noise...
-
$\begingroup$ Not random and varies as the object moves when it's animated. $\endgroup$ Jan 25, 2022 at 5:13
-
$\begingroup$ nobody said the the object is animated....and of course it is random - and if it isn't "enough" random, you could use a math multiply before after location and before add. $\endgroup$– ChrisJan 25, 2022 at 5:23
-
-
$\begingroup$ Thanks everyone for your help, although this isn’t really the result I’m after. There are two problems with this: The first problem is that when I move the object, the noise moves as well, and I don’t want that to happen. I just want the noise to be randomized when you duplicate the object, or apply the same geometry node setup to a different object. (Second problem in the next comment) $\endgroup$ Jan 25, 2022 at 16:57
-
$\begingroup$ The other problem with this, is that when I move the first object, the noise changes for all of the other objects. To help you understand what I’m after: I’m trying to create a geometry node setup that will procedurally generate rocks. And every time you duplicate the object, it will randomly generate a different shaped rock. If this isn’t possible with geometry nodes, that’s ok. $\endgroup$ Jan 25, 2022 at 16:57