Triplanar node material texture rotation

Hi, I was wondering how to go about rotating the albedo texture of a triplanar material block. I already added position and scale handling in the attached playground + nme, but I am not sure what to do about rotation.

https://nme.babylonjs.com/#EPY8BV#608

Maybe @Evgeni_Popov or @PatrickRyan would know ?

You can try to rotate the position before plugging it into the triplanar block:

1 Like

Thanks for the reply! Just for clarity sake I will try to explain better what I am after. I am trying to add a behavior inside this tryplanar node material that behaves like the rotationW of a texture.

And indeed editing the position vector seems like it’s giving some results. I experimented with linking matrix building before writing this post. But gave up when I realized it might not actually be possible to construct a matrix starting from like a Float block that holds the ‘angle‘ value and apply that to the mapping. Or, at least, I don’t think it’s possible inside the node editor.

You can do it like this:

https://nme.babylonjs.com/#EPY8BV#610

Wow, thank you for looking into this more! I cleaned up the material a bit and added the rotate feature for the other 2 axis as well. Babylon.js Node Material Editor

While testing it out I noticed some behaviors. https://playground.babylonjs.com/#9B0DNU#331

When rotating on only 1 axis (mesh box + angle input block on material), the face corresponding to axis renders correctly, but the other 2 are “faded“, even though they are correctly rotated.

When rotating on all 3 axis, things start looking not so good.

At this point my question is if you think it’s possible to have visually “correct” mapping using this approach. I know this behavior can be alternated with just a standard material + tiling, but when the use case includes dynamic meshes with skeletons & bones, it’s not as easy.

I don’t think it’s possible, unfortunately, given that the technique uses a single vector to fetch the pixel from the texture. It can work in special cases, but I don’t think it’s possible to make it work in the general case.

One solution would be to add an angle input to the Triplanar block and apply a rotation based on this angle to the UV coordinates calculated internally by the block, before retrieving the texture. The result would be the same as if the texture had been rotated before being passed to the block. Would that work for you?

Result on a cube (angle is 45°):

And on a sphere:

One solution would be to add an angle input to the Triplanar block

YES! That would be excellent! Thank you!

This PR will add support for offset, scale and rotation:

These fields already exist as properties for the block:

Only Clamp U and Clamp V had an effect, now they are all taken into account.

3 Likes