rdTools

There’s been a lot of updates to the rdTools lately, so I thought rather than spam the forum with lots of posts, I’d just make one post summarizing what’s been added.

Firstly, there are 3 new tools, aimed at level building - rdBPtools, rdBuildBuddy and rdInst. These tools provide methods of creating very optimal levels - allowing you to build much more detail into your levels than previously. I’ll be expanding on these tools soon with more features and more explanations of what they can do.

rdMeshTools has had an update, now you can change the pivot points on meshes while retaining their location relative to other meshes.

rdTexTools has been updated to 1.10 - it now has a tool to create Noise textures in many ways (Perlin,Simplex,Worley,Voronoi,Random Walk,Blobs,Blocks and Bricks). It also has a tool to create signed distance fields from textures.

Currently, development is focused on Octahedtal Impostors for rdLODtools - this is going well with the initial creation working (see video below). There’s still quite a bit of polish needed and it all needs to be sped up - currently it’s taking 90 seconds to create one impostor.

For now it’s heads down to finish this version of rdLODtools.

4 Likes

Exciting stuff.
Will I be ever using anything other than octahedral imposter? How performant is it? It looks amazing tho… Really good likeness

Also I have an idea bout auto-collisions. If you do decide to do them, from my experience its very handy to exclude materials with translucency or masked from the collision (for leaves of a tree for example)
Not sure how much its possible

1 Like

They are quite memory expensive and take more GPU time to render than the simpler LODs, so it will be a matter of deciding for each usage, they’re not too bad though - it’s definitely possible to create a whole world with 100s of 1000s of trees with OI LODs running to a good framerate.

I like your idea about masked areas for collision - I’ll have to give it some thought - but yes, it would be nice to have a system that could just create a simple cylinder collision for the trunk and nothing for the leaves… I don’t know how far you could take it though - I’ll do some experimenting once I finish rdLODtools 1.4.

Hi I couldnt find suggestions section on trello I wanted to share an idea I had about rDmeshTools, it would be very cool when I change the pivot, if I could save the unchanged version or create a copy of the modified pivot version of the asset, thanks for consideration

1 Like

Yes that is a good idea! Thanks! I’ve added it to the Trello page to add to the next version. (I’ll try and find a way on Trello for suggestions too)

1 Like

Hello!

Just purchased the rdInst plugin a day or so ago, had no trouble integrating it into a 4.26 project, and refactoring it into my gameplay systems has been pretty smooth thus far.

It’s a pretty slick plugin, kudos!

A question/hurdle I ran into, is there a way to be informed when an actor/component is obtained and then released back into the pool (like an OnPooled/OnDepooled or something).

I need to do some reinitialization work in case an object has been recycled in some cases I guess, reset some particle systems, transform data etc, is there a convenient place to do this in the rdInst plugin as is or should I add a small interface in the plugin code directly to allow for that on my own local build?

EDIT: Also, for some reason any actor I obtain from the pool right now doesnt seem to tick even though all the normal tick flags seem to be enabled…thoughts??

Thanks! I’m happy to hear that it’s going well for you!

There isn’t really any way at present to get notifications when actors are pooled/depooled but it will be simple to add - I’ll make a new version with it in, but if you wanted to go ahead and add it yourself too it’s pretty straight forward, you’ll just need to add your code to the ArdInstBaseActor::rdGetActorFromPool() and ArdInstBaseActor::rdRemoveActorFromPool() methods in rdInstBaseActor.cpp.

What I’ll add is a test to see if the actor is subclassed from rdActor, and if it is, call derivable methods OnPooled() and OnDepooled() in rdActor.

Ticking should be working ok, I just tested it with the project I made the bullet tutorial from and the tick was being called ok in there - this is the setup I have in the actor class:

image

I can do more tests with Ticks in 4.26 if you’re still experiencing issues with it.

Hi again,

After some more investigation I did find issues with some actors not firing Ticks after pooling. I’ve added a work-around where when pooling, you specify if the actors should have Tick enabled when creating the Pool. This fixes it for actors that were not ticking before. You turn off the “Start with Tick Enabled” in the actor so it doesn’t tick when in the Pool but not in the level.

I’ve also added events for On Pooling and Depooling of actors and components - either to the actors being pooled themselves (if they are rdActors) or to a “Pool Listener” actor for all other types of actors.

I’ll submit this as an update after some testing - if you’d like an updated version to test, DM me and I can send you a link.

1 Like

Thank you for the quick response!!

Definitely down to test out the fix, will DM :+1:

1 Like

Any further progress on the octahedral imposters yet? :slight_smile:

1 Like

Yes, I’ve converted the code from C++ to HLSL which speeds it up no-end - from around 90 seconds down to 4-5 seconds - It’s not perfect yet though, I’m just fine-tuning everything to look it’s best…

1 Like

Nice! That sounds like an impressive optimization, but I assume debugging and improving HLSL is quite a bit more annoying than doing the same in C++.

While more speed is better of course, I also want to say that don’t actually care much about how long it takes to generate an LOD, I only care about how good it looks. The LOD generation is only done once for every mesh in the editor, but the rendering of it is done all the time for the player, so even if I have to wait 1 hour once to generate a perfect imposter, I’d happily do that if the quality is great.

1 Like

Thanks. All the RenderTargets are high res floating point so hopefully there won’t be any loss in quality - but yes, it will be quality over speed for the creation.

1 Like

Well since it’s 18 days later again, how far are you with the octahedral imposters by now? When do you expect them to be done? :sweat_smile:

Yeah I’ve been stuck trying to find a bug for over a week now. I did isolate it today though so hopefully I’ll get this bit finished soon (rotating world space normals) - it’s the last part, then I just need to make sure the old routines still all work.

I’ll release this, it’s using a plane (4 triangles) in a rectangle. I’ll then try and release an update quickly afterwards that has the corners shaved off (less over-draw).

3 Likes

Yo I haven’t been following octahedral imposters but wasn’t there a solution from Epic? They did use it on Fortnite and I’ve seen it on another indie game like a year ago

nice!

@FAXCORP Yes, someone from Epic made a plugin for that a long time ago, but it was more a kind of proof of concept. It involved a lot of manual work for creating those LODs, like manually inserting stuff into all the materials that are used by the mesh you want to create LODs for etc. So it was possible to use it for one or two meshes, but for anything more it was way too big of a pain to use.

I’m not sure how much the technical implementation in rdLODtools differs from what Epic did back then, if it’s in any way more or less efficient, but I’m sure it will definitely be way more convenient to use rdLODtools for it.

1 Like

Hey, this is the guy with the lighting BP problem. I tried using your plugin to Create from Selection but I’m having the same problem where the BP’s settings in the level change to default once I create the joined BP. Any idea what I can do so I can place actors into levels then convert them while retaining their lighting settings?

Hi Resolve,
I’m sorry to hear you’re still having problems saving those settings.

Here’s the test I built which does save the settings:

  1. Created a Light Blueprint, public variables for color and intensity which I set in its construction script:

  2. Put some in the scene, selected them, right-click and Create from selection:

  3. I use “BP_ContainerBase” as the base class, no ISMs and no randomization:

  4. And that’s it, the Blueprint then has those ChildActor Light Blueprints with the correct settings:
    image

1 Like

Thanks, that works. I can’t expose every single thing in the construction script but it’s okay I guess haha. I also didn’t need your plugin for this but it seems useful for other stuff perhaps anyway. Thanks for the help.

1 Like