text:
What's the purpose of the EEVEE rendering engine?
Is it an alternative to Cycles, or just for the 3D viewport?

You can read this code.blender.org post describing the development goals for Eevee: https://code.blender.org/2017/03/eevee-roadmap/
In short, Eevee is meant to be a modern, high-quality viewport that will perform better than the current Blender viewport, and can better approximate the shaders for game engines or renderers such as Cycles. It will also be able to function as a final renderer in its own right, removing the need for a dedicated scanline renderer such as Blender Internal. Since it is GPU based (using the same render techniques as game engines) it will be very fast, rendering in seconds or fractions of a second.
You can use it as an alternative to Cycles if you prefer the speed, or use it as a preview of Cycles for when you need the extra quality of path tracing and don't mind waiting around for it. Since the renderer is very similar to game engine renderers, it is also very useful for prototyping game assets before sending them on to engines such as Unity or Unreal.

Does anyone know if it's going to get compatibility with Cycles/Internal on materials level? While it's nice preview it seems to be quite lost potential if we need to make second set of materials for final render anyways. It doesn't make it especially useful material preview in such case...

Eventually yes, at least for Cycles. It actually supports many Cycles shaders already, it just currently requires them to also be connected to an Eevee material output. This will change in the future AFAIK, Cycles already supports reading its shaders from Eevee's material output.

"that will perform better than the current Blender viewport" -- how can a viewport full of post-processing effects and complex lighting (Eevee) perform better than a simple viewport with solid objects and GL lights (current)? I don't think this assertion is right.

Short answer is that the current viewport code is very old and poorly optimized in many ways. Also, while Eevee may not be faster than with all the effects turned on, you can turn off the effects too, so....

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/


text:
When I export my files into .obj the model is showing all of the CMT lines and circles
I'm new to blender and I used the carver tool to help create my model and for some reason every time I try to export the file as an .obj the model isn't coming out right. I open the .obj on the 3D viewer app..
Here's the model in blender:

What "carver tool"? - Don't recognise that expression unless you mean sculpting! We'd also need to see what your object looks like in Blender.

Oh sorry! That was my mistake, I meant the carver add-on, its sort of an in-build add on that you can use to make cuts into models. I added an image of the model in blender.

Ah ok. To be honest I didn't know there was a buit-in addon called 'carver' and I've never ever heard anyone mention it before in all the time I've been using Blender! Unfortunately that image you've added doesn't really show any details of how your object has been constructed so I think we'd need to see the blend file to go any further which you can share here: https://blend-exchange.com/. Follow the instructions on that page.

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

sort: votes


text:
Geometry nodes tries to join splines when deforming mesh along a curve object
EDITED: I'm trying to deform copies of a mesh-cube along a curve (and eventually animating them moving along the curve). My problem is that as I'm drawing multiple splines for the curve, the objects are deforming in the space between end of one spline and start of the other. How could I make it so that this "glitchy" deformation between the splines wouldn't happen (and both splines would have the cubes along them)?

Perhaps you should make this clear: I'm not sure, but you appear to be instancing objects along a curve (aligned).. not deforming objects with the curve?

@RobinBetts thanks that's a good point! I now changed the objects to be cubes rather than circles so that the deformation is visible. I also bumped up the resolutions so node-network should be easier to read

It's not trying to "join splines" per se, it's just that when one side of your face is still on the end of the first spline and the other side is moved to the start of the second one, they naturally stretch in between. The solution would really depend on what exactly you want to see though. Do you want to just delete the stretched faces? But then the ends of your cubes would be "open", for ex. Do you want them scaled to zero as they travel, then new copies created on the second? Will there be a 3rd, 4th? Mayyybe this would be helpful: https://blender.stackexchange.com/a/282932/71578

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
Help with animation Minecraft rig
There was a problem with the texture of the character when moving it. The fact is that when you try to move the character along the Z coordinate, the texture of the character changes, and his head becomes monochromatic with the hair color, while the eyes remain on the layer with the head. Could the problem be related to texture binding, or is it something else?
(I would like to add that with the standard position of the character, everything looks as it should)
rig i use for animation is ThomasRig

Hi! Welcome to Blender SE! That's not really a lot of information to go on so your question might not get answered as it is. If you upload your file with the textures packed someone can take a look at it for you. Right now, it seems really unlikely that the UV mapping is the issue, as those usually apply to an object based on its own local coordinate. I would take a look at the rig weighting itself. Are you getting other artifacts like z-fighting or smooth shading?

Hi Please use a title that reflects the content of the question. It should be descriptive but succinct, unique and identifying, summarizing the issue so that users can at a glance understand what your post is about. Use the [edit] link below your post and avoid anything not strictly essential to the post. Remember, your title is the first thing potential visitors will see, and makes your question findable for future users. See "What is the problem with posting an image or link and asking “How do I do this?""

Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking.


text:
Boolean Modifier Being Ignored
I've been trying to create a cartoon-like mouth however when I go to render (and even sometimes in the viewport) the boolean modifier that is making the mouth visible is ignored.
This is what I'm hoping for where the model shows an open mouth that is visible:

However, if I tell Blender to render the file or interact with the object that's creating the mouth cutout the main model seems to ignore the boolean modifier:

Currently the way that I have the model set up is three objects and two armatures. One object and armature belongs to the main body, meanwhile the other armature controls the mouth. There, one object serves as the cut-out mouth and is used within the boolean modifier meanwhile the other object is the mouth interior.

For the "mouth" objects the modifiers are Mirror > Armature > Subdivision. The "body" object has the same modifiers (Mirror > Armature > Subdivision) with the boolean modifier as the last modifier. The boolean modifier is set difference, "mouth-cutout" object, solver: exact, solve options: self interaction, hole tolerant. Currently it works when I edit the "body" object's modifiers, but as soon as I press render or edit the "mouth-cutout" object the boolean modifier stops working.
I found that regardless of whether or not the viewport is showing the boolean modifier as working, the boolean modifier works when rendering with Eevee rendering engine but does not work in Cycles (which is my intendent rendering engine). This seems to imply that the issue I'm running into impacts the Viewport and Cycles, but not Eevee.
If anyone would be able to help me and let me know what's going wrong, I would greatly appreciate it.

See, if "use modifier during render" is active or not. Its the little camera looking button next to the modifier name in modifier stack

Hi, try to check if your Subdivision levels on the "Boolean" object and the "Figure" are the same (to see the error), in terms of Viewport and Render. For example if your figure has SubD Viewport on 2, but Render on 3, you will not be able to see the error that happens during render. On the other hand, you can use Boolean with SubD levels of 2,2 on object that has 3,3.

@JanHrodek currently all of the objects have SubD levels of (2,2). Is that what you were referring to? Would that possibly cause any problems (this said, I also tested out one object having (2,2) and the other (3,3) as well as vis-versa, so I don't think it's the issue in this case, but I'm curious for future reference).


text:
What is the simplest way to increase volume of mesh?
This hand looks too skinny. What is the simplest way to make it fatter, especially the fingers?

In Edit Mode, you can use the Shrink/Fatten tool. ⎇ AltS
It is limited to the selection.

You can also add a displacement modifier and change the strength value.
For more control assign a vertex group to it. Create a the group and go into weight paint mode ⎈ Ctrl↹ Tab to paint the weights.

It seems the gif progress bar got messed up. Sorry.


text:
Blender 3.3 Hair - how to set random hair length with Geometry Nodes?
I'm still not very familiar with Geometry Nodes and can not figure out how to control individual hair length with them in the new Blender 3.3 Hair system. I've added a new hair object and added some straight hairs in the sculpt mode. Now I want to be able to randomize their length with Geometry Nodes without affecting their direction. I haven't found any node like "Scale Curves" or "Scale Splines", while Scale Elements and Scale Instances nodes don't work with Hair Curves. Transform node affects the whole object. I tried following approaches:
At first I tried to directly Set Position of the hair tips using Noise Texture with indices as X coordinates, but it just randomly moves hair tips all around. I understand the reason but it is not what I am looking for:

I tried multiplying normals with noise which worked fine for the mesh displacement but I'm not even sure what the normals are for the hair curves. At least it doesn't work:

I tried to capture Normals from the mesh object as a Named Attribute in all modes to use this attribute as vectors in the Hair Geometry Nodes, but it doesn't affect anything:

I tried to fix Hair Normal rotation angle but failed:

I am out of ideas of how to control length of individual hairs. Can anyone help with this please?
UDD.
Uploaded .blend file with all 4 Geometry Nodes data blocks in it.

Could you share your blend file so we don't have to recreate it all? ...because you could just scale the normal vector.

@quellenform thanks, I've uploaded project file, and added a link to the post. How do I get a proper normal vector to scale?

If you want to scale the hair differently along the normals of the surface, you can use the following solution:

Here I use Object Info and Transfer Attribute to bring in the normal of the sphere, and scale this direction vector with a randomly generated value.
But so that only the endpoint of the curves is affected, I use the node Endpoint Selection as selection when moving the points.
(Blender 3.3+)

Thank you. This is what I was looking for.


text:
Does Blender support threading for data processing?
One of the most time taking part while working with images in Blender is to get pixels to numpy arrays and then to assign them back. As Blender supports multi-thread render I've thought it could be possible to make an image processing faster using  concurrent.futures like this (the script adds 10 images, 10 numpy arrays and assigns arrays as images' pixels):
import bpy, concurrent.futures, time
import numpy as np

