← All ideas

Suggestions for Blender 2.9, 3 etc. improvement goals

So I've been writing about some things that I think could be done to Blender and might improve it, like removing needless convolution, improving workflows, and making it more powerful/easier to understand or use.

Some are small changes, and some are more ambitious. I think this might be something that developers might want to consider for future releases like 2.9 and 3. So here it is:

-- UI

Software is often generally hard to understand, requiring external tutorials to figure it out. So maybe if guidance could be offered on exploration throughout any feature of a program, allowing you to choose whether it shows messages again, or reset to beginner, that might be helpful.

This said, the viewport is the vehicle for focusing on work. Make it take as much space as possible and only show technicalities when needed. Having dynamic guidance and explanation could eliminate the need for some visual options or at least allow them to be moved, and allow extra distractions to be unloaded.

So starting with the 3D viewport of Blender, make the right click menu show all the object-specific tabs of the properties panel and the outliner/ hierarchy above the cursor, and the default options below. Make the drawers into tabs so only one can be open at a time unless you hold Shift.

It would also have a folder icon, allowing you to actually manage internal files.

The rendering, scene and world settings would show in the top of the screen, and would auto open/close. When looking through a camera, it should have a top bar of options that shows above, like picking DOF distance/object, outer opacity, and a lock icon so you can quickly move its view instead of having it hidden in the tool bar.

There should be a number assigned to each camera, and an int value that can be animated, so you can choose which camera is used to render the image, and the render option should be in the camera right click menu or camera HUD, or properties or something, because it’s using the camera to render.

— Modeling

In edit mode, put the mesh select mode options at the top of the right click menu, and make the options below based on the selection mode that is being used.

When adding a mesh, make it so that just after doing this, you can readily choose the resolution by moving the mouse, click, and then choose the dimensions that way as well. This is easier and more consistent with the modeling features that let you control the effect by moving the mouse.

Direction relative proportional editing mode. This would have radius and distance settings, and move things based on the distance once projected on a perpendicular plane to the direction it’s being moved.

The object data settings have a bit of a confusing ordeal as well. You have Vertex Groups, and Face Maps, buried down the menu. Because the former is called Vertex Groups, giving a name of Face Maps to the latter is nonsense because it does the same thing. How about going with Mesh Groups and a dropdown in each for which kind of element it’s based on? This would distill the interface and allow the user to make sense of it more easily.

Face groups would create harsh transitions between values instead of interpolating between the points. Edge groups could be used in materials as wireframes with thickness settings, triangulation checkbox, and relative to size/aspect ratio of faces and things like that.

If you have multiple attributes on an edge (crease, seam, sharp), it only shows the color of one. It should be showing all of them checkered.

Also, assign values like bevel order, vertex crease, solidify thickness, and solidify method to each element automatically. They’re commonly used.

Solidify method is whether to make the geometry taper, or extrude it out. You can already do that, so… why not do this non-destructively?

If you want to bring an edge with a crease of 1 down to 0, you can't really do that just by moving the mouse because you have to get it to EXACTLY that center point. It's sort of annoying. There should be a small margin at the center.

— Modifiers

Make it automatically add modifiers if you change these types of settings to anything other than 0.

Speaking of modifiers, this could also be converted into a node system and could add more basic modeling steps so you could be able to do things like extrude or spin, then take the result of that or move it or spin it, etc and do more procedural modeling.

Also, often when modeling, you need to duplicate what you have if you want to keep it as a fail safe, and then move it to another invisible collection before applying a modifier. It would be nice if you could just feed something into a fail safe node and hit Apply on it and if you want to go back, just hit Revert.

In the array modifier, make it so that there’s a box you can hover over and press G, R, or S. Requiring the use of an empty creates leg work just to rotate things when it could be a more common function, and having extra vector settings would just bloat it up.

Also add a box for randomization, individual rotation, the influence of the scale on the movement, and 2 vectors you can add to or multiply with the influence, each iteration.

On that note, another thing you should be able to do with it is to actually produce duplicates that are instanced.

Make the boolean modifier have an array of objects you want it to cut out of the selected one, instead of forcing the user to add extra modifiers.

