Asset Placement toolkit

Hello all.

Im new to Godot, and also c# in general - i have my background mainly in Web development.

But since my nephew really wants to learn how to make games, i found it prudent to do my best to help him.

So to make the curve easier, and to streamline some of the process a bit in some of the steps i have so far found when making a game i started looking for some asset placement toolkit / tool to help out with placement. And there were some.

But they cost money, and due to some health issues money were quite tight.

So i decided to go by the route of learn by doing, and as such started making my own addon which in the end hopefully does what i want it to do.

Below are one image of the UI so far. Since im only allowed to put one in.


(Note: If the window is smaller it will use a scrollbar, mainly made the window big to make it easy to see)

For now everything regarding placing the objects works as expected, and also the drag add also works that being said all of the things still needs alot of polish. And since this is the first time really working in such an environment the project code would prob. also need polish and some more work before usage in a professional project.

It can snap based on X, Y and Z axis, and also Object snap. Tho object snapping still needs some work to make it more stable and overall just work better.

When an placed element is focused, if its a model it allows for certain modifiers, tho only Array modifier has been made as of yet.

When clicked it will parent the model to a modifier, which allows you to control the array of models to be shown. Tho no setup for MultiMeshInstance as of yet, tho it will have before a possible release.

This also needs more polish and work to enable alot more things.

The reason im making this post is merely to show really, since i expect the time before i can make any public release of it in a stable state is prob. still a couple of months away. Especially because alot of things are still new. And i also first need the tool in 6 months when my nephew and i start to work on our game.

But if there is interest in it, when its stable my thought was to release it under MIT, it’s written in c#, it’s not the best of code due to my lack of experience obviously.

But with help from others the code can get to be better. And from when i played around with Godot a tool like this is something i had a hard time finding.

So ye, it’s not in any way done, or prob. in as high level of skill as so many others, but i hope to use this project to learn alot and hopefully to get to engage with people who are wise which i can learn from.

Thank you for reading.
Have a nice day.

Best regards

11 Likes

Hello again.

I’ve seen others post images in their secondary posts as well, so i thought i would do the same, since i was not able to do it in the original post.

First image is a quick image of a Scatter modifier. It is quite easy to use, not very high tech yet with all kind of radius boundary box or anything yet. But it works very well, and has the ability to perform randomnization of both scale and rotation given certain parameters.


As seen here, where the scale is randomnized on each model.

This is a image of an array modifier, which does what you expect. It also takes various of parameters to customize the result. Could be used for situations where you need to repeat something each x on a certain axis.

Both Array Modifier and Scatter Modifier can be used with both MeshInstances and MultiMeshInstances.

Both can auto apply collisions, tho it does not work perfectly yet, as seen in the array modifier where the collision is on the wrong end. So im doing something wrong there which i need to get fixed.

When placed models are focused you can open 2 select boxes
image

One with the modifiers, and the other one is for quick actions such as rotation etc.
There are shortcut to activate it and then when its activated a hold of shift + alt and scroll wheel will update the data.

image
When one is chosen it will show the current X,Y,Z values of the current object.

As i get more done, and get it polished more and more i will report back with images and information.

As a last thing i would like to ask, if below is a sufficient featureset for a initial release… I will add more as time goes by and optimize more and more code.

But with my lack of experience in the area i have a hard time grasping whether or not i should have alot more or if it’s an “Okaj” package as a start.

  1. Easy placement of assets
  2. Ability to add folder libraries with model preview
  3. Ability to search through library models
  4. Ability to snap asset to existing objects
  5. Ability to use multiple snap layers
  6. Ability to snap to fixed height
  7. Ability to snap to fixed x angle
  8. Ability to snap to fixed z angle
  9. Ability to apply array modifier with various of options to configure and apply to the placed model
  10. Ability to apply scatter modifier to placed model (Fixed height and raycast height available)
  11. Ability to auto add collisions to placed models
  12. Ability to “Drag add” models, using a path with a start position click and end position click.
  13. Quick actions to control scale and rotation of an model. With available shortcuts.
  14. Fully adapting UI. Meaning it adapts to it’s containers and in theory should be very similar in how it looks on most devices

Once again, Thank you for reading.
Have a nice day.

Best regards

3 Likes

Hello all.

I’ve been spending the last couple of days polishing much of the code, so it was structured better and overall has a more intuitive way to it.

I think the result is quite good, so im glad with that. Especially the huge speed boost that came about fixing the leaks.

Beside that i’ve gotten around to add a bit more options regarding collisions for more choices.

