text:
Blender Python Data (equality works between instances, identity not)
In the first example, a is b returns True as it should. In the second, it is False. (assume Blender is just opened and the default cube is present and selected).  I thought I was starting to understand until I got False.  This is copied form the Python console.
>>> a = [1, 2, 3]
>>> b = a
>>> a == b
True

>>> a is b
True

>>> a = bpy.context.active_object.data
>>> b = bpy.data.meshes[bpy.context.active_object.name]
>>> a
bpy.data.meshes['Cube']

>>> b
bpy.data.meshes['Cube']

>>> type(a)
<class 'bpy_types.Mesh'>

>>> type(b)
<class 'bpy_types.Mesh'>

>>> a == b
True

>>> a is b
False   # WHY?

Another example based on @ideasman42 explanation...
>>> a = bpy.context.object
>>> b = bpy.context.object
>>> a is b
False

Note, in this case a=7; b=7'; a is b is incidental, you cant rely on this behavior. Testing with 1000 here fails. - Edited question with an example that will work reliably.

The second example is incorrect, it assumes the object name matches the mesh name.

related pycon 2015 talk:  https://www.youtube.com/watch?v=sH4XF6pKKmk

It seems to got better over the years. In Blender 3.6 bpy.context.object is bpy.context.object and bpy.context.active_object.data is bpy.data.meshes[bpy.context.active_object.name]

Each time you access object.data it will return a new instance,
however this is a very small data type to access the real mesh data stored in Blender.
Equality works as expected (and they have the same __hash__), so you can put them into dict/set types. You just can't rely on identity. (As with any 2 strings with the same content).

Each time bpy.data is accessed, the data is instanciated again? Really? So if I have 1000 mesh objects, and I operate on all of them in every frame...  YIKES!!!  Are they garbage collected efficiently?  How can I simply get a reference to the data, not another instance?

@uhoh, you can test it, but as it happens bpy.data no, elaborated answer since object.data will. Note that this also happens when you do operations such as num + 1, Python's GC is optimized for creating and throwing away many small objects. In this case a Mesh isn't taking significantly difference amount of memory to a number.

So @ideasman42 are you saying that it is a reference that it is instantiated, not the whole mesh, vertices, normals, etc? Is this explained clearly somewhere?

It could be explained more clearly, but see: http://www.blender.org/api/blender_python_api_2_74_release/info_quickstart.html#data-creation-removal

In this case I am going to add an answer to my question - with my own choice of wording that makes it clear to me. It may help others in my situation.
The "I" in API stands for interface. Objects, data, etc. are really "in C" (so to speak) at all times. bpy.context.objects, bpy.data.meshes are not THE objects or meshes.
These are just "temporary conduits" that allow information to travel between your script and the "real" Blender program. They are instantiated each time they are used. This is why (for example):
>>> bpy.context.object is bpy.context.object
False

The wording in this subsection of the API reference helped.


text:
Blender FBX exports texture nodes incorrectly
When I export my Object as an FBX with a material using maps, the textures get jumbled in the process and connect to the wrong ports.

In the image, I use a diffuse, specular and normal map for the material. Alpha is set to 1.0 standard.
After re-importing, the diffuse texture shows up twice and its alpha port is connected to the object's alpha input.
And that's just, i don't know how to put it, plain wrong and quite puzzling.
I tried deactivating the node wrangler add-on.
I tried deleting the duplicate diffuse texture from the FBX, export that, and upon re-import, it is there again. It also happens when the texture is called something else than "diff", like "base color".
I'll be glad for information what's causing this?
Have this problem in 4.0 and 4.2 .

source: Stack Exchange

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

sort: votes


text:
Use information from one node tree into another objects node tree?
Hi wondering if anyone can help me. I am trying to make a castle enclosure using nodes which I have gotten so far from scratch. How ever am stuck at the point where I want to use the shape information from one tree and place it into another on a different object like grass, which I can then fill the shape in with, so that no matter the base shape it will always fill it in and I can place grass/fur onto it.
Here is what I mean

everything I look into online takes me down a rabbit hole and does not work, for example some people are saying to use a named attribute, but when I reference it on another onject it does nothing. Plus any videos I am finding on Youtube are for older versions and the attributes nodes have changed. Would appreciate any help from a Geo Nodes expert
Many thanks

"You" who needs more details - please add a comment describing what kind of details are you requesting. Thank you

'Or' .. you could edit your post to  reduce the problem to the simplest illustrative case you can think of  .. a cube generated by one modifier, a plane generated by another, or something like that. That would make it ultra-clear to us which specific question you are asking.

(Using Blender 3.6.8)
The proposed approach is to use a Driver object storing an attribute based on its construction process (e.g. the walls in the question) and a Driven object recovering this attribute to control its own construction process (e.g. the grass).
Driver GeometryNodes modifier

1. Walls are created from an outline made of connected edges, using the nodes with dark grey background.
2. Inner faces, enclosing the "Grass", are tagged using the nodes with dark red background. The approach is to raycast faces onto themself. Top, bottom and outer faces are returning no hit (for more explanations, see Can an object raycast onto itself?). As there is no need to store this information, a simple Capture Attribute node is used to trigger the raycasting.
3. Edges at "ground" level enclosing the "Grass" are tagged using the nodes with dark green background. Such an edge belongs to an inner face (the previously captured attribute is transferred automatically from Face domain to Edge domain here) And its Z coordinate is close to 0. The resulting boolean is cached (i.e. it can be used elsewhere) using a Store Named Attribute node.
Driven GeometryNodes modifier

1. Grass is created as a triangulated surface, using a classical Mesh to Curve and Fill Curve nodes sequence.
2. The object (i.e. the walls here) from which is recovered the grass outline is specified through the Group Input node.
3. This object Geometry (i.e. a data structure with all its characteristics, including attributes) is recovered using an Object Info node.
4. Only the edges tagged as "ground" previously are kept using a Separate Geometry node set in Edge domain. The attribute value is recovered with a Named Attribute node.
Resources:

Many thanks for the reply. Will try this approach and optimise. I got it working with using a different method but always worth looking into what is less calculation

You are welcome. May I recommend to apply this : What should I do when someone answers my question?

Speaking about transferring position Attribute from one object to another ...

Managed to get it working by referencing another mesh. May not be optimal but did the job I wanted.
Have attached screenshot of my result if anyone wants to try and use

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


text:
Faceshift Stream Data to Blender script help
Hi I am wondering if anyone may be able to help
I am attempting to impliment a data stream from an old software called Faceshift Studio for mocap of a face using my Kinect with a depth sensor. Apple bought the software back in 2015 but I found an old version of the software which does work very well, and I do not have an Iphone to use in this modern day so thought it would be an option to try this
I have found that faceshift has a streaming option which I can get the data from to pass to blendshapes on a model face.
So far I can receive data from the software and blender can receive it and parse to the model, how ever the model behaves erratically and I think it is to do with the data conversion from the software.
Here is my code so far
I am an artist and not a programmer and know there must be someone out there who could assist
import bpy
import socket
import threading
import struct
# Define the UDP IP address and port
UDP_IP = "127.0.0.1"  # Localhost (change to the IP address Faceshift Studio is sending to)
UDP_PORT = 5005       # The port Faceshift Studio is sending to
# Create a socket to listen for UDP packets
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))
# List of blendshape names
blendshape_names = [
    "EyeBlink_L", "EyeBlink_R", "EyeSquint_L", "EyeSquint_R", "EyeDown_L", "EyeDown_R",
    "EyeIn_L", "EyeIn_R", "EyeOpen_L", "EyeOpen_R", "EyeOut_L", "EyeOut_R", "EyeUp_L",
    "EyeUp_R", "BrowsD_L", "BrowsD_R", "BrowsU_C", "BrowsU_L", "BrowsU_R", "JawOpen",
    "LipsTogether", "JawLeft", "JawRight", "JawFwd", "LipsUpperUp_L", "LipsUpperUp_R",
    "LipsLowerDown_L", "LipsLowerDown_R", "LipsUpperClose", "LipsLowerClose", "MouthSmile_L",
    "MouthSmile_R", "MouthDimple_L", "MouthDimple_R", "LipsStretch_L", "LipsStretch_R",
    "MouthFrown_L", "MouthFrown_R", "MouthPress_L", "MouthPress_R", "LipsPucker", "LipsFunnel",
    "MouthLeft", "MouthRight", "ChinLowerRaise", "ChinUpperRaise", "Sneer_L", "Sneer_R", "Puff",
    "CheekSquint_L", "CheekSquint_R"
]
def udp_listener():
    while True:
        try:
            # Receive data from Faceshift Studio
            data, addr = sock.recvfrom(1024)  # Buffer size is 1024 bytes
            print(f"Received message: {data} from {addr}")
            # Process the binary data (replace with actual parsing logic)
            parsed_data = parse_binary_data(data)
            # Update the blendshapes in Blender
            if parsed_data:
                bpy.app.timers.register(lambda: update_blendshapes(parsed_data))
        except Exception as e:
            print(f"Error in udp_listener: {e}")
def parse_binary_data(data):
    # Determine the number of blendshape weights expected
    num_blendshapes = len(blendshape_names)
    # Calculate the expected data size (num_blendshapes * 4 bytes per float)
    expected_data_size = num_blendshapes * 4
    # Check if the received data matches the expected size
    if len(data) >= expected_data_size:
        # Unpack the data into floats
        weights = struct.unpack('f' * num_blendshapes, data[:expected_data_size])
        return weights
    else:
        print(f"Received data size ({len(data)}) does not match expected size ({expected_data_size})")
        return None
def update_blendshapes(weights):
    # This function updates the blendshapes of a Blender object based on received weights
    obj = bpy.data.objects.get("Head_Mesh")  # Replace with your mesh object name
    if obj and obj.data.shape_keys:
        for i, weight in enumerate(weights):
            shape_key = obj.data.shape_keys.key_blocks.get(blendshape_names[i])
            if shape_key:
                shape_key.value = weight
# Start the UDP listener in a separate thread
thread = threading.Thread(target=udp_listener)
thread.daemon = True
thread.start()
print("Started UDP listener...")
# Keep the script running
def keep_running():
    pass
bpy.app.timers.register(keep_running)

Hello, my best bet is that weight is not bound to 0...1 when that's the values blender shape keys expect in general. Try putting a print(weight) in the def update_blendshapes for loop