def test(counter, multi):
    t1 = time.perf_counter()
    x = 1920
    y = 1080
    px = x*y*4
    images = bpy.data.images
    counts = [i for i in range(counter)]
    all_images = []
    for i in counts:
        num = np.ones(px, dtype = 'f')
        name = 'imgtest_'+str(i)
        new = images.new(name, x, y)
        all_images.append(new)
    if multi:
        def pixels(img):
            img.pixels[:] = num[:]
        with concurrent.futures.ThreadPoolExecutor() as executor:
            executor.map(pixels, all_images)
    else:
       for img in all_images:
           img.pixels[:] = num[:]
    t2 = time.perf_counter()
    print(t2-t1)

test(10, True)
test(10, False)

But it gives almost no time benefit. Also I've tried to split pixels lists to slices and process them with threading, but it doesn't speed up processes as well. I've never used threading before. Am I doing something wrong here or does Blender just not support threading for such tasks?

Take a look at E-Cycles addon, and see how it works

Thank you! Right now I can't afford it.

All the multithreading in blender is via c/c++ routines called via python.

Thank you! But still I don't understand: does it mean that Python built-ins threading modules are inefficient for processing Blender data and it can be only done by changing Blender source code?

First of all, Cycles render is an additional application with its own kernel, written in c/c++. It is ''glued'' to Blender by several Python scripts, well I think so.
Secondly, you can use Python modules like threading and multiprocessing to process data simultaneously. They are built-ins in Python interpreter, so there shouldn't be any problems if you'll decide to distribute your script.

Thank you. concurrent.futures.ThreadPoolExecutor() from the script, which is also in built-ins, does the same as threading module, but for some reason it doesn't give any speed advantages. I've also tried concurrent.futures.ProcessPoolExecutor() (the same as multiprocessing module) for multiprocessing but it returns errors, something about "-c language was not found". I am afraid it may be because Blender just doesn't provide a possibility to process several images (or its other data blocks) simultaneously. And this is what I need to know exactly. Or a simple script proving opposite.

@AndreySokolov, can't say anything about an error you've got using concurrent.
By the way, you may not see any speed increment (sometimes speed lost) because of Pythons' GIL.
Also
It's a mutex included in a standard python implementation for safe memory management (to avoid race condition, etc).
In short GIL runs one "thread" for a short period of time, stops it, runs another one, stops it, runs first one again, and so on...

@AndreySokolov, maybe you can try to cheat a little by using threads outside python. Write your main image processing function(which you'd like to multithread) in good old C language using <pthread.h>. Then create a python binding to it and use in your script. It's a complicated task. You must compile code for different OS, in case of package distribution and overall be familiar with C


text:
Drive/animate smoke size according to particle lifetime?
Is it possible to set the size of particles in the smoke simulation settings according to particle lifetime?

E.g. to make particles emit less smoke over time and gradually fade away, rather than suddenly disappearing.
Is this possible?

I'm afraid it's not possible at moment as size affects all particles together.

It is possible to change the size of a particle over its lifetime refer to the image and set parameters as described.
 1. use a blend texture
 2. set its mapping to particle/strand
 3. drive the size parameter in the texture properties

I used the Blender Internal Engine to set up the texture then switched to Cycles to render.

Thanks, this is useful, but unfortunately I don't know of a way to get smoke to use individual particle size to influence emission size..

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/


text:
Why do freestyle outlines occasionally have gaps?
Sometimes freestyle renders will have gaps in the lines:

Closer up:

What causes this and how can I prevent it?

Try the following:

Make the mesh smooth (I guess this has been already done in your scene).
Enable the Face Smoothness option in Properties > Render Layers > Freestyle.

A detailed explanation of these settings can be found here.

This seems to work :) Could you explain what you mean by "Make the mesh smooth"? (smooth shading? physically smooth?)

By "make the mesh smooth" I meant smooth shading.  This way mesh vertices may have multiple normals, from which Freestyle can compute smooth silhouette lines that do not exist as edges in the original mesh data.

It is mainly caused by toggling "Chaining" feature in the Freestyle Lining Style panel, if you are sure it's not caused by any Freestyle modifiers.
If so, to prevent that, you may simply toggle "Enable Chaining" off, or just include "Contour" by toggling it in the Edge Types list. (But make sure "Same Object" is not toggled, which is right below the "Enable Chaining" checkbox.)

This seems to remove some of the gaps, but not all: http://www.pasteall.org/pic/62245

Agree. user1561's way works better on your scene.

For Text (fonts)

Convert the text to a mesh using Alt + C in 3D View and picking "Mesh from Curve/Meta/Surf/Text"

Turn on "Face Smoothness" in Properties > Render Layers > Freestyle

Before:

After:

Note: this might still not be enough, you might be forced to apply "Smooth" Faces in Edit mode (press TAB in 3D View to switch) in the Shading/UVs sidebar (press T to open).
Since this might screw up the rendering of the model, you might want to duplicate the model and render the copy on another layer.


