JannisX11 / blockbench

Blockbench - A low poly 3D model editor
https://www.blockbench.net
GNU General Public License v3.0
3.38k stars 292 forks source link

[Suggestion/Improvements] Mesh-Based Improvements #1143

Open dhi-holo opened 3 years ago

dhi-holo commented 3 years ago

Since 4.0 fully launched 2 weeks ago (and since it was in beta almost nearly two months ago), I've been messing around with the Mesh feature, to learn low-poly somewhat, and overall just improve my skills with the program. Through this, I have run into many things which I feel could be improved upon, which this post is about. Some of these may count as bugs, but I'm bundling them all together for easity.


Let's start with texture-based comments, beginning with the UV Mapping of Meshes. Here is a simple, not great, character I did a quick model of in the past week, just a simple, single-object 165 poly character. UnUVd Person This is how the Auto UV/Texture Template handles it. Auto UVd Person (I've zoomed in on the UV slightly, just so the layout is easier to see, the cut-off segments are blank) Now, some of this UVing is nice overall, for example the legs top left, They're the outside edges, where the model has barely any geometry deformations. Compare this to the face, and my issue with it starts to become obvious. There is a solution to this, one is to manually UV, but positioning each and every face, especially on something with even 150 poly, let alone say, a 300 poly model, would be an extreme amount of effort. This is why I would like to see a way to "merge" faces for UV purposes. The edges are forced to be attached, so if you re-scale one, it also will fix up the other connected face, allowing for example, a pre-textured face to then just have the face polys UVs put in place, and scaled to display properly. I have made a suggestion on this thought path before #1101.

Quickly from the same train of thought, an easier way to manipulate UVs within specific ways would be a very helpful feature, for example locking rotations to specific increments or other constraint method, rotating to match how it appears in scene (bottom vertex at the lowest point, leftmost vertex at leftmost point), and being able to move edges, rather than just vertices and full faces.

The next texture thing to bring up is an old "feature" which I think now is probably a smart time to remedy. Here is an image of a model I downloaded from Sketchfab to get a closer look at details of, my other complaint will come shortly on this, but one issue is the rendering of the textures Transparency Transparency within Blockbench is a finicky thing as it currently stands, and with the introduction of meshes, I think now is possibly a smart time to begin working at improving it, atleast for in the Generic format (as it is being pushed more, and within a format like Vanilla Java where this can occur in-game too, a balance to it may work nicely).

The other texture complaint I mentioned in the prior section is to do with the importing of external models, from places such as Sketchfab. I don't know how possible this one is, but it would be nice if there was some way to auto-load materials, rather than having to apply each one manually. A bonus side feature to this, using the low-poly Undertale model by the_regressor I linked earlier as a great example of why, would be to allow more formats to be loaded as textures within formats such as Generic Model, such as .jpg and .jpeg, the latter of which is used for a large amount of both the converted to gltf and raw obj versions of the model.

Moving towards geometry with this final texture-based note for now, a way to have single and double sided rendering active at once, depending on the element, would be quite nice, using the Undertale model again as a reference point, within Sketchfab and Blender the rocks and cave walls only render from the perspective they are meant to be seen, while the cobwebs and grass will render both sides of their faces. This is not the case within Blockbench. Blender vs Blockbench This one is a fairly simple concept for execution having the "toggle more options" button which allows for toggling export and locking of meshes to also toggle whether both sides or just the green normal side renders (unrelated side note, the upgrade to the Z button to have textureless/solid and normal view is very nice, although having a UV Checker in-built could be useful too).


Onto geometry and modelling notes. First up, movement constraint. This would mainly be useful for loop cuts, but I can imagine it being useful elsewhere. How this would work is when enabled, you move edges without disturbing the geometry as much as possible. The positive to this is tied to more complicated geometry, where things are not going to always be squared off, such as a human model, trying to add extra loops to the arms or torso to allow easier deformation is just quite hard, as you currently have to make a loop cut, move it to the point on the model you want it, and then resize it to undo the scaling discrepancies created by moving the loop cut there. Alternately, being able to click where you want the loop cut, rather than it being in the center of the selection, would be nice. Being able to place multiple loops at once, forcing them equidistant, could also be useful.

A more odd suggestion, being able to alter how many sides something has after the add mesh menu is already closed (for things like cylinders), would just be slightly convenient but unnecessary. A similar suggestion, somewhat combining an idea from the prior point, would be being able to have segments already on the mesh from the add mesh menu, such as breaking a cylinder into 7 segments evenly immediately.

Moving onto some things which I think need fixing, starting with mass bridging. To quickly explain the term, bridging is creating faces between two edges to merge two mess sections together. In the example picture below, I created a tube, deleted the inner and top faces, duplicated it, flipped the duplicate so it was upside down and shifted it to above the original, and merged the meshes into a single element. I then loop selected the edges, and this is the result I receive. Inaccurate Bridging This is what I would expect to see. Bridged

Next up, extruded edges and positioning. Below, I have attached a gif of a small showcase of this issue. To talk through the events, I start with an edge on an angle (done by moving the north-west edge of the default cube mesh inwards). I extrude that edge, in order to create a new face to work with. I attempt to position it above the original face, rather than having it to the side. It does not align. I then try switching between the different move formats, going from Local to Global to Bone, before attempting Normal, which unlike the other three, does have a different result. A much worse result. Fixing this so Normal doesn't do whatever it currently does, and there is a way to move edges as if the edge is the rotation it is visually, would be a great change. Edge Issues


The final three things for this post were somewhat different, so I wanted to give them a separate section. First is giving access to more complex texture files, such as bump maps. It may be something more complex than the scope of Blockbench, but I think, given the ease of use of the program versus something like Blender, introducing features like that would benefit the program.

The second is a plea to figure out why #1113 and #1059 occur, also brought up in the Discord by me here https://canary.discord.com/channels/314078526104141834/314078934155132948/894424886989189130 A similar issue occurs when importing projects with a larger size than the size of the project resolution, shown from my import of the Undertale model file from earlier (gltf saved as obj via Blender). Lots of the meshes Just Mesh28

And the final one, this one may be a bit weird, especially since it's so different, being able to have the grids in different colours. The "Block Size" grid, and the "Unit/Default Pixel Size" grid. Default theme they can be the same, but being able to make one darker/lighter I feel would be a useful thing.


Thank you for reading through, I know it's a lot, but I wanted to get it all out into something readable so that it can be considered. If you need me to break it up more, let me know and I'll attempt to make the formatting even clearer.

dhi-holo commented 3 years ago

Remembered a few of my other thoughts, gonna stick them in a new comment so they're easier to see than editing it into the main post.

First, a fifth selection method besides object, face, edge, and vert, which only selects touching faces (so if you have multiple parts within one overall element, you can move them around easier). Could be called sub-object or something along those lines.

Planar and full scale tool. Basically, while having the scaling option in Transform is cool and useful, it'd be nice if I could click on a specific bit of the scale tool to scale on two axis, or even all three by clicking the center, to make smaller scale adjustments without having to guess and check or do a bit of maths.

And finally, same concept but for the move tool. Being able to move on two axis at once, or freely move around 3D space.

JannisX11 commented 2 years ago

Notes for myself so that it's easier to work with