Community
Arnold for 3ds Max
Rendering with Arnold in 3ds Max using the MaxtoA plug-in.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Applying transforms to procedural noise?

10 REPLIES 10
SOLVED
Reply
Message 1 of 11
BrianHanke
750 Views, 10 Replies

Applying transforms to procedural noise?

Is there a way to rotate procedural noise (for example, instead of facing up, have it angled at 45 degrees)? I tried various UV and projection nodes and nothing worked. I seem to remember that Octane had to "bake" noise before transforming. Is it possible in Arnold? Thanks!screenshot-2020-11-18-134242.png

Tags (1)
Labels (1)
10 REPLIES 10
Message 2 of 11
madsd
in reply to: BrianHanke

No problem.
You have a list of ways to do that.

Let me mention the 2 most releveant.

Use the OSL UV Transform node piped into a procedurals noises, P point. Rotate, and its done. This will also show in the viewport under HQ mode in 3ds max.

The second method is to use an Arnold UV transform and hook your noise up to the passthrough slot, then rotate.
Do note, this map wont show in viewport and wont work with viewport PBR. Use OSL method instead.

qwe.png

Message 3 of 11
BrianHanke
in reply to: BrianHanke

Thanks for the reply! I was able to get the result I wanted using this method, but only with one of Maya's noises. Does this not work with aiNoise or aiCellNoise?

Edit: Aha, down at the very very very bottom of the Arnold for Maya help page on aiUVTransform it says it does not work with aiNoise since it's not calculated in UV space. At least I have a workaround now, using Maya noise instead.

Message 4 of 11
madsd
in reply to: BrianHanke

qweqwe.png


Here I wrote a new shader for you.
All you need to do is wire it up and play with the logic in the UI.

I build the rotation into the noise's UV transform directly and exposed a couple of features in the ui.


shader RotatingNoise
(
    float Rotate = 23,
    float scale = 40,
    float stretch = 0.01,
    output vector Noise = 0,
)
{
    point Po = point(u,v,0);    
    point uv = rotate(Po, radians(Rotate), point(0.5,0.5,0)  , point(0.5,0.5,0) +vector(0.0,0.0,1.0) )*vector(stretch,1,1)/scale;
    Noise = noise("perlin",uv);
}


Message 5 of 11
madsd
in reply to: BrianHanke

Both of them should work fine.

Remember, that OSL Transform is happening before the point is injected, in Arnold Transoform, they have done it post the node, oposit of OSL.
Note I source from the P slot if using uv transform.


I can rotate both noises like this.

ccc.png

Message 6 of 11
BrianHanke
in reply to: madsd

Hmm, interesting. I copied your code into an aiOslShader and plugged that into P on the noise and that does indeed work. Any idea why I can't get aiUVTransform to do the same thing?

Message 7 of 11
madsd
in reply to: BrianHanke

111.png


Sounds like to me, that you are rotating the frame and not the transform point.

The node has 2 rotate float values, use the Transform one

Message 8 of 11
BrianHanke
in reply to: madsd

Ah I got it. I needed to set the noise Coord Space to "uv." It defaulted to "object." Working perfectly now. Thank you!

Message 9 of 11
madsd
in reply to: BrianHanke

You can also do something bizzare as....
Put a UV transform into the P slot of any of the 2 noises.

This will tricker and update them up data chain, and NOW the post transform will work on both of them.

So they need an init, then it works.

Message 10 of 11
lee_griggs
in reply to: BrianHanke

The uv_transform has a rotate.


1605773665503.png

Lee Griggs
Arnold rendering specialist
AUTODESK
Message 11 of 11
BrianHanke
in reply to: lee_griggs

Thank you. I got it working after I set the noise Coord Space to "uv." It defaulted to "object." All good now.

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report