Runtime Mesh Component

Runtime Mesh Component

Version 4.1 available on GitHub and Marketplace!

**The RuntimeMeshComponent, or RMC for short, is a component designed specifically to support rendering and collision on meshes generated or imported at runtime. This could be anything from voxel engines like Minecraft, to custom model viewers, or just supporting loading user models for things like modding. It has numerous different features to support most of the normal rendering needs of a game, as well as ability to support both static collision for things such as terrain, as well as dynamic collision for things that need to be able to move and bounce around!

The RMC is designed to do the same tasks as ProceduralMeshComponent or CustomMeshComponent currently found in UE4, but far surpasses both in features, and efficiency! Depending on the configuration, the RMC can use between half as much memory, all the way down to basically no significant amount of main memory, and instead only use VRAM, by not keeping extra copies of the mesh data around in main memory. It also is far more efficient in the render thread, implementing static draw and a more efficient dynamic draw than the ProceduralMeshComponent. Transitioning from the PMC is fairly straightforward, but it is not 100% cross compatible for features and performance reasons.**

Please Consider Supporting the RMCā€™s development! Donations will be counted towards a pre-purchase of the upcoming Extended RMC.

More info can be found here: https://github.com//RuntimeMesā€¦e-development!

Current list of features in the RMC

  • All features found in the ProceduralMeshComponent including slicing.
  • Mesh LODs
  • Async Collision Updates.
  • Separate Collision mesh.
  • Configurable precision for normals/tangents, and texcoords.
  • Tessellation support
  • Nav Mesh support.
  • RMC <-> StaticMeshComponent conversions. SMC -> RMC at runtime or in editor. RMC -> SMC in editor.
  • Faster normal/tangent calculation than PMC.
  • Far lower memory footprint than PMC
  • Customizable mesh providers allow for customizable lod/section generation.
  • Efficient draw paths

Supported Engine Versions:
v1.2 supports engine versions 4.10+
v2.0 supports engine versions 4.12+
v3.0 supports engine versions 4.17+
v4.0 supports engine versions 4.20-4.22
v4.1 supports engine versions 4.23+

The Runtime Mesh Component should support all UE4 platforms.
Collision MAY NOT be available on some platforms (HTML5)

Tested Platforms:
Windows, Linux, HTML5
(Also tested with HTC Vive, and Oculus Rift)

Downloads:
GitHub: https://github.com/KoderzUnreal/Runtā€¦onent/releases

Examples:
https://github.com/KoderzUnreal/Runtā€¦onent-Examples

Documentation:
https://runtimemeshā€¦io/ (Still in progress)

Issues/Help:
https://github.com/KoderzUnreal/Runtā€¦mponent/issues

640k vertex animated mesh! (Not great quality gif)

http://i.imgur.com/m7tY6Rq.gif

Convex collision support for movable objects!

http://i.imgur.com/ce8WiGJ.jpg

3 Likes

Great component here! Iā€™ve been testing it for some time now and it addresses pretty much all the issues Iā€™ve been having with the standard PMC.

I will soon update my mesh examples over to using this and already using it exclusively in my work.

This looks a really interesting and useful tool, nice work! :wink:

Hey, Thanks for the heads up - it looks like it might be exactly what im looking for! problem though, I copied the release into the plugins folder - and it says there are missing components?

4.12.1

Thanks

For now youā€™ll have to have source in the project as youā€™ll need the engine to build it (Soon Iā€™ll add prebuilt versions) but it can be a dummy class just enough to force the engine to build it. If you want to use it from C++, youā€™ll have to include ā€œRuntimeMeshComponentā€ and if you want to use the extended API youā€™ll also have to include ā€œShaderCoreā€, ā€œRenderCoreā€, ā€œRHIā€ as well.

https://github.com//UE4RuntimeMeshComponent/wiki/Making-the-RMC-available-to-your-project-in-CPP

Ah ok, Ill keep an eye on this thread for the pre-built versions as I am not really a coder :slight_smile: thanks

Nice ! This will be of great help ! Thanks.

Hellooo!

This sounds awesome, I was trying to make a run-time spline for growing tree roots in the last game jam and found that the collision wasnā€™t updating.

Would this be the solution?

my workflow so far was adding spline points and then Lerp them into position with some math to change the sizes of the tip and base etc. Looked really cool, but the collision was static from its first position,

any tips or advice would be ace of spades!

peace!

Iā€™m not quite sure how youā€™re going about this. I also havenā€™t used any of the spline related things in UE4 yet so Iā€™d need more information to be able to answer that. Also if itā€™s easier Iā€™m in the Unreal Slackers chat most all day, every day.

Thanks . Iā€™m sure iā€™ll figure it out.