text:
How to determine the poly/vert counts of a fluid simulation?
Is it possible to determine the vertex count of a fluid simulation frame without applying the fluid simulation?
Normally I would just go into edit mode and select all to see the vertex count in the Info panel, but its a nuisance to have to duplicate and apply my fluid mesh every time I want to see this information. (e.g. if I'm going through the frames and watching the vertex count)
Is there an easier way to do this?

When in object mode the info panel shows the vertex count of every object in the current scene which includes hidden objects, with a fluid simulation this changes each frame as the fluid mesh changes.
The frame before the fluid simulation starts will show the scene vertex count to use as a basis, lets start at frame -1 and say we have 16 vertices for a simple simulation with a cube for fluid and another for domain. Jump to frame 20 and we have 17184 vertices. By subtracting the 16 vertices we started with we have a fluid mesh with 17168 vertices. For an exact figure I believe the 8 vertices for the domain are included in the deformed fluid mesh so should not be subtracted from the vertex count of the frame.


text:
Add a button without a panel?
Is it possible to add a button outside of a panel, e.g. in the user-preferences?
Say I want to add a new addon category in the addon list, via an addon:

Is this possible? How?

As explained in answer to your earlier question, items can be added to existing panels and menus by appending a function to the existing class that draws the new additions you want to add.
While most buttons in the interface represent operators that will be run when the button is clicked, the item you are pointing at above is not an operator. When you get several buttons attached together that represent a choice of multiple values they are representing an enumerated property.
Based on the code that defines the property you can alter the displayed addon options with the following. Unfortunately with enumerated values you will often find that other code changes would need to be made to handle any new values you want to add, meaning they are often not an easy change.
bpy.types.WindowManager.addon_support = bpy.props.EnumProperty(
        items=[('OFFICIAL', "Official", "Officially supported"),
               ('COMMUNITY', "Community", "Maintained by community developers"),
               ('TESTING', "Testing", "Newly contributed scripts (excluded from release builds)"),
               ('NEW', "New stuff", "New stuff here"),
               ],
        name="Support",
        description="Display support level",
        default={'OFFICIAL', 'COMMUNITY'},
        options={'ENUM_FLAG'},
        )

In contrast the enumerated values for the addon categories listed under the supported levels is a dynamic list and you only need to add a new category to your addon's bl_info property to have it added to the list.
bl_info = {
    "name": "My addon",
    "category": "Special addons",
}


text:
Render with openGL from the command line?
Is it possible to use the openGL quick render for rendering from the command line?
e.g. something like blender -b <file> -E opengl -f 1

It is possible, in a round-about way. Operator render.opengl() needs OpenGL display context, i.e. Blender's window, to be opened. Hence, we can't do UI-less rendering using -b command switch. We'll need to do it through a script:
import bpy
import sys                      # read argument from sys.argv
from bpy.app.handlers import persistent

@persistent
def do_render_opengl(dummy):
    bpy.ops.render.opengl(animation=True, view_context=False)
    bpy.ops.wm.quit_blender()

bpy.app.handlers.load_post.append(do_render_opengl)

It is to be executed like this:
blender -P render_opengl.py <file>.blend

Executing wm.quit_blender() is necessary, because otherwise Blender doesn't automatically close when render finishes. We also wrap the rendering code in load_post handler, to make sure the right context is loaded up before rendering. This is especially important if the scene's name is non-default. Otherwise Blender creates new scene Scene and renders it, instead of the scene we want.
The script above is to render preview animation. To render preview image and specify frame range, modify it to read argument from sys.argv (I've written code that does it before) and assigning appropriate values to bpy.context.scene.frame_*.

Thanks! this works. (though it is a little awkward with ui popping up..) Is there a way to get it to render with antialiasing?

@gandalf3: Ensure 3D View is set to camera view before saving, and change view_context in the script to True. I set it to False so it renders through active camera, irrespective of view settings, but it doesn't play well with antialiasing.

The reason you get the default Scene without load_post, is due to you calling the script before loading the file. Changing the order of the arguments, works as expected.

@Aldrik: Cool! I haven't noticed that one.

@Adhi I'm getting some context error using your method when running bpy.ops.object.parent_clear(type='CLEAR_KEEP_TRANSFORM') or bpy.context.workspace.screens[0].areas Any idea how to fix that?


text:
Is it Possible to Dynamically Change Object Materals?
For example, make an object glossier after touching another mesh, to make it look wet (dynamic paint?)
Or make it appear burned after being close to a flame simulation? (particles + dynamic paint?)
I know it's possible to change the object color with dynamic paint, but is it possible to do the same sort of thing with a material?
(Perhaps some complex system that uses dynamic paint generated image sequences to mix several shaders and node groups?)

See the dynamic paint documentation. It can output a images sequence or vertex colours, either can be used in your materials for mixing and/or setting-colours.

Dynamic paint is basically an automated painting system, you define a canvas and brush and together they generate an image (unless saved into vertex data such as vertex colour or group). This image can be used just like any other image within blender.
As shown in Miika's documentation you can use the generated image to adjust various texture settings within the blender internal materials. One example that appears to be omitted is the stencil setting (in the influence panel), this enables the texture layer to be a mask between higher and lower texture layers.
Within cycles you can use an image as input for the Fac value of a mix shader. As the final mix in a material you effectively choose between two different materials. You could also use it at any stage to mix any part of the node setup or input any specific value of a single node, like noise scale or emission strength.
Using nodes with the blender internal render you would input into a MixRGB node instead of a MixShader node to get a similar result.

Are you using Cycles? Then it's easy! Use a mix shader.  Feed one input with one material, and the other with a different material.  The "fac" input of the mix shader can be keyframed, for example 0.0 from at frame 100, and 1.0 at frame 200.  Then you've got an object appearing as one material from the start of the animation to about five seconds in (24 or 25 fps), gradually changing to be the other material at 10 sec in.
If instead of switching materials at fixed times you want to change them upon object collisions, in response to fluid or particle system activity, or anything else, it probably can be done with a "driver" but I have too little experience with drivers to explain.
Blender Internal's material parameters can be keyframed, but I don't know of anything as slick as using a mix shader in Cycles.
For the game engine, I have no idea...


text:
Why are color values rounded in Themes?
Why is this?
For example, if I type in 0.65 to one of the RGB channels, after pressing Enter it changes to 0.651:

This sort of thing seems to happen for all different color settings in Themes, even RGBA ones:

What is the technical reason for this?


text:
Properties don't show up on panel
I was following this tutorial to make a simple calculator in blender (v3.3.1), my code is almost if not completely identical to that of the recording but unlike the tutorial's mine does not seem to work. For starters the properties (value1, value2) I coded into the panel are not showing up in the UI. On top of that, after running the code and clicking on the only button that does show up (operator "some.thing") it returns the following error message:
Python: Traceback (most recent call last):
File "\Calculator.py", line 49, in execute
TypeError: type _PropertyDeferred doesn't define round method
Here's the entire code:
import bpy
from math import *

from bpy.types import (
        Panel,
        Operator,
        PropertyGroup
        )

from bpy.props import (
        StringProperty,
        PointerProperty,
        FloatProperty
        )

class TextPanel(Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "Calculate"
    bl_idname = "OBJECT_PT_hello"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "Math addon"

    def draw(self, context):
        layout = self.layout

        scene = context.scene.your_properties
        col = layout.column()
        col.prop(scene, 'value1')
        col.operator('some.thing')
        col.prop(scene, 'value2')
        col = layout.column()

class TextOperator(Operator):
    """Tooltip"""
    bl_idname = "some.thing"
    bl_label = "+" #Text on button
    bl_description = ""

    def execute (self, context):
        scene = context.scene.your_properties
        string = scene.string
        value1 = scene.value1
        value2 = scene.value2
        bpy.ops.object.text_add()
        obj = bpy.context.object
        obj.data.body = str(round(value1, 2)) + "+" + str(round(value2, 2)) + "=" + str(round(value1+value2, 3))
        return {'FINISHED'}

class addon_Properties(PropertyGroup):

    string = StringProperty(
        name = "Value",
        description = "name of the object to add",
        default = ""
        )

    value1 = FloatProperty(
        name = "Value",
        description = "value to add",
        default = 1
        )

    value2 = FloatProperty(
        name = "Value",
        description = "value to add",
        default = 1
        )

reg_list = (TextPanel, TextOperator, addon_Properties)

def register():
    for clss in reg_list:
        bpy.utils.register_class(clss)
    bpy.types.Scene.your_properties = PointerProperty(type=addon_Properties)

def unregister():
    for clss in reg_list:
        bpy.utils.unregister_class(clss)
    del bpy.types.Scene.your_properties

if __name__ == "__main__":
    register()

I've done my best to try to look for differences with the original (fully functional) code the tutorial writes but I can't find any.
Thank you in advance for your help, I'm very new to python so even if i did find some posts with similar resolved problems I was not able to pinpoint how those solutions could apply to my issue.
Cheers!

Hello ! This is a classic mistake when copying a script from the pre 2.80 era : replace your property statements with annotations, you need to swap equal signs for : (ie replace value1 = FloatProperty... with value1: FloatProperty... and so on)

see https://wiki.blender.org/wiki/Reference/Release_Notes/2.80/Python_API/Addons and https://blender.stackexchange.com/questions/218435/how-to-assign-a-type-annotation-to-a-class-dynamic-property-group

@Gorgious Thank you so much, worked like a charm! What a weird little change they made there!

Hi Daniel, glad it's fixed! This question turns out to be a duplicate, so is closed to keep the archive tidy. Nothing personal :)


text:
Emphasizing Cycles Render Ambient Occlusion
I've tried the Ambient Occlusion (AO) option in the World tab but it brightens the scene too much and doesn't much increase the AO (in Cycles).
How can I increase the amount of Ambient Occlusion in a Cycles render?

I personally consider the Ambient occlusion option in the World tab as a quick way to get some AO. For fine tuning I usually use the compositor after enabling the needed passes.

I recommend you render the AO pass and do it in post-production for more control.
1. Enable the AO pass in render layers.

2. Open the node editor, enable Use nodes and do the following:

The RGB Curves node controls the contrast and the darkness of the AO, which can be helpful.
The AO pass is a Grayscale image so you need to multiply it with the render result.

Additional Explanation
In Cycles, the Ambient Occlusion option in the World tab is technically an additional homogeneous direct lighting (almost like adding an additional solid white world background lighting). However the Ambient Occlusion in Blender Internal can act as additional shading (like Multiply blending in image editor programs or in the compositor). The AO pass in Cycles is basically the shadow data only, which you can use the get the Blender Internal behaviour back, or use in other ways.

You can use the Renderlayer material setting to override all materials with a ambient occlusion material:

Hope that helps!


text:
How to fatten body parts in blender
I need to thicken ("fatten") some parts of my mesh. I tried to scale X but it deforms and make a mess. How do I solve this?

Try the Shrink/Fatten tool in edit mode with proportional editing turned on.
To use Shrink/Fatten press Alt+S
To enable proportional editing press O
Example of this method used on part a sphere:


text:
Key/shortcut to change weight value when weight painting?
I found an old question that says the W key can be used to change the weight value, but that doesn't seem to work in v2.79 anymore. The F key and Shift + F still work in changing the radius and strength, but the W key only brings up the specials menu.
Weight factor - control via keyboard Here is the question/answer that I mentioned

I find this particularly useful: https://www.giudansky.com/illustration/infographics/blender-map

@cegaton I added the link

It works in 2.79b, I tried that now. Maybe you assigned the shortcut to some different function?

In Blender 2.93 you need to use Ctrl + F to change brush weight.
I know I'm a bit late but maybe this will help somebody.

It helped, thanks)


text:
Why are my bones bendy? Rigging
I also figured out the reason it didn't work in the first place, I didn't name the bones and vertexes the same name.
I had an issue when my mesh was not moving with my bones, I've managed to fix it but now I have another problem.
Now when my bones bend it kinda looks like that scene from harry potter where the teacher tries to fix harrys broken arm. Actually it's kinda funny because in this situation I'm that teacher.
Is there a solution to this?

I think doing what's described here How do rigs relate to weights? will help.
If you parent the mesh to the bones 'with automatic weights', it should try to correctly weight paint the mesh to the bones fairly well. And if still looks 'weird' on some parts such as 'too sharp' bending, or 'too soft' (like what you're experiencing), then you need to adjust the weight painting a bit.
hope it helps!


text:
How to remove blur off toon shading blender render

This is my render. But how do I remove blur off the toon shader with the blender render? ¯_(ツ)_/¯
and I want it to look like this

this looks pretty sharp to me. what exactly is the problem with your image?

but i want it to look like the bottom image

I do not see any blur, just a difference in lighting.

The problem is solved.

What you are seeing isn't a blur, it is reflections and highlights.
You can either turn the size and smooth down to zero for the diffuse and specular settings -

or enable shadeless to eliminate all highlighting.

thx but i want the shading to be more 2D

@artmediafan2002XavierFreeman You can use small size values to reduce the amount of specular highlights. The shadeless option is as close to 2D as you will get and will be very similar to your second image.

what about freestyle

@artmediafan2002XavierFreeman freestyle can add outlines, it doesn't change the shading of the object surface.

what about ramp

i figured it out now

As in the question, there are still some sort of Toon shadows; Which can't be achieved by checking Shadeless.

@ShehrozKhan shadeless will remove all of the specular highlights and shadows on the model, by adjusting the size and smooth you can adjust the size of the highlights.

I do not need anymore help but thanks.

Now I figured out how to make my render look 2D.

Note that the models are Pac-Man, Blinky, Inky, Pinky, and Clyde.


text:
Script: set origin to selected vertex
I'm trying to write a quick script that will work on all selected objects:

Start in object mode
Go into edit mode
Set the 3d cursor location to the selected vertices
Go back to object mode
Set the origin of the object to the 3d cursor.

I can't seem to get the cursor to selected part to work properly :/ (step 3)
UPDATE
got this script to work if anyone has any improvements, please suggest:
https://pastebin.com/krmzC8Kh
import bpy
import mathutils

# Store the active object and mode
active_object = bpy.context.active_object
active_mode = bpy.context.mode

# Iterate through selected objects
for obj in bpy.context.selected_objects:
    # Select the object and make it active
    bpy.context.view_layer.objects.active = obj
    obj.select_set(True)

# Switch to object mode
bpy.ops.object.mode_set(mode='OBJECT')

# Set the object as the active object
bpy.context.view_layer.objects.active = obj

# Switch to edit mode
bpy.ops.object.mode_set(mode='EDIT')

# Get the selected vertices
selected_verts = []
mesh = obj.data
for vertex in mesh.vertices:
    if vertex.select:
        selected_verts.append(vertex.co)

# Check if there are any selected vertices
if selected_verts:
    # Calculate the average position of selected vertices
    avg_position = [sum(v[i] for v in selected_verts) / len(selected_verts) for i in range(3)]

    # Transform the average position from local space to global space
    global_position = obj.matrix_world @ mathutils.Vector(avg_position)

    # Set the 3D cursor location to the calculated global position
    bpy.context.scene.cursor.location = global_position

# Switch back to object mode
bpy.ops.object.mode_set(mode='OBJECT')

# Set the origin of the object to the 3D cursor location
bpy.ops.object.origin_set(type='ORIGIN_CURSOR')

# Deselect the object
obj.select_set(False)

# Restore the active object and mode
bpy.context.view_layer.objects.active = active_object
bpy.ops.object.mode_set(mode=active_mode)

do you need to set the origin on a single vertex or on an average set of vertices?
your question shows you need to set on a single vertex but the script you attached does that for an average set of selected vertices.

check my answer for single vertex setting

my bad, I meant for all selected vertices.. same as cursor to selected - so can be used for single or many

now I modified it so it works for a bunch of selected verts

nice but it is not working on multiple objects

check again pls

very nice :) thank you
Both scripts seem to work

Select your desired vertices and run the script:
import bpy
from mathutils import Vector
import numpy as np
bpy.ops.object.mode_set(mode = 'OBJECT')
objects = bpy.context.selected_objects
bpy.ops.object.select_all(action='DESELECT')
for obj in objects:
    verts_co = [v.co for v in obj.data.vertices if v.select]
    if len(verts_co) == 0:
        continue
    avg_loc = np.sum(verts_co, axis=0) / len(verts_co)
    global_co = obj.matrix_world @ Vector(avg_loc)
    bpy.context.scene.cursor.location = global_co
    obj.select_set(True)
    bpy.context.view_layer.objects.active = obj
    bpy.ops.object.origin_set(type='ORIGIN_CURSOR')
    obj.select_set(False)

import bpy
from mathutils import Vector, Matrix

def object_origin(object: bpy.types.Object, origin: Vector=Vector((1, 1, 1))):
    '''
    Change object origin location.

    object (bpy.types.Object) - The object to change origin of.
    origin (3D Vector) - The location to change the origin to.
    '''
    local_origin = object.matrix_world.inverted() @ origin
    object.data.transform(Matrix.Translation(-local_origin))
    object.matrix_world.translation += (origin - object.matrix_world.translation)

object_origin(object=bpy.context.object)

import bpy
import mathutils

# Store the active object and mode
active_object = bpy.context.active_object
active_mode = bpy.context.mode

# Iterate through selected objects
for obj in bpy.context.selected_objects:
    # Select the object and make it active
    bpy.context.view_layer.objects.active = obj
    obj.select_set(True)

# Switch to object mode
bpy.ops.object.mode_set(mode='OBJECT')

# Set the object as the active object
bpy.context.view_layer.objects.active = obj

# Switch to edit mode
bpy.ops.object.mode_set(mode='EDIT')

# Get the selected vertices
selected_verts = []
mesh = obj.data
for vertex in mesh.vertices:
    if vertex.select:
        selected_verts.append(vertex.co)

# Check if there are any selected vertices
if selected_verts:
    # Calculate the average position of selected vertices
    avg_position = [sum(v[i] for v in selected_verts) / len(selected_verts) for i in range(3)]

    # Transform the average position from local space to global space
    global_position = obj.matrix_world @ mathutils.Vector(avg_position)

    # Set the 3D cursor location to the calculated global position
    bpy.context.scene.cursor.location = global_position

# Switch back to object mode
bpy.ops.object.mode_set(mode='OBJECT')

# Set the origin of the object to the 3D cursor location
bpy.ops.object.origin_set(type='ORIGIN_CURSOR')

# Deselect the object
obj.select_set(False)

# Restore the active object and mode
bpy.context.view_layer.objects.active = active_object
bpy.ops.object.mode_set(mode=active_mode)

it does much unneeded works

can you explain please

and indentation is not right so it sets a single origin for all objects

going back to editmode is not needed since blender updates its selection arrays after exiting edit mode and selection is accessible in objectmode. 2)
the summation here is slower than that of numpy. 3) since it doesn't deselect all objects first, it sets the origin of all selected objects in each loop and then deselects a single one so it works functionally but does much unneeded. it will be a burden in large selections