Also make it so that if you select multiple objects and add a boolean to the active, it will automatically add the other objects into the array.

If the bevel limit method is not going to allow you to shift select multiple methods, make it a dropdown. Anything that can’t do that should be a dropdown- making all tabs display at once bloats up the interface.

Also, for operations that depend on bevel weight, it should bevel edges in order from most to least weight by default, or use the bevel order if that differs between edges.

Also, making bevels based on weight from 0 to 1 complicates things. It should simply be the width of the bevel, multiplied with the width setting.

Split the Subsurf into its 2 steps: Split and Average. Make it subdivide based on a number of cuts and allow you to choose the amount of movement when averaging (the factor).

It could also auto-delete edge loops that have no angle between any of the edges. (depending on preference)

Another thing it could have is Anisotropy. So it would try and only subdivide in one direction.

The Wireframe modifier is an easy way to generate some things, but it doesn’t work for just edges because it needs faces to be useful, because... direction, I guess? It would be nice if it could have options to generate from just edges or vertices.

Another thing it could do is have a rounding divisions option so that the edges aren’t just straight, as well as the resolution in the other direction which could go down to 3 minimum.

Speaking of, it’s also a bit heavy sometimes because of how much more geometry is needed than the actual original wireframe. So it could have a Flat (fast) setting or type which will create flat wires that point to the camera position.

Flat wires also could have a normal roundness value so you can make them look more rounded.

It could also have a Separate/Decimate Loops option and a ratio, which will separate out each individual edge loop and decimate them separately before generating.

That ratio could also be used in that adaptive detail system idea (as discussed below).

In general, the UI could be condensed more. Like the Apply/Copy options are redundantly wide. Put them at the top of the modifier and make Apply into an eye>mesh icon, and Copy into a copy icon. Because these options are general to all modifiers.

Instead of having one render option for the modifiers, it could be a dropdown so you can check which engines to use it in.

— Components

Merge the Particle, Modifier, Physics and Constraints tabs into one Components tab, so you could add a Mesh component, open the modifier nodes, edit them, or add a Particle system component, constraint component, or simulation component. Or a script component.

-- Adaptive Detail

Add a component called Quality Over Distance. This name would be easier to understand than just LOD. It would include a quality bar that goes from 0 to a large value you can set, in a log2 manner. It would compare this to the equation:

"1 / Distance / Field of View * Render Resolution”

The Base quality level would occupy all of the bar, which would be assigned as the current model or result of a modifier. You could assign another mesh to this, or the result of a modifier. As well as options at the ends for adding quality levels before or after this.

Then each quality level could have a Type option. Mesh, or Auto Bake. The bake option would allow the mesh to be baked to textures and projected onto planes at different angles. Then you could change the number of angles and the resolution of the texture.

Then it would have Crossfade and Cross Rotation settings. You could also change the Normal, so this would be the direction of the surface it’s on, and the angle from that, so that would prohibit it from baking from certain angles.

For any modifiers that have variable quality like Subdivision, Bevel, Screw etc on an object with that distance component, vary the quality settings over the equation from above.

Include a multiplier setting and Min/Max quality settings, and some modifiers, a setting for whether to perform this on a per-element basis.

— Images

The image workflow could be improved. Make it so that you can create a canvas to place stuff like images, vectors, and 2D models onto, and have the UV mapped to that canvas, and create basic shapes like rectangles and lines and circles. This would of course be usable in the node editor as a Canvas node.

This should also be editable in relation to models that are unwrapped onto it, meaning that you can just place things on the model like with texture painting.

That would make it boat loads easier to create details as part of textures.

— Scripting

Also, it’s not easy to script in Blender. The script editor could be an incredible tool if it showed a list of auto completion options as you type, like an IDE, or tried to explain thoroughly what different functions do.

Scripting could also be made incredibly useful for video game development using it, by making Blender into a game engine software, integrating the artist friendly modeling features into the realm of game development.

For instance, by making it possible to create a script from the components of an object and assign it as a component. Then allow the script to be edited from there and saved independently of any of the other scripts, instead of having to build the entire project.

Speaking of which, basic scripts like player movement code should be provided by default, in the form of a polished, interactive, easily editable thing. You could argue coding these things is a learning process, but I feel like programming could be taught differently and there are other more custom scripts you could devote to this skill.