Hi! Iā€™m currently creating a Voxel terrain edit mode for unreal as a school assignment and I would like to add the source for this component as a module to my plugin. Is that possible?
Ofcourse Iā€™ll give you the deserved credits, your work looks really promising!

Edit: Iā€™ve done some testing and when changing the length of the vertices buffer it seems like the update is slower than when using the procedural mesh component. And if the amount of mesh sections increases, the time to update one section gets longer even though the mesh sections are the same size as before. Shouldnā€™t the time to update a section stay the same as you add more sections?
(Iā€™m using the mesh sections as chunks for my terrain and theyā€™re always 10 by 10 in size but they do take longer to update the more chunks there are).

This is wonderful! Thanks so much for sharing this.

Do you have any advice on how to handle updating the vertex normals when deforming the mesh every frame? Should I be modifying the ā€œdual bufferā€ approach to include positions and normals in the separate buffer, or am I missing some simpler approach?

Awesome project. How complicated would it be to make this support mesh skinning (skeletal meshes)?

Example: I want to generate a procedural cylinder-like mesh, add procedural bones and skinning to it, add coliders, and then add ragdoll to it so that the cylinder falls like a rope. The only part of that I donā€™t know how to do right now is the bones/skinning part

Very cool! Might you be interested in making a pull request for this, so we can see if any of your changes can be taken directly into ProceduralMeshComponent? A lot of the things you mention I have wanted to do for a while, but just havenā€™t found the time!

Iā€™m not opposed to it, but the one problem with trying to effectively integrate it into the existing PMC is itā€™s not 100% compatible, and canā€™t easily be made to be fully compatible. I will say however Iā€™m not sure how much this really matters. Basically the serialization, which the PMC relies on UPROPERTY to do, isnā€™t how the RMC serializes itself when you want it to. So any existing data in a serialized PMC would not be loaded into the RMC if you replaced the PMC with itā€™s systems. Beyond that the API from blueprints is basically the same, just extended to support dual UV and also setting some hints for the rendering. From c++ itā€™s kind of the same story, itā€™s got the same API again extended, but then has a whole new one for more control.

The big reason I kind of like the MP/Github is that it can retroactively support older engine versions and can push updates faster. For example if I PRā€™d it right now and you accepted it tomorrow. it would still be at minimum a couple months till 4.13, possibly even 4.14 before anyone could use it from a release build (I get that those of us on source builds of the engine would get it sooner). I had thought about doing the MP/Github route until I had most of the features in/stabilized then PR it. If you have a better idea Iā€™m open to suggestions, Iā€™d just like to be able to both push more things to it relatively quickly as well as support those who canā€™t upgrade engines for various reasons.

Probably tomorrow Iā€™m going to do several more additions to it, and Iā€™m about to start down the path of rebuilding the template vertex to support another section style I want (extended dual buffer to allow selecting which components are in which) as well as possibly supporting high precision normals and things like that.

The big thing that Iā€™m about to focus on because itā€™s a massive problem for my project and several other people I know is collision. Cooking in the GT is impractical in many games, and all but impossible in VR. I get hit with 8ms + per frame cooking and when you only have 11.1m total for 90fps it gives you no time to do anything else. I know you replied to me a while back about talking with NVIDIA about that, and mentioned trying to expose some of the parameters to the cooker. Iā€™m thinking about attempting some of that myself here soon as itā€™s about to become a roadblock.

Merging back to the Engine would be awesome!

There could still be the need for a more rapidly evolving side project to test new features. but for mainstream usage official in-engine component is best.

Edit: all your above reason to wait before merging are valid. Basically, I think you should wait until you do not much more development (not when you have no more ideas!) that is, when it stabilize

Iā€™d also love to see these changes in the engine, I donā€™t see any reason to use the standard RMC anymore.

But like other people here Iā€™m also concerned by the release schedule of new features, at least while the component is still maturing.

Thanks for the quick reply!

What you say certainly makes sense, I wouldnā€™t want to impede your ability iterate quickly and get improvements out to the community. But it seems like a lot of the work you have done would improve ProceduralMeshComponent for everyone, even if it lags behind your ā€˜cutting edgeā€™ module.

I think the serialization problem you mention is solvable with some backwards compat code (keep the old structs around for old content, but convert on load).

Iā€™m interested to hear how the changes to improve cook times go.

Do let us know when you get to a point that you think it is worth sending us some changes to merge into PMC.

James

Hmmmā€¦ I was thinking of migrating Eden from PMC to RMC but will make things complicated if I want to try and sell Eden down the track?

There is also another thing to take into consideration before doing a Pull Request: it takes a lot of times (for everyone involved) to prepare/clean/document, then to follow/updateā€¦

So you have to take your time, even if just to avoid doing another PR a month after that with some more features.

Cheers, and thanks again !