Creating a Height Field Painter with Blueprints and Render Targets Tutorial should be revised

Lately, I was doing the HeightField Painter Tutorial and there are so many quirks to it, that I wanted to report the tutorial and propose proper fixes

1. Project Setup:

The tutorial never directs the user to work within the Content Examples project. Thus if you start from scratch, you are going to miss the “M_Crosshair” material that it uses. The tutorial should either point the user to a usable texture (for example "TargetIcon from Engine Content/Editor Materials) and show material setup or mandatorily direct the use to work from withing a ContentExamples project

2. Required Asset Creation & Setup

The tutorial goes on in creating a content browser asset for the RenderTargetnamed “RT_Height_Filed_Painter” Unfortunately this is never ever used in the tutorial because the later created blueprint dynamically creates a RenderTarget within its construction script. Also, when copying the expression graph for “MAT_HeighfieldPainter”, the user is never directed about which Texture he should supply to the TextureParameter2D. One can use any texture as it is overwritten in BP but as it is empty after copy/paste, there should be some clarification. On another note, I always thought that the naming convention for materials is “M_” at Epic. If so, why are there “MAT_” prefixes used in this tutorial! Quite inconsistent.

3. Blueprint Setup

3.1 Components Setup

StaticMesh “SM_Plane1000_512” is only again avaible from within the Content Examples. So either tell the user to work from within a Content Examples project or create a note that a tesselated plane is needed. From a clean project, one could use “PlanarReflectionPlane” from Engine Content as it is tesselated.

3.2 Trace from Camera Function Setup

For me, the ApplyPoint Damage from within the function got called but the Event in the EventGraph did not. This is also overly complicated and should be replaced with a custom event with the HitLocation as a vector parameter. This works at least and gets called for me.

3.3 Event Graph Setup

The conversion into Texture Space never works for me. At the end, I understand the vector gets divived but because of the nature of the conversion, values are always in between “-0.5 to 0.5”. I guess because the component/actor pivot is centered. Thus, after dividing by 1000 (or whatever number one needs), you will have to add 0.5 to match the texture with the hit position.

On another note, when pasting the Execution Graph, the user has to replace “StaticMeshComponent” as the tutorial started by adding a StaticMesh component and never went on to give it a proper name. Thus, giving a proper name would get rid of this little inconsistency, I guess.

Hi LeFxGuy,

I have entered the following request to have the Creating and Using Custom Heightmaps and Layers page updated with your proposed revisions: UEDOC-4809. Please be aware that since the corrections must be reviewed and prioritized by our documentation staff, it may be a while before it will be published.


Well, this is how it’s always is with software development and documentation. Not quite first priority. But I am hoping for the best. pls check my other 2 reports, too.

Hi LeFxGuy,

Were u able to produce the result as shown in the end result video?
If yes , then what fixes did u use to get the result?

Yes. And I posted every problematic section above. Make sure you are using 4.13 to be on the safe side. Also, if you have a specific problem, pls create a new answerhub thread and post the link here in the comments. I can respond there but I don’t want to clutter up my post as It revolves around the documentation

ApplyPaint? Maybe I can help you in a fast way but yeah, from what I see, the tutorial is still not good and never got a proper revamp…

I just took a quick look and you are right, the image is wrong. Remember that when I wrote this topic, there was no “Method 2”. But ■■■■, this is even more ■■■■■■ …Anyway. Check that you also copied the second node graph. The image is wrong, too. It is directly under the headline “Event Graph Setup” and the picture shows the variable setup. So copy this second node graph into the event graph and you should be good. Make sure that under “Take Damage” the UV Input is of correct type. I had a problem there and I set the Input Type to “Vector 2D”.


But pls remember, I did not follow the tutorial, that is why there are errors for me. If your variable setup is correct, there should be no errors

February 2021, this is still an issue! Trying to go through the Method 2 route - ApplyPaint doesn’t seem to exist…

Thank you so much, I would really be grateful for your help! Basically when I click on Method 2 (in setting up the Trace) and copy the node graph into my new UE project (I had to find my own level, crosshair material, and plane asset, as they were not provided in the tutorial), I get a “Call unknown function ApplyPaint” error. Additionally, the image that is shown under the link to copy the node graph from is a typo (imago?), and so I can’t confirm that they match. In Method 1, it uses an Apply Point Damage node, but none of the outputs from the Find Collision UV node will go into that…

As I wrote, check the second node graph you have to copy. It is directly under “Event Graph Setup” and IT ALSO HAS THE WRONG IMAGE…arg!! But If you copy this to your Event Graph, you should be good.

I had to set the type to Vector2D for the ApplyPaint Event. Also sorry, when I wrote the topic, there was no “Method 2”. And both images for the node graph copy are wrong, which is really annoying, just make sure to copy both.

I also made a forum post about this tutorial. If you find other problems that are not listed above or here in the comments, you can join in there and properly report mistakes in the tutorial. keep in mind that things like asset locations for the plane etc. are already mentioned in my first post and confirm your problems

Link To Forum Post

I didn’t even realize there was another node graph that needed to be copied under “Event Graph Setup”… I just wanted to copy all the graphs and then read the article while looking them, so I didn’t read the fine print that this was yet again another image that wasn’t represented correctly… and even when I copied the nodes, I had to go back and forth and basically create new nodes because UE was not liking them at all. Thank you so much for that direction, and I finally got a compiled blueprint!

This unfortunately didn’t solve all my issues, but I saw your comment below about how you didn’t want to clutter up this post with specific issues, so I made a new post regarding an issue I have: Can't raise individual vertices from the Creating a Height Field Painter with Blueprints and Render Targets Tutorial - Programming & Scripting - Unreal Engine Forums

*I figured it out, and this was also due to a misrepresentation of the images: in the Construction Script image, it says to have the parent be ForceSplat, when the material that we’re supposed to make is called MAT_ForceSplat… and it just so happened that somewhere in my assets I had a ForceSplat material that I accidentally used instead. Changed this to MAT_Force_Splat and everything started to work as intended.