UE4 World Composition w/ Houdini

   21685   30   12
User Avatar
Member
32 posts
Joined: Jan. 2017
Offline


So was going along with this UE4 tutorial on world outliner using tiled heightfield maps and had a few issues, namely below - is what Houdini produces when exporting a tiled heightmap (or black tiles). Flip Y on or off in Unreal is still a garbled mess. Anyone have any idea or has successfully done a tiled landscape in Houdini to UE4?

I'm exporting tiles via a heightfield output node.

Is there a better way? What's the upside to Heightfield Split or making an HDA? Can an HDA heightfield possibly be more efficient?

Also Unreal wants very strict naming conventions - name_xNumber_yNumber but the heightfield output node doesn't offer that - anyone know a code to fix that? Not sure what to do as you're forced to use Houdini's built in tile naming and don't want to rename 16-64 tiles manually.
Edited by GaryHanna - July 5, 2017 18:35:28

Attachments:
Screenshot (91).png (1.0 MB)

User Avatar
Staff
534 posts
Joined: Sept. 2016
Offline
Hi,

Both the naming issue and the heightfield output tiling issue are known bugs.
I'll let you know when they are fixed.

Unfortunately, using a HDA and a Heightfield tile node to export the data to UE4 through HEngine will not solve your issue for two reasons:

- the heightfield tile node doesn't have an option to share the edge vertices between the landscape tiles, so there will be a missing strip between each landscape. Trying to fix this by using padding on the tile node will create overlaps.

- The world composition workflow in UE4 really needs image files inputs, whereas an hda will populate a level with one or multiple landscapes.
User Avatar
Member
32 posts
Joined: Jan. 2017
Offline
dpernuit
Hi,

Both the naming issue and the heightfield output tiling issue are known bugs.
I'll let you know when they are fixed.

Unfortunately, using a HDA and a Heightfield tile node to export the data to UE4 through HEngine will not solve your issue for two reasons:

- the heightfield tile node doesn't have an option to share the edge vertices between the landscape tiles, so there will be a missing strip between each landscape. Trying to fix this by using padding on the tile node will create overlaps.

- The world composition workflow in UE4 really needs image files inputs, whereas an hda will populate a level with one or multiple landscapes.

Thanks I'll keep hitting refresh for a fix
User Avatar
Staff
534 posts
Joined: Sept. 2016
Offline
Hi,

The Heightfield output issue was fixed in the latest daily build (16.0.694).
Still no x_y naming convention for now, I'll post an update here when that RFE has been added to the build.
User Avatar
Staff
534 posts
Joined: Sept. 2016
Offline
Hi,

Forgot to comment back here, but the x_y naming convention for the heightfield output node was added in 16.0.700.
User Avatar
Member
104 posts
Joined: Nov. 2007
Offline
dpernuit
- the heightfield tile node doesn't have an option to share the edge vertices between the landscape tiles, so there will be a missing strip between each landscape. Trying to fix this by using padding on the tile node will create overlaps.

Is there a fix for this aspect of heightfield export if the heightfield is exported as image tiles?
User Avatar
Member
603 posts
Joined: Sept. 2016
Offline
lloydwood
Is there a fix for this aspect of heightfield export if the heightfield is exported as image tiles?

As of 16.5.254:

The Volume Resize SOP and HeightField Tile Split SOPs have Tile Lower Overlap and Tile Upper Overlap parameters. The Tile Upper Overlap defaults to 1 for HeightField Tile Split reflecting the usual case of an expectation that the result will have duplicate points along the seam when converted to polygons. It should be set to 0 for the previous behaviour.
User Avatar
Member
32 posts
Joined: Jan. 2017
Offline
Sorry for the late reply, but still confused.

Does this mean you can NOT use Houdini HDA's with Tile Split nodes with World Composition? IE - you would HAVE to export the tiles and layers as bitmaps then import as opposed to importing an HDA with layers automatically assigned to the landscape material?

I'd prefer not to manually hook up a few hundred landscape layer bitmaps as masks and also getting the tiling ratio is a chore - it's derived from the Unreal components ie - tile by 4033 etc but then there's the padding issue to resize the UVs by to get the layers to match.
User Avatar
Staff
534 posts
Joined: Sept. 2016
Offline
Hi,

Unfortunately, HDA containing tiled landscapes (via the Tile Split nodes) won't work with world composition:

When imported in UE4 via the plugin, they will give you properly sized/placed landscapes, with layers, and thanks to the upper/lower tile overlap parameters Chris mentioned above, without any overlap.
But the World composition system in Unreal only works with image files, and wont accept Landscape Actors.

(our original goal was to try to hook up tiled heightfields directly to World composition, but until it gets some form of update, this wont happen as the system really expect manual user interaction…)

The only solution you have is to bake out the Heightfields to image files via the heightfield output node, using the x_y naming convention expected by Unreal.
User Avatar
Member
32 posts
Joined: Jan. 2017
Offline
dpernuit
Hi,

Unfortunately, HDA containing tiled landscapes (via the Tile Split nodes) won't work with world composition:

When imported in UE4 via the plugin, they will give you properly sized/placed landscapes, with layers, and thanks to the upper/lower tile overlap parameters Chris mentioned above, without any overlap.
But the World composition system in Unreal only works with image files, and wont accept Landscape Actors.

(our original goal was to try to hook up tiled heightfields directly to World composition, but until it gets some form of update, this wont happen as the system really expect manual user interaction…)

The only solution you have is to bake out the Heightfields to image files via the heightfield output node, using the x_y naming convention expected by Unreal.