I found a script for an old version of blender, but it uses a makehuman model which isnt what I have.
I am wondering if this script would be able to be altered to work?
As any online help I am getting is saying possibly the parsing of the data out from faceshift needs to correspond, but as there is no documentation any more nor source code, I am wondering how I can find the struct of the data?


text:
Place objects by edge angle
I try create a simple node setup to place objects by spline edge angle. for example if edge is straight (90°) than place cube or if edge is tapered(45°) than place cylinders.
some how i manage but there is some issue in the 45° angle calculation. cylinders are placed on unwanted points.
can someone help me to solve this issue?
Thanks


text:
motion blur not affecting certain armatured object even in motion in EEVEE (demo video attached)
I'm working on animating character rigs, but i've noticed that some rigged character won't appear to have motion blur even when it's moving. At first i thought it was a material issue, but when i stripped all the material the issue still persists.
However, i've noticed that raising the 'Steps' value in Motion Blur panel will make that object 'appears' to have motion blur but it looks jagged, it's as if that one particular object requires more 'Steps' value than any other object to make it appear to have motion blur.
Any ideas what may have caused this? was there's any obscure options/settings per object that dictates how motion blur should be applied to that object?
Blender 4.1.0
https://youtu.be/lufqp7Xx9a8 (demonstrating the render setting and the resulting bug after render)

It helps a lot if you upload your file: https://blend-exchange.com/

i would really like to, but unfortunately the model used is a paid model and i am not licensed to upload/redistribute the blend file without removing the model


text:
Accessing bpy.context gives a '_RestrictContext' warning, how to fix this?
I got this error message when I try to enable my addon.
dataBrush = bpy.context.blend_data.brushes

AttributeError:'_RestrictContext' object has no attribute 'blend_data'

Please some help

I am working on an dynamic palette for sculpt brushes

Short answer: don't access blendfile data when an add-on loads.

This is an intentional limitation with add-on loading which was added because it caused so many errors with inexperienced developers not properly understanding how data should be accessed, in practice it's almost never what you really want, and if for some obscure reason it is, you better not do it in an add-on (just run a script directly).
The kind of bug this caused was:

Add-on loads, sets the active scene. eg: scene = bpy.context.scene
User changes active scene or loads another blend file.
User tries to use the add-on, which starts using the previous scene.

Enabling an add-on should always give the same results no matter what Blend file you have open.
Instead, your tools should read from the context when they are activated by the user.

-"dataBrush = bpy.data.brushes "-
give me ~ the same error message:
AttributeError:'_restrictContext' object has no attribute 'brushes'

Yep, this is working as its intended. Whatever you want to do with the brushes, add this into code thats access from an operator, panel, menu etc... The current open blend file shouldn't influence an add-ons startup which should never depend on the currently open file, otherwise loading another blend file may make the addon fail.

ideasman42♦ I just need the current list of brushes to run the script, how can I make this happen ?

You can't do this in an addon (while the addon initializes), but interested to know what you are attempting.

@IssanouKamardineIK You can read bpy.data.brushes in your panel's draw() method, but you shouldn't need it when you are registering your addon.

nice, I found a way to run the script by using an operator to call a second file.
Thank you guys :)

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

authors: Дмитрий Яковлев


text:
How do I jump to a keyframe time on the dope sheet?
In After Effects, I could easily select a keyframe, right click it, and click "Go to keyframe time" so I could easily line up other keyframes to it and do other useful things, but how do i do this in Blender?

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


text:
Import After Effects Camera Motion into Blender?
I just got Adobe After Effects CC with Cinema 4D lite.  I use Blender for 3d animation and I don't want to switch to C4D. Is there any way to export After Effects camera movement to Blender?

You might have to write code...

You can export it to C4D, then to blender...


text:
Transparent BSDF makes object and shadow invisible, but not through Mix Shader
this is my first post here, I'm new to Blender and I'm having an issue trying to achieve a certain effect.
I'm trying to make an object become invisible when you look at it from certain angles. I'm using a Vector Transform node from World to Camera, and through a Color Ramp and a Mix Shader I can change between a Transparent BSDF and the Principled BSDF as I move the view through the scene. This works great for the object, but it keeps the shadow visible.

I set the Blend Mode and the Shadow Mode to Alpha Clip, and if I connect the Transparent BSDF directly to the Material Output it hides the shadow too. If I tweak the Mix Shader's Fac manually or through a Value node it also works well.

But with any dynamic configuration it gets stuck in the same state (always casts shadows or never casts shadows) regardless of where I look a it from. I tried clamping the color luminance to 0-1, passing it through a Greater Than node (which always should return 0 or 1), but nothing seems to work for the shadow. Could this be a bug? Is there any way to achieve this behaviour?
Thank you.


text:
How do i model this part?
Does anyone know how to model this part of a robot?

Cut off a UV sphere and extrude down:

Cut off these faces:

Fill:

Move the edges until you get something round:

Bevel if you want to use a Subdivision Surface modifier:

Thanks! Is it possible to sharpen the front edges? (For subdivision surface)

You can bevel, see my edit


text:
Does anyone know how to model this part?
How to model this part? Picture below

what have you tried?

Hello and welcome. Please use a title that matches the content of the post. It should read like a question, be descriptive but succinct, unique and identifying, summarizing the problem so that anyone searching for similar issues is likely to find this. Remove anything superfluous, avoid using words like "this", "help with", "issue" or "question about", instead describe what "it" is. Remember, your title is the first thing visitors see, answers you get depend heavily on it. See What is the problem of asking “How do I do this?"

Create a 6 vertex circle, subdivide twice, extrude up:

Move up these edges:

Extrude up the whole edge loop, right click > LoopTools > Circle:

Extrude up and scale, etc:


text:
Collision control between balloon strings

I’m trying to avoid the strings of the balloons glitching into the balloons. The balloons themselves have an active rigid body modifier and are attached to a cube with a passive rigid body modifier. The strings are attached to the balloons using a hook to selected effect.

Have you tried adding a collision modifier to the balloons?


text:
Looking to replicate this effect in blender
I'm coming from unity and this effect was achieved using a color ramp in luminance and a matcap. I've done a little playing around with the shader graph, but I really don't know what I'm doing. I do have a color ramp node setup with the same ramp I made in unity though. Anyone able to point me in the right direction?

Maybe put the Metallic value of the Principled BSDF at 1 and plug a Color Ramp in the Base Color, with an Input > Layer Weight node as factor:

That's exactly what I was looking for. Thank you ^.^


text:
Is there a way to have a shared document with someone else?
When I shared my project with a friend who wanted to contribute, he could make changes, but they did not appear in my version. For example, if you share a Word document, any changes made by the recipient will be reflected in your document as well. Is it possible to do so with Blender?

afaik there is no such functionality in Blender.

Ubisoft has created an addon called Mixer that allows you to share the same file. Here is demo video made by Gamefromscratch.


text:
Is it possible to render an armature?
I'm using blender 2.72b x64 on windows 7.
I need a quick way to render armature using f12 button. With shadows and everything. "render armature" means render geometry that is visible in viewports - boxes/octahedrons/sticks, depending on chosen visualization.
I only need to render still frames, no animation.
"OpenGL render image" is not an option, because OpenGL render does not produce raytraced shadows.
As I understand it, this can be done by either somehow turning armature into renderable geometry or generating mesh from it via script.
Is there a built-in way to do it or ready to use script somewhere?

Not a duplicate, because opengl render does not render shadows.

AFAIK there is no built in way to do it, but a script probably wouldn't be too hard. Not sure if one exists or not though..