My plan currently is that im gonna finish the polishing of the code, go through a week with alot of testing and ensuring no leaks etc are happening at any point.

My plan was to build like a city and environment with the free props i have, that said im crap in regard of graphical sense so the overall result will prob. be shit tbh. xD

But i will share that as well, so people can have a good laugh haha :smiley:

Currently i have no leaks but i suspect when i dive in and try various stuff i might find a couple.

Then when im sure everything is running without issues i will publish it on Github under MIT.

I will still be working on it, since i need it for when i start the project with my nephew. So i will be putting a good amount of time at it.

The reason i want to make it public is in the hope of getting more to use it, come with suggestions that i might have missed or maybe even some people who wish to contribute with cool features since in my view it will be great not only for me but for everyone else.

When this release is ready the next one will have alot more information to the user when using modifiers and such. So it becomes more easy to see how big an area said modifier is occupying.

Also have some other ideas as well that could complement the plugin a bit.

Again thanks for reading.
Have a nice day.

Best regards.

4 Likes

Hello all.

So a bit of time have gone by, and i did not yet get the chance to make the video that i was wanting to make. Mostly due to most of the last couple of weeks have been in a hospital bed…

But i got out now, and i have still being working on it while i was in there, mostly because i still need to have this ready 100% in 3 months, without bugs and hopefully in a as complete state as possible.

So i got around to fix the issue i had with my custom drop down menus going in front of some elements.

And i also added the ability to hold alt + shit for continuos placement of objects, and will in the next couple of days make sure that the objects placed by the plugin is also “Grabable” again, meaning if alt + shift + g is clicked while the model is focused, it will remove it from the tree and make the same object the one you are placing. Enabling to move the object after its placement and still use the various snapping capabilities to make sure it aligns with the other elements around it.

Beside that i also updated UI a bit, added a few nice things like the ability to see what kind of object currently being edited, so when picking an already placed object you see what kind of object it is, if you need to find it again.

Ofc. you could just Duplicate it right, but idk, some might need it, and i thought it seemed like something that should be there.

My plan is that i will release what i got over Github this weekend - which means version 0.1, i will still be working on it after that, but it’s merely so it’s available for people to try out and use if they want.

The plugin is in no shap or form ready for production use, hopefully it can be in the future tho. Tho it should be useable in i think most cases. But there might be small bugs that i am not yet aware of and such. So keep that in mind.

When i have released a stable version this weekend i will start working on some video material that i can put up on Youtube on how to use it, where things are and what it can do.

For those who wish to see it before they try it out them self.

And also a video of it being used to make a small city / environment. With my crappy skills, the video i wanted to make the last 14 days, but was unable to due to being placed in a hospital bed :slight_smile:

Also made the “SpawnSettings” i.e the settings on the left of the library where you can set snap options etc. persistent on the object, which means it will remember its settings and are editable with things like it’s autogenerated collision by merely picking it and then changing it’s option in the settings panel of the library.

Either way, alot of these things are prob. easier shown in a video, and all of it will be explained in the readme file that will be placed in the github repo, so there is explanations on what it can do and how to do it.

Sorry for not being able to put up the video yet tho, i will try to find the time in the comming week to do it.

Have a nice day,

Best regards

2 Likes

Hello again.

The github repository is placed here:

Where people can download it and play around with it, please do remember im no professional C# coder, or game coder at all.

My hope is that when people get let in that some people might find it fun and enjoyable to help with further development of it and maybe help getting a better structure and setup of the addon as well. :slight_smile:

That is my hope, if it goes that way who knows. :slight_smile:

I will spend the comming week on making a video of usage plus fixing minor bugs which are mentioned on the github page.

It’s important to note that the addon is not in production ready state at all, so if used in a non fun / more professional way it’s on your own risk until it gets more developed.

Have a nice day
Best regards

1 Like

Very nice. I am bookmarking this for later.

If you dont already, you should follow passivestar.

He makes tools for godot and blender. One of his recent tools was a point and click assett placer.

https://twitter.com/passivestar_/status/1769341215315517477?t=Yg71hN_r5SsqOCzXQPybfA&s=19

Based on what you’ve posted here, I think you have similar vibes and would like their work.

2 Likes

It looks like he’s project is a lot more polished than mine is as of yet :slight_smile: and it seems alot more complex than mine as well

I will be following him - to see what he does. :slight_smile: And i might write to him as well. That being said, depending whether or not he is working on something he want to release as a paid software he might not want to give any knowledge away to me :slight_smile:

Which is fine, also - i don’t think my skills would be good enough to work with him, he seems alot more experienced than i am.

But ill write to him and say hi. :slight_smile: it would be nice to get to know some people with similar interests.

Would also like to talk blender stuff with him, tho honestly - im not great at the 3d modelling / art thing - i can make houses, chairs and ye… simple stuff.

– Also thanks for the reply, forgot to mention that, sorry about that. :slight_smile:

1 Like

His work is inspiring and fun to watch.

I know he has a free/open blender plugin, so I assume at least some of his Godot stuff will be free / open.

He has a devlog on youtube: https://youtube.com/@passivestar

And a github repo: passivestar (passivestar) · GitHub

Your tool just really seemed to have a similar vibe. I figure that at the very least, you would appreciate his style and be able to pick up some tricks/ideas/inspiration.

Thank you for the youtube and github as well :slight_smile:

I will try to get into contact with him, he and i might be able to give each other information on various parts. tho he obviously has more knowledge than me.

Tho i can code in various of other languages as well, so at some point i might be able to help him in those languages if he needs it. Who knows :smiley:

But after i’ve made the introduction + install and a little usage video for the plugin i will try to make contact with him :slight_smile:

Best regards

Ohh and sorry for the late respons. I fell asleep (Clock was around 02 at night when i answered you haha)

– Just wrote to Passivestar, Lets see if he wanna be “Friends” :smiley: haha

Hey all

Currrently working on a small addition which lets you add models from all of your libraries into groups which you then can spawn, with it i will make a preview container, so you can see in 3D space how they position to each other before hand.

The idea behind it is that sometimes, like if you have a tunnel or some sort, you might have various of setups with the walls etc, but if you have to draw a loooong tunnel or draw it multiple times it would be nice to have sections in blocks to use.

Which this addition when it’s done would give.

Currently the way objects are added to a group is by right clicking on a model in a library and click on the “Add to current group” option

image

Which is only available when a group is being edited.

Hope to get a initial version ready by monday to put out.

Also has to get a couple more introductionary videos out. Which will be around monday also i think.

Best regards.

1 Like

Now the various of controls works, and the preview scene displays it correctly. Just look at the insane level building skills being utilized in the image above (j/k)

Anyhow, currently im working on enabling movement inside the preview container while holding right click on the preview world and using either wsda or arrow keys to move around to inspect your block.

Then i also need to make a button to remove an entry in a group and enabling the placement of the group of objects on a single click.

All snapping functionality will still work even when using the group of objects since all the meshinstances inside will be bound with a waypoint entry, hence letting us snap to it later on.

Same goes for both Array and Scatter modifer.

Snapping with groups will also be set up, so when you are placing a group it can snap to other groups or snappable elements on the snap layer you are placing on. That being said when snapping with a group i think there should be more options, like whether you wish to snap on the bottom of the group, middle or top.

So you have the best control on how your model is being placed.

You’ll also have the + when using a group of objects that they will be bound by internal rules that can be controlled from 1 place. As long as the group of object has not been changed manually.

Meaning, if you place 20 group of objects of a single group, and later on find that you need to rotate 1 block by 25deg, then you can edit it in the group and it will then change on all the groups.

Having you to do it only 1 time instead of 20.

Anyhow just a minor update / information post on thoughts.

Best regards.

Another small addition that in the preview, one will be able to turn a preview environment on with some mountainrange and a flat radius in the middle of 50 meters.

This was mostly made because i felt it was quite empty when there was nothing.

At some point ill make the meshes configureable from the editor, but at a start it will merely come with some default ones from Polyhaven.

Now - there might be ALOT for me to learn regarding terrain and such.
When i learn more about how to make it look better etc i will ofc. try to apply it to how the terrain is being setup currently.

It’s merely a shader and a noise pattern so it was as light as possible.

Also movement is working as well, so merely need to build the placement of it now. where most of it will run through allready made code. so should go fairly fast with the rest.

except for the part with updating groups across the 3d world when edited in the group editor. That part i still have to build. But should be fairly easy to do.

Things are going forward, but i might not get to release the things today. Since i normally refrain from doing it at late night. And im a little bit behind what i expected due to the options part took a good bit time to set up. Which i for some reason failed to calculate.

Now the single view is in full view, without the sidebar.

So i’ll prob. do it tomorrow mid day, so i have the morning to ensure everything works and clean things up a bit.

The options on single items now works, so you can control the collision, snap layer etc on a single object basis.

