-
-
Notifications
You must be signed in to change notification settings - Fork 97
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve GridMap and 3D level design workflow #10992
Comments
I'd like to share my thoughts. I've spent a good time working on a 3.X plugin (not published yet) to fix some issues and add some functionalities. However, I did some quick tests, and will consider the 4.4.dev3 version as reference for this comment. Before thinking about future improvements, I'd prefer if some current limitations/bugs were taken care of - I'll list them with a bunch of other unorganized thoughts at the end. Meanwhile:
Snapping what to what? Nodes to the GridMap's cells?
Seems unrelated to GridMap, how would this help?
I think you linked the wrong url.
This seems to happen only if Paste Selects is True.
Do you mean "rotate Selected cells around themselves, without rotating the Selection"?
I think it would be better to add the ability to create and add flipped versions into the current MeshLibrary. The linked pull request suggests changing the cell's ...constructor(?). However, this would affect all cells, and not all cells need to be flipped. Performance impacts must be measured.
Seems useful, but at the same time, not really? When is this information important within GridMap? Not all items have collision.
I thought about this in my plugin. How would you do this? Check which cell is under the cursor, then paint on the cell's coordinate + Vector3.UP? What if there's a different cell on top of the cursor? What about painting a cell below or at the sides?
Seems like a good idea. But I wonder, if you end up using a few cells to build several groups, workflow may not improve that much: you'll still need to select from several choices then paint blocks individually. Also, you may have to constantly switch between two different menus to pick what you want. Thoughts about improvements:
|
Thank you for this fantastic feedback! I will try to digest your suggestions and edit my list of improvements accordingly later this week. For some of my ideas, like "adding tile blocks" I will be making related proposals with pictures, so that it is easier to understand them. Yes I intend to make PRs ! I am rather optimistic that a lot of trivial or uncontroversial changes can be made in combination to make the user experience better. Let's see how it goes. |
As seen above, the Gridmap Editor bottom panel was officially merged yesterday, which opens the door to a lot of improvements to the gridmap! However, I would like to open a discussion on the current shortcuts. I wonder if it would work better if the action tools are in the second rows of keys. Something like:
This way is it is very easy to use the fill tool (index finger moving), while juggling between tool mode (e.g. selection and pick). |
@Hiiamwilliam I started to review your questions and suggestions. Here for the questions.
It would be to snap Node3D. The current "snap tool" simply moves Node3D by 1 units. If a Node3D is at location (0.2, 0, 0), and you move it up on the X axis, it will be moved to (1.2, 0, 0). You can't snap Node3Ds to the 3D editor's grid or to a Gridmap's grid at the moment.
It becomes useful when the Snap tool can actually snap Node3Ds to the 3D Editor's grid.
Yes.
Here I am speaking about placing a mesh on the Gridmap. At the moment, we can rotate it, and I will add the ability to flip it. However, if you find that you use that variation a lot, the template/tile block feature I suggest elsewhere would do what you need (adding it as a "tile block"/"template" in the Gridmap palette).
yes pretty much how you say. The current code is already checking which cell is under the cursor, so it should be easy to implement. I think it will already work pretty well with just adding on top of non-empty cubes, but if there is demand for it, we could detect which of the 6 faces of the cube the cursor is hovering. It would be more complicated to implement.
Let's say you build for instance a "healing shrine" location using walls, floor tiles, a statue and some curtains. That's something that will be re-used many times in your level. You would select it and save it as a template (or tile block). This template will then appear in the Gridmap's palette, as any other meshes. You won't need to switch between different menus, you can just paint it as a normal. That feature should not be too difficult to implement as the Cut tools is already doing most of it! Hope that helps. I will answer to your feature/fix suggestions in a second message. |
Hats off to @Nodragem for the big improvements on the gridmap usability! Here are other suggestions that came to mind when using the new interface:
On the subject of broader usability, I think GridMaps should take inspiration from the new TileMapLayers. |
Sometimes, I wonder if the arrow keys should be used to navigate the cursor in the 3D world instead, with Space placing the item on the grid at the current position. To select GridMap items, you'd use the 1-9 home row keys to enter the GridMap item ID (which would have to be shown clearly on each item). Combine this with the numpad-based camera controls and you won't have to touch the mouse quite as often as before. This provides a workflow very similar to the Trackmania map editor, which has historically been very effective to use in a keyboard-only fashion for me. |
I definitely think that the 1-9 keys could be use to select Gridmap items. But for it to work well, we would need a favourite bar, where the user can place 9 items they will be using a lot for the level they are currently making. That bar could be a 9-column x 1-row grid at just on top of the Gridmap panel. The user would drag-and-drop items from the Gridmap's palette into that favourite bar. Or, we could have 1-9 refering the first 9 items of the palette and we would have a system to reoder and pin items in the palette. Probably worth its own proposal for further discussion. Please link the proposal to this one if you create one! |
Adding to the list is two PRs that implement rendering/visual layers in a different way: |
I start to think that most of the tools may need parameters, so I opened a proposal to add a tool settings panel in the Gridmap Editor: |
Great news for people who make 3D levels in Godot: This was in my wishlist/todo list (in the first post). Combined with the default drag-and-drog behaviour (godotengine/godot#91874), it makes building levels much easier! |
Amazing work so far! I have 2 feature requests I'd like to add to the proposal:
|
This would require each MeshLibrary item to declare the space it takes on the GridMap (with a Vector3i property that represents the number of cells on each axis). For more fancy configurations, you'd want the region occupied by the item to have an arbitrary shape, not just cuboids, but this would be a lot more complex to define and implement. |
Do you mean when you use the mesh picker tool? |
A feature that I really would like is to be able to use different collision layers per shape in the same tile. |
When raycasting I get a shaped id, but not the cell position. I want the cell position that shape belongs to. Sometimes a shape spans multiple cells. So when raycasting, going through where on the gridmap the raycast landed does not guarantee the shape's cell position. |
For reference: I think we definetely need the cursor preview's opacity to be in the settings as it is up to the user's preference. Also, I think we definitely need to get this one done: |
I update the todo-list above with the most recent contributions I've seen, I also marked some of the task as:
Mainly, I am prioritising bug fixes for now and small improvements. |
Started a WIP branch For: |
I have had a thought about a very simple way to implement this (it would stack nicely onto godotengine/godot#101942 ) UX wise I thought something like: Holding ALT+Left Clicking a tile will increment a counter associated with it (this counter displayed on the tile) Then you end up with a selection of tiles + weights which will be used when painting/filling. Could be a low effort/high reward kind of thing. Following on from that a more sophisticated system could be developed to:
|
yes, we are on the same wavelength, I was thinking about low effort/high reward features when writting this list. However, I would avoid as much as possible to hide features behind modifier keys. I was thinking about adding a percentage and little arrows on tiles that are selected in the pallette. But it might also mean that the multi-selection is done with little checkboxes (as in Android or iPad when multi selecting files) to avoid deselecting by accident. Probably need a "deselect all" and "select all" button as well. Note: one feature I want to add is a "tool settings panel" on the left of the Gridmap bottom panel, to set the brush size, shape, etc. We could use it for randomisation tool settings too? Edit: probably need to update the "list view" to be better organised, or delete it, if we want to display the probabilty directly on the tiles. |
Thanks a lot for opening and maintaining this proposal and for your contributions! The thing that hinders my workflow the most is selecting the right mesh from the
This work"flow" brought me to the idea, if it wouldn't be smart to link the scene you use to generate the
Please let me know what you think about that idea. I can also open a new proposal if it is feasible to implement. |
Hello! thank you for giving your feedback, it is always nice to learn how people are using the gridmap.
Did you try the 4.4beta1? now the Gridmap is not loosing focus after a copy-pasting. Use X to move, C to duplicate. Also, in 4.4beta1, you can pick/sample an existing tile in the gridmap with the tile picker using R.
Concerning showing the meshlibrary scene next to the gridmap scene, it would require a lot of changes. We are trying to focus on small changes that would make a great difference first. I think your problem might be solvable by adding labels/tags to the gridmap, and improving the search feature (e.g. fixing the search that resets), and maybe improving the list view so that we see the full name of tiles. This being said, naming convention is a very important part of working with 3D tilesets, so that they are easy to filter out. You can find how the team behind Skyrim organised their naming convention here and compare it with yours: http://blog.joelburgess.com/2013/04/skyrims-modular-level-design-gdc-2013.html It is probably too late for you to change your approach, but in 3D it is simpler not to use tiles because they are way too many combinations. Developers often use a modular asset approach (e.g. walls, corners, floors, ceiling) as explained here: https://www.youtube.com/watch?v=QBAM27YbKZg. The idea is that you can recreate any tile using wall, corner, floor, ceiling assets. |
Thank you for you answer and the insightful resources. I have watched the talk and read the blog post.
Yes, I think the changes in 4.4beta1 improved the usability of the GridMap a lot. In my earlier comment I meant to say that I did not encounter the issues I mentioned in the new version that I encounter in the current stable release, but I still wanted to mention them because they are part of my current workflow.
Yes, I did imagine that. Maybe I am also not entirely clear about what the goals of the I think I understand better now why not using a |
That sounds great! to add a shortcut to go to the next/previous mesh sounds like an easy quality of life feature to implement!
I would say that the scope of the Gridmap is to put together repetitive, static meshes on a grid while using multimesh instances behind the scene to boost performance. Multimesh instances allow to render the same mesh multiple times at low cost. For level design, Gridmap has definitely its use case for anything static and on-grid. But as soon as I start using dynamic objects (scene with scripts), I find it better to use the 3D editor. I need to see these objects in the Outliner, and in the Inspector so I can modify their settings (e.g. a trapped tile with a timer). Level design in Godot can be largely improved, but my belief is that it will be about getting the 3D editor better integrated with the Gridmap (e.g. snap tools that snap to a gridmap's grid, rotate by 90 degrees with ASD), and getting better filtering options in the FileSystem (e.g. tags). Note that we now have thumbnail previews of 3D asset in the FileSystem (in 4.4 beta1), which really improve the Level Design workflow. |
From this description and the picture you provided, I believe your situation would benefit greatly from autotiling. It should decrease the need to search for the correct item by a lot, since the system would choose the correct mesh according to the rules you setup. Or, perhaps some logic of the Inspector Dock could be replicated in the GridMap menu? When you select a MeshInstance and edit its Mesh, the Inspector shows an area where you can rotate said Mesh. This could help with identification. Regardless of autotiling, I agree. Once you have a lot of items, repeatedly filtering for the correct one, especially if you're using comprehensible names, will still feel like bad workflow. I suppose adding a Tree (with collapsible items) would help organize items. So, as an example using the image you provided, you (or the MeshLib creation process) could create "Wall_1_Main_Top", "Wall_1_Single_Down" etc.. One of the tasks on this proposal is "select mesh with keyboard (1-9, favorite bar)". I think the 1-9 hotkeys should, instead, select a group. I feel this is more powerful than having the shortcuts select a single item. |
The way it works in Trackmania is that the number row keys select a category of blocks when pressed once, then you press it again to select the actual block you want to place. It was presented differently in older games, but the idea is similar: Pressing 2 would net you: Then pressing 1 would result in: Also of note is that you get a real-time rotating preview of the currently selected block (not a pre-rendered image): tmnf_preview.mp4 |
Describe the project you are working on
I have been working on a Top-down Action/Adventure starter kit. It inspired all the ideas I've got to improve the level design workflow in Godot. It is open source and available here: https://github.com/Nodragem/top-down-action-adventure-starter-kit
Describe the problem or limitation you are having in your project
There are many little things that can be done to make the on-grid level design experience (e.g. gridmap) greater and I will be listing them here, as a working plan for future contributions.
I am very happy to get feedback and help in shaping this plan for better on-grid level design tools and implementing it!
Describe the feature / enhancement and how it helps to overcome the problem or limitation
Outside Gridmap
add as sibling
Change default parenting behavior when drag-and-dropping to 2d and 3d editor godot#91874Gridmap Small Features (but impactful)
paste selects
to a better nameGridmap Small Fixes:
Mesh Library and Gridmap Palette
Brush improvements
Gridmap Bigger Improvements:
Navigation Mesh:
Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams
This proposal will be divided into smaller proposal and PR. It is here to give a big picture.
If this enhancement will not be used often, can it be worked around with a few lines of script?
No.
Is there a reason why this should be core and not an add-on in the asset library?
Gridmap is already core.
The text was updated successfully, but these errors were encountered: