Announcing PolyWorld for the Unreal Engine!
Polyworld is a world of high-performance Art and Code packs to help you create a flat-shaded, faceted world inside the Unreal Engine. This thread will contain all product information, screenshots, and development information so be sure to subscribe!
Unfamiliar with PolyWorld? Visit http://polyworld.qt-ent.com to see the goal of this series of packs. It’s currently only available for the Unity engine, but my goal is to bring the same functionality (and more) to Unreal!
Right now I’m working on converting landscapes to faceted meshes; maintaining the component-based mesh organization to help with performance. Here are some shots to show where I’ve been and where I’m going:
I initially started with writing a blueprint construction graph routine to convert landscapes to faceted meshes. I wanted to see what the performance would be when doing it with pure blueprints. It wasn’t bad, but when the landscapes got to be around 256x256, the generation took well over 5 seconds. I think this could be faster if the heightmap data was exposed through blueprint. I’m raycasting each vertex on the landscape to determine its Z position. I assume that’s the bulk of the time spent. Interestingly, the raycast would miss near borders of components, so I had to slightly nudge-in the source of the raycasts. Normals that were generated from the included CalculateTangentsforMesh won’t output what I need, so I also had to roll my own normals generation function inside blueprint.
Here is a pic of the result. It will generate X number of meshes based on the number of landscape components and create normalize UVs for lightmapping.
Much about landscapes is not exposed to blueprint, so I ditched all this work (still have it though) and went into C++. I’m from a C# background, so C++ is quite a transition. I’m feeling my way through, but getting better everyday. My goal is to make blueprint nodes that you can use to create PolyWorld terrains. The data I need is probably data everyone can use, so making these nodes can be handy for more than this purpose.
The code right now will generate mesh components, with quads, based on the landscape, but the Z positions of vertices is not yet applied. It’s quite interesting to dig around and see how the data is stored. This is a WIP shot of the custom C++ nodes I’m working with. It’ll be cleaned up as I get closer to a shippable product. That “GetHeightmapData” node is extracting the height info from the heightmaps of each landscape component. Looks like the red channel of the heightmap provides the height. It shouldn’t be hard to transfer this data into a Z coordinate for a vertex.
If you have any questions, let me know!