All containers have scrollcontainers that will fill the screen and show when there is not enough room.

And if need be a global ruleset can be set for the whole group

All fields will default to the values received there when they are being placed in the 3D world.

All fields are saved with the group, which is saved in a custom resource file.

But ye, as i said. I will prob. be done with this late today, so to be sure everything works i will first push it tomorrow when i have ensured the stability is somewhat okay, and that it’s fully useable.

And then ill spend the rest of the week fixing bugs and optimizing the current base, like ensuring that mesh instances are chunked and that the chunk size can be controlled i.e for scatter and array.

When we get to the weekend ill implement so you can place elements in the world utilizing multimesh instances that are chunked. So you have the ability to switch over to multimesh when you are placing elements that there are gonna be alot of.

But use the simple placement version when you need to attach a script to a single object etc.

Best regards

Hello all.

I will put out a new version 0.1.1 this week, it was actually planned for last week and was planned to be alot smaller. Reason stated in the end of the post


Some of the changes are listed below

  1. All Interface nodes have been moved to a trait layer, now a component declares which traits it uses and then it can spawn instances of said traits with configureable setup.

Did it to make the components smaller in size, and to keep things dry.

image
image

  1. Updated UI for sidebar in the list view. See image.
    Did this to ensure that the sidebar could hold more items in the future, since it was already getting to a quite messy state.

  2. Placing modes (Simple, Optimized)
    Simple placement
    Placement of nodes using simple mesh instances, this is great when you wish to place few objects and/or add different scripts to each.
    Optimized Placement
    Placement of nodes using MultiMeshInstances in configureable chunks, this is great for placing large amount of the same object.

  3. Group Builder
    Allows for building groups of objects that can be predefined in local space and then placed in the global world space, with the ability to use snapping and all the other capabilities from the normal placement of objects.


5. Updated library topbar UI
It’s still a work in progress, but a few minor changes where made, adding the total items in the library viewed and ensured it’s placement was better aligned.

  1. Updated General UI
    Gave the UI of the general tab a workover, it’s still basicly the same setup but it’s been given a bit more time to make it a bit more “Eatable”

  2. Updated Main Theme
    Most of the UI elements uses the SnapTheme. It’s still not complete. And some elements still uses old elements in there, as such they have not yet been removed. I will remove them once i get around to removing the various areas that still uses it.

  3. Fixed all bugs with regarding of unloading

  4. Fixed all bugs regarding Array and Scatter Modifier.

Sorry about the release last week did not make it. tho the extra fixes and such should make the release comming up quite stable.

It atleast seems to be getting stable, and harder to find bugs.

And alot of things also got alot more centralized and alot of things also got rebuild to incorporate dry alot more.

So overall it should be a push in the right direction.

The reason for the miss of the release is my health just decided to change the plans last week, by forcing me to spend my time in a hospital bed.

Mainly due to me having alot of time at the hospital lying in a bed. Not super able to walk around.

So i spend the time i could, and then tried to get some more into the update now since it was pushed a week.

The reason i did not push anything while at the hospital is because i wouldn’t be able to give any support if it happened to be needed on a stable scale.

Will start pushing much much more often and in way smaller portions of things at a time. Like 1 issue = 1 branch and push.

As what im able to get from various places this is the way people want you to do it. As of now i know only some of the reasons for it as backup etc.

So again, if anyone is a shark at Github and working with Github., please pm me :slight_smile: I would love to do it the right way.

Thanks for reading
Best regards

1 Like

Hello all,

I have decided to release version 0.1.1 today. It still has some few bugs, and some elements that works weird. But after this point my time is gonna be heavily used in fixing those issues and finding overall stability. And im also gonna put more effort into a more structured setup with github and such. Which will enable for a more transparent image of the state. Since all issues i know of will be stated, and hopefully others will also state some if they find some.

I will also make an example project repository in a bit, for people who just want to download a project to try it out without any fiddling with enabling the plugin.

There are still some few bugs, but they are in the few. or atleast in the amount i’ve found, there still is some, and i am working on fixing those. And everything is not working flawless and perfectly yet… it is 0.1.1 xD so ye - still an ongoing project. expect there might still be some few cases of weirdness.

But with 0.1.1 the base features of what i think it should have is there - still with a few minor mistakes but with time those will go away, and my next updates will be much more heavily on stability, performance, updating structure of the code and ensuring that the various tools works as they should in various of situations + ensuring that the code is commented and produce a documentation for it as well.

For more precise information regarding what’s currently available in version 0.1.1 you can go to