Thank you :) ..

since you know everything already, you can set the 3d cursor like this:
import bpy

bpy.context.scene.cursor.location.xyz = (1,1,1)
bpy.ops.object.origin_set(type='ORIGIN_CURSOR')

of course you have to replace the (1,1,1) with the selected vertex location


text:
How can I reset a tool to its defaults?
Each tool has various settings associated with it. For example the Inset Faces tool has the following in Blender 3.0:

When following a tutorial, the teacher does not always show the tool settings they're using. If I can assume that they are using the default settings, how can I make sure my tool settings match? Can I reset the tool somehow? Can I look up the defaults somewhere so I can reset it myself?
Sculpting tools can be reset, but what about others?

For most tools, if you right click on one of the tools input fields, the popup menu should show "Reset All to Default" as an option.  It varies how well this works.

Thanks @MartyFouts that does seem to work (at least for my Inset Faces example)! Would you like to provide that as an answer?

I'm glad it worked.  I added it as an swer.

For most tools, if you right click on one of the tools input fields, the popup menu should show "Reset All to Default" as an option. It varies how well this works.
In the worst case you can reset everything by selecting Load Factor Settings from the Defaults submenu of the File menu.

Worth noting, that some tools have this but some tools can only reset themselves one setting at a time. Easy enough to right click each input and reset it individually though.

Some values reset to default when you hover over them & hit the Backspace button.
A few tools however are set to zero when you do that, regardless of the default value (I forget which ones). Still, I find the Backspace button very useful for resetting values.