@gandalf3: Sigh... it's been 2 or 3 years since I wrote last blender exporter in python. Guess I'll get to writing the script if nobody has a snippet to share (I'll post it here if I finish it). I've been used armature+rigify as wooden manikins for 2d drawing reference and lighting/shadows for a rough idea which light goes where. Works perfectly with exception of armature being invisible in render window.

Blender doesn't support rendering armatures directly.
This is intentional and there is no plan to add support for this feature. ~ @ideasman42

However, I've come up with script to convert armature into mesh or skin.
Implemented as blender addon, only BBone armature style is supported (bezier bones, subdivided bones etc are untested).
Creates mesh if armature in "pose" mode. Creates SKIN if armature is in "skin" mode.
armature_to_mesh.py
bl_info = {"name": "Armature To Mesh", "category": "Object"}

import bpy
import mathutils

class ArmatureToMesh(bpy.types.Operator):
    """Armature to mesh/skin conversion script"""
    bl_idname = "object.armature_to_mesh_skin"
    bl_label = "Armature to Mesh/Skin"
    bl_options = {'REGISTER', 'UNDO'}

    def decomposeMatrix(self, matrix):
        return [x.to_3d() for x in matrix.transposed()]

    def processArmature(self, context, arm, genVertexGroups = True):
        print("processing armature {0}".format(arm.name))

        if genVertexGroups:
            #because setting pose_position ot 'REST' manually doesn't work for some reason.
            genVertexGroups = arm.data.pose_position == 'REST'

        meshName = arm.name + "_mesh"
        meshData = bpy.data.meshes.new(meshName + "Data")
        meshObj = bpy.data.objects.new(meshName, meshData)
        meshObj.location = arm.location

        scene = context.scene
        #scene.objects.link(meshObj)
        # update
        scene.collection.objects.link(meshObj)

        armMatrix = arm.matrix_local.copy()

        verts = []
        edges = []
        faces = []
        vertexGroups = {}

        for bone in arm.pose.bones:
            poseBone = bone
            boneName = bone.name
            armBone = arm.data.bones[boneName]
            #print(poseBone.matrix)
            #print(armBone.matrix)
            #print(boneName)

            boneMatrix = poseBone.matrix
            boneStart = poseBone.head
            boneEnd = poseBone.tail

            decomposedMatrix = self.decomposeMatrix(boneMatrix)
            #print(decomposedMatrix)
            xSize = armBone.bbone_x
            zSize = armBone.bbone_z
            #print(xSize, zSize)
            xSizeAdd = bone.x_axis
            zSizeAdd = bone.z_axis
            xSizeAdd = decomposedMatrix[0]
            zSizeAdd = decomposedMatrix[2]
            ySizeAdd = decomposedMatrix[1]
            origin = mathutils.Vector((0.0, 0.0, 0.0)) @ boneMatrix
            xSizeAdd *= xSize
            zSizeAdd *= zSize
            ySizeAdd *= bone.length

            baseIndex = len(verts)

            verts.append((boneStart - xSizeAdd + zSizeAdd)@armMatrix)
            verts.append((boneStart + xSizeAdd + zSizeAdd)@armMatrix)
            verts.append((boneStart - xSizeAdd - zSizeAdd)@armMatrix)
            verts.append((boneStart + xSizeAdd - zSizeAdd)@armMatrix)
            verts.append((boneEnd - xSizeAdd + zSizeAdd)@armMatrix)
            verts.append((boneEnd + xSizeAdd + zSizeAdd)@armMatrix)
            verts.append((boneEnd - xSizeAdd - zSizeAdd)@armMatrix)
            verts.append((boneEnd + xSizeAdd - zSizeAdd)@armMatrix)

            base = baseIndex
            newFaces = [
                (base+0, base+1, base+3, base+2),
                (base+5, base+4, base+6, base+7),
                (base+1, base+0, base+4, base+5),
                (base+2, base+3, base+7, base+6),
                (base+3, base+1, base+5, base+7),
                (base+0, base+2, base+6, base+4)
                ]
            faces.extend(newFaces)

            if genVertexGroups:
                vertexGroups[boneName] = [(x, 1.0) for x in range(baseIndex, len(verts))]

        meshData.from_pydata(verts, edges, faces)

        if genVertexGroups:
            for name, vertexGroup in vertexGroups.items():
                groupObject = meshObj.vertex_groups.new(name)
                for (index, weight) in vertexGroup:
                    groupObject.add([index], weight, 'REPLACE')

            modifier = meshObj.modifiers.new('ArmatureMod', 'ARMATURE')
            modifier.object = arm
            modifier.use_bone_envelopes = False
            modifier.use_vertex_groups = True

        meshData.update()

        return meshObj

    def processObject(self, context, obj):
        if (obj == None):
            return False
        if (obj.type != "ARMATURE"):
            print ("invalid type {0} of object {1}: armature expected".format(obj.type, obj.name))
            return False
        self.processArmature(context, obj)
        return True

    def execute(self, context):
            scene = context.scene
            selected = context.selected_objects
            processedAnything = False
            if len(selected) > 0:
                print ("selected objects present, processing selection")
                for obj in selected:
                    processedAnything |= self.processObject(context, obj)
                pass
            else:
                print ("processing active object")
                obj = context.active_object
                processedAnything |= self.processObject(context, obj)

            if not processedAnything:
                print ("no objects processed")

            return {'FINISHED'}

def register():
    bpy.utils.register_class(ArmatureToMesh)

def unregister():
    bpy.utils.unregister_class(ArmatureToMesh)

if __name__ == "__main__":
    register()

see this answer running-python-script-in-blender

@Gennosuke: Armature does not have a mesh. So you can't "obtain" it. The script should be placed into "addons" folder (google how to install addons for blender). It creates new (renderable) object and attaches it to armature. You need to select armature, press "space", start typing "armature", select "Armature to Mesh/Skin" and that will create renderable object. If armature is in "pose" mode, it will be mesh that won't move with armature. If armature is in "skin" mode, it will be skinned mesh that'll be attached to armature. Only boxed representation of armature is supported.

@BrianTrepanier: Sure thing, enjoy. Would be nice if someone got this included into official blender distro, though (I'm not really in the mood for negotiating with blender devs myself...).

@SigTerm is it possible to make the created mesh as cylinders instead of cubes?

Viewport Render.
In answer to  put color to bvh and render , which was closed as a dupe of this question, it may be the case that a viewport render will suffice.  Realize question here stipulates need for shadows etc, for which case this is not a viable option (See below re fudging it... may look into doing properly)

Result as demonstrated in bvh display multiple frames at the same time

After import of bvh enter pose mode, select all pose bones, create and assign to a group. Then assign a color to the group, choose from preseets or create your own.

Go to view port overlays and turn everything you don't want to see off, like the grid,

In viewport shading for above have chosen flat, and world for background. Changed world bg to white.

To render press F3 type in, then select  "viewport render" to render what you see in current 3D vies.

Shadows.
Possibly worth mentioning can emulate shadows by transforming a copy onto a shadow plane.

Very Dodgy Example, displayed as sticks, copy rotated to lie on ground plane and scaled to zero on Z.


text:
How to merge 4 adjacent, coplanar faces into a single face
I have a plane consisting of 4 squares - take as an example a subdivided plane. How can I merge these faces into one?

Dissolve the middle vertecis of each edge and the middle vertex, by pressing [x]> Dissolve vertices

@X-27 Feel free to put a link here if you are unsure, or vote to close.

There is an operator called Dissolve which does exactly what you want.
Select everything, with A, and then press X (or Delete) and select Limited dissolve. This will do the same thing as above, but will not require you to select the proper vertices manually.

so long as the faces are surrounded by more geometry, using f for Make Edge/Face works well.  For a whole simple sub-divided plane like the example given, this tool will make a mess.

This does recuce reduce the poly-count (check the triangle count in the header)

I found that it is sometime more efficient to use x in edit mode then Disolve edge.
Let's convert this curve into mesh with ALT+ C:

You end up with the following mesh.

This mesh will be hard to process because it has holes. for example, f simply doesn't work. Using Limited disolve will not work well too, here is the best result I can get using this method :

Disolve edge is interesting because you can process the mesh multiple times without changing the whole shape. Here is the result I obtain after two Disolve Edge :


text:
Custom Handler makes Blender crash when rendering
I am working on a script that works with a Handlers.frame_change_post.
Basically, the script puts lines from a text file into a List. Collects all the markers into an other list. And manages to make subtitles out of all this. The caption is updated at every frame.
It works very well and surprisingly fast but, when I render, I notice that all the markers are blinkering and then, after a random number of frames, Blender crashes. Before flaging my post as off-topic and bug report, please hear my question :
No matter if it's a bug or not, I'd like to find a better way to achieve what the script does. Is it really sane to run this piece of code 25 times per second? I mean, if I were Blender, I would crash all the same ! ;-)
The full script includes a timecode, working with the same handler and modifying a text object. This works fine.
Here's a stripped piece of script to give the idea :
#the text object (3D)
now = bpy.data.objects['sub']
#the list of markers (lines start and end)
sub = []
#the list of markers that initiate a new line
sub_start = []
#the text file
bpy.types.Scene.sub_file = 'English'
List = []

...
...
...
def update_markers():
    sub[:] = []
    sub_start[:] = []
    for m in bpy.context.scene.timeline_markers:
        sub.append(m.frame)
        if m.name == 'start':
            sub_start.append(m.frame)
    sub.sort(key=lambda tup: tup)
    sub_start.sort()

def find_nearest(a,frame):
# here I try to find the closest < marker to the current frame
    if frame > a[0]:
        f = max([x for x in a if x <= frame])
        try:
            # test if the marker also belongs to the start list
            idx = sub_start.index(f)
        except ValueError:
            return -1
        else:
            return idx
    else:
        return -1

def sub_line(frame):
    idx = find_nearest(sub, frame)
    if idx > -1:
        now = List[idx]
        return [now]
    else:
        return ['']

def update_text(self):
    if len(List) > 0:
        now.data.body = sub_line(bpy.context.scene.frame_current)

#---------------- MAIN -----------------------------
update_markers()
update_caption_list()
now.data.body = ''
#---------------------------------------------------

def register():
    bpy.app.handlers.frame_change_post.append(update_text)

def unregister():
    bpy.app.handlers.frame_change_post.remove(update_text)

if __name__ == "__main__":
    register()

If someone has a piece of advice or any idea to prevent Blender from freaking out, I would be thrilled ! Thank you very much.

Don't use bpy.context in handlers, Not sure this is the bug, but you should use the argument to the handler (self) in your case.

Also - since you are asking about Blender behaving incorrectly, it really helps if you provide a way for someone else to redo the problem. Just looking at the script, Im not sure whats wrong.

Thank you very much for your help ! You are right, here's a link to the project files : http://habanita.org/test_caption_machine.zip (59Mo)

@Nikos_VSE if you have found a solution please write an answer


text:
How can I render images in Display P3 color space?
Is it possible make Blender assign the images a proper color space and possibly render in Display P3 (but not HDR)?
Even if I set my sequencer to Display P3, the resulting images are not assigned with a color space. And after some research, the rendered image seem to still be sRGB (but it's just not tagged as such)


text:
Simulation Not Working after Cloth Modifier Added
I have attempted to create several projects with a cloth modifier in Blender 4.0. After I have applied the Cloth Modifier, the simulation does not work and instead only shows the mesh as it would appear as when editing. I have searched many sites and videos; however, I am unable to find a solution. Since I have had this issue with multiple projects, I am not sure where I am going wrong.
Per one suggestion for fixing the issue, I did go into edit mode and remove excess vertices (alt+H then merge by distance). However, it did not fix the issue. I have also tried changing when I apply the modifier. For example, apply Mirror modifier than the cloth modifier or apply Cloth modifier than the Mirror modifier.
Any suggestions/help will be greatly appreciated.

Applying a modifier is a destructive process which converts any procedurally generated or simulated mesh in actual geometry. When the modifier is applied, it basically freezes the mesh in the state of the frame on which it was applied or in some cases rejects simulated data and sets the mesh back to its original state. By the way: Alt+H then merge by distance? Alt+H is unhide everything, did you have hidden vertices? If you want to merge by distance and make sure to get all duplicate/overlapping geometry, you should press A to select all.


text:
How to build and submit Mac builds to Graphicall?
I've used a few of the custom builds on Graphicall, and I'd like to give back by helping contribute some back. I've got a Mac, which is a bit of an underdog in terms of building submitted, and I've got decent experience with Subversion and other version control systems, but haven't seen a "how to" on compiling builds for others.
How do I set up a build environment on my Mac for compiling and bundling build packages to Graphicall?

There are easy to follow steps clearly outlined on the wiki. It tells how to setup the environment and how to download and build the source.
If you then go to graphicall and create an account, after logging in, there should be an option to upload a new build.

Update: To create an account on Graphicall.org, people now have to go to the IRC channel #blenderstorm on freenode and leave a request for an account (just preferred username + email-address is enough). An admin will create the account when the request is received.

Aha, so building for Graphicall has nothing special other than just building Blender; I didn't realize the "how to set up a build environment" was there in the Blender wiki; thanks!


text:
How can i get the weight for all vertices in a vertex group?
I have created this function to get the weights from a group:
def get_weights(ob, vgroup):
    weights = []
    for index, vert in enumerate(ob.data.vertices):
        for group in vert.groups:
            if group.group == vgroup.index:
                weights.append([index, group.weight])
    return weights

Is there any better more efficient way to do this?

Is this spesific to any particular mesh api? RNA / BMesh?

no, i just want to know how this can be done better and more efficient in which way ever.

For The RNA mesh API, your example is quite good, one minor change you can make is to break once the group index is found.
Instead of making a large list, you could use a generator function, this can save memory for the cases you can iterate over the elements, and be converted to a list or tuple if you need, it has the same worst-case time, but in practice will often save some looping.
import bpy
obj = bpy.context.object

def get_weights(ob, vgroup):
    group_index = vgroup.index
    for i, v in enumerate(ob.data.vertices):
        for g in v.groups:
            if g.group == group_index:
                yield (i, g.weight)
                break

import bpy
obj = bpy.context.object
vgroup = obj.vertex_groups[0]

# iterate over index, weights
for i, w in get_weights(obj, vgroup):
    print(i, w)

# if you need as a list...
weights = list(get_weights(obj, vgroup))
print(weights)

Note, in some similar cases to this, you can use list-comprehension, however having to check the vertex is in the group causes the checks within the list-comprehension to become quite convoluted, so best avoid in this case.


text:
Is it possible to display and image inside the add-on about?
Text works but a gif sometimes can be more inspiring and explain things visually better.
Any idea if it is possible to display a gif /image inside the shortcuts area?

You can show custom icons, see: How to implement custom icons for my script/addon?
However you can't show large images in this space.

Blender does not include support for reading gifs.
2.75 added the ability for addons to access image previews and use them as icons in the layout. You can find two example templates within blenders text editor ui_previews_custom_icon.py and ui_previews_dynamic_enum.py showing how to use them.
See: Text Editor > Templates > Python > UI Previews Custom Icon / UI Previews Dynamic Enum:


text:
Adding operator to the toolshelf?
I'm just starting to learn scripting in Blender with Python. I made a simple operator following the quickstart intro on the Blender documentation:
import bpy

def main(context):
    for ob in context.scene.objects:
        print(ob)

class SimpleOperator(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "object.simple_operator"
    bl_label = "Simple Object Operator"

    @classmethod
    def poll(cls, context):
        return context.active_object is not None

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

def register():
    bpy.utils.register_class(SimpleOperator)

def unregister():
    bpy.utils.unregister_class(SimpleOperator)

if __name__ == "__main__":
    register()

    # test call
    bpy.ops.object.simple_operator()

It then says

Once this script runs, SimpleOperator is registered with Blender and can be called from the operator search popup or added to the toolbar.

But how do I add it to the toolbar?

To add it it to the toolbar, simply have your class inherit from bpy.types.Panel, and call the class functions, the key one being draw(). You choose a space_type, a region_type and the context in which the panel should be shown.
You can also reference the example below the one you are using. BlenderCookie also has a tutorial that covers this.
See the modified code
import bpy

class SimplePanel(bpy.types.Panel):
    bl_id_name = "object.simple_operator"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI" # Use "TOOLS" for 2.79 and lower
    bl_context = "objectmode"
    bl_label = "Simple Panel"

    def draw(self, context):
        layout = self.layout
        col = layout.column(align=True)

        col.label(text="Objects in the scene:")

        col2 = layout.column(align=True)
        for ob in context.scene.objects:
            col2.label(text=str(ob.name))

def register():
    bpy.utils.register_class(SimplePanel)

def unregister():
    bpy.utils.unregister_class(SimplePanel)

if __name__ == "__main__":
    register()

After the operator already registered, all you need now is to add one more class that inherits from bpy.types.Panel
Example
class SimpleOperatorVisibility(bpy.types.Panel):
    bl_label = "Simple Operator"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"

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

        col=layout.column()
        col.operator("object.simple_operator", text="Simple Operator")

Add those lines after class SimpleOperator and before defining register().


text:
Why does Blender use so much memory for large textures?
Using a single 6K texture at only 227kb in size, spikes the memory usage to a crazy 144mb of memory in Blender.
It was brought up in this bug report, but closed.
Why can image editors (Photoshop/Gimp/Krita) handle such large images but not Blender?
Whats going on, and more importantly, what can be done to improve it?

:O Nice to see you here! Welcome :)

Well yeah... 6000 pixels * 6000 pixels * 4 bytes/pixel = 144MB.

3D applications often needs to have images directly accessible, that is - to be able to look up a pixels value instantly. common cases are:

Rendering a texture on a 3D model (applies to any render engine).
Load the image into OpenGL memory (where the image is sent 'complete' to the graphics-card).

Since a 3D application is a less controlled environment (than a game-engine or 2D-paint-tool for example) - an image may be used for a modifier displacement map, composite node input, a background in the view-port or be painted onto - all at once. This means we have some constraints which make it harder to optimize for any single use-case.
Even so, there are strategies for better handling texture memory.

Free images from memory which aren't used often.
Load lower resolution versions of the image into memory (mipmaps).
Load partial regions of the image into memory.
Support in-memory compression (often used for OpenGL textures).
Support for lower bit-depth of channel options (monochrome, greyscale, limited color palette, index-color).

Blender specifics
What Blender does now

Images are freed from OpenGL memory if they aren't usedsee: User Preferences -> System -> Texture Time-Out
Persistent images (Cycles only), disable so images are freed between renders.

How Blender could be improved

Avoid loading large imagesThis would likely mean caching mipmaps.
Avoid loading the entire imageThis was implemented for 'Sintel' in the render branch, but was never included in a release.see: http://wiki.blender.org/index.php/Dev:2.5/Source/Render/RenderBranch/ImageTileCache
Better memory management, free images from memory (use a time-out similar to what we already have for OpenGL).
Support OpenGL texture compression.
Support loading textures into OpenGL memory, and freeing from system memory.
Implement the same 2D tile-based systems used by image image editors, (but only use it for 2D-painting).

Comparisons with other fields
Games
Games have the advantage that textures can be pre-processed, compressed on-disk to be sent directly to the graphics-card in formats you wouldn't necessarily be able to open for editing.
They typically don't have to operate under the assumption that any texture may be painted or edited at any time.
See: https://www.opengl.org/wiki/S3_Texture_Compression
Image Editors/Painting Tools
Don't have to load the texture into graphics-memory to display on 3D models, so they can use their own in-memory representation of images.
They also have the advantage that each image view has a single zoom-level, (unlike a texture mapped to a 3D-mesh, which may need to access multiple mip-maps at once). So they can - for example, streamline managing multiple tile-sets at different zoom levels.
See notes on krita's tile manager: http://dimula73.blogspot.com.au/2014/07/notes-from-calligra-sprint-part-2.html

Note, the on-disk size of an image isn't all that meaningful.
if a 6k texture only takes ~200kb - Its likely not very detailed, a single color image or highly compressed (lossy).
You can ZIP a .txt file with your name written a million times into a few kb, but try editing this as an email :)

Wow. Now that's a thorough answer. Thanks Campbell!
As good as it is to know the reasons, I'm definitely more interested in what can be done to fix it.
Of your proposed solutions, are there any that you know are planned for the future? If not, do you know which option would be easiest to implement?

Neither are planned, which is most useful depends on the use-case: 1) for large textures you mostly see at a distance -- a way to only load lower resolution mip-maps into memory. 2) For large textures you only ever view a small region of (such as a high resolution 360° matte  painting used as a backdrop) -- support for loading only small regions into memory (or have a more general system which can page tiles into memory and free them as needed). Other may have suggestions too, but these seem like changes we'd have to make if you simply want a single large image using less memory.

Maybe if we hold off a year or two - the problem goes away :) http://www.bloomberg.com/news/articles/2014-06-12/with-the-machine-hp-may-have-invented-a-new-kind-of-computer

Some progress here (for Cycles), https://developer.blender.org/D1215 (Will be in 2.75, or any daily build from now on)

Ideasman42,
have a look at Mari.  30 GB per channel (500 patches of 4k) and 30 channels - for 900 GB of paintable texture loaded at one time.  They can paint multiple channels at once.  That is all doable on 1 GB texture memory and 2GB main memory computer.  They can project 16k textures onto the model.
http://thefoundry.s3.amazonaws.com/downloads/CaseStudy_Mari_Avatar.pdf

This article provides a bit of info on how they do it. " It does this by a combination of Ptex, Mip Maps, clever filtering, tree mapping and RAM management."
http://www.fxguide.com/featured/mari-2-0-launched-in-the-uk/

Blender loads the whole texture uncompressed into the RAM to have better load times for the renderer. Let's see how far off we are.
By 6k texture I think you mean a 6144 × 6144 pixel texture. That is 37748736 pixels with 4 channels (RGBA) and assuming each channel has 8 bits of information (e.g. JPG, most PNGs), it needs 37748736 × 4 × 8 = 1207959552 bits.
Now let us break it down to a readable number:
1207959552/8/1024/1024 = 144 Megabyte.
So you may have a 227kb compressed texture on your HDD, but 144 Mb raw RGBA data in your RAM.
So why does image editor maybe handle big sized textures better? Ether 2 reasons, they don't or they stream it from your HDD which should be painfully slow.
edit:
To answer your question. There is not much that can be done to improve memory usage as you need the raw RGBA values to make something useful with those textures.
Best regards
Wasabi

2D editors usually use downsampled copy of texture during editing, unpacking more when you zoom in or save.

Your math is slightly off, since the texture is probably has a length 6*1024=6144 pixels, not 6072. Once you change that, it works out to exactly 144MiB. (As a nitpicker I must note that a lowercase b is used for bits. B is for bytes.)

Edited with correct math.


text:
Geometry Nodes: How to make tube from curve
Given a curve node's output (in this case, a quadrilateral Bezier), how can I get a tube shape? I'm looking to make a rope from the curve.

With Curve to Mesh you get the desired mesh, but no mapping coordinates to be able to use your shader.
If you want/need to add seamless shading/texturing to your mesh generated with Curve to Mesh, follow this post: Node "Curve to Mesh" with UVs in Blender 3.1?

You can use a Curve to Mesh node and link another curve (for instance, a Curve Circle primitive) into the Profile Curve socket to sweep it along.