-- Basic shape generation

And speaking of making things easier, it should be made easier to generate things like stairs, doors, and pipes out of simpler parameters.

They should have a way of defining a custom mesh to use for different parts of it as well.

— Shader nodes

With the node editor, make it an option to show nodes over the viewport, allowing that to remain more focused without needing to open a separate split view or change the layout.

Separate the Principled BSDF shader into 3 collapsible parts. Basics (Color, Roughness, Metallic), Subsurface (transmission, scattering) and Distortion. (Anisotropic, Normal, Tangent). Have only the Basics open at default. This will make it simpler to see and not bloat up every single shader.

Clearcoat and Sheen are confusing as well, because even if the clear coat is 1, it seems that the normal roughness still affects the material whereas it should be using a mixture of them. Maybe add a Blend mode setting that you can set to Mix. As for sheen, it seems like this is adding reflection. If anything I think light should be absorbed into the crevices of cloth, darkening it. Maybe replace this with Facing Brightness between 1 and 0.

A Random Per Ray material node/property. This would make it easier to create dispersion in glass. Currently, you have to create 3 glass shaders for each color r,g,b, add them, and then offset the IOR of the red and blue shaders. The result is harsh change in color wherever it’s visible, rather than a gradient, because it’s combining 3 shaders with completely constant IOR values and colors.

If you can have a node that returns a random value between 0 and 1 each time a sample ray is reflected or refracted, you could alter this with say a Map Range node and feed it to the color hue, and same thing for the IOR.
You could also choose the sampling type to an even distribution mode where it would try to evenly sample the value, resulting in faster convergence.

Texture PreRender node. This would have light baking options like diffuse, direct, indirect etc. and a Bake option so you can bake from this node, and it would also have options to choose resolution, auto-set the resolution and aspect ratio based on the size of the model and how it can be unwrapped, bake on opening of the blend file or keep the texture when closed, or choose an image to use. It would also have a normal map input, which would affect the direction it can ray cast from the model. It would also have options like normal, AO, etc.

This should also be able to use Adaptive Sampling and AI Denoising- there would be checkboxes for whether to use them, and it would generate a denoised version in place whenever the texture is written to. And you should have an option to further refine it, in case it's not enough.

These options should be in the individual node because you may want it to be different, and having to either mess with the render samples every time you want it to be different OR just deal with using one amount of samples evenly across all objects.

Include an Automatic setting. This means, if it, other lights, or other stuff, won't move (depending on setting) on the next frame, or for however many frames after that which you can also set, it will bake before rendering and continue.

There should also be an Auto Start setting. This would allow it to bake at the start of a render.

If you have static objects with light maps baked onto them, and objects that are moving and you're not using light maps for, they should be able to interact seamlessly. This means:

If a ray straight from the camera first hits a static object, it should be able to search for dynamic (on-the fly) objects. If it hits another baked part of the scene, it should not mix those colors together, because indirect lighting is already calculated.

It should then either bounce off (more realistic) or just give up. If it then hits a dynamic object, it should obviously calculate lighting for that and bounce off. Then, if it hits a static, it should blend with the colors of that. This of course should repeat until it reaches maximum bounces.

With Adaptive Sampling, it would automatically calculate wherever it needs to clear up the noise from dynamic objects.

Add an input called Bake Texture into the Material Output. If there's anything connected to this, it should use it instead of calculating lighting on the fly, except that when baking, the standard surface shader should be used instead of that.

Then in the Light Path node, add an output called Is Bake Ray. For any light sources like lamps, add a node setup where Is Bake Ray and Is Diffuse Ray is fed into a Multiply node, and the output of that and the existing strength fed into another multiply node once you bake the texture.

SPEAKING of this light path node, there should be another system called Ray Index, whereby you just set a number called Index in the material settings, and then you can use a Ray Index node in the shader.

It would also be interesting to have a Light Teleport vector in the material output, which would just move the origin to cast the next ray from where it hits. Of course it would be 0 by default. This, along with improved drivers, could make it easier to create portals.