Ok thanks. I tried doing it via level streaming (not world comp) per tile and did have overlaps even with the upper and lower overlaps as well as distorted height values and offsets as though it recalculated the origin based on height for each tile vs. the whole scene and didn't match when aligned. Is there a work around for level streaming and not using world comp possibly?
User Avatar
Member
7 posts
Joined: Nov. 2017
Offline
Hello, I am also experiencing problems with the method outlined above:

dpernuit
Hi,
When imported in UE4 via the plugin, they will give you properly sized/placed landscapes, with layers, and thanks to the upper/lower tile overlap parameters Chris mentioned above, without any overlap.
But the World composition system in Unreal only works with image files, and wont accept Landscape Actors.

I have a source Landscape, which is seamless, and HDA's which select a tile, and generate the appropriate landscape chunk in Unreal. However, I am getting seams between tiles. Which I believe may be related by the different vertical scaling applied automatically by Houdini to each landscape.

Here is an image showing the issue.


I believe this issue is related to @GaryHanna
User Avatar
Staff
534 posts
Joined: Sept. 2016
Offline
Hi,

If both tiles were brought in by the same HDA, then the seems shouldnt be there.

If you need the two separate HDAs, then you can try forcing a common range conversion by using the ForceMinMax values setting in the project settings. In Project settings > Houdini Engine, under marshalling: enable Marshalling landscape force min/max values.

Alternatively, you can also try to enable the “Marshalling landscape use default unreal scaling” option.

What version of H are you using? Could you send me the HDA you're using?
Converting two landscape tiles separately could result in seams, but not as big as the one you have.
The two tiles also seem to overlap which normally shouldnt be the case, they should just “touch” each other.
User Avatar
Staff
534 posts
Joined: Sept. 2016
Offline
Hi,

I did some more investigation on that, and it seems that a regression was introduced recently that made the tiles to be 1 pixel too wide/tall… This is what caused the tiles to overlap, and created the seams.

I've committed a fix for that, it'll be in tomorrow's daily build of the plugin.
User Avatar
Member
7 posts
Joined: Nov. 2017
Offline
dpernuit
Hi,

If both tiles were brought in by the same HDA, then the seems shouldnt be there.


The seams were there even in the same HDA but it turns out it was because I was I introducing the tile split too early, (before erosion to be precise) this meant the result were just not aligning, I guess due to the approach used for erosion. Itd be nice to be able to erode tiles Individually and get results that match if using a tiled approach as it's a bit more flexible.

dpernuit
If you need the two separate HDAs, then you can try forcing a common range conversion by using the ForceMinMax values setting in the project settings. In Project settings > Houdini Engine, under marshalling: enable Marshalling landscape force min/max values.

Alternatively, you can also try to enable the “Marshalling landscape use default unreal scaling” option.


I tried both of these settings but didn't seem to be able to get them to match perfectly when using separate HDA's. I think using separate HDA's is the only way to work with streaming levels in unreal at the moment. Correct me if I'm wrong. It would be much better if the tiled output hooked directly into world comp, but I believe there are some difficulties in doing this at the moment?


dpernuit
What version of H are you using? Could you send me the HDA you're using?
Converting two landscape tiles separately could result in seams, but not as big as the one you have.
The two tiles also seem to overlap which normally shouldnt be the case, they should just “touch” each other.

I'll happily send you the HDA's and a lightweight UE4 project containing them and their intended implementation.I might be mistaken but it seems like there's currently no easy way to get live updates for tiles that comprise massive landscapes.

Thanks a lot for taking an interest in helping me and discovering the regression. I'll see if that helps. I updated today to 17.0.459, but these issues were present on build 17.0.436.

I'm currently away from my computer but will send you the files when I get back.
User Avatar
Member
25 posts
Joined: July 2018
Offline
dpernuit
Hi,

Both the naming issue and the heightfield output tiling issue are known bugs.
I'll let you know when they are fixed.

Unfortunately, using a HDA and a Heightfield tile node to export the data to UE4 through HEngine will not solve your issue for two reasons:

- the heightfield tile node doesn't have an option to share the edge vertices between the landscape tiles, so there will be a missing strip between each landscape. Trying to fix this by using padding on the tile node will create overlaps.

- The world composition workflow in UE4 really needs image files inputs, whereas an hda will populate a level with one or multiple landscapes.

I modify the houdini engine code, now it can create ALandscapeStreamingProxy form houdini heightfield split node.
I think the houdini engine should support this, streaming level is very important for parallel edit.
User Avatar
Member
7 posts
Joined: Nov. 2017
Offline
Hi, thank you for the reply. I was talking to people on discord, and forgot i posted here also hence not returning to this thread. Apologies for that.

I wonder how the new PDG system in houdini 17.5 ties into Landscapes for Unreal and whether it works with world comp.
User Avatar
Member
7 posts
Joined: Nov. 2017
Offline
[quote=ChenA

I modify the houdini engine code, now it can create ALandscapeStreamingProxy form houdini heightfield split node.
I think the houdini engine should support this, streaming level is very important for parallel edit.

Hi, this is pretty amazing. I wonder if anyone @sideeffects will pick up on this and talk to you.
User Avatar
Member
13 posts
Joined: April 2019
Offline
Now that 17.5.208 supports an attribute to change landscape actors to streaming proxies, what would be the ideal way to implement world composition?
I believe I need to create a empty landscape actor in my persistent level which the proxies reference. But I'm not sure how I would do that.
Then secondly, every proxy would need to be placed in it's own level. Which will also break the HDA link in the persistent level..
Only way I see this happening is with a python script inside UE4.
Anyone here who is still experimenting with this and succeeded?
User Avatar
Member
9 posts
Joined: July 2013
Offline
Bump. Going to dig into this soon. Hoping there has been some more small victories.
User Avatar
Member
11 posts
Joined: Sept. 2017
Offline
Same here, the only thing keeping me from doing landscape work in Houdini was the lack of support for world composition.
  • Quick Links