hi, what if i have a static curve object in the scene and i want to do use it as profile it in the geometry node? can this be done?

@adrianli You should be able to do that with an Object Info node. Select your curve from the scene in the dropdown, and link the Geometry output to the Profile Curve input on Curve to Mesh.


text:
How to add several images to video sequencer at once for slideshow?
I've got a few dozen photos, and I would like to add them to the VSE all at once, to make a slideshow. Normally, this turns them into a stop-motion-like sequence, but I still want the photos to be individual strips, about 3-5 seconds long. Is there an easy way to do this, via the UI or scripting? I could go digging in the Python docs, but I don't want to reinvent the wheel.

It would be easy enough to write a script, but it might take as long to debug it as to do the whole thing once.  There are programs just for putting slide shows together.  Would one of them be better?

@MartyFouts I’ve been trying to find one that can do what I want, but so far it’s been rather difficult. I need to be able to add custom music, arrange and remove photos after they’re added, and hopefully do image transforms (IE the photo is sideways and I fix it). I’m finally resorting to an archived windows essentials package.

It looks like you would load the images using image operators and then use bpy.ops.sequencer.image_strip_add to create an image strip but I don't have time to workout the details just now

@MartyFouts I’ll take a look. Thanks. It looks like the later link has the wrong address, though.

It certainly did.  Sorry.  Had the wrong url on the clipboard.  Try this

Thankfully, after adding an image sequence, one can break it up into individual images with Strip -> Separate Images [Y], and then enter how many frames each image should last. Scaling is another problem for now, since Image -> Apply -> Scale to fit seems to be only working for one image at a time, but this is a first step.


text:
Is it possible to compress or split '.blend' files within Blender? If so, how?
I have a large blender file.
How can I compress this file and can I split the file into multiple files to ship it?

All you need to do is check the Compress File box when saving. If your file is still too big, consider using a service like Dropbox or YouSendIt.

Note that this can slow down save/load times a little, it also takes up more space in some version control systems (such as subversion) - which can do binary diff's, But for personal use its fine.

Maybe add Pasteall and BlendSwap for some blender specific services. (Note that no registration is required for Pasteall)

If the file is made of a bunch of scenes you can import them into separate .blend files. To append a scene from a different file use File > Append. Find the file and click on it. Once you do, you should see a bunch of folders. Select the scene folder. Click on the scene you want and open it.
You can then proceed to save off each individual scene into a separate .blend file.
One other possible reason that you have a very large file is because of cached simulations/animations. If you are trying to send a directory with a bunch of sim caches, I would recommend deleting those. You can always bake them later after they're sent.

I highly recommend this for certain things, but it's important to note that this can have a huge "some assembly required" issue if stuff goes wrong; for instance, if I were to make a bookstore, I'd probably make all my models separately in their own scenes and then append them to my scene (or link, if appropriate), but this could cause issues if you have to use too many things and don't do everything perfectly.

That's true, but If your just trying to compress it once, it may make some sense. I completly agree that over time things will get complex, but if it's a one-off thing, this may work.

Make sure you don't append, but link from other files.

Also, don't delete sim caches if you know your target machine won't be able to resim them in time, or doesn't have the resources for it (RAM).


text:
Whats the best way to make an operator tooltip depend on a Blender version?
We distribute a Blender Addon that is prepared to work on multiple Blender Versions (we do not want to force our customers to update the Addon whenever they update Blender). But occasionally we add a feature that can only work on newer versions of Blender. So we inspect Blender and enable the related function (and its UI Button) only if it works in Blender.
However we know that our customers rarely find the time to read news about feature changes. So instead of silently disabling a feature when it can not run, we want to inform in the tooltips that updating Blender would enable the feature.
Here is how we do this for a Helper tool that provides Normals welding. This tool needs Blender 2.75 at least, and can not run on earlier versions of Blender:
class WeldNormals(bpy.types.Operator):
    has_normals = 'normals_split_custom_set' in bpy.types.Mesh.bl_rna.functions
    if has_normals:
        remark = "only operates on boundary edges"
    else:
        remark = "needs Blender 2.75 or newer"

    bl_description = "Weld Normals to adjacent objects (%s)" % (remark)
    bl_idname      = "sparkles.weld_normals"
    bl_label       = "Weld Normals"
    bl_options     = {'REGISTER', 'UNDO'}

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

        ...

While this works, i am not sure if this is the most elegant way to do it. Is there any better solution available for this?

There isn't really a right/best way to do this.
It depends on what kind of control you want.
Personally, I would go for the least intrusive option where possible, so code remains readable, and when you finally drop support for older versions it can be removed without messing up your code history (so code annotations remain useful, eg git blame).
class bpy_support:
    """Store all supported features here"""
    has_normals = ('normals_split_custom_set' in bpy.types.Mesh.bl_rna.functions)
    has_other_feature = (...)

...

class WeldNormals(bpy.types.Operator):
    """Weld Normals to adjacent objects """ \
    """(only operates on boundary edges)"""
    bl_idname      = "sparkles.weld_normals"
    bl_label       = "Weld Normals"
    bl_options     = {'REGISTER', 'UNDO'}

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

    ...

    # Remove this block when 2.74x support is dropped!
    if not bpy_support.has_normals:
        __doc__ = "Unsupported, upgrade to Blender 2.75 or newer! " + __doc__

        @classmethod
        def poll(self, context):
            return False

This way exceptions are isolated and can be cleanly removed when they're no longer needed.
The trade-off of using a simple override is you can't mix in logic so easily.

If you were to do this for more then a few classes, you could make a utility function for this which overrides poll and the tool-tip.
# run before registration
operator_requires(WeldNormals, version_atleast=(2, 75))
operator_requires(AnotherOperator, features={'has_normals', 'has_other_feature'})
operator_requires(ThirdOperator, depends={WeldNormals, AnotherOperator})

...

def register():
    ...

Not sure this is either more elegant... or better, but I find it useful. You can create a class from a dictionary using the type(...) method.
from bpy.types import Operator

@classmethod
def nopoll(self, context):
    return False

@classmethod
def poll(self, context):
    return context.active_object is not None

def OpVersion(version):
    prop_dic = {"bl_description": "Version %s" % (str(version)),
                "poll": poll if version >= 2.75 else nopoll,
                "bl_idname": "sparkles.merger",
                "bl_label": "Some Label",
                }

    return type("OpVersion", (), prop_dic)
    # could also just use
    # Opversion = type(name, (), prop_dic)

v = bpy.app.version[0] + bpy.app.version[1] / 100

class SparkleOperator(OpVersion(v), Operator):
    pass
#equiv
#SparkleOperator = type("SparkleOperator", (OpVersion(v), Operator,) {})


text:
Particles unaffected by force fields
I'm trying to create a water scene where paper lanterns rise from the background (similar to this scene from the movie Tangled.
I'm using a particle system to generate a bulk of lanterns to rise from behind some (really bad for now) hills. The issue is that they just won't budge in the face of any type of force field. Can anyone tell me what is going wrong here?
I set up another file and emulated the situation and things are working perfectly, so I must be making some dumb mistake that I can't see with my tired eyes.
Link to .blend file

In order to make lanterns being affected you should increase the mass of your particles and decrease the Gravity in the Force Field settings.
Clear the Effector Group
First thing to change is to clear the Effector Group in the Field Weights options (or create another group from the force fields). From the wiki:

The Field Weight Panel allows you to control how much influence each type of external force field, or effector, has on the particle system.

Thus the effector is the one who affects on the particles, not the one who is being affected. And in your file, the group which contains meshes and lamp was set as effector.
Increase the mass of the particles
In the Physics scroll increase the mass of the particles. As they were too lighweight they began to fly away immediately.

Thanks for the perfect explanation! You are right on the money.


text:
Why is Quadro slower than GTX rendering on GPU cycles?
Will Blender Cycles have a better performance in the future with Nvidia Quadro?

Hardware related questions are off-topic here. The reason being questions are usually extremely localized and in most cases non-constructive. You can see http://meta.blender.stackexchange.com/a/6/12

I don't think the statement that Quadro is slower than GTX cards is true in general. You have to look at the specifications of the individual cards to compare, both have many variations at different price and performance points, just because it's a Quadro doesn't mean it has better specifications.

Quadro cards tend to have less CUDA cores than GTX cards, therefore their performance is worse.
The advantage of using a Quadro or Tesla cards consists in more GPU memory (which means more complex renders).
For more info you can check out the nVidia website and look at the specs of the cards.

From Wikipedia:

In introducing Quadro, NVIDIA was able to charge a premium for essentially the same graphics hardware in professional markets, and direct resources to properly serve the needs of those markets. To differentiate their offerings, NVIDIA used driver software and firmware to selectively enable features vital to segments of the workstation market; e.g., high performance anti-aliased lines and two-sided lighting were reserved for the Quadro product.

Thus the GTK 680 and Quadro K5000 will render at the same speed. As they are based on the same hardware.


text:
Add the Same Modifier to Multiple Objects at Once?
Is it possible to add a modifier to more than one mesh at once?
I have a lot of unique objects,  and I want to set a subdivide modifier to them, would I have to do each one individually?
I have tried selecting all the objects and then adding a modifier, but as I expected, it only added it to the active object.

You cannot use the modifier panel to apply a modifier to multiple objects, it only applies it to the active object. However, you can use Ctrl + L to copy the modifier on one mesh to all the other selected ones. You select the object(s) to apply the modifier to then the one that has the modifier.

For 2.8+ the menu will read Link/Transfer > Copy Modifiers.
Cool trick thanks to Greg Zaal

If you Alt + Left Click on a property, it’ll work on all the selected objects at once, not just the active object. This works on most properties, including modifiers (as long as all the modifiers have the same name, which they do by default).

Is there a way to make the link continually update?  I linked the modifier to the objects as you said, but when I changed the modifier properties on the original object, the other  ones stayed the same as they were when I first linked them.

@Stephen IIRC, it has something to do with Object Data, I am not entirely sure it is possible tho. Linking an objects data can have the material update but I don't think it works with modifiers.

Okay, thanks. That is best for me for the most part. Of ten I want to apply the same effect to all the objects, and then modify a few of them relative to that.

@Stephen great, it is also a good idea to keep them as unique objects.

What exactly do you mean by keeping them unique?

@Stephen Every object in Blender has an identifier behind it, we call this its data, this makes them unique in a sense meaning that they are separate, they are their own entities. Normally you wouldn't want several objects all sharing that same information for obvious reasons.

How to apply the modifier to all selected objects?

@AlessandroPezzato did you read the answer? You cannot do this out of the box with Blender, you could probably with a script.

Sorry, but I don't understand where this is specified, as you've used the word apply to describe the CTRL+L, which works fine to copy modifiers to all objects.

@AlessandroPezzato just minor terminology, since we usually say apply in Blender when talking about modifiers. I changed it.

Ok, this sounds better, apply was ambiguous. Thank you :)

@AlessandroPezzato With Alt+C on multiple objects you can Apply multiple modifiers to them, see https://blender.stackexchange.com/a/8766/8282

"you can use Ctrl + L to copy the modifier on one mesh to all the other selected ones" I believe the above statement is inaccurate, because you copy All the modifiers from one to the other object and also because the target object looses all Other modifiers it may have.  So The modifier is not copied from active to target, but rather the selected target(s) inherit all the exact same modifiers as the active source.

But this will not work on objects to REENABLE a disabled "Selectable" or "show in Viewports", including if you try to muti-select via the Outliner.

The Copy Attributes add-on is an excellent tool for copying all modifiers. You also have the ability to copy only selected modifiers (apart from other attributes)
This add-on is not enabled by default. So you have to enable it from the User Preferences Editor. Once enabled it is available as a hotkey CTRL + C.
To use it, select the objects that need the modifiers and then the source object with a set of modifiers (active object) and press the hotkey to invoke the menu.
https://en.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/Copy_Attributes_Menu
Note: It is also worth noting that by setting up drivers we can simultaneously edit properties on similar modifiers on different objects.

Thanks satishgoda! I did not know about the Copy Attributes Add-on with the ability to copy only selected modifiers. This was exactly what I needed, as I had to find a way to copy a boolean modifier to multiple objects without overriding the individual settings in some build modifiers. Being able to copy only the boolean modifier was super useful... if only the new Alt-click feature worked to re-order modifiers in multiple objects; but for now I will have to manually re-order them. :-)

In 2.79b this addon is available, pre-installed.
However this addon not only copies from the source but overrides the modifiers in the targets.  So I don't understand Copperplate's comment: it doesn't work that way for me.

Unfortunately this does not work to copy the selectable or Viewport-Display attributes, when trying to REENABLE these attributes.  If they are off, there is little hope of selecting multiple objects and allowing them all to be selectable or viewport-displayable again.

Download Smart Join Addon
Select the mesh (wheel) and click on smart join (it temporary join all the selected mesh). You can now move all the join mesh and add any modifier to all the join mesh.
If you want to separate the mesh just click the separate s. join
If you want to edit the join mesh click on the expand smart join and after finishing the editing click on collapse smart join.


text:
Ctrl, Shift and Alt keys not working in linux mint 21.3
This may sound weird, but all my shortcut keys aren't working! When ever I use Shift+MMB, it acts as if I'm hitting MMB only!
The shortcut keys are working perfectly when I use them outside of blender, but when I use it inside blender it just doesn't register!
I am using Linux Mint 21.3 and this problem started happening a week ago. I have tried switching kernels, but that doesn't do anything!
Thank you.
Sincerely,
xomnion.


text:
Seamless cliff mesh with array
I'm attempting to create a cliff mesh that I can seamlessly array. Pictured here is a non symmetrical mesh, with the array modifier.

I understand that to do so, the edges need to be symmetrical, however, I am unsure of the best way to achieve this in blender.
Symmetrize does not seem to create a seamless array (there's a thin seam) when applied. Pictured here is with the symmetry applied.

Any advice appreciated.

Have you tried checking the 'Merge' option on the Array modifier panel?

Yes, merging by distance may bridge the gap, but it doesn't explain why something that should be seamless, isn't. Unless I'm missing something

Why should it be seamless? If the surfaces of each side of the array don't match exactly you're going to see the difference between them where they join!

with symmetry applied along that axis, they should be the same, like in picture 2.

Symetrize isn't designed to make the edges match! It just means that the two halves will be mirror images of each other. In fact I'm not even sure how that's supposed to work with an array!

Hmmm, what could I use to make them match if not symmetrize?

When you use the Array modifier with a Relative Offset of 1, the object will be arrayed by the exact size of its bounding box. So if the sides are not absolutely flat where they meet, there will always be a gap because they will only touch on their farthest point. Apart from that, if you want them to merge they should be open to the sides, without any faces.

please share your file: https://blend-exchange.com/

There are two things you have to understand: 1. how the Relative Offset in the Array modifier works and 2. what symmetry is and why this is not necessarily helpful in this case.
First of all, let's say this is the cliff object in top down view. It is symmetrical, so the left and right side are mirrored. And the rectangle around it is its bounding box, i.e. its maximum dimensions in X, Y and Z direction.

Now if you add an Array modifier and set the Relative Offset to a Factor X of 1, this means add a duplicate at a distance of exactly 1× the overall width of the object (the width of its bounding box). Since not all parts of the object extend as far as the maximum width, the duplicate touches the original only on its outmost vertices, leaving a gap in the other parts.

And this already shows why symmetry does not work here: when the left and right side are mirrored to each other, they do not fit seamlessly. Instead they should be counterparts to each other. But even when you make one side the counterpart of the other, you will still have gaps with the Relative Offset. In this example the instances do not even touch at all, since the most indented part on one side is the most bulged part on the other and vice versa.

So to make arrays of objects like this one seamless, you have to offset them less than their complete width and make them overlap. This can be achieved by a Relative Offset of less than 1 or instead you choose a Constant Offset of a specific distance. In both cases it is best if you knew the distance from a vertex on one side to its counterpart on the other side. If you want to use the Relative Offset, you also need the width of the bounding box.
Below I show both methods: the distance between two corresponding vertices is 7.9834 m, so this value needs to be put in the Distance X field for a Constant Offset. To use the Relative Offset you need the vertex distance divided by the bounding box size, in this example it's 7.9834 / 8.21 ≈ 0.9724 which is then used as Factor X.

But as long as you do not have very exact values both methods are subject to rounding errors, which might not be relevant for a few instances, but the more you have the more problematic they might become. So the easiest and most exact way would be if the sides were completely flat with all vertices at the same X position. Then you can use a Relative Offset of 1 and it will match without gaps. This would actually be the thing I would suggest first and foremost, the previous explanations are just to show you why and how you have issues with what you did.

Now, finally: to avoid any messy geometry with interior faces, I would stronlgy recommend you leave the sides where the array instances are connected open. The other thing is: your cliff mesh does not have to be symmetric at all. When you symmetrize it, the complete left and right side are the same, just mirrored, which might look not very naturally. But to seamlessly merge the array instances, only their border edges which make the connection have to be matching (the selected ones in the image below). Inbetween the mesh needs no symmetry unless you want that.

If you want tiling without symmetry, you can use the traditional approach:

Slicing in the middle (down naturally matched features)
Swapping the ends
Blending the mismatched centre

Here, blending is done by 'Bridge Edge Loops' over a gap snapped to be the same as the other linear intervals.

As Gordon Brinkmann says in his answer, the elements of an array may no longer join at their bounding box, so a 'Relative' offset may need to be less than 1, for a 'Merge' to take.


text:
Does the Principled Shader IOR value effect specular reflection on a transmission material
Other render engines have two IOR values - one for refraction, and one for reflection. But in Cycles there is only one and documentation states it only affects refraction.
Yet with transmission set to 1, it does seem to drive reflection as well.
In the picture example below, both planes are using an identical material except on the left IOR is 1.1 and 1.5 on the right.
It certainly looks like IOR is driving reflection as well, despite the description in the documentation.
Just confirming if this is true?

The IOR does control reflection too.

TL;DR:
the specular value controls the IOR for reflection, the IOR value is indeed just used for refraction.
Background info:
The principled BSDF-Shader is based off of disneys principled BRDF.
It's called principled because of these 5 principles:

Intuitive rather than physical parameters should be used.
There should be as few parameters as possible.
Parameters should be zero to one over their plausible range.
Parameters should be allowed to be pushed beyond their plausible range where it makes sense.
All combinations of parameters should be as robust and plausible as
possible.

Because of their first principle (easy instead of scientific) Disney decided to cloak the fresnel-IOR in a specular reflection value. This is of course a more artistic approach.
from the disney docs: specular - incident specular amount. This is in lieu of an explicit index-of-refraction
and from the blender docs: Specular
Amount of dielectric specular reflection. Specifies facing (along normal) reflectivity in the most common 0 - 8% range.
You can use the formula =((−1)/(+1))2/0.08 to create a node group so you can control both IORs with one slider.
Note that the specular value accepts values above 1.

The IOR does control reflection too.  This is to avoid parts of the material being black which could happen if the reflection IOR is less than the refraction IOR.
Some engines do allow them to be modified separately, and avoid the issue with black pixels by ensuring the reflection IOR can't drop below the refraction IOR.
It's correct that the IOR of reflection and refraction should be the same, but from an artists point of view, it's beneficial to be able to set the reflection IOR separately.
You can still achieve a sperate IOR for reflection by using individual nodes (glossy bsdf, diffuse bsdf, and refraction bsdf) to build your material rather than using the principled shader.  The IOR would be controlled using a layer weight node into the factor of the mix shader node that adds that element to the material.


text:
How to distinguish between "Addon is not installed" and "Addon is not enabled"?
I want to check if an addon exists and if it is enabled. So i tried:
loaded_default, loaded_state = addon_utils.check(addon_name)

But i found that i can not distinguish between the 2 cases:

Addon is not installed
Addon is not enabled

So in the case where i want to programmatically enable an addon, i can only do:
addon_name="myaddon"
default, state = addon_utils.check(addon_name)
print ("%s: default:%s, state:%s" % (addon_name, default, state) )
if default == False and state is None:
    print("%s is not installed or not enabled by default" % addon_name)

if state != True :
    print("Try to enable module %s On The Fly ..." % addon_name )
    try:
        mod = addon_utils.enable(addon_name, default_set=False, persistent=True)
        if mod:
            state = True
    except:
        print("Could not enable %s on the fly. Ignore" % addon_name )

But this is ugly. Especially when the module does not exist then i get a stack trace in the console, even when i use a try/except block. For the the example above i get this in the console:
myaddon: default:False, state:None
myaddon is not installed or not enabled by default
Try to enable module myaddon On The Fly ...
Traceback (most recent call last):
  File "D:\blendergit\cmake-build\bin\Release\2.71\scripts\modules\addon_utils.py", line 299, in enable
    mod = __import__(module_name)
ImportError: No module named 'myaddon'

Is it possible to make this more elegant and avoid to see the stack trace when the child addon does not exist ?

If the addon is not 'installed' (i.e. unknown from Blender side), then it won’t be listed in addon_utils.addons_fake_modules. So the solution is:
mod = None
addon_name = "myaddon"
if addon_name not in addon_utils.addons_fake_modules:
    print("%s: Addon not installed." % addon_name)
else:
    default, state = addon_utils.check(addon_name)
    if not state:
        try:
            mod = addon_utils.enable(addon_name, default_set=False, persistent=False)
        except:
            print("%s: Could not enable Addon on the fly." % addon_name )

if mod:
    print("%s: enabled and running." % addon_name)

Yes, that was the missing link :)

You should replace if state != True by if not state


text:
Find a corresponding point on a transformed Mesh
Lets say i have 2 polygons A and B where polygon B has been derived from Polygon A by an unknown(!) transformation matrix:

Now i have a point p that is placed somewhere on the surface of polygon A. How can i find the corresponding point p' on polygon B when i know [a,b,c,d] and [a', b', c', d'] ?

Im curious , why would you need this? , So there might be work arounds aswell

For triangles you can use mathutils.geometry.barycentric_transform:

import mathutils.geometry
pd = mathutils.geometry.barycentric_transform(p, v1, v2, v3, d1, d2, d3)

To test if the point is inside a triangle you can use mathutils.geometry.intersect_point_tri.

This is a neat solution! And I have one more question. I think the barycentric combination should be same for p and pd under the unknown transform. And I know that the affine transform preserve the invariants of barycentric coordinates. So the unknown transform is limited to affine transform(I am not quite sure of this...), is it a problem in application?

I will assume that:

Your polygons are planar.
The transformation matrix represents a projective transformation.

By this assumption the problem can be solved using 2D projective transform.
In general there are following steps in this solution:

Use 3 vertices to construct a 2D frame(I name it M) of A.
Project all vertices of A, and your input vertex p into M of A;
project all vertices of B into M of B. I call these projected vertices as PA[0], PA[1], ..., PA[3], PP, PB[0], ..., PB[3].
Compute a 2D projective transform(name it T) between PA and PB.
Compute the destination vertex of PP using T. I call the result vertex as PPB.
Transform back(un-project) the PPB to get the final result, the corresponding vertex of p in B.

Here are some sample codes. I use numpy here, so you may modify it to use bpy.mathutils.Vector and bpy.mathutils.Matrix.

Construct 2D frame
def Construct2DFrame(p0, p1, p2):
    u = [p1[0] - p0[0], p1[1] - p0[1], p1[2] - p0[2]]
    h = [p2[0] - p0[0], p2[1] - p0[1], p2[2] - p0[2]]
    n = np.cross(u, h)
    v = np.cross(n, u)
    m = np.matrix([u, v, n]).T
    return m

Compute a 2D projective transform
def ComputeProjectiveTransform2D(src, dst):
    # src and dst are lists of 4 2D coordinates.
    u = lambda i : src[i][0]
    v = lambda i : src[i][1]
    x = lambda i : dst[i][0]
    y = lambda i : dst[i][1]

    a = [
        [u(0), v(0), 1, 0, 0, 0, -u(0) * x(0), -v(0) * x(0)],
        [u(1), v(1), 1, 0, 0, 0, -u(1) * x(1), -v(1) * x(1)],
        [u(2), v(2), 1, 0, 0, 0, -u(2) * x(2), -v(2) * x(2)],
        [u(3), v(3), 1, 0, 0, 0, -u(3) * x(3), -v(3) * x(3)],
        [0, 0, 0, u(0), v(0), 1, -u(0) * y(0), -v(0) * y(0)],
        [0, 0, 0, u(1), v(1), 1, -u(1) * y(1), -v(1) * y(1)],
        [0, 0, 0, u(2), v(2), 1, -u(2) * y(2), -v(2) * y(2)],
        [0, 0, 0, u(3), v(3), 1, -u(3) * y(3), -v(3) * y(3)],
    ]

    m = np.matrix(a, dtype=np.double)
    rhs = np.array([x(0), x(1), x(2), x(3), y(0), y(1), y(2), y(3)],
        dtype=double)
    s = np.linalg.solve(m, rhs)

    return np.matrix([
            s[0:3],
            s[3:6],
            [s[6], s[7], 1]
        ])

References:
https://www.cs.cmu.edu/~ph/texfund/texfund.pdf
This provides all the theoretical background of this solution. You can start reading from section 2.2.3.

If i understand you correct, then your solution assumes the polygons are flat, thus you can construct triangles which define the planes on which you further calculate the result. I guess this would then be equivalent to triangulating the model and only work with tris?

Yes, you are right.

Gaia Clary: no, that's not what he's doing. Think of what he's doing as un-projecting one quad, and then re-projecting the quad onto the second one. The difference with triangulating is this projection assumes there's a perspective transformation involved. All four points are being considered simultaneously unlike using triangles where only three points are being considered at a time.


text:
Cannot see the HDRI image in material preview or render
I don't know what I did but I cannot see the HDRI image in my project.
This dont happens in a new project, only in my current project.
I've put world opacity to 1 and blur to 0.
But I cannot see the HDRI, only some colors changing if I rotate the view, like if I was using HDRI with blur to 1.
In render mode the same happens.
In material preview I'm using a blender HDRI image, in render viewport an image in nodes as environment image.
You can see in the image below, in the left a new project, in the right my current project.
How can I solve it?
Thanks in advance.

On the right side the cube looks like you are in orthographic view. Orthographic view is basically as if the camera has an infinite focal length, so the background is infinitely zoomed in and shows a single pixel filling the whole screen. If you are moving the view around, the background color should therefore change according to the color of the changing pixels.

You are right ! newbie issue hehe

@Richal To be fair, this explanation is not really obvious for most people I guess - or at least not the first thing that comes to mind.


text:
Cursor is turned around in a weird way when sculpting
Here's the screenshots. The cursor should look like a circle, like it usually does, but not this time for some reason.

And when I sculpt it sculpts in lines, not in circles

How do I turn the cursor back into a circle?

This can happen if your mesh has unapplied scaling that isn't uniform across the axes.  In object mode, try CtrlA and apply the scale, then switch back to sculpting mode and hopefully your brush will be back to a circle.

It worked, thanks!


text:
Object rendered without material
I have an object in blender that I put a metallic material on and I see it in the viewport but when I render it turns black and the material disappears
i need to render it with transparent background so i don't want to put any background
also tried with lightning and didn't worked
I would appreciate some help, thanks!

Blender's viewport has 4 shading modes.

Wireframe
Solid
Material Preview
Rendered

In your screenshot, the viewport is set to Material Preview mode. This means that the EEVEE rendering engine is being used to give you an idea of how your materials look.
The catch here is that Blender automatically uses an environment light (aka. spherical HDR panorama or HDRI) which can be selected in the viewport shading options.

This environment light will only be used in the viewport for preview purposes.
In the final render, Blender will use the World settings (see below) for the environment light. By default, this is a gray background, and without any other lights in your scene, a reflective material will just reflect that default gray color all over.

To get nice looking environment lighting in the final render, you must set up an image texture such as an HDRI in the World settings.
To do this, simply click on the yellow dot next to the "Color" input and select "Environment Texture."

Then, you will be able to click the "Open" button and browse to any HDRI on your computer.
If you don't have any HDRIs yet, you can find many high quality ones (including the ones built into Blender for the Material Preview mode) for free on polyhaven.

What you show is the Material preview, this mode uses a default HDRI image that is reflected by your object, but it won't be rendered. If you want your object to reflect something in the rendered image, you need to give an HDRI image to your World, the transparency will still work.


text:
Adding custom split normals enables sharp on edges between smooth faces?
So i have been playing with split custom normals. I figured out that i have to add an array of normals to get started. And i also figured out that i have to use zero vectors as placeholders where i do not want to have custom normals.
so:
tgt = bpy.context.object
zv = (0.0,0.0,0.0)                 # my zero vector
normals = [zv]*len(tgt.data.loops) # the array of normals
tgt.data.normals_split_custom_set(normals)

The code above seems to work but i get 2 strange issues:
1.) When i call this code while the object is in edit mode, then actually nothing happens (no split custom normals are assigned to my object)
2.) When i call this code while the object is in object mode, then the array is assigned to the object, but in addition all edges between smooth faces are marked as sharp.
Here is my object before i add the custom split normals:

And this is right after i called the code snippet from above:

I expect to see no changes at all (because the entire normals array has zero vectors). So i guess i have forgotten something to setup. But i have no idea what i am doing wrong.

Based on the shown normals, that is the expected result. Why the normals are like that I don't know.

Maybe you want to use an Edge Split modifier with Sharp Edges checked, and then mark some of your edges as being sharp in edit mode.

Hi. Thanks for your comments. Actually i have something much more complex in my mind than just adding an array of zero vectors :) And i know that i can not achieve what i want by using the normals modifier. However according to what i read about custom normals, adding a set of zero vectors should not affect the normals at all. But apparently it DOES affect the normals which is either a bug in Blender or i am missing some additional step. It may well be that i have to initialize the custom normals array differently or maybe i have to recalculate the normals somehow to keep them as they are.

It turned out that this actually was a bug in Blender. This Bug has been fixed and the fix will be in Blender 2.75 Then my initial code snippet will work as expected.


text:
How can i skin a model to a pose other than the Rest Pose?
I want to skin a character that was modeled for a different rest pose. The following example is just a mockup for demonstrating the problem:

So in this example the Rest Pose (T-Pose) does not match the Model's pose (A-Pose). Hence i can not bind the mesh to the Rest Pose here. But when i adjust the Pose to the Model and then bind the mesh using:
Pose -> Parent -> Armature deform -> with Automatic weights

I get this (and as far as i understand the procedure, this is expected behavior)