Another problem is that if you modify a mesh or add detail, you may need extra resolution and space in the light map texture. Currently, if you scale the texture, it stretches the UV map. So you then have to either:

  1. Do math to figure out how to scale the UVs to compensate for this, before even figuring out how and where to place the extra detail, which really slows you down.

  2. Create a separate material and separate texture, or I guess maybe do

something crazy with the node setup of the original to combine the two textures, like use another UV map or something.

There should be an option to scale the texture in a way that extends any of the 4 sides and doesn't stretch the UV coordinates. So if you really wanted to, you could use just one image as the entire light map way more easily.

There is a Lightmap Pack option in the UV menu already, but first of all, it sometimes stretches the textures. Second of all, if you have separate textures, you have to create a separate UV map. There should be an option saying Generate UVs in the PreRender node, as well as Correct Aspect, which would prevent it from stretching.

There would also be a vector input allowing you to of course override it with a UV map.

There should also be an Association dropdown, which would control whether it uses one light map (UV and image) per object with the material, or per material. It would be Object by default because it's easier to use, you don't have to fiddle with the texture scale and unwrap other objects separately.

To compensate, each object could have quality settings for its own Lightmap, which would be used if that mode is selected.

Speaking of UV maps, there's the UV map in the Texture Coordinate node that just uses the default map, then there's the UV Map node, which lets you choose what one to use. Maybe the coordinate could have that slot allowing you to decide the UV map because 2 separate nodes is more complicated.

If you wanted to run every single Texture PreRender node at the same time, or bake the materials associated with anything that is selected, that would be in the global Performance Nodes settings. Having to select all the objects you've baked is very cumbersome.

There should also be these options: PreRender New/Edited Objects PreRender Selected PreRender All Nodes

There also should be override settings for the features of the node, like samples.

And there should be checkboxes for the lighting types, normal, AO etc. restricting what nodes to bake by type.

This also would have PreRender Scene Profiles settings. By default there’d be one of those. However, if you create another one, there will be a Lights Collection slot, for a collection that has all of your lights in them. It would essentially save the transforms of all the lights in the scene so they can differ between profiles. This would allow you to, for example, create separate light bakes for different times of day.

Another problem: When you try to bake multiple objects, it doesn't show you which ones have finished baking. It just shows which one is in progress and percent to completion.

Texture PreCombine node. This would allow you to, for example, multiply the color texture with a light bake, and feed it to this node. The node would allow you to choose whether to bake at the initialization of the scene, the start of the entire project, or just create a new texture that this node can update, which would be saved completely to an internal image file.

Both Texture PreCombine and Texture PreRender would have a power2 quality setting, as well as bitdepth settings for each channel, like set any number of bits, whether that be in HSV or RGB, a Precalculate Mip Maps option, as well as a minimum quality setting.

Mip maps would also work by splitting the texture into parts that are a power of 2 number of pixels wide, and you could choose a power of 2 for that. This will split lower quality versions into less chunks, higher quality versions into more. It would then use these chunks depending on the distance, so if the camera is closer to one part of a texture, render a chunk of the full quality, or if it’s further, render a chunk of a lower quality version.

Normal Map Conversion node. This would be used to convert any normal maps to world space before rendering, and it would only perform the calculation if things move.

There would also be an option to precalculate mip map settings for image textures themselves that can universally be used by checking a box in the image node.

These nodes would be in a category called Performance in the node editor.

SPEAKING of categories, maybe there should be a Setup category. This would be for things like texture setups, so you could just add in a Texture Coordinate with a mapping node. There is already that in Node Wrangler but it's hidden in the toolbar or via a shortcut.

There could be things like a Quick Sky setup, with a coordinate system, gradient, color ramp, noise texture, things like that, PBR setup (image nodes, a bump node, and non-color images set to Non-Color Data already) and that Light Path glass setup, which is a common thing you want to create in archviz.

That glass setup is a Light Path with the Is Camera Ray and Is Transmission Ray added together. It's then put into the Factor of a Mix Shader, with a Transparency and the shader you want to use you can put in there. There would also be an RGB node put into the color of both shaders.

You should also be able to add your own setup to this by selecting nodes and right clicking, then select Add to Setups.

