Texture Bombing

In the release notes for 4.12 I see this:

Texture Bombing: Texture bombing takes a tiling texture input and blends multiple samples with offset coordinates with some flipping and rotation in order to reduce tiling artifacts. It blends to neighbors so it can be used with any textures, not just textures with tiles or borders. This implementation works using heightlerp so that the transition between offset samples avoids soft blending artifacts which can muddy the colors.

I can’t for the life of me figure out what form this takes in-editor.

Nevermind, I’m guessing it’s the “Mirror” tile setting in the per-texture texture settings.


It was accidentally missed out of the 4.12 release. It’s nothing to do with mirroring in texture settings. It’s something I had attempted a while ago and ryan bruck has taken the idea and put it into the engine with some slight improvements

Gah, I read that thread and somehow missed that. aw :frowning:


Sorry, but should it be in 4.12.1? I believe it’s a material function, right? Could you please tell me how it’s called, can’t find it at all.

Hey guys,

We had a branching issue and unfortunately these material functions did not make it for 4.12 That said, they do work in 4.12. I attached a zip file to this post. Extract it here:


The nodes are called “Texture Bombing” and “Texture Bombing POM”. The other 2 functions in the zip are helper functions used within the outer container functions.

Sorry for the inconvenience. If anybody wants other new functions posted I am happy to upload them here.

A nice one!!!

Is it coming standard to 4.13 ?

Are there any plans to make some kind of docs about how to use it and what results to expect?

Is it mobile friendly ?


its already in engine just missed the deadline so yes it will be in 4.13 for sure.

Yes docs should come.

Mobile friendliness I will leave up to individuals to decide. It might run but it will be relatively expensive.

Here are the notes I have for now:

Texture Bombing

Texture Object (T2d): The texture to use.
UVs (V2): Base UVs to use.
Tiling (S): Tiling factor.
Offset (S): The strength of the random offset. For some textures you may notice different interference patterns and so trying different values for the offset can help hide them.
Optional Heightmap (T2d): When using HeightLerp, this provides the heightmap to use.
Contrast (S): The contrast of the height lerp.
Is Normalmap (B): This must be set to true for normal maps. Checking this box performs transformation accounting for flipping and rotation of normalmap.
Enable Height Lerp (B): Whether to enable height lerp blending. Increases the quality of the blend at the cost of some instructions.

Additional Note: The heightmap texture defaults to the R channel. To change it you must make a material instance and change the Component Mask Parameter “Heightmap Channel”. This was done this way as exposing the channel as an input would require a dot product and be more expensive. This allows the channel picker to be free.

I’ve just thrown together a quick test landscape material using the Texture_Bombing node along with the gravel, grass and rock textures from the starter content and it is awesome!! This will be a massive time saver. Thanks so much Epic!!


@RyanB, is it possible to use texture bombing with the heightmap used in tessellation? When I attempt it I get errors saying “Invalid node used in vertex/hull/domain shader input” referring to DDX and DDY nodes.

Yes you can make the modifications suggested here:

Keep in mind that is going to be fairly expensive.

Any idea why this node isn’t working with my landscape?


Hmm try using just worldpostion.XY divided by scale as the UVs. I am not sure but maybe the landscape coordinates are repeating over too large a range. Also try messing with the tiling input.

Try feeding a value into the tiling input. I actually didn’t use landscape coordinates on mine (standard texture coordinates) but I’ve just made a simple set-up using it and I can confirm it is all working okay here:


Yuhp, cheers. For some reason I assumed if it was working on that static mesh then it should work out of the box on the landscape, turns out it was at the right values to had tiled back on itself, silly mistake, thanks for taking the time to reply