So, Blender apparently can only bind to Rest pose, hence the Binding function assumes that the rig is in rest pose. Thus as soon as the binding has happened, the current pose is applied to the mesh and thus it gets distorted (and i expect this to happen).
The obvious solution to fix this problem seems to be: modify the model so that it matches up with the Rest Pose. Then bind the mesh to the armature. But i do not want to modify the mesh, but use Blender to find a better solution.
My current workflow to solve the above problem.
Currently i solve the problem as follows (which works nicely, but i still find it to be a tedious workflow):

Make a copy of my rig.
Modify the rest pose of the copied rig to match the Mesh Model (Apply pose as rest pose).
Skin the model to the copied Rig.
Manually Pose the copied Rig into the Rest Pose of the original Rig.
Apply the Armature Modifier.
Delete the copied Rig.
Attach the mesh to the original Rig (keeping the weight groups).

Anticipated workflow (could be achieved by using an Addon)
I would like to optimize the above mentioned workflow by merging steps 4. - 7. into one step "restore rest pose". Then eventually change the workflow like this:

Save the Original Rest Pose.
Modify the rest pose to match the mesh model.
Skin the model.
Restore the original Rest Pose without destroying my skinned mesh.

For this i need to save/restore Rest Poses. I know how i could achieve that by creating an Addon. However before i do that i want to be absolutely sure that i do not miss something. So i ask if "Save a rest pose" is implemented already (as far as i can tell the pose library won't work for this).
Ideal workflow (would probably need a change in Blender)
I wonder if Blender could add some support as well. So here is the "ideal workflow":

Pose the Armature to match the Mesh
Parent to Armature as usual
Add an option in the Operator panel of the Parent operator: "Transform to Rest Pose"

This new option would then calculate the reverse transform such that the mesh would keep its original shape when the armature is posed into the pose from where the mesh was bound. OK, i agree this needs to be read more than once ;-/
Optimal Workflow
Now the best solution (imho) would be to add full support for binding to arbitrary poses.
Then Blender would need to support a Bind Pose matrix which allows to bind a mesh to an arbitrary pose.
Questions:

Does Blender support my "Anticipated Workflow" ?
Or is there a better workflow for "rigging a model to a different Rest Pose" ?
Does the "Ideal Workflow" as described above make sense ?
Is there any chance to get the "Optimal Workflow" accepted for implementation ?

I would suggest this: in the rig tab of your armature, create a pose library, and next a pose wich will hold the rest pose of your rig.
Next pose the rig as you like, make it the rest pose, work, and when you're done, restore the rest pose from the library.
BTW, maybe you can even make simpler: in the mesh object, modifiers tab, you can activate the 'Edit' button of the Armature modifier. Then you can pose your model and work on it, not only in 'Edit' mode, but 'Weight paint' too.
EDIT For instance, to rig a character already posed (i.e. being not standing straight), you can:

create a standard rig.
In pose mode, move the skeleton to fit the character body and limbs as accurately as you can.
Still in pose mode, parent mesh to armature with 'automatic weights'.
Then, if you return to rest pose, the mesh will follow.

Hope this helps

The Pose library does contains bone matrices relative to the Rest pose. so when the rest pose changes, the poses change as well. for example: When you store the current rest pose in the pose library, then all transformation matrices are identity matrices. When you now make another pose the rest pose and then apply the stored pose to that, nothing will change. :(

@Gaia Clary: I'm sure I've done this earlier, but you're right, it doesn't work as I said in my reply. Anyway, I thing enabling the 'edit' button in the mesh modifier would solve OP problem.

Enabling the Armature modifier in Edit mode and applying the edit cage in edit mode only show me how the mesh reacts on the pose. But how can this help me to bind a mesh that is not in the rest pose ? I suspect that i overlook something.

You can bind a mesh to an armature in pose mode, maybe this is what's you're missing.

But when i adjust the pose to the character, then (still in Pose mode) Pose -> Parent -> Armature deform -> With Automatic weights, then the result is a distorted character.

I'm sure I've done this more than once. Check and apply all mesh transforms first.


text:
How can a smoke domain be hidden from render?
In the 3D-View everything looks as
 expected:

But when rendered the smoke domain covers the whole scene. I tried to place camera inside and outside of the smoke domain but this doesn't work either.

The box is caused by my fault in the smoke domain material:

Then the question should be how to reproduce the 3d-view in the rendered image.

I don't think you want to hide the smoke domain. If I remember correctly the domain holds the volume material with the voxel texture. Set the density of the volume material to 0.0 and check the density option of the voxel texture.

@pinkvertex thanks, could you look into the file? I started with quick smoke and didn't mess with voxel textures.

That would be a feature request - your trying to emit light from the volume. Emission is for the surface of the object while volume either absorbs or scatters light passing through it. You may want BI to use it's halo material. Maybe each particle with transparency and emission?

@sambler thanks, yes I recreated the scene now it works better (without the emission)

Maybe add an answer saying you can't emit from a volume and how you got the result you wanted.

Emission works fine for volumetrics, your problem is that you only have the density controlling the color.  You need to have the density control the emission strength too.

Your problem with the highlited nodes is that the density is affecting the color, but not the density of the volume.  So all areas of the domain are emitting light (at strength 1.1).
To fix this simply plug the density into a math multiply node to change the overall strength, then plug that into the emission strength.  You could also put it through a color ramp or RGB curves node first to adjust the falloff.

This way the areas of the domain with 0 density will be emitting 0 light as they should.
Without density controlling strength:

With above node setup:


text:
How can a Method from a startup Script be invoked?
This is a follow up of How could a single Python script run when Blender is started?.
Simply adding a method to a newly created file in Blender\scripts\startup didn't work:
Warning! 'C:\Program Files\Blender Foundation\Blender\2.68\scripts\startup\global.py' has no register function, this is now a requirement for registerable scripts.

I used snippets from:

Cannot-display-a-render-preview-of-a-scene-by-using-python-script-need-advices
Adding a custom shortcut for sculpt mode

The script current looks like (Uses Ctrl-R to toggle between rendered and textured mode in Cycles) and adds a dump method I really need):
import bpy

class U(bpy.types.Operator):
    bl_idname = "object.util"
    bl_label = "Toggle Render Mode"

    def execute(self, context):
        # bpy.ops.sculpt.sculptmode_toggle()
        for area in bpy.context.screen.areas:
            if area.type == 'VIEW_3D':
                if area.spaces[0].viewport_shade == 'RENDERED':
                    area.spaces[0].viewport_shade = 'TEXTURED'
                else:
                    area.spaces[0].viewport_shade = 'RENDERED'
        return {'FINISHED'}

    def dump( obj, ctx="", level=0):
        for attr in dir(obj):
            print( "%s.%s = %s" % (ctx, attr, getattr(obj, attr)))

def menu_func(self, context):
    self.layout.operator(U.bl_idname)

addon_kmaps = []

def register():
    bpy.utils.register_class(U)

    wm = bpy.context.window_manager
    km = wm.keyconfigs.addon.keymaps.new(name='Object Mode', space_type='EMPTY')
    kmi = km.keymap_items.new(U.bl_idname, 'R', 'PRESS', ctrl=True, shift=False)
    addon_kmaps.append(km)

def unregister():
    bpy.utils.unregister_class(U)
    bpy.types.VIEW3D_MT_object.remove(menu_func)

    wm = bpy.context.window_manager
    for km in addon_kmaps:
        wm.keyconfigs.addon.kmaps.remove(km)
    del addon_kmaps[:]

if __name__ == "__main__":
    register()

The toggle button works, but how can the dump() method be invoked from the python console?
I noobishly tried U.dump(obj) and bpy.U.dump(obj)
EDIT:
I finally modified the existing scripts/modules/console_python.py and added (starts add line 100):
# weak! - but highly convenient
namespace["C"] = bpy.context
namespace["D"] = bpy.data
namespace['dump'] = bpy.types.OBJECT_OT_util.dump # my one

Better not call the module global.py since global is a Python keyword and it would make importing and working with this module from another script impossible.

I think the unintuitive part is that a class (Operator) gets reduced to a single operation, like a function. So then how do you make classes and use polymorphism and encapsulation? My advice is to make more operators call other modules from there.

To answer your question:
Operator types are automatically added to bpy.types on registration.
This is how a method on an operator your register can be called.
bpy.types.OBJECT_OT_util.dump(bpy.context.object)

Note that it is very rare to ever access operator types like this, its more of an internal implementation detail.
normally you would access the operator via bpy.ops.object_utils() but this is only for calling the operator and won't expose its original class.
Suggested alternative
In this case I would suggest not to having dump() as an operator class method at all.
If you have a function that can run outside of the operator, you're better off having it as a utility function in a module other scripts can import and use, then have the both the operator and external scripts use it.
my_module.py:
def dump(...):
   ... do stuff ...

class MyOperator(Operator):
    ...
    def execute(self, context):
        dump()

So now any script can do:
import my_module
my_module.dump()

This way we bypass Blender/Python API internals where its not helpful and let Python modules interact as they would typically  (outside of Blender).

It seem what your really after is a way to define your own convenience imports/variables. Looking at scripts/modules/console_python.py, I came up with the following hack (save as startup script for use):
import inspect
from functools import wraps
from pprint import pprint
from console_python import replace_help
import console_python

@wraps(inspect.getmembers)
def getmembers(object, predicate=None):
    pprint(inspect.getmembers(object, predicate))

@wraps(replace_help)
def custom_convenience(namspace):
    """Add custom convenience definitions."""
    replace_help(namspace)
    namspace["getmembers"] = getmembers

def register():
    console_python.replace_help = custom_convenience

def unregister():
    console_python.replace_help = replace_help

Thanks for your time, I didn't know that this will be complicated, I  currently get "AttributeError: 'module' object has no attribute 'getmembers'" I need to read up more documentation.

This is doing some interesting stuff, but not sure its really the most direct solution to the question.


text:
how to find all faces linked to a specific face
I need to find all parts of a mesh which are separated by seams, or which are unconnected sub meshes. As an illustration see the following image:
I need to get the sets of faces for each of the 5 shown mesh areas. How can i do that in a convenient way with Python?
I found this operator:
bpy.ops.mesh.select_linked(limit=True)

But maybe bmesh could provide a better way to go here ?

Bmesh module has quite some overhead, standard API is probably faster but may require mode changes. Selection operators are implemented in C, so potentially a lot faster (they can use bmesh walkers), but aren't flexible. What do you want to do with the info later on? Do you want to split meshes based on seems or something like that?

(i realize your question was posted much earlier)