Lightmap node for Eevee. This would allow you to access and manipulate the lightmap data which Eevee creates, and for example, create a shadow catcher more easily.

Could nodes be made to work in the solid viewport shading mode? This would make previews easier because solid is a different, less intensive shading mode.

Speaking of nodes, why can’t adaptive tessellation/displacement work outside of cycles? It’s modifying the mesh using the subdivision surface modifier!

— Compositing

The Power wheel of the color balance node should absolutely be flipped. It’s confusing. No one likes confusing.

With the Render Layers node, make it so that you can choose the rendering engine, set different settings, and add a checkbox for whether to actually render it. This would be good for side by side comparison transitions, or just rendering with multiple rendering engines in the same project, like for animations.

Speaking of which, a setting to render as wireframes isn’t in Workbench even though it’s an option in viewport.

With the node editing workflows, give the nodes and their properties actual tool tips rather than just “Input value used for unconnected socket.” and “Add a node to the active tree.”

-- Animation Workflow

The Dope Sheet and Graph Editor should be merged into the Animator and have it so you can switch between them as modes- like curve mode and point mode. Because it’s literally editing the same key frames, having them separate editors is unnecessarily complicated.

Shift selecting these modes would separate them horizontally in the order you click them.

The non-linear animation workflow is a bit confusing as well. There should be an option that says Pack Animation from Selected, which will package your selection into blocks that can also be edited later, and then by default, save into a designated folder and show this as a list. This could be saved to the project, reused at different points in the animation, or instantiated at game runtime.

There could also be a block display mode where these animation clips can be moved and controlled.

Animations would have a priority value that controls which one would be used if multiple are overlapping on the same value.

You could also change the number of layers showing within this track to make sense of any overlapping tracks you might need to have.

Also, maybe there should be an actual handle on the animation blocks for trimming and repeating it. It should also stay the same size regardless of the scale if you hold a certain modifier key.

Drivers is also confusing. The interface currently seems much more convoluted than necessary. Maybe it could display input values on the left, driven values on the right, and use a node system with math nodes and value nodes to drive values. If you right click a value it should have “Mark Input (Drivers)” and “Mark Output (Drivers)” options.

-- Simulation

Add a function where you could just quickly run a physics simulation to calculate where something should be.

Rigid Body Constraints is extremely confusing. I tried to set up a hinge, but the object would ALWAYS move no matter what objects I assigned into those slots. It should have axis and origin vectors to rotate around, a margin value for how much it can rotate in the other directions, a vector for movement constraint along that axis, min/max distance limits, and then whether to constrain it to a perpendicular plane, with x/y min and max dist. limits. You should not HAVE to use separate objects. I mean maybe you could have the option, but it’s really confusing as-is.

It should also visually display lines, planes, cones, and dots for this while editing.

In Particle Edit mode, there’s no masking feature. It seemed to me that’s what Weight was for, but that didn’t do anything. The way to select things you want to restrict the comb brush to is to enter into particle tip or vertex selection mode, and select them, and then when you use the comb brush it will only affect the selection.

It shouldn’t work like this. There’s already masking in Sculpt Mode and you expect it when you want to use that feature for strand editing. This is inconsistent and you should be able to paint it and have invert options and such.

Allow separate meshes to be selected and used for collision.

-- Misc.

Add a component called Quick Link. This could be added to an empty object and then you could locate any property, like a value, a location, or something in your project to edit. Then if you hit Tab, you can immediately bring it up. You wouldn't be able to add it to the same object that has a Mesh component because of edit mode.

100%

Development Status: Open

Upvote 3 Downvote 0
gbirdman
15 Jul 2020

3 Comments

crystalsunshine686

I think the boolean operators are the most critical and most swept under the rug thing in all 3d software none of them work for exactly every case unless the software uses voxels to mediate the operator in some way, most of us autistic people call that broken (somthing that works sometimes) its like if one day quantum theory decided to stop putting a soft limit on the quantum tunnel distance and you could stick your hand through a wall like in dreams its broken

thinkingpolygons

massive wall of text

simplify it, and maybe people will read it

gbirdman Author

* @ThinkingPolygons * Frankly I have no idea what to do about that. I separated each suggestion into a paragraph.