Bump Offest with world aligned Texture

Is there a way to add bump offset with world aligned texture?

Yes, but you’ll have to do it for each axis in the world aligned texture function.

You can do it with the bumpoffset node or by multiplying your height by camera vector and adding that to the UVs.
Both yield the same result.

1 Like

Sorry I’m new to unreal, how did I connect this to my World Aligned Texture now ?

You don’t, this would replace the world aligned texture node.

I’d suggest you to take a look inside the world aligned texture function. You can easily just blend between the 3 projections (apply the bumpoffset to each) without the function.

If you want use the function, add the bumpoffset between the worldpos->mask->divide and the texture sample. Look in the world aligned texture fcuntion, it should have something similar, just without the bumpoffset and heightmap.

I apologize for bringing this thread back to life. Indeed i am running into the same problem at the moment.

The approach: I used a shader suggestion from Erik Ketchum (UE4 Answerhub) for an advanced Ice Material.
https://answers.unrealengine.com/questions/168068/can-this-effect-be-achieved-in-ue4.html
It works wonderful! I even managed to enhance the material that the normal maps are going across multiple objects (ground tiles > walls > slopes, etc)

The problem: I want to use the same world-tileable look on the icey cracks and ice depth clouds, under the surface (the effect works through the bump-offset)
Well…as the OP, i am quite new to certain advanced materials, functions etc. I tried to use the solution/idea that was shown in this thread.

This is how Erik’s bump-offset solution looks like:

Ice Depth Clouds:

Ice cracks: (Don’t wonder, i already tried something on the lower nodes but that wasnt working. In original, it looks like the first node structure)

4dfcfd927d95ef13850e0421ae3ae31655afb187.jpeg

Call me stupid, i don’t get it at all.
I tried the first idea mentioned above. Working partly…it somehow works on XY (ground) but a) not in XYZ and b) world position seems to do it different than the world align function, not really looking seamless.
I know > i need to convert it to work on XYZ. So…I duplicated the world texture align function (safety first) and tried to replace/enhance the function with the same stuff from above
but i am stuck what i could do now since the function itself ends up being a node…and i really tried for hours now (barbarian 3d artist trial and error headbangs, elephant running through swarovski shop)
figuring out how to merge the bump-offset into the world align function + getting a node where i can use the same parameter instances from the original (rotation, scale, coloring, brightness, etc).

I am not giving up on this (posting solution if i figuring something out) but if any UE4 material pro might have an idea, any help/suggestion would be pretty cool.
gives me a node without any big in/outputs i need for

98694317831325dad4d519d1e9cc2977ed44bf82.jpeg

Partly working, its not really world align the texture on real XY / XYZ. Long story short, by changing the ice crack scale for example, textures are acting weird.

Will update this thread with Material BP prints if i figure out something.
I hope it will be useful in the future.

Warning that BumpOffset assumes you are in tangent space. The above XY only bumpoffset may appear to work if your ground geometry orientation matches the default XY directions but will be wrong if the mesh or UVs get rotated or twisted anywhere.

I suggest rolling a custom BumpOffset function for this purpose. There is already a “Bumpoffset_Advanced” that you could base it upon but I am not sure what it does. The concept behind bumpoffset is very simple though.

It is really just UV + Heightmap*(CameraVector * Height).

The ‘custom’ part is that normally cameravector gets transformed into tangent space.

For the XY, you can just use raw camera vector since it will match the world orientation.

For the XZ, I think you will need to swizzle the camera vector from XYZ to XZY. For the YZ I believe you need to swizzle from XYZ to YZX.

One additional note, the CameraVector.XY should also be multiplied by the “height” value. This squashes the ray to fit the height.

For extra correctness (even more correct than the ‘bumpoffset’) you can get more accurate values by dividing the CameraVector by it’s Z component. That will project it to hit the bottom of a virtual floor, whreas bumpoffset actually doesn’t do that and will offset less at sharp viewing angles as a result. I believe bumpoffset made that choice intentionally though since there can be more artifacts at glancing angles with full offset.

4 Likes

I am looking for some assistance on this aswell. I have a functioning Material Layer which makes use of the WorldAlignedTexture function node but want to adapt it to support bump offset in all axis however after 3 days if trial and error my brain is fried!

Any help would be appreciated!

I don’t fully understand where I am wanting this bump offset to be inserted into the worldalignedtexture function. I have copied it and am attempting customise it but my brain, please, send help. Haha

1 Like
1 Like

is this tri planar thing worked

Thanks. This solved it for me. Using it for floors only so only did your first step so can’t comment on XZ and YZ.