text:
Bump map on a curved surface
I'm a bit newer to blender, so apologies for probably missing some obvious terms.
I am able to create bump maps for objects with hard corners, but when I try to use them on more spherical objects, I can never get what I want. Iwant the bump map to follow the curves of the shape so they are always perpendicular to the faces. (I think the word "normal" is related to this but using the Normal output from a Texture Coordinate node doesn't work.) Imagine a golf ball, or a strawberry with seed divots.
Here's an image of what I'm talking about. This is a strawberry with the seed divots:

It looks fine, until it's rotated:

and the divots stretch out. Here's my bump image and here are my material nodes:

I've gotten the most milage out of changing the texture coordinate output and rotating/scaling the mapping node, but it's pretty obvious to me that I'm just flailing around and guessing.
I'm sure there's also a correct term for this that I'd love to know.

in the image texture node change the "Flat" option to "Box".

The problem here is the texture coordinates/projection of the image, you are currently projecting the image in a single direction onto your mesh. You can think of projection working very much like a film projector here. By selecting 'Box' rather than 'Flat' as David suggested, blender will instead project from 6 different directions (as if a cube was surrounding the object, with the texture on each face). This works reasonably well for simple objects, but can still have problems around the where the corners of box that the image is being projected from are.
To improve on the box projection, you need to do what is called UV unwrapping, which essentially creates a flattened version of the surface of your object which can then be used to map 2d details to the surface of your object. You can find a basic overview here

Thanks for this. I'm surprised sphere wasn't the right projection. Time for another question!


text:
select object related to image through the outliner
I am trying to find the object in the scene that has the tree.png image on it, This is quite a big scene and some images names are obscure and not as recognizable as 'tree'.
My question is... is it possible to select the object that the image is connected to through the outline -> Blender File -> search

When clicking on the image (or right-clicking) none of the options works for me.

First two steps due to a bug which I didn't expect.

Grab debug.py from here: https://developer.blender.org/T98252
Replace C:\Program Files\Blender Foundation\Blender <your blender version>\<your blender version>\scripts\addons\amaranth\scene\debug.py
Open Blender, enable Amaranth toolset add-on.
In scene tab, open scene debug. In list users for datablock section select image, choose tree.png  and press the button List Users for Datablock. A list of users will be shown:

Nice one! Although I do think it should be easier than that, like right-clicking the tree.png and get the user list.  Thanks for the answer, I wasn't aware of the amaranth toolset, I will explore it a bit further


text:
Simple button for mashup script
I am creating a script from all sort of sources, I am no coder, so I am sure it is ugly, but it does the trick.
The issue is with the button operator, when running the code it works fine, but when I click on the panel button that has been created in the UI I get error messages that are just beyond me.
This is where I got with the button script + operator:
Thanks!
import bpy

class _OT_SimpleOperator(bpy.types.Operator):
    """Creates GLB setup after baking"""
    bl_idname = "object.after_bake_setup"
    bl_label = "After Bake Setup"

    def execute(self, context):

        #Materials Remove, Add material using object's name
        selectedObject = bpy.context.selected_objects
        print (selectedObject)

        listOfObj=[]
        for obj in selectedObject:
            listOfObj.append(obj)
            obj = bpy.context.view_layer.objects.active
            for x in obj.material_slots:
                obj.active_material_index = 0
                bpy.ops.object.material_slot_remove()

        #UV's - Remove all UV's except for the 'bake' (option for list ones on 'names')
        def rem_uvs(uvs_to_keep, ob):
            uvs_to_rem = []
            if type(uvs_to_keep) == 'str':
                uvs_to_keep = list(uvs_to_keep)
            if ob.type != 'MESH':
                return
            for uv in ob.data.uv_layers:
                if uv.name in uvs_to_keep:
                    continue
                uvs_to_rem.append(uv)
            while uvs_to_rem:
                ob.data.uv_layers.remove(uvs_to_rem.pop())

        # providing single name to keep
        rem_uvs("baked", bpy.context.object)

        # providing list of names to keep
        #names = [
        #    "bake",
        #    "Combined",
        #    "Normal",
        #    ]
        #rem_uvs(names, bpy.context.object)

        obj = bpy.context.view_layer.objects.active
        newMaterial = bpy.data.materials.new(name=obj.name)

        obj.data.materials.append(newMaterial)

        #Material Node Setup
        newMaterial.use_nodes = True
        principled_node = newMaterial.node_tree.nodes.get('Principled BSDF')

        image_texture_node = bpy.context.object.active_material.node_tree.nodes.new('ShaderNodeTexImage')
        image_texture_node.location = (-300, 300)
        newMaterial.node_tree.links.new(image_texture_node.outputs[0], principled_node.inputs[0])

        uv_map_node = bpy.context.object.active_material.node_tree.nodes.new('ShaderNodeUVMap')
        uv_map_node.location = (-520, 300)
        newMaterial.node_tree.links.new(uv_map_node.outputs[0], image_texture_node.inputs[0])
        uv_map_node.uv_map = "bake"

class _PT_LayoutDemoPanel(bpy.types.Panel):
    """Creates a Panel in the scene context of the properties editor"""
    bl_label = "Layout Demo"
    bl_idname = "SCENE_PT_layout"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "scene"

    def draw(self, context):
        layout = self.layout

        scene = context.scene

        # Big render button
        layout.label(text="Big Button:")
        row = layout.row()
        row.scale_y = 2.0
        row.operator("object.after_bake_setup")

def register():
    bpy.utils.register_class(_OT_SimpleOperator)
    bpy.utils.register_class(_PT_LayoutDemoPanel)

def unregister():
    bpy.utils.unregister_class(_OT_SimpleOperator)
    bpy.utils.unregister_class(_PT_LayoutDemoPanel)

if __name__ == "__main__":
    register()

The error I'm getting, I'm pretty sure this is going to be only one of few, I think when putting the code in a class it messes up calling some of the functions.. The code (the execute) on its own works fine when running from the text editor.

after adding poll as I can see on blender python templates ('operator simple)
I get this error: something to do with context incorrect
location: <unknown location>:-1
Error: Python: Traceback (most recent call last):
  File "\AfterBake_Addon_2.py", line 26, in execute
  File "C:\Program Files\Blender Foundation\Blender 2.92\2.92\scripts\modules\bpy\ops.py", line 132, in __call__
    ret = _op_call(self.idname_py(), None, kw)
RuntimeError: Operator bpy.ops.object.material_slot_remove.poll() failed, context is incorrect

Hello, copy pasting the error thrown in the console will help pinpoint the issue :)

@Gorgious I have added the error message to the post.

Give the operator a poll method such that it doesn't poll (cannot be run) when context.object is None ---> this being the case is  producing the error mentioned in question.  context.object is none for example after delete operator is run

@batFINGER I still get this error regarding the context, what still make me think that when putting the code inside the execute operator I loose the active object somehow

Edits.

Please never post code as image.
Using context.object in the properties can be dodgy as
(speculating) it is also used to pin an object. Printing will show it
is often None, this was causing the polling error with remove
material slot operator.
To remove all the materials from selected objects can override the
operator to pass the non (or) context object to it directly. Suggest
this could be a logic error as it will simply clear all materials of
the selected objects, whereas perhaps you desire to do same to all.
There is no need to tack a _PT or _OT onto the name of classes.
Let the bl_idname do this for us, for operators "foo.bar" ->
"FOO_OT_bar".
The operator has to return a status set, eg {'FINISHED'} if run
successfully.
If we poll that the active object need be, and need be a mesh there
need be no need to test in code.
Use the context argument passed to an operator, there is never a
need to see bpy.context in operator or panel code.
On a semantics side, and recommended in best practice, stick to lower
case variable names, active_obj over activeObj. The latter is
reminiscent of blender circa  "python 2.x"
IMO good practice to put all our registerable classes in a list. This
comes in very handy both when adding new classes, and when inspecting
the addon.

Code revamp.
import bpy

class SimpleOperator(bpy.types.Operator):
    """Creates GLB setup after baking"""
    bl_idname = "object.after_bake_setup"
    bl_label = "After Bake Setup"

    @classmethod
    def poll(cls, context):
        ob = context.active_object
        return ob and ob.type == 'MESH'

    def execute(self, context):

        for obj in context.selected_objects:
            if obj.type != 'MESH':
                continue

            while obj.material_slots:
                obj.active_material_index = 0
                bpy.ops.object.material_slot_remove({"object" : obj})

        def rem_uvs(uvs_to_keep, ob):
            uvs_to_rem = []
            if type(uvs_to_keep) == 'str':
                uvs_to_keep = list(uvs_to_keep)
            for uv in ob.data.uv_layers:
                if uv.name in uvs_to_keep:
                    continue
                uvs_to_rem.append(uv)
            while uvs_to_rem:
                ob.data.uv_layers.remove(uvs_to_rem.pop())

        # providing single name to keep
        obj = context.active_object
        rem_uvs("baked", obj)

        mat = bpy.data.materials.new(name=obj.name)

        obj.data.materials.append(mat)

        #Material Node Setup
        mat.use_nodes = True
        principled_node = mat.node_tree.nodes.get('Principled BSDF')

        image_texture_node = mat.node_tree.nodes.new('ShaderNodeTexImage')
        image_texture_node.location = (-300, 300)
        mat.node_tree.links.new(image_texture_node.outputs[0], principled_node.inputs[0])

        uv_map_node = mat.node_tree.nodes.new('ShaderNodeUVMap')
        uv_map_node.location = (-520, 300)
        mat.node_tree.links.new(uv_map_node.outputs[0], image_texture_node.inputs[0])
        uv_map_node.uv_map = "bake"
        return {'FINISHED'}

class LayoutDemoPanel(bpy.types.Panel):
    """Creates a Panel in the scene context of the properties editor"""
    bl_label = "Layout Demo"
    bl_idname = "SCENE_PT_layout"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "scene"

    def draw(self, context):
        layout = self.layout

        scene = context.scene

        # Big render button
        layout.label(text="Big Button:")
        row = layout.row()
        row.scale_y = 2.0
        row.operator("object.after_bake_setup")

classes = (
        SimpleOperator,
        LayoutDemoPanel
        )

def register():
    for cls in classes:
        bpy.utils.register_class(cls)

def unregister():
    for cls in reversed(classes):
        bpy.utils.unregister_class(cls)

if __name__ == "__main__":
    register()

Thanks so much for that, works perfect.
I will have to look through the code a bit longer to see what you've done there.
many thanks.

NP, happy to help.


text:
Transform Orientation - two of them?
Can someone explain to me the difference between these two panels when using any of the transform tools? One says Orientation and the other Transform Orientations...
Just don't get it.

The Transform Orientations on the left are for the currently active tool only, it is saved independently for each tool gizmo in the toolbar like Move, Rotate, Scale or others.

The Transform Orientations on the center of the 3D View header are the global ones for the scene, used whenever invoking transform operators directly from hotkeys, rather than using the tools from the toolbar.

Thanks for the quick answer, I think naming it like global/current tool will help to avoid confusion.

This is Q&A site run by volunteers, we are not programmers nor in any way associated with the Blender Foundation, decision making nor development process of the software. For suggestions and feature requests use https://blender.community/c/rightclickselect or https://blenderartists.org.


text:
Knife project error (Bug v2.93.4)
I've looked through the other posts, none of them helped me.
Keep getting "No other selected objects found to use for projection" when trying to use the 'Knife Project' tool.
Very confused, not sure what am I doing wrong, I am selecting one object and the second one, entering edit mode and searching for knife project, same as I always do, used to work every time.
Adding a Gif to show my process..

Thanks,.

Can you tell me more precisely your steps? Because I did it and it work as intended... It makes what you say only if I don't select one of the planes and that's pretty much what it says. Are you sure you selected both of them?

@MikoCG, I have added a gif showing the process, selecting cutter then the cut object, moving to cutting angle, searching and applying knife project.
I wonder if there is something wrong with my blender installation - v2.93.4

Hmm not sure because it works in my 2.92 as I didnt upgrade for 2.93.4 yet

Huh it doesn't work in 2.93.4, I just tried it, send it as bug to blender devs if you can

The devs changed knife project for 2.93.4.  I think it's a bug, but here's the new method

In object mode, select only the object you want to project to.
In edit mode, select the cutter object using the outliner.
project as usual.

thanks :) just seen that on the dev page, the new way is much more complicated, why would you change that :(  - https://youtu.be/M9EMWYOgmqk,  https://developer.blender.org/T91139


text:
UV Inset / Shrink/Fatten
I was wondering if there is a way to replicate the inset or shrink/fatten behaviour but for UVs.
Something similar to the attached image, I want to scale the uv island down but scaling it inwards if it makes sense.
 Many thanks.

If no one has a better idea, I could write a script that copies UV map as a 2D geometry, and apply selected geometry as new UV coordinates in the UV map...

I don't think it is possible with Blender's native tools, so it definitely would be amazing to have a script for that. I'm also trying to learn some python (for blender) and would be very interested to see what you come up with, @MarkusvonBroady

Python script
Select geometry of interest (A to select all) and run this script:
import bpy, bmesh, json
from bpy import context as C, data as D

save_name = "uv_inset_data"
if save_name in D.texts:
    raise ResourceWarning(f"text '{save_name}' already exists, perhaps you want to run the other script")
save = D.texts.new(save_name)

for s in (s for a in C.screen.areas for s in a.spaces if s.type=="VIEW_3D"):
    s.shading.type = "RENDERED"  # just for convenience

me = C.active_object.data
bm = bmesh.from_edit_mesh(me)
old_verts = bm.verts[:]
selected_faces = [f for f in bm.faces if f.select]
uvm = bm.loops.layers.uv[0]

new_vertices = []
new_faces = []
facemap = {}
for f in selected_faces:
    g = bmesh.ops.duplicate(bm, geom=[f] + f.edges[:] + f.verts[:])
    new_f = g["face_map"][f]
    new_f.loops.index_update()
    new_faces.append(new_f)
    new_vertices += new_f.verts[:]
    for i, l in enumerate(new_f.loops):
        l.vert.co.xyz = *l[uvm].uv, 0  # map u to x, v to y, set z to 0
        facemap[new_f.index] = f.index
    for x in [f] + f.edges[:] + f.verts[:]:
        x.select = False

bmesh.ops.remove_doubles(bm, verts=new_vertices, dist=0.0001)

for f in new_faces:
    f.select_set(True)
bm.select_flush_mode()

for v in old_verts:
    v.hide_set(True)

save.from_string(json.dumps(facemap))
bmesh.update_edit_mesh(me)

It duplicates the geometry and puts it on Z=0 plane, also moving all vertices to coordinates of UV their UV mapping. This way the shape becomes exactly the same as it's 2D UV unwrapped version. Also a text uv_inset_data is saved with information on the original faces and which relates to which.

Now inset those newly created faces, keep them selected...

...and run the script below:
import bpy, bmesh, json
from bpy import context as C, data as D

save_name = "uv_inset_data"
save = D.texts.get(save_name)
if not save:
    raise ResourceWarning(f"Couldn't load the {save_name} text, did the first script finish successfully?")
facemap = json.loads(save.as_string())

me = C.active_object.data
bm = bmesh.from_edit_mesh(me)

selected_faces = [f for f in bm.faces if f.select]
uvm = bm.loops.layers.uv[0]
for f in selected_faces:
    for i, l in enumerate(f.loops):
        old_face_i = facemap[str(f.index)]  # json converts keys to strings
        orig_loop = bm.faces[old_face_i].loops[i]
        orig_loop[uvm].uv = l[uvm].uv  # inset operator updated UV, otherwise could use l.vert.xy

bmesh.ops.delete(bm, geom=[v for v in bm.verts if not v.hide])  # remove visible
for v in bm.verts:
    v.hide_set(False)

bmesh.update_edit_mesh(me)
D.texts.remove(save)

That is brilliant! Works like a charm :) @MarkusvonBroady
Thanks so much for taking the time to write the script. I think that it would be great to have that capability in Blender, and in general it seems that the UVs didn't get any love from the developers, thanks a lot!