It’s still kinda important to note that i have not really worked with 3D, Game Dev and such since 6-8 months ago. And as such i still learn alot every day, and also learn how to improve the code i already made.

So there is an ongoing optimization of the code, which will get alot more focus toghether with bugs fixes after this release.

As a side note i will also be getting a new microphone in 2-3 days time from now that should work without scratching sound.

Then i will start making some more videos on youtube, and im also actively trying to learn how to make the videos better. So hopefully that part will get better with time.

From this point the updates on Github will come more often, and the issues part of the github page will be where ongoing things can be found such as bugs, enhancements and more.

Basicly all issues are gonna have their own thread, where the issue is explained, and how to reproduce it plus what im gonna do aim for as a solution.

In the future ofc. if there is more activity the solution wouldn’t be something i just decide, but more a decision based on the input gotten.

I will still post here from time to time, when i feel i have some sufficient new things to talk about.

Have a nice weekend

Best regards

Hello all.

In about a weeks time (Up to maybe 8-9 days if things go haywire) i will be releasing version 0.1.2, which is mainly minor things and one quite big change.

So most of the changes is listed below, with an image where it seems fit.

  1. Ability to place .FBX, .GLTF and .GLB files.
    Before it was only .OBJ that worked apparently rofl xD

  2. Transparency on the placed model
    This is configureable, ie. it can be turned on and off and configured in it’s strength.
    It was mainly implemented due to the fact that sometimes you might have to place an object where it’s needed to be able to see through it.

When the object is placed the transparency will go away

Image:

image

  1. Model size information on hover

image

  1. Ability to rotate preview images of models

image

image

  1. Update to how auto collisions are handled, which overall have optimized the code by making the base smaller with a more centralized setup around it.

image

image

image

image

  1. Update to settings UI

  2. Minor updates to Library UI

  3. Ability to clear generated preview images
    image

  4. All code will be documented, most is now, but prob. still a good day of documentation writing left. That said it also opens up for the possibility of me finding minor improvements while going through the code.

  5. Naming Covention / Standards will be fully enforced after a set of rules throughout the code from this release and onwards. Will be looking into how best practice etc. is set up for godot and c#. As said earlier, my knowledge in C# is still not in any way or shape perfect. Only like 5-6 months of experience.

  6. Should be useable with latest 4.3 version of Godot Mono
    After removing minor bugs with 4.3 it seems to run with it. Will be checked more thoroughly before release. Some bugs have been fixing due to a quick eye from a fellow user on Github :slight_smile:

  7. Switched over to a componentable system with trait blocks used to build the UI, which in essense is made because im lazy, and this way i could ensure that i did not have to setup all kinda various things all the time, but could follow a certain set of rules and then break them using enums which can be hinted for faster coding.

  8. Auto generated small preview images
    They can be configured in width and height. Will be used for the models in the library instead of the inbuilt one from Godot. Which seemed to not work with FBX, GLTF and GLB files.

Soon at a point where i mainly need to fix the last bugs and then i can release it for use for those who wish to try it out.

0.1.3 will mainly focus on improving the Group Builder and improving the code.
Ensuring a good structure, maybe restructuring it a bit if i can find more areas where i can slim things down and fixing bugs, especially ensuring that instances does not create any issues ingame. And that everything that should be turned off from running etc is turned off from running, stuff like that.

Anyhow, if you are still here - Thanks for reading all the way through :slight_smile:

Have a great day
Best regards

1 Like

Hello all.

Released 0.1.2 today - few days late of what i had set as the goal - sadly…

Will start working on improving both workflow and the overall feel of the group builder and also the codebase, try to make it more compact and maybe improve some of it aswell in the next release - 0.1.3.

It seems quite stable now. Tho there is still alot of optimization and polishing to be done before it could be used in a professionall setting i would say.

But the whole codebase now follows the same standard in regard of how things are structured. And the whole codebase is also commented.

But it is better than it was yesterday, and if nothing else then that is great as well. :slight_smile:

In about 1½ month i will start building the game with my nephew, and as such in about a months time i will prob. not be able to put as much time into the addon for some time. We will use the addon while building our game, so it should ofc. at that point be good enough for that, that being said i think it’s quite close.

And the process of using it while building a game should also provide alot of great feedback in various scenarios we might face as well. :slight_smile: That hopefully will allow me to find alot of nice ways to do certain things which can improve the usage.

Eitherhow, will start working on 0.1.3 from tomorrow.

Thank you for reading, if you are still here.
Have a great day

Best regards