text:
Is there a way to register and call project Property with bpy?
When I assign a new bpy.props Property to the Scene, like this: bpy.types.Scene.my_prop = bpy.props.IntProperty() - I can then set unique my_prop value for each Scene in the Blender project. The same is with the Object, Material, etc. But I would like to have some PropertyGroup attached to the current project, which settings would be unique for each project, but remain the same for all the scenes, objects and other data blocks in it. I could not find anything like bpy.types.Project. There is bpy.types.BlendData, but when I assign any bpy.props to it as an argument, it appears in bpy.context.blend_data as a function, not as a registered property. Also this attribute can not be changed or deleted once it was set. I understand that what I want is probably not the way it meant to work and that once the Property is registered it is meant to stay available regardless closing and opening the projects, until it is unregistered. I just want to clarify if there is no straight forward way to assign the Property to the Project itself. Is it so or am I missing something?
UPD. The only way I see for now is to assign PropertyGroup as an attribute of the bpy.types.Scene and to write an operator which would copy the values from the PropertyGroup of the context scene to all the other scenes every time the property is changed. But in this way it may be pretty tricky to write update functions for the properties.

When you create a Property Definition by such an assignment, you are adding a new field to an existing type class.  Because of the way that Property definitions work, you may only add to classes that inherit from one of three types:

any subclass of ID, Bone and PoseBone.

bpy.types.BlendData does not inherit from any of those classes.
There is some behind the scenes C magic going on with Property Definitions, and so if you try to add one from a class that doesn't properly inherit, you get the behavior you've seen.
You don't need to assign a PropertyGroup.  You can add your property directly to bpy.types.Scene as you describe in your first sentence.
Do you want the property value to be shared by all scenes? Or do you want each scene to have its own value?  In the first case, the best choice would be to assign it to a more inclusive class than Scene and refer to it from that class.  I can't tell you which class to use without more specific information about what you want to do.
In either case, you don't need an operator to change the value, you can simply add a prop layout to a panel for that value.  See this answer for an example of how to do that.

Thank you. In short I need a PropertyGroup registered as a CollectionProperty of the whole project which items could be referenced by index in any data block. E.g. I add a new item with a stack of settings, edit them once and then can use this stack for any object in any scene by pointing at item index as IntProperty. Now I see that the best solution for me would be to register a custom class inheriting from bpy.types.ID, but 'ID' classes are not registerable, so this is not possible and I'll just find some workaround. Thank you!


text:
Is there a way to get pixels from image files without loading them into Blender, using only built-in modules?
I'm looking for a way to get image pixels as numpy array from actual image files (.png, .jpeg, .tif, etc.) without loading them into Blender. I know there are tons of image processing modules and packages but afaik none of them is included in Blender, so they can not be used for add-ons. Anyway including the whole someone's 3rd party module in the add-on just for this task doesn't seem like a solution.
The question is: is there a way to access image files pixel data using only built-in modules? I need to do just a simple image processing (blending several images into a single one) and getting access to image pixels bypassing Blender API would allow to use threading or multiprocessing (which Blender API doesn't support at the moment) to speed up this process.
UPD. As I see now it is more complicated than it seemed at first. Each image file type has its own file layout. You can easily get the bytes sequence from file with built-in img_file = open().read() and then convert bytes to floats for example with memoryview(img_file[:]).cast('f') but you need to know exactly what bytes in the file represent pixel data and in what order to decode them properly. Trying to get through OpenEXR file layout which I exactly need for my add-on seems beyond my ability at the moment.

You can use third party modules in blender, check the following link
https://blender.stackexchange.com/questions/5287/using-3rd-party-python-modules

Thank you very much, it definitely may be useful. Though I am still not sure whether installing third party modules together with add-on and changing original blender python files is a good practice.

The only bundled package that can help you is numpy in Blender. Although you will need to deal with all possible file format and the data for various type of images. It is not that bad to install new module inside Blender with addon if you do "inform" user that you are going to download and install required packages.

Thank you. What I need is information about how to gain access to pixel data in Open EXR files. I can open the file and read all its bytes but I don't know how to determine which of them represent exact pixel data or at least where to get any info about it.

OpenEXR is kind of complicate to read from file without additional library, you can try to extract the color data from it for sure


text:
How to remove a custom draw function from the Top Menu?
I've added a checkbox to the custom Blender UI Panel with a function assigned to it which is being executed on every checkbox update. The idea of that function is to extend Blender Top Menu with the custom Operator's button when the checkbox is checked and remove this button from the Menu when it is unchecked.
The first part - extending menus with the custom operators - is described in the current API documentation, and it works fine like this:
def menu_draw(self, context):
    self.layout.operator("my_render.operator")

bpy.types.TOPBAR_MT_render.append(menu_draw)

But I can't find a way to remove this button from the menu once it has been added. It seems that it should be something like:
bpy.types.TOPBAR_MT_render.remove(menu_draw)

and in the documentation of this remove method it is said that it should remove the drawing function from the menu - and somehow it even works: I mean it executes and raises no Errors - but nothing happens, the button remains in the menu.
Is it a bug of this .remove() method for Menu classes or am I doing something wrong and it is supposed to work in some other way?
Of course I could just write two different TOPBAR_MT_render Menu classes (the first one as a copy of the original one and another one as its new custom version), place them in two different modules and then unregister existing -> import proper one -> register imported every time the checkbox is changed, but as far as it is possible I would like to avoid it.
I'm using Blender 2.83.3.
Thanks for the help in advance!
UPD
Thanks everyone, I've found a mistake! Your comments have really helped to figure out where was the issue. I placed an activating function inside the Operator class and tried to append/remove it right from inside of it, so every time the Operator was called, another instance of this function was used - that's why the previous one could not be removed from the TOPBAR_MR_render. Now I moved the activating function ttr_draw() outside the operator class and everything works perfect. Here's the code I had before:
import bpy
from bpy.props import BoolProperty, FloatProperty, PointerProperty
from bpy.utils import register_class, unregister_class

class TTR_TopMenuExtend(bpy.types.Operator):
    bl_idname = 'ttr.top'
    bl_label = 'Extend Top Menu'

    def execute(self, context):

        def ttr_draw(self, context): # This function should be moved out of this class
            layout = self.layout
            layout.operator("ttr.operator", icon='RENDER_ANIMATION')

        if context.scene.ttr and context.scene.ttr.activate:
            bpy.types.TOPBAR_MT_render.append(ttr_draw)
        else:
            bpy.types.TOPBAR_MT_render.remove(ttr_draw)
        return {'FINISHED'}

def ttr_activate(self, context):
    '''Activating function'''
    bpy.ops.ttr.top()

class TTR(bpy.types.PropertyGroup):
    '''Properties Group for UI Panel'''

    activate : BoolProperty(
        name="",
        description="Enable",
        default=False,
        update=ttr_activate
    )
    speed : FloatProperty(
        name="Speed",
        description="Speed",
        default=100.0,
        min=0,
        soft_max=300.0,
        subtype = "FACTOR"
    )

class TTR_PT_panel(bpy.types.Panel):
    '''Create UI Panel in the render properties window'''
    bl_label = "My TTR Add-on"
    bl_idname = "RENDER_PT_ttr"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_options = {'DEFAULT_CLOSED'}
    bl_context = "render"
    bl_category = 'My TTR Add-on'

    def draw_header(self, context):
        layout = self.layout
        scene = context.scene
        props = scene.ttr

        col = layout.column()
        col.prop(props, "activate")

    def draw(self, context):
        layout = self.layout
        layout.use_property_split = True
        scene = context.scene
        props = scene.ttr
        layout.active = props.activate
        col = layout.column()
        col.prop(props, "speed")

class TTR_Operator(bpy.types.Operator):
    '''Custom Operator to be called from the Top Menu'''
    bl_idname = "ttr.operator"
    bl_label = "My Custom Operator"

    def execute(self, context):
        return {'FINISHED'}

classes = [
    TTR_TopMenuExtend,
    TTR,
    TTR_Operator,
    TTR_PT_panel
]

def ttr_register():
    for cl in classes:
        register_class(cl)

def ttr_unregister():
    for cl in classes:
        unregister_class(cl)

if __name__ == '__main__':
    ttr_register()
    bpy.types.Scene.ttr = PointerProperty(type=TTR)

This should work. Could you show a minimum working example where this issue occurs? As long as menu_draw still refers to the same function the API should be able to remove it.

Possibly related https://blender.stackexchange.com/questions/131290/how-to-remove-add-object-menu-entry-from-add-shift-a-mesh-after-running-scr and https://blender.stackexchange.com/questions/134364/unregistering-a-class

You would have to unregister/reload scripts. Consider that you can just swap out the item by another one in draw() based on any condition (if that helps in this case).

Thanks everyone, it really helped! I've found a mistake in the code: I should not put an activating function inside the appending/removing Operator class (see the update in the question). The problem is solved!


text:
How to get access to Armature pose bones info from Geometry nodes?
I have an armature with several bones, each of them I would like to use to control transforms of other objects. Normally I would either directly parent objects to the bones or use constraints or drivers or something, but I wonder if it is possible to do it with Geometry nodes. It would be handy for me in order to keep the whole system consistent and organized. Could not find any node giving an access to the pose bones info. Is there such an option in the Geometry nodes?


text:
Material use custom property of Object
I have a lot of objects that I want to use the same material, but set (animate) a single custom property of each object which will be used for the material setting of each individual object.
If I create a custom property on my object(s), then copy and paste that as a driver into the material (value) - the pasted driver requires me to specify a specific object. Therefore, every object that uses this material would be driven from that specific object.
Is there a way I can make the driver use the property of "whatever object" the material is being applied to?

The Attribute node can be used to access custom properties of the current object from a material.
Set the Type to "Object" and put the name of the custom property in Name. For example, this will use the custom property "prop" to change the Base Color of the material.


text:
Keyframe Help With Arrow Keys
Brand new to Blender, working through some tutorials and I'm currently doing some keyframe animation.  When I go to use the Arrow Keys to jump to frames, my left and right (-1/+1) keys are working correctly.  So is my down arrow key (-10).  However, anytime I try to jump ahead +10 frames with the up arrow key I get a message "No more keyframes to jump to in this direction".
This is happening even when I'm on the first frame, does anyone know how I can get my +10 frame jump key to work or what I'm doing wrong?

This would indicate old tutorials, historically up and down arrows used to jump 10 frames, now they jump between keyframes. It was somewhere in the 2.5x days that this was changed (couple of years ago). If you don't like the current key setup described by @CoDEmanX you can adjust them in preferences.

▲ jumps to next keyframe of the active object,
▼ jumps to previous.
They don't change frame by +/- 10. If you wanna do so, use:
Shift▲ +10 frames,
Shift▼ -10 frames.
Shift◀ to jump to start frame,
Shift▶ for end frame.


text:
Change imported model orientation
This is what I get when I import a character in Blender :

As you can see the character is not in the right position. I would like to see it "standing".
Can I rotate the camera like this ? (here I just rotated the screenshot I took)

Or is my only solution to rotate the character itself ?

What type of model are you importing?

Either .3ds or .obj files.

You can easily fix this, no need to move the camera to compensate for the orientation of the mesh. You can rotate the mesh by adjusting the rotation in the properties tab, you can also use the mesh tab. You can also do this for many method for multiple objects. Just select the object that need to be fixed and rotate them via r x 90

You can also fix this when you import the mesh. I am assuming you are importing as .obj but this should also work for others. When you import the mesh set the Foawrd axis to -Y and the Up axis to Z.

Thank you for the prompt answer Vader. I used .3ds file in my question. The character comes with many different meshes (hair, ears, legs...) which makes it not very convenient if I have to rotate them one by one. Is there a faster way ?

@Lior can you select them all using a then rotating?

@Lior Try A > Select all > R > (axis to rate on, X, Y, or Z) > 90,

Thank you, I managed to get it right directly when I imported the model as suggested by Vader. By the way, "A" doesn't appear to select anything on my PC (Blender 2.69, QWERTZ keyboard), it just toggles a little option on the bottom of my screen, which I have no idea what it does, I will see this later. Thanks again

Your mouse needs to be over the 3d view. Blender keyboard shortcuts are context sensitive, meaning that depending on where the mouse is hovering over in the application it does different things.


text:
Strange Lines Appearing In Object View Wireframe Mode
I'm new to Blender, having learnt about it from watching YouTube videos. I have created a model of a shoulder pad for use with a scale model, with a view to 3D printing it. The model itself looks fine in Solid Object view, and also looks fine in Edit view. However, when I look at it in Wireframe Object view, I see a lot of strange lines that shouldn't be there. Can anyone help explain why these lines are showing?
I have tried deleting all the edges and faces where these lines show, and then reconnecting the vertexes manually to rebuild the quad-faces, but the strange lines still show in Wireframe Object mode even after doing this. I have also deleted any duplicate vertexes using the remove doubles button after selecting all the vertexes in Edit mode.
Here is an image of the shoulder pad in Solid Object view:

Here is it in Edit view:

And here is what it looks like in Wireframe Object view:

Any assistance you can provide to help me understand why this is happening, and how to improve my modelling to stop it happening in the future, would be most appreciated! Thanks!
Here is a link to my .blend file:

Go to the Tool Shelf (T) Tools-->Edit-->Shading and press the Smooth button. Does it help?

You need to tell Blender to draw all edges in the Object Display Panel:

I believe that Blender does this essentially as a way to conserve processing power as well as to keep wireframe scenes uncluttered for easier navigation.


text:
Render fire with transparency looks washed out
Why it is so complicated to render fire with transparency? A few versions ago, things wouldn't even show on the output file and now the render look very washed out compare to the Blender viewer, If I render it in EXR it look super bright and saturated.
Basically, I am asking… How can I match my output file to the output image on the Blender viewer?
Trying to create a fire spritesheet

Update:
You can see the results using external image editor vs Blender compositor, External editor gave me much better result.
I know you shouldn't render fire on transparency, but for my spritesheet this is necessary, and it looks like this way works pretty well.

Fire is never supposed to be rendered with transparency. You should render emission pass and add it to your image. Fire is plasma that emits light. Light sources(emission) need to be added to an image, not mixed. You will never get good results with transparency/alpha because this is not the right way to composite fire.

Thank you for that answer, I am trying to create a fire spritesheet, so I assume I need a transparency... I will give the emission pass a go

Can you compose it together in Blender or you need to use an image editor?

Got a pretty good result using an image editor and adding the emission pass + alpha to the existing image, having to do it to every frame manually might be time-consuming, but it does give a decent result, so thanks.

You can use Color Mix node in Add mode in the Compositor to do that in Blender. You should not use alpha in any context here.

It should be flame on black background and it should be added to an image in "add" blending mode in linear color space without using any alpha or mask. Black parts of the image have 0 values, so when you add 0 to your image it doesn't change anyway.


text:
Animation washing text Blender Problem
I'm using blender version 2.79b on windows 7. I have been unable to get the cracked text to wash off from the model. I followed all the instructions on the video tutorial. In the dynamic paint section, I have the water as the brush and the cracked text as the canvas. Also setup all the nodes in the compositing view. The only thing I can think of is that there may be a small bug with the attribute node.
Any suggestions would be appreciated, as I am trying to get this to work for a video presentation for Housekeeping Services.
Thanks

The cracked text layer on the bottom of the HDMM up to the D, should have become clear at this point.

Hello Michael, I think what we need is some photos because its still a little unclear.

pretty much what i just said, but yes.


text:
Rendering an explosion on a tracked video in cycles?
I tracked my footage and put an Explosion in it.
My Problem is when I want to render the Animation I always get a white Image.
How can I render only the Explosion without the White Images in cycles?
It also does this on every Format. Here is also the node Setup for the explosion if it helps you

I tried it but I dont think the node Setup is wrong. I could render it correctly but with a more time consuming method. I applied the camera track to the camera, so there would only be keyframes then I copied the camera and the explosion and pasted them into a new Project, where I could render it.


text:
Find center of geometry of a set of objects
I have a Blender model composed of several objects.
I would like to move the 3D cursor to the geometry center of the model (=> one common points for all objects of this model).
I've tried to select all objects and then Shit+S: Cursor to selected.
Result: it seems that cursor goes to center of mass of all my selected objects but not in center of geometry of all my selected objects.

How can I achieved that ? Thank you.

what do you precisely mean by center of geometry and center of mass.
I think these concepts are misused. can you provide a picture of what you mean?

2.8 Update, now you can edit more than one object simultaneously..

In Object Mode, select relevant objects
Tab switch to Edit Mode
A select all, if necesary
ShiftS Cursor to selected.

I think selecting the object and pressing Shift+Ctrl+Alt+C would do the trick.
Similar question - How to recenter an object's origin?

Thanks. I already tried this action but what I want is a unique point at geometry center for all objects. Not one geometry center point for each object. I updated my post to be more clear.

Try selecting all the objects and pressing Ctrl+J to make in one single mesh. Then you can press Shift+S or Shift+Ctrl+Alt+C. Let me know if that works.

Thanks. Complete solution: 1-Select all objects/bones, 2-Ctrl+j, 3-Select object, 4-Ctrl+Shift+Alt+C: origin to geometry, 5-Shit+S: cursor to selected, 6-Ctrl+Z four times (re-split objects & keep cursor at center of geometry of all objects).

Glad to help :)

The other answers are half way there.
If it is just a few objects... in object mode just make a copy of all of them, select them all, right-click (in scene) and join them. Switch to edit mode, select all vertices (press A) and then "Snap cursor to selection" (Shift+S for snap menu). Switch back to object mode, delete the joined object and you can use the cursor as a centered reference point.
This will work for any number of objects, but I can image it gets impractical the higher the count.
In that case... find a plugin for that.


text:
How can i export my models without any offset
I have a 3D model and I am trying to export each part of the model that makes it to an OBJ and JSON format, but I notice I get an offset as the models are not centered at their own origin after exporting. How do I export each of the at their own individually centered origin.

Could you add a blender and export program screenshot?

@batFINGER do you mean the screenshot of my export page ?

Try centering the object in the center of the world before export using ⎇ Alt G and if your model moves into a weird position, move the model to the center manually and use ⎈ Ctrl A to apply the location and export afterwards.

I tried this and it doesnt work

I edited the question, i figured out the previous wasn't detailed enough


text:
Where can I get performance cost for each node in each mode for Blender?
I've thought it would be extremely helpful for the procedural materials optimization to know the exact performance cost of each node in the Shader Editor, if not in the absolute values than at least in the comparison to each other. For example as far as I know some math operations are cheaper than the others: adding/subtraction are cheaper than multiplication which is much cheaper than division, etc. Do you have any idea of how to get this information about Blender nodes or at least where to start a search or how to formulate a request?
UPD. Everything I found out so far is that Math node uses math.h standard C library for computations. I haven't found exact computation costs for its particular functions, but found this wiki article about computational complexity, which seems like something that could be helpful... if I'd been familiar with calculus or whatever it is about.

Its possible to show execution times per node in a Geometry Nodes graph. But it doesn't seem like that's enable for the Shader editor. It might be possible to code and addon that would do this.
<> NVM, looking at the commit for the addition of the GN timings overlay, it's definitely not trivial to add.

Of course having a feature showing exact CPU/GPU/RAM usage and compilation/rendering time for each node right inside Blender would be just mind-blowing, but even if there were any info about actual algorithms used in each node it would help a lot. I'm sure everything can be found in the source code, but it is way too difficult for me to read it, even to find exact functions which determine nodes behavior.


text:
Geometry Nodes - нow to get attribute value calculated on another frame?
I'll try to be as short as possible. I've got a cube which chaotically flies around the scene and hits other random cubes from time to time. How can I store at which frame each cube have been hit to an attribute?
The collision algorithm itself is not important, the essential is how to transfer a data from one frame to another or, in other words, how to freeze an attribute once it suits certain conditions.

you need to use simulation nodes

Is there any way to do it in Blender 3.3?

No (there are some work arounds with duplication of node for certain situations, but it's still not getting information from previous frame's)


text:
How to avoid "internal error: modal gizmo-map handler has invalid area" when toggle maximize area while modal operator is in progress?
When modal operator is in progress and I press Ctrl+Space to Toggle Maximize Area in Blender it starts spamming internal error: modal gizmo-map handler has invalid area into the system console and does not work properly. Here is a simple code which includes: 1) Modal operator which prints area type "VIEW_3D" on mouse click in the Viewport, 2) Panel in N-panel to launch this operator.
import bpy
from bpy.types import Operator, Panel
from bpy.utils import register_class, unregister_class

class MODAL_OT_Handler(Operator):
    bl_idname = "test.modal"
    bl_label = "Test Modal"

    def invoke(self, context, event):
        context.window_manager.modal_handler_add(self)
        return {'RUNNING_MODAL'}

    def modal(self, context, event):
        if event.type == 'ESC':
            return {'CANCELLED'}
        if event.type == 'LEFTMOUSE' and event.value == 'CLICK':
            self.report({"INFO"}, f"{bpy.context.area.type}")
        return {"PASS_THROUGH"}

class MODAL_PT_Panel(Panel):
    bl_label = "Modal"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = "Modal"

    def draw(self, context):
        self.layout.operator("test.modal")

classes = [
    MODAL_OT_Handler,
    MODAL_PT_Panel
]

def register():
    for cl in classes:
        register_class(cl)

def unregister():
    for cl in classes[::-1]:
        unregister_class(cl)

After Toggle Maximize Area it starts to spam internal error: modal gizmo-map handler has invalid area and raises AttributeError: 'NoneType' object has no attribute 'type' which means active area for some reason stops to be a part of the context. The similar issue was described and confirmed here but ticket was closed with words

this seems to somewhat be expected behavior

This example above is extremely simple and error can be excepted by iterating through context space areas instead of using context area, which anyway doesn't stop spamming internal error to the console. But with more complex operators when I need to get context depsgraph, viewport region data for camera ray cast etc., this solution does not work. I've tried to launch operator from itself on excepting error, tried to override context, but it doesn't help and I am running out of ideas.
I'm sure there are ways to avoid this. For example, "Screencast Keys" add-on somehow works regardless to the area, but its code is too complicated for me to get how exactly this feature is implemented.
Can anyone help please?
UPD: "Screencast Keys" detects keyboard and mouse input which are not related to the specific area in Blender, and search for a specific area to draw on by iterating over all areas and comparing to the original one. And it also start spamming the same internal error to the system console on Toggle Maximize Area, so it can not be an example of solution for this problem.
If we add the following to the code above, right before reporting area type, we can compare context content before and after Toggle Maximize Area:
print("\n\n")
for s in dir(context):
    item = getattr(context, s)
    if item and not callable(item) and not s.startswith("__"):
        print(f"{s}: {getattr(context, s)}")
print("\n")

annotation_data_owner, area, region, region_data, selected_ids, space_data will be missing and screen name will be different.
When operator is initially called from maximized area it works as expected, so the issue is not in maximized area itself but in toggling. So the variance of the question is - is it possible to launch a copy of the operator from the currently working operator with new correct context?
UPD2: I've tried to register two additional operators inheriting from the main operator and calling one another when they catch exception in hope that newly called operator would execute with renewed context, but context remains from the first operator call. If the operator is stopped in the maximized area and manually recalled from it again, it works just fine. But how to do it from the code?
UPD3: I've tried to register BoolProperty as Scene attribute with update function which calls the operator with ('INVOKE_DEFAULT') argument and to change it in the operator's __del__ method to the opposite value to activate it. The idea was: we catch error, finish current instance of the operator and in the end change Scene's BoolProperty which calls updater function which calls another instance of the operator. As the result spamming internal error to the console has almost stopped, but area and all other attributes of context mentioned above are still equal None. So the consequences are eliminated, but the cause remains.
UPD4: In the operator's __del__ method I've tried to append a function to the bpy.app.handlers.depsgraph_update_post. This function removes itself from this handler and calls operator again. It also fixes internal error spamming but there is also still no area etc. in the context after Toggle Maximize Area. Now I'm almost sure that it is impossible to fix it with Python API. Please let me know if you have other ideas.


text:
How to generate a deformed mesh based on applied texture
To make bump effect it is easily done by applying a proper texture and adjusting displace parameter to a given good resolution mesh. However it will be seen only in render. Our question is how to actually deform a mesh by applying a texture?

Apparently as seen above, Blender does deformation of the mesh, but where is the deformed mesh?

You can use a Displace Modifier to do this.
From the wiki:

The Displace modifier displaces vertices in a mesh based on the intensity of a texture. Either procedural or image textures can be used. The displacement can be along a particular local axis, along the vertex normal, or the separate RGB components of the texture can be used to displace vertices in the local X, Y and Z directions simultaneously.

For example:

We knew that there should be an easy way!


text:
How to spawn object thats spawn objects
How to create some kind of program in blender that spawn object capable of spawning other objects?
Only thing i need is spawning random object from some collection, and the object which is spawned automatically spawn random object from other collection.
I need it to happen in normal scene because i want that creation to export.
I tried it by particles system but blender 2.8 can't spawn particles that spawns particles.

I can't give you a proper answer, because I lack knowledge in this area, but you should look for the Particle Instance modifier.

Can you add more detail about the effect that you are trying to achieve.

Ok i added more details