text:
Is there a way to prevent soft body balloons from crumpling when they hit walls?
In the last homework project for my Blender class, I had to make a balloon bounce across a ceiling as a soft body driven by wind. I fiddled with the constraints but it always crumpled on impact with the ceiling. Adjusting the constraints so that it retained its shape resulted in it not reacting to the wind. Why is this and how do I prevent it?

I'm not an expert on this, but is the soft body really the best/mandatory option? Can you use a rigid body instead?

Was required for the assignment in question. It likely isn't the best option but I'm curious if it's possible using this method.

Ah, then I won't be of terribly much help.
Are you sure that the value you are changing on the soft body refers to rigidity as opposed to the "dampening", which I believe applies equally to all forces? (I've done more physics stuff in Maya, so I might be entirely in the wrong place here).

http://wiki.blender.org/index.php/Doc:2.6/Manual/Physics/Soft_Body
"Soft Bodies work especially well if the objects have an even vertex distribution. You need enough vertices for good collisions. You change the deformation (the stiffness) if you add more vertices in a certain region (see the animation of Image 1b)."
"Try and use a Lattice or a Curve Guide Soft Body instead of the object itself. This may be magnitudes faster."
If you tried with a lattice or curve guide it may be easier to see where things go wrong, though I don't know if it would fix the issue.

A Blender class? Is this at school?

It was at school, yes.

With Blender 2.66 or later, you can use a combination of rigid body physics and softbody on the same object. This should help you achieve the effect you want.
Also, increase the goal value and goal stiffness in softbody settings will help you retain the shape of a mesh.
Take a look at this sample scene

Great to see you here Mike, lets hope we get some more professional gurus such as yourself. ;)

You could also use the Bending and Push values in the Physics > Softbody > Softbody Edges panel.
Probably slower and unnecessary in this case, but I thought I would mention it.
Here is a nice video with examples of the settings.

EDIT:
in my experience also enabling "stiff quads" helps keep things in shape as well.

when you posted this answer, was your reputation at 1? just curious as this is the first question. probably a duh moment hahaha

@HarryMcKenzie oh gosh idk, I didn't join until a few months after the site went public, so probably not? but maybe? its crazy its been 10 years

There's an old and simple trick: put edges inside your balloon. Every additional edge acts like a strut, which helps to stiffen the balloon. Although balloons don't change their shape at all, excluding the knotted end.

source: Stack Exchange

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

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

sort: votes


text:
What is the most computationally efficient way to make ripples?
I know you can use Dynamic Paint as well as Fluid Simulation with Force Fields to make ripples. I'm sure there are other ways as well. Which way is the least memory and processor intensive of these?

Do you mean physical ripples (as with a mesh) or visual ripples (like a heat wave)?

Physical as in on a surface rather than a gas effect.

The simplest way would be to create a blend/gradient texture with a displacement modifier (or simply for a bump map if it's in the distance) and animate the offset by right clicking the property and inserting keys. This won't really work (I think) if the ripples are spherical originating from a single point since I don't know of a way to offset the ripples out of the center.
The next cheapest would be the dynamic paint method. The advantages of this is that you get the animation done for you dynamically and fairly realistically, and the mesh density is the same as that of the previous displacement map method. However it can take a fair amount of time to calculate if the mesh is dense and there are multiple sources of dense brush meshes.
Lastly is of course the fluid simulator. Only if you really need the ripples and the splashing together should you use this method as it uses huge amounts of ram and calculates very slowly, and also doesn't allow for UVs or any other mesh data.
So it's all about what you need it for. If you're not too fussed about the realism of the simulation, it's always quicker to fake a few things than to let blender do it for you. It may be a little more manual work, but it's usually quicker than a hardcore simulation.

Using a blend texture to make a ripple is interesting, but difficult to setup/animate.  Using dynamic paint can be really good in some cases... but Blender's confusingly named "Wave modifier" was designed to make simple ripples, long ago.  (It displaces the mesh with a ripple pattern/animation, very fast, (interactively) and is quite configurable.  I wrote more in my answer.)  I'm new to this site, so I don't know if it would have been better to edit your already accepted answer.

The most computationally efficient (and easiest) way to make ripples or waves in Blender is to use the Wave Modifier.
This feature was in Blender long before fluid simulations, dynamic paint, displacement textures or even modifiers. (It was called an "Effect" back then, but other than that, it has not changed much.)

I just tested it on Blender 1.60 from 1999. I bet it was in Blender sooner, but I don't have an Irix machine to test it.  (I also know a similar wave tool was in 3ds Max r2 in 1997.)
It's a simple procedural operation designed on much slower computers, so it's fast. (I believe it uses the sine function to offset the mesh, also it doesn't need to cache.)  You can interactively tinker with the settings and preview the animation.
It has options for the size of the wave, when and where it starts, whether it's a ripple circle or a wide wave...
It is simple, but you can do more advanced effects with it.  For example: to emulate a ripple bouncing off a wall, add another wave with the starting position outside of the object, the same distance to the wall.

Here's a video tutorial on using the wave modifier by the Ott Planetarium.

Another solution is the Ocean Simulator. It is built into Blender as a texture, which you can use to either displace a mesh, or use as a normal map.
Ocean texture is slower than a normal texture, but can provide great result if that's the kind of ripple you are looking for.
https://docs.blender.org/manual/en/latest/modeling/modifiers/physics/ocean.html#ocean-modifier

The ocean simulator modifier creates ocean-like waves/turbulence, but not single "ripples". (http://fc02.deviantart.net/fs71/i/2012/171/b/0/water_ripples_in_black_and_white_by_jeremyfe-d548l72.jpg http://en.wikipedia.org/wiki/Capillary_wave)  Blender's confusingly named "wave modifier" makes ripples.  (but it can also make 1 axis "waves"...  Before we had the ocean modifier, and we wanted random, ocean like turbulence, a work-around was to add a ton of circular wave modifier "ripples", with different start locations, but didn't look very good.)

You can make ripples with shaders only. Using a wave texture and a gradient texture (set to spherical which is used to control the extend of the ripple.), you can displace a plane to make ripples.
Basically, you multiply the wave texture (in rig mode) with a the gradient to localize the wave texture to the gradient. Since it's a 3d texture and the wave are spherical, if you translate the texture on the z axis the wave seem to move.

Then what you can do is increase the scale of the gradient as time change and thus it seems that the wave is propagating.
Then if you translate both texture (wave and gradient) in x, y direction  it move the ripple.
Here the node setup :

Using this you just have to animate the time input of the node group then then the ripple propagtes. You can even add multiple instances of this node group and add them together with a colorMix (add) to have multiple ripples.

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

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


text:
How do I get a glowing line via textures or materials?
I've created objects that use the Halo material but it has a vertex glow. How would I make a whole line glow without dividing my surface into an absurdly large number of vertices?

If you want to do this relatively easily and for certain edges, select the appropriate faces in edit mode and click EDIT->Mesh->Faces->Wire Frame on a duplicate of your original model.
Assign new materials with emission. I recommend just doing a solid material and join the models back together (I really usually work in Cycles, and if doing so you can use a simple Emission shader since Blender Internal doesn't really like emitting from materials in my experience). This adds a few vertices, depending on how smooth you want your outlines to be, but I've found that usually they can be pretty simple. You wind up with something like this:

Do notice that this adds vertices, but I've found it to be the quickest way by far to do this sort of thing.

This is something that I saw today that is kind of interesting.
Take your model, and UV unwrap it normally.
Duplicate the UV unwrapping, and click UV Unwrap->Reset on this second UV unwrap (check the far right of the image below and you'll see if you did this right)
Create nodes as follows for your material:

Note that the UV values correlate to R and G above.
This solution adds no extra geometry, and handles subdivision well (if you do it, however, remember to un-check "Subdivide UV" in the modifier or you'll get issues). You can adjust thresholds by moving the Greater Than math functions closer/further to or from 0 or 1.
I mostly based my setup off of this tutorial from TheBlenderNerd (to the point where I even used the same thresholds!), which can be helpful if you want to figure out what exactly I did, or if you run into an issue with forming the UV maps.
Here it is: http://www.youtube.com/watch?v=zjhdGY21WqQ

Combine this with your other answer if you don't mind. It's generally not good practice to have multiple answers by the same person on the Stack Exchange. Does look interesting to be sure.

They're too different to combine; there's a reason they have the multiple answer thing, and that's because something like this lumped in with the geometry modifying one would be confusing.

The solution is different depending upon whether you are using the Cycles render engine or the Blender Internal render engine.

Cycles: Select your object and go into edit
mode. From that screen, select each of the edges you want to glow,
then go to the materials menu and assign them an 'emissions'
material. This is probably not only the easiest way to handle glow,
but also will produce the nicest results.
Blender Internal: First,
duplicate your shape: one of the copies will serve as your
object-proper, and the other one will produce the glow. Select one of
these, and apply a subsurface division to it. Now go into edit mode
and apply loop cuts on every side, sliding them up so that they lie
very near to the actual edges of the object. Optimally, you should be
able to get these loop cuts close enough to the edge that when you
zoom back out and go into object mode, it should look almost as sharp
as the original shape. However, by doing this, the other copy of the
object should be just peeking through the object along every edge.
Select the other shape, and shrink it down ever so slightly (maybe a
factor of .995 or so) so that it fits snugly inside the first shape.
Finally, you should go to the material menu and assign the inner
object a material, then go down to the 'Shading' options and increase
the Emission value. If everything is sized properly, then the edges
should have a nice glow.

With either of these options, you can always use either the compositor, or an external editing program (like GIMP or Photoshop) to enhance these effects.

"select each of the edges ... and assign them an 'emissions' material" AFAIK, you can only assign materials to faces, and even if you could assign them to edges they would only be visible if the sample happened to hit exactly on the edge (which may not even be possible due to flop rounding).

A material/texture approach wouldn't be best for this application for the reason you stated, as well as the problem of it not being able to shine light. I would use a combination of a Cycles emission material and compositing to blur the object. This will allow the material to actually shine light; while compositing adds the glowing effect. For a non-glowing fuzzy line, a hair particle system would work in many cases.

He wants it via textures or materials, not post-processing.


text:
How do I do a clean boolean?
I build a primitive pool table model with holes where the pockets would be but cutting the holes via the Boolean modifier left me with really bad looking lines in the table surface.

I could very well take the time to smooth them out but I'd like to prevent them in the first place. How would I go about this?

What type of Boolean operation did you use?

that looks like it shows the backfacing part of the slice too? If you subdivide the plane you use to intersect with, does that produce better geometry?

Note, you are asking 2 questions here: 1) How to clean. 2) How to avoid the problem in the first place, both have very different answers and I think it isn't leading to such useful results, especially because the image shows an example which you are probably better off not using booleans for.

The short answer:
To get nice results with booleans on polygons you have to make the two entities have a similar level of division. If you can align the geometry for both entities then you will get mostly clean topology too.
The realistic answer:
If you can get away with avoiding the boolean operations then you will learn a lot more about modelling, and you will work faster (have more control, and be capable of fixing issues). The idea of a boolean operation is more based in maths than in practical polygon modelling, but it is possible and can look good. Here is a quick youtube search for this topic
Booleans have become really quite nice in Blender 2.5+ onwards after implementing the CARVE library. But don't expect the convenience of a solid modeller like SolidWorks or other CAD packages that represent geometry internally as mathematical equations.
The time spent trying to line up two entities for a clean boolean might be better spent modelling by hand (in this case). Using a few circle polygons and a mirror modifier you'd be surprised how much easier this is to model - plus the added bonus that you can quickly change the geometry without having to individually boolean the whole thing.
example image

the geometry here isn't optimal if you want to bevel the sharp edges, that requires a bit of planning - and beyond the scope of this answer,
example .blend  (shows all the steps to get the basic idea) At least when you do it by hand you can take into account that you might want to bevel a few edges and create the extra guiding geometry to do that.
Try doing a bevel on booleaned geometry, it's a world of pain.

In your case, it looks like the large ngon is tessellated (which in this case blender internally converts into skinny triangles before running the boolean function).
So for better results you could make the large ngon into smaller. more evenly spaces faces, or if its not an ngon, just avoid having many skinny triangles as input since these tend to give worse output.
Also check geometry for sanity (normals pointing correctly, no holes in geometry)


text:
What is the simplest way to generate a dodecahedron?
I've been thinking of animating some dice and while most are easy to make, I'm having some trouble figuring out a way to generate a regular dodecahedron. I could hand build it but it would be potentially uneven. Would using the base of a 5 sided cylinder and then some variation on spin be the best option or is there a better way?

There's an add (extra object) capable of adding that primitive. You just need the plain result or something else?

Go to User Preferences and Navigate to Add Mesh, install the Regular Solids addon and close the preferences window. Now if you hit Shift + A you should see a new menu.

UPDATE
In newer versions of blender (2.75 and up) the Regular Solids addon has been merged with the Extra Objects addon.

To create a dodecahedron go use Shift + A to Add Mesh > Math Function > Regular Solid.

Then on the toolshelf you can select Dodecahedron.

This is a fantastic add-on. It not only gives you dodecahedrons, but also octahedrons, diamonds, stars, and lots of settings for each, right below the "dodecahedron" drop-down.

when i uv unwrap this and limit the angles i still get extra vertice edges which form triangles, is there a way to create this object without the extra edges?

If you don't want to use an addon, you can take advantage of the fact that the dodecahedron is the dual of the icosahedron.

Add an icosphere (Add → Mesh → Icosphere) with Subdivisions at 1.
Go into edit mode with Tab.
Select all with A.
Press CtrlB to Bevel until you have an approximate dodecahedron:

Press W and select Remove Doubles. Increase the Merge Distance until the vertex triples are merged. Et voilà; you have a dodecahedron.

Pretty creative, also fast. :)

Very useful for platonic/archimedean solids and similar things, thank you!

bang, simple quick, good.  if you use adding mesh technique you have to deal with removing edges, this is sweet.

As @Carlo said it's available via Extra Object add on. If you want to make it from scratch though, here's how to do it.

Add an Ico Sphere and set its subdivisions to 1 in a Tool Shelf (T).

Give the object the Subsurf modifier with 1 subdivision and apply it.

Select the vertex in the center of a pentagon, go to Select-->Select similar-->Amount of connecting edges. It'll select all the vertices in the center of each pentagon.

Press X-->Dissolve Vertices to get rid of them.

Now select the whole mesh (A) and press X-->Limited Dissolve.

Increase the Max Angle value in the Limited Dissolve panel of a Tool Shelf.

Pardon me for this unrelated comment, but: how do you obtain this shading?


text:
Interactive output in blender
I am learning how to use blender. After I create an animation in blender, how do I send the output from a blender application so that it remains interactive?
I mean, I can save as .exe but it is not interactive. How do I create a standalone file that has buttons to fast-forward and rewind the movie and change the camera view when I do something like dragging with mouse?
EDIT
I have an animation in blender. I want to export a standalone player with buttons/features that can change angle of view and do something like change frame rate of animation, or such stuff.

I'm a little bit confused as to what exactly you want to do.
As far as outputting as an .exe with interactivity, you'd have to render out frames for ever possible outcome and then find a software that can manage each of those.
For interactive scenes in Blender, you'd really have to use the game engine, which uses a real-time renderer, unlike Blender's which renders out static data files with image information to files for later viewing.

Could you give more details - what is the propose of this? If you send someone an executable, you could also send them blender which defaults to loading your scene with the '3D View Full' screen (so no interface distractions), giving them basic instructions on the view-port and switching cameras.

See also the answer http://blender.stackexchange.com/a/10464/3515. Blend4Web natively supports many Blender-specific features - node editor, NLA animation, particle system, Bullet physics and others

Rendering an animation will create a movie file(or a string of .pngs) which is not an interactive format. It sounds like you want to create an interactive application with the Blender Game engine.
To export a Blender Game (as an Windows exe or Mac app):

Create the game using the Blender Game engine(which can be selected in the render engine dropdown). I'm not going to explain how to create the game, but there are tons of resources available.
Enable the "Save Game as Runtime" addon.
Go to File > Export > Save Game as Runtime

There is also the Three.JS exporter by Mr Doob which can output a version of your animation that can be played in any WebGL capable browser. Here's an example of animation exported to Three.js . This method does require some understanding of JavaScript, if you want to customize it to have WASD-like controls.


text:
Midi driven animation in blender 2.6
I am looking around for a script that will allow me to trigger animation based on a file input. I'm using blender 2.67b, all the scripts I have seen are for 2.49.
Any suggestions?

it might help to include links to the old scripts

MIDI to IPO/Drivers
possibly: https://github.com/kwnetzwelt/midi_to_ipo (for blender 2.5 onwards)
It imports MIDI (per track) and converts it to IPO/drivers and comes with a well written getting started.rtf document.

Yes this is very good, it is a bit simple though, you can only map animation to one object position. So I will need to work a little more to create many midi files... Anyway, it's working.

I'm trying to install this into Blender,but it's not showing up. Please help!

you seem to be doing alright, but you might look at https://www.google.com/search?client=opera&q=houdini+midi+control, Houdini I guess uses the old Chops prog. -or maybe it's just their nomenclature. http://digitalcinemaarts.com/docs/houdini/Channels.fmk.pdf

This response can be made more useful if you elaborate on why you consider these links to be of benefit to a blender user. Your response is more suitable as a comment to the original question instead of an answer because it doesn't yet answer a question


text:
Play 1000 Frames Per Second in Blender
I am trying to animate using Blender. I want to play 1000 frames per second, but Blender only seems to allow a maximum of 120. I am not super conscious about quality but I have thousand different states that I want to be played on screen in one second. Any suggestions?
I pick any 120 equal interval frames.
I'm okay if the answer requires Blender Python, too.

is this for a physics simulation/scientific measurements?

Just so you know, that means you'll be getting a frame played once per millisecond. Your brain can only react to something between 300-400 milliseconds(so your brain will have missed 300 frames when still processing 1). Also, your monitor will have to have a 1000 GHz refresh rate (which I don't think exists).

zeffim something like that. or more of playing around, scientifically.
I am asking can I do it with blender? If I can do it with blender and if my monitor cannot handle it, what will happen? @Charles, just normal display or error?

If your monitor can't handle(which I'm pretty sure it can't), it just won't display the 940 frames it's missing. It'll display every 16th frame.

Great, that does not matter then. Is it possible in python? Don't take me stupid to do unnecessary thing. Suppose things are that way. and I have to achieve it.

Yeah, that's fine. I wasn't trying to discourage it, I was just stating some of the technical limitations.

I'm not sure if this accomplishes what you want but,
In the render tab, under "frame rate:" choose "custom".
Then you will get 2 more options

FPS
Framerate base

In FPS input 100, and in Framerate base input 0.1.
It should now say "Custom (1000)" in your framerate settings.


text:
Execute function on object property change
I'm searching an equivalent to the observer design pattern.
I want to execute a script function every time an object position changes.
To achieve this there might be some options directly in blender UI, but if there is any possibilities to set up the observer using scripting, please provide both.
As an example I would like to do something like that in my script :
bpy.data.objects["cube"].location.onChange(myFunction)

def myFunction():
    #do stuff every time location is changed...

I am using Blender 2.67b

Are you talking about the Blender Game Engine, or the editor itself?

I'm not specifically talking about the game engine, but that could apply to it. See edited example.

It appears that this is not supported by blender. So here is my workaround.
I made a little script that will allow you to execute a function when the property of an object changes. I'm not used to blender modules so I didn't made a downloadable module out of it. But it's still pretty easy to set up.
Create the observer module
first, we need to execute a function every frame, this function will check if any property has changed and call the corresponding observer function.

Add an empty to the scene.
Add a pydriver to the empty (open the property panel (n) and then right clic on the location and select "Add Single Driver")
Go in the graph window and open the "Drivers" display (clic on f-curve editor button in the bottom).
Open the properties (n)
Select the added driver in the list on the left.
Remove any variable and modifier in the properties panel.
Just below the "Scripted Expression" button there is the "Expr" field enter in it the following :
update(frame)

This will call our frameUpdate function at every frame change.

Now that we are setup

create a new file in the text editor named
observer.py

check the "register" option (this will create a new module loaded automatically with .blend) and add the following to the file:

#author : Vincent Picard

import bpy
import bpy.app

#list of all the observers.
observers = []
print("test")
#This is to function to call in your scripts. use it to have your function called everytime an object property changes.
#object : Object to watch,
#property : property to be wathed.
#function to execute every time the property of the given object changes.
#function will be given this parameters :
#    object : the object.
#    value : new value of the property
#    old : old value of the property.
#    frame : current frame.
def observe(object, property, function):
    observers.append(Observer(object,property,function))

#Called at every frame. This will call the function that are listening.
def frameUpdate(frame):
    for observer in observers:
        observer.update(frame)
    return 0.0

#make the function visible to scripted driver.
bpy.app.driver_namespace['update'] = frameUpdate

#Each time we call observe we create an observer object.
class Observer:
    def __init__(self, object, property, function):
        #if the property object needs deep copy
        try :
            self.oldValue = getattr(object, property).copy()
            self.newValue = getattr(object, property).copy()
        #if the property object doesn't need it (and don't have a copy method).
        except AttributeError:
            self.oldValue = getattr(object, property)
            self.newValue = getattr(object, property)

        self.object = object
        self.property = property
        self.function = function

    #Call the function if the object property changed.
    def update(self, frame):
        #if the object needs deep copy
        try :
            self.oldValue = self.newValue.copy()
            self.newValue = getattr(self.object, self.property).copy()
        #if the object doesn't need it (and don't have a copy method).
        except AttributeError:
            self.oldValue = self.newValue
            self.newValue = getattr(self.object, self.property)

        if self.oldValue != self.newValue:
            self.function(object = self.object, value = self.newValue, old = self.oldValue, frame = frame)

How to create an observer and use it.

You now need to reopen you .blend, that way the "observer" module will be available.

You can now observe object properties and make a function to be call when it changes.

Create your script file (example) :
import bpy
import observer

#define the function you want to be executed. this one as an example simply print old and new value when they are changed.
def updateAnimation(object, value, old, frame):
    print(value)
    print(old)

#register your observer.
observer.observe(bpy.data.objects["Cube.031"], "location", updateAnimation)

Run it, it will register your observer.

Potential Problems
do not run the observer.py file, if you do then it will stop working and you will need to reopen the .blend.

This is an amazing approach, thanks for sharing it! One could also use app handlers (scene_update_post), dunno about pros and cons.

I noticed that using the frame change handler (See blender app handlers) we could avoid the "Driver" hack in my solution. Which would make it way better/sexy.

to print all objects that have changed this code works for me:
def print_updated_objects(scene):
    updated_objects = []
    for o in scene.objects:
        if o.is_updated:
            updated_objects.append(o)

    if(len(updated_objects) > 0):
        print("updated objects: %s"%updated_objects[0])

bpy.app.handlers.scene_update_post.append(print_updated_objects)

Exactly as @CoDEmanX says, you can do this, anywhere in your script:
@persistent
def your_scene_update_handler( dummy ):    # <--- yes, really type dummy here
    your_function()

bpy.app.handlers.scene_update_post.append( your_scene_update_handler )

More on this topic: http://www.blender.org/documentation/blender_python_api_2_69_10/bpy.app.handlers.html

Those handlers will call the function on very precise events (like after render or after frame change). Which is interesting. It does not, though provide a way to call a function when a precise property of an object is changed.

Someone could notice that using the frame change handler we could avoid the "Driver" hack in my solution. Which would make it way better.


text:
Set existing animation start frame with script
I have an object, which has two keyframes to make a short animation.
I have a script which duplicates this object and its animation and changes the start frame of the animation. I currently have this code :
line = duplicateObject(bpy.data.scenes["Scene"], "Line", bpy.data.objects["Line"])
line.location[0] = value[0]
line.hide = False
line.animation_data_create()
line.animation_data.action = bpy.data.objects['Line'].animation_data.action.copy()
frame_range = line.animation_data.action.frame_range
line.animation_data.action.frame_range = mathutils.Vector([frame + frame_range[0], frame + frame_range[1]])

Which doesn't work because I can't assign the frame_range variable, it's read only.
Any suggestion?

are you trying to stretch the keyframes using their total frame_range ?

You're right. Since frame_range is read-only, you can't modify it directly. It gives you the range over which all fcurves of that action are defined. AFAIK you'll have to change fcurve values of that action. Here's a small snippet of how to do that:
>>> for f in line.animation_data.action.fcurves:
...     for k in f.keyframe_points:
...         k.co[0] += frame
...         k.handle_left[0] += frame
...         k.handle_right[0] += frame

...where I assume you have predefined value for frame (e.g. frame = 10)
Here each of k.co, k.handle_left, k.handle_right, have 2 components: frame number and value. We have incremented the frame number of each keyframe (to translate all keyframes by constant amount). You can also play around with advanced things such as scaling or resampling.
Happy PyBlendering! :)

PS: Please note that if inside your duplicateObject(...) function if you're calling bpy.ops.object.duplicate(...), then you don't need to separately create animation data or action, since it is done automatically by the operator.

@zeffii Just tested using b56533 but they seem to be absolute numbers only. Can you please verify this once again?

you are quite right, I didn't look carefully. I'll remove the comment. Thanks for the correction. https://dl.dropboxusercontent.com/u/3397495/blender_related/dangle.blend works fine

If you want to manipulate actions, you might want to consider using the NLA (non-linear-actions), where you can mix, loop, modify actions etc. Otherwise you are limited to having to move about each keyframe of the actions fcurve's.


text:
How to animate layers in Blender 2.6
I remember being able to animate layers using keyframes in some previous Blender release.
Now if I try to add a keyframe to an object layer I get the following error message :
"layers" property cannot be animated

I have the following code which can change the layer, but it's not really useful, I would like to have it in an animation, so I can reuse it.
bpy.data.objects['Cube'].layers = [False, True, False, False, False, False, False,False,False,False,False,False,False,False,False,False,False,False,False,False]

From information in a BlenderArtists thread, keyframing object layer is not a developer-approved way to animate visibility, and is now deliberately disabled.
If what you really want to animate is visibility, you can keyframe the object's Restrict Render property directly  in the outliner space, by moving the mouse above the camera icon and pressing I.

I just went to the same conclusion a couple of minutes ago. Render visibility is really the way to do it.

Note, if you really want you could change the layers in a frame change handler still (from python).

You should mention that the mouse needs to be over this icon (your answer doesn't make that very clear).

It is probably helpful for future readers to know that Version 2.77a (and probably other versions, including 2.6) prevents the animation of the 'Restrict Render' property (and 'Viewport Visibility') for groups, unless you animate each individual object in the group, one at a time.
At the time of writing, the animation of the visibility of groups of thousands of objects (with various materials) is not easily or practically possible.
[This answer would have been a comment if I were allowed to post them. I'm new here and not yet allowed to comment on these posts.]

Currently, I suspect that the only practical solution to make multiple various objects (especially hundreds or more) suddenly appear, is to animate their location from somewhere off-camera between two consecutive frames (to avoid tweening).

Why not layer the objects you want to disappear, and composite them with z combine node. Then simply animate that as a switch?

What are you talking about?  Not easily possible to animate the visibility of objects?  Just select the objects and alt-toggle the property.

@ColourModeller I think it would be useful if you posted this as a new  question.

Thanks for the replies. I'll consider posting this topic as a separate question. I just want to quickly report that my suspected solution (above) also does not seem to work. Only one object in the group gets animated. It seems impossible to animate the visibility of many objects (hundreds or more with various materials) in Blender. It's surprising that the visibility/rendering of groups can't be keyframed (at least at the time of Blender Version 2.77a). I hope it will be changed ASAP.

@Xtremity, it is necessary to click and keyframe the property of each object individually, isn't it?

@3pointedit, thanks. I'll look into that.


text:
Zoom in and out without a mouse wheel
I am using blender on a tablet, for those times when I can't plug a mouse into the tablet, I would like to still be able to zoom in and out on the viewport.
What ways are there to zoom in and out other than using the mouse wheel? I can't find any buttons or input boxes in the user interface that control the zoom of the view port.
Is it possible to enter a value somewhere for how far in or out the viewport is zoomed?

The simplest way to zoom with a tablet, in my opinion, is to use Emulate 3 Button Mouse from File > User Preferences > Input.
This allows you to zoom in and out with Alt+Ctrl+LMB  drag.
Then you can also orbit with Alt+LMB  drag. And you can pan with Shift+Alt+LMB  drag.

There are a number of ways to control the viewport zoom without access to a three-button mouse:

You can use keyboard to zoom in and out by using numpad + and numpad -. If you don't have a numpad on your keyboard, you can set Blender to emulate the numpad under User Preferences > Input > Emulate Numpad.
If you are using Blender on a tablet (or on a computer with a touchscreen), you can zoom in and out by using two fingers on the screen and moving them closer or farther away from each other, just like with other mobile applications.

That being said, you can purchase a three button mouse separately, and use that to manipulate the viewport. If you are going to be using Blender heavily on a device with no third-mouse-button, this can make an enormous difference. For tablets specifically, you can get a wireless mouse with Bluetooth connectivity.

No number pad a notebook/laptop

Click on contact
Setup your the graphics tablet to click when the tip is pressed. Then the other two buttons can be set to right and middle click. Now just use the default CTRL+middle-mouse key-binding (can be customised user preferences).

On GNU/Linux see the "TPCButton" and "ButtonM" settings in man wacom.

Gestures
Additionally/Alternatively you can use a gesture-recognition application to convert gestures into keyboard/Blender commands.

Here on GNU/Linux I use Easystroke.

Today with Blender 3.3.1 you can go in Edit→Preferences...→Keymap. There you can tweak and bind a lot of Blender actions to keys and buttons in various Blender views.
I use a graphic tablet. F13 is mapped to the undo key of my tablet and right-click on a pen button for zoom. The later binding is very time saving in my workflow.

I added these bindings in the General drop-down.


text:
How can I control the viewport without a mouse?
Is there a way to specify the coordinates of the viewport and direction that the viewport faces without using a mouse or pointing device, in other words, by entering numbers somewhere.

Do you just want to know how to navigate without a mouse, or do you want to use this for scripting?

I'm not so interested in writing scripts but if I have to I will. The end result needs to be that I can control the view port in a reasonably "easy" way without a mouse. so if i have to write a script to create a command that allows me to use the viewport without a mouse, then, if that is the only way, that is what i will do

I still miss the workflow you are aiming at, can you describe the case you would want to do this? (are you reading values from a file for example that you want to use as a view point?) This isn't such a hard thing to do, but mostly users prefer to use the mouse for view-navigation so it was never made a prominent feature.

@ideasman42 I want to do this in situations where there is no mouse. That could be where the mouse is broken. I don't have a mouse, My device does not allow me to use a mouse etc. In my specific case I am using a tablet. thankfully the tablet provider sold me a keyboard that has a touch pad, effectively turning the tablet into a laptop, but sometimes I like to use the tablet without that keyboard (and touch-pad). so what i really want is a way to use the view-port without a mouse.

@axrwkr, there are so many areas of blender that need mouse input, Im not sure you can realistically expect to be a proficient Blender user without one, while I'm all for keyboard driven workflows (vim etc), Simple things like selecting a vertex or an object just don't work well via the keyboard.

@ideasman42 with regards to mouse usage, indeed that is the way that blender is designed, you must have a mouse to use it and your other hand on the keyboard. Blender allows you to control certain things in a very fine tuned way, using a keyboard to enter specific values, rather than trusting the steadiness of the hand and judgement of the eye. In asking this question, I had hoped to find ways to navigate the 3d view without the mouse in a more "controlled" way, this can help in situations where it's uncomfortable or not possible to use a mouse such as when using a tablet or sitting on a train

I must say that years before I laid hands on a tablet, I wanted to have more specific control of the view port and to be able to type in coordinates to move around to specific places, so, I think it's important recognise that being able to navigate the viewport without a mouse is not so much about using blender ineffectively, but more about having control over it

ctrl+numpad[2,4,6,8] use for slide 3d viewport &&
hold numpad[2,4,6,8] use for rotate viewport &&
ctrl +[+,-] use for zoom in & out

You won't have fine-tuned control of the viewport without a mouse, but there are extensive options for controlling it via the keyboard:

You can rotate the viewport using 2, 4, 6, and 8. You can also change between "Perspective" and "Orthographic" views by pressing 5.
By holding ctrl and any of the above, you can pan the view.
You can press / to switch between local and global view.
You can use Shift 2 and Shift 6 to roll the view, as of Blender 2.69 (r59707).
You can centre the view on an object by pressing "." on the number pad.
You can zoom in and out of the view using + and -.
You can access the current camera view with 0.

* Note: All of the number commands require that you either use your numberpad or enable "emulate numpad" in the preferences.

How do we pan forwards and backwards?

When I press . it just brings up options like "Median Point" and "3D Cursor".

3d Navigation Addon
There is the 3d Navigation Addon which comes bundled with Blender, which I haven't seen mentioned here yet. I made modifications to this Addon that make it more convenient for me when I don't have a mouse and numpad connected to this laptop and don't want to mess up my key-bindings to compensate.
It would be easy enough to extend this to include an input area for manual input of the view matrix.

Stored Views Addon
This addon called Stored Views may be of interest to you too. It will let you import and export a list of view orientations and configurations.

Thanks! I haven't tried out your modifications as yet, but I had a go at editing the source code for the add-on and hopefully I can use it as a starting point to find a way to type in numbers and drag sliders to control the viewport

By default you can't navigate by entering numeric values, in fact I'm wondering why you would want to do this at all.
Lock to an object
Since you ask - I would suggest that you use an object.

Add an empty object
You may need to press N to display the View properties panel
Enable 'Lock to Object' (in the view properties panel)
Rotate the view to align to this objects axis using Shift+1/3/7 (numbers on the number pad)

If you want to enter a number, you can using the object location/rotation. Or you can transform the object using numeric input.

Walk/Fly Mode
Fly mode allows some keyboard navigation, Once you enter fly mode (Shift+F), you can move the view with WASD,RF keys for up/down. However you can't turn your head using this method, for that part you need the mouse.

Note: If you happen to have a file with numbers I think it would be better to write a script that loads the view-ports into camera objects.

Also, you could make the empty object not visible in the 3D view by turning off its visibility in the Outliner

Fly Mode: when you have the viewport the way you want it, you can press the enter key to leave fly mode and keep that view. If you don't like the view press the escape key to exit and return to the previous view.

Besides what RolandiXor has listed, if you need better viewport control than what the numberpad provides, you can write a python script/plugin to orient the viewport.
The view_matrix is what controls the viewport orientation. You could, in theory...

press the space-bar to bring up blender's command menu
select your script/plugin's "Change viewport" command
then enter the desired view coordinates from the plugin

Though, I doubt you'll be able to do anything else useful in blender without a mouse.

Go to the user preferences with ⎈ Ctrl⎇ AltU
Change the shortcut in Input > 3D view > Rotate View to something like ⎈ Ctrl LMB

Welcome to the site :) It's preferred to avoid large amounts of text in images for various reasons. I've edited your answer to include short version of the text from your screenshot.

This isn't right for the question which is asking a way to change the viewport rotation and location without using a mouse. I don't see how your answer changes that.

I found a way to rotate the view port on a laptop as if you were using a wheel and track ball on a regular pc.
Setup your user settings
Goto File>User Preferences( CtrlAltU )
Select With: Right
Check: Emulate 3 Button Mouse
Check: Emulate Numpad
Orbit Style: Turntable
Goto bottom and again select: Turntable.
Save User Settings and close that window.
The Laptop's Mouse Pad
Consist of:
The Mouse Pad, Top Left Mouse Button, Top Center Mouse Button,
Top Right Mouse Button, and Bottom Left Mouse Button, and Bottom
Right Mouse Button.
Learning How to use it
The first instinct is to press The Top Center Button and then
slide your finger on the pad, it doesn't seem to work that way.
It worked for me when I first slid my finger on the pad and then
pressing on the Top Center Button while sliding your finger on the
pad. You have to slide your finger on the pad at a not-too-slow
rate and at a not-too-fast rate.
Example:
Move your finger in a circular way on the pad, not too fast and
not too slow, keep moving your finger on the pad, then press the
Top Center Button of the Mouse Pad.  You should be able to see
the view tilt around.  If not, release the Top Center Button,
try moving your finger on the pad slower or faster until you find
that magic speed.


text:
Blender UV mapping error
I have an error with UV mapping where it looks fine until I actually render it or throw it into a program that renders it. I'm not sure what the issue is because I hardly ever use blender.
What it should look like: (the mapped image is for testing)

What it actually renders like:

UVs will always show well in the 3d view, they only come out wrong when rendered as the textures more than likely weren't configured properly.

It looks like your mapping is set to Generated or something else possibly. You can fix this by going to the texture tab and under Mapping, select UV from the Coordinates list.

To be safe, you can also create a uvmap or use the auto-generated one under UV Maps in the Object Data panel and select it in the texture tab under Mapping once you have changed to those coordinates.

Thanks. This was very confusing because textures were showing fine in editor, but weren't coming up when rendering.


text:
How to control the Grid colours
How can I control the colour of the lines in the grid?
So far I've figured out how to change the colour of the darker lines, but there are a set of lighter lines that appear every ten spaces.

Blender User Preferences - 3D View
As shown in the screenshot there is a way to control the colour of the grid lines, I've experimented with this a little and the colour of the lighter grid lines appears to be linked to the colour that you set for the darker grid lines, but I would like to control this independently, perhaps making it a much brighter shade than the darker grid lines. Is this possible? I would hope that one of the other colours in there would control it, but I don't know which one.

You can't control the smaller grid-spacing values, these use an alpha value which is automatically calculated based on zoom level and the lightness of the grid-color (in orthographic mode).
Blender is calculating the color automatically and isn't giving you control.

I can't see how zoom level influences the the alpha value, how does that work? are you refering to the viewport zoom level  that is controllable via the mouse wheel? I've found a way to make the  lighter grid lines lighter by experimenting with the grid colour value, but i'm not sure what the rules are, setting it to hex 333333 give good results for me

Changing the zoom level of the viewport doesn't make any difference to the colour of the grid lines

It does in orthographic mode, edited answer.

I've found that the only way to get the lighter grid lines to have a greater contrast to the darker ones is to experiment with the the grid colour until it looks right.
After playing with the colour picker I found that the hex value 2C2C2C causes the contrast to go the other way and make the lighter grid lines black, but this was not to my tastes so I settled with the hex value 333333.
333333 results in the darker grid lines being not so dark as to be invisible and the lighter grid lines to have a higher contrast to the darker ones. The default was 404040.

User Preferences - 3D View grid set to hex 33333
Below is what the grid looks like with that grid colour set to hex 333333

Blender - 3D View grid set to hex 33333
In the scaled screenshot it's hard to see the darker grid lines, but they are visible if you look at the image at full size.
Here is what the grid looks like with the grid colour set to 2C2C2C

Blender - 3D View grid set to hex 2C2C2C

Since you are going into a lot of effort to find how this works, the C source code is source/blender/editors/space_view3d/view3d_draw.c, drawfloor() function. See how col_grid_emphasise is calculated.

@ideasman42 heres a link to the file used in the version of blender I have installed view3d_draw.c what would I need to do if I wanted to change the way that works and get it included in the official release?

first you should let us know the problem that you try to solve. Why the current behavior is not good. Making the change is fairly simple on its own.

@ideasman42 how does that work? is there a form on the blender site that needs to be filled out, or does one need to send an email to someone? Who decides which features are added to blender, is it possible for a random person to make a change to the source code and submit it for review and possible inclusion in the release?

We don't have a formal process: see, http://blender.stackexchange.com/questions/1190/best-place-to-put-feature-requests


text:
Why blender throws an exception when saving a copy of image?
I'm developing blender exporter for CryEngine - CryBlend.
I need to convert an image to tiff and then pass it to cryengine resource compiled. The thing is it works while saving image with blender python console:
tiffImage= bpy.data.images[1].copy()
tiffImage.filepath_raw = 'new_path.tif'
tiffImage.file_format = 'TIFF'
tiffImage.save()

but the same code placed in plugin throws an exception at save()
"RuntimeError: Error: Image "my image" does not have any image data."
What's more, while debugging that code with pydev (in plugin) then it works as expected.
I'm totally puzzled with it.
here is the complete code. export.py:1196
def __export_library_images(self, parent_element):
    library_images = self.__doc.createElement("library_images")
    parent_element.appendChild(library_images)

    for image in self.__get_texture_images_for_selected_objects():
        tiffFilePath = self.__convert_to_tiff_and_save(image)
        image_path = get_relative_path(tiffFilePath)

        image_element = self.__doc.createElement("image")
        image_element.setAttribute("id", "%s" % image.name)
        image_element.setAttribute("name", "%s" % image.name)
        init_from = self.__doc.createElement("init_from")
        path_node = self.__doc.createTextNode("%s" % image_path)
        init_from.appendChild(path_node)
        image_element.appendChild(init_from)
        library_images.appendChild(image_element)

def __convert_to_tiff_and_save(self, image):
    if image.file_format is not 'TIFF':
        tiffFilePath = os.path.splitext(image.filepath)[0] + ".tif"
        cbPrint(tiffFilePath, 'debug')

        if self.__config.run_rc_and_do_materials:
            try:
                tiffImage = image.copy()
                tiffImage.filepath_raw = tiffFilePath
                tiffImage.file_format = 'TIFF'
                tiffImage.save()
            finally:
                # remove tmp image from blend file database
                bpy.data.images.remove(tiffImage)
    else:
        tiffFilePath = image.filepath

    return tiffFilePath

There are some strange things here: You shouldn't be getting an exception since you're in a try block when this happens, and you're catching all  exceptions (bad boy, you!). Also (unrelated), you should never use if image.file_format is not 'TIFF': This needs to be if image.file_format != TIFF':. Furthermore, your __convert_to_tiff_etc.() doesn't return anything, but your other method seems to think it does...

__convert_to_tiff_etc.() returns, but that code was not pasted: fixed. I'm catching all exceptions because I want to delete that temporary image from blender database no matter what.

You can use save_render() to save to whatever format you want, no need to duplicate an image datablock first.
In my experience, save_render() is the only reliable way to export from one format to another. I tried the .filepath_raw / .file_format way as well, but it turned out to not actually write the data in the expected format (it used the source format with target format's extension).
Note that save_render() does not render anything, it is called ..._render because it uses the render settings of the current scene.
import bpy

img = bpy.data.images[0] # pick an image datablock
filepath = r"C:\tmp\_exported_image.tif" # specify outout filepath here

# Store current render settings
settings = bpy.context.scene.render.image_settings
format = settings.file_format
mode = settings.color_mode
depth = settings.color_depth

# Change render settings to our target format
settings.file_format = 'TIFF'
settings.color_mode = 'RGBA'
settings.color_depth = '8'

# Save image to TIF, this does NOT render anything!
# It only means that the save command will use the current scene's render settings.
img.save_render(filepath)

# Restore previous render settings
settings.file_format = format
settings.color_mode = mode
settings.color_depth = depth


text:
Does Blender support other Python implementations?
I am aware that blender can use .py scripts. But sometimes these execute fairly slow, compared to compiled code. There are several other Python implementations, which support some level of JIT compilation:
IronPython:

An open-source implementation of the Python programming language which is tightly integrated with the .NET Framework.

Jython:

A Python implementation in the Java VM.

PyPy:

A fast, compliant alternative implementation of the Python language
  An advantage of PyPy is, Speed: thanks to its Just-in-Time (JIT) compiler, Python programs often run faster on PyPy.

Is there anyway to make use of these optimizations as far as Blender is concerned?

Short answer, None of the other implementations.

Blender isn't just using Python for scripting, it embeds the CPython interpreter using its C-API, something which other Python implimentations don't provide.
Note: PyPy has made a start on the CPython API, it may one day be usable with Blender, currently its incomplete..
In the near future - its unlikely we will have a drop-in replacement for CPython such as IronPython, PyPy, ShedSkin, Cython... etc.
Alternatives

Import a faster environment
numpy is the best example of this, but there are other Python modules which you can speedup your scripts and comes bundled with Blender.

Embed a faster environment
Embed a faster environment _in_ Python. eg:

http://github.com/dabeaz/bitey
http://www.llvmpy.org
http://code.google.com/p/py2llvm
http://numba.pydata.org
http://documen.tician.de/pyopencl
http://documen.tician.de/pycuda

... there are probably others.
The main downside to this is your limited to primitive types (also known as POD), (eg - bytes, ints, floats, doubles) - so you end up having to convert your data into structures both environments can handle, crunch numbers, then convert back and apply to your Blender data.
Depending on the task this may not be an issue, however it does limit what you can optimize.

Write in the C extension API
For lots of users this isnt an option and involves learning how to write extensions, in C/Python-API or in something like Cython, SWIG... etc. Listing here because in some cases a small part of the script can be ported to C/C++ for a large speedup.
This method has the potential to provide an API which executes very fast, the main downside is the time it takes to write such modules and having users install them (since they're compiled C/C++).

Call out to a faster environment
You could execute code from any other language/environment as an external process and communicate with it via pipes/sockets (or even just process files and read them back), this may be too cumbersome both from a developer perspective and the effort users have to make to setup such an environment, but it _can_ be done and in some cases its worth the effort.

Embed a faster environment -> that seems to have a lot of potential!
llvmpy might work together with py2llvm, the latter creates the LLVM IR, the former would load and execute it (not sure if it can load what the latter creates).
And there's Numba, which JIT-compiles python code to LLVM inline and executes the byte code (supporting NumPy, structs etc.):
http://numba.pydata.org/numba-doc/dev/examples.html
Needs some thought on how to deliver the depencies I guess.


text:
Digits of precision of vertices coordinates
Vertices coordinates are float or double values ?
Is it possible to see them with full precision and not only with the limited precision of the text fields ?
Or better is it possible to see the bit representation ?
I ask this because I want to match 2 vertices without using the snap (for study purpose).

vertices are stored as 32bit floats (as with all other geometry storage in Blender).
There are no really good ways to see exact floating point values of a vertex in the user interface, Your best option is to print the value in Python.
This behavior is intentional, lots of common values like 0.1 will end up displaying as 0.100000000002,see: https://stackoverflow.com/questions/13345334/strange-behaviour-with-floats-and-string-conversion
For typical usage this isn't helpful.
As a workaround you could scale the object up 100.0x and then set 'Global' in the transform panel, so there is more floating point precision shown though this is not an ideal solution, it may be handy in a few cases.

See also: Video explaining floating point precision - gives some insights as to why this isn't as trivial as you might want/expect.


text:
Blender not recognizing GPU
I am using blender 2.66.1 and I have a gtx 580 installed. I am using Zorin OS 7, which is based on Ubuntu 13.04. I am in the blender preferences and for 'Compute Device' I only have the CPU. Whats wrong here?

Okay. It seems the problem was not blender related. JUst run these lines of code and restart and update to the newest driver and you should be good.
sudo apt-add-repository ppa:xorg-edgers/ppa

sudo apt-get update

sudo apt-get install nvidia-current nvidia-settings


text:
Render Animation on still scene, No BVH reloading
I have a scene I would like to do a fly-through on. There are quite a few polygons. This means that blender spends quite a lot of time loading the scene before it stars to render it. It should not reload the scene because nothing has changed (except the camera). Is there a way to tell blender to only load the scene once and then just re-use what is in the RAM? I am using cycles.

In the performance panel of the render tab, check Cache BVH:

This will make Blender use the last BVH built when you press F12.
If you want faster render times for the viewport, change Dynamic BVH to Static BVH:


text:
Why does subsurf modifier cause weird deformation at the end of a cylinder?

My problem is simple. I think that the strange deformations on the top are there because there are so many vertices in one face. How do I fix this while maintaining nice topology?
Although I triangulated the top polygon, the problem still persists.

You need supporting geometry along the top edge ring, that is why it is still looking odd in the second example. See the explanation on my answer again.

Related https://blender.stackexchange.com/questions/70810/how-to-avoid-the-wrinkle-at-the-poles-of-the-uv-sphere

Not to get too technical, this is because there is no supporting geometry at the edges where the vertices transition into the larger face (the ngon) and the subsurf modifier will stretch these (for lack of better words) giving the bumpy look.
Two simple fixes are:
Extrude and scale the top edge ring in more to the center
Just select the top ring, hit E and scale it in a bit to the center.

OR
Merge all the vertices on the top edge ring at the center
Select the top edge ring or the top face (the ngon) and hit AltP. You still need to add supporting geometry or the problem will persist. An edge loop near the top edge ring should suffice. It's a flat hard surface so merging to tris should be fine.

Both answer are good and should be merged.

Rule of successful subsurfing: surround corners with a row of faces on each side (like the green cylinder) so you always have one line of faces that connects to the flat part at 180°. That way you disconnect the subsurf from spreading too far.

The subsurf won't change a vertex's height if this vertex lies on a plane with all verts of all faces it is connected to. And then it doesn't matter how you fill the flat part, be it Ngon, Triangle Fan or a map of Louisiana.
At least almost. All the inner verts will keep their height, but they are still moved in the other two dimensions according to the algorithm. While the orange part of the mesh is flat, everything green starts to bend down immediately so it's not necessarily a circular coast line.
In order to get a microscopically clean solution (which might be needed for reflections), a Triangle Fan or yet another additional face line seems best.

Take a look at the horizontal edge line to the right. Since the inner verts have the same height as the corner verts, they keep their height and don't get pushed around (horizontally, but not vertically) which in turn means, the edge between them doesn't change either. Only the corners get bent.

what does "these stay out" mean, are the other ones moving?

Perhaps add a note about Mean crease too?

mean crease a whole set of new problems. but yes it should be mentioned

@user320 They don't stay out, they stay put. They don't move. When you use a Catmull Clark subsurf, most of your surface gets changed, rounded. Verts on a flat surface don't change if all faces that are connected to that vert lie on a plane.

Oh so once the Sub-D is applied they will be in the same 3d space?

Dunno about creases. They aren't needed for that example and I personally don't like them because you can only see the result. The crease itself is only visible as a number for one edge at a time or as average. Sorta creeping me out. Who knows what they're doing when I'm not looking.

@user320 They are already in the same space of sorts, the local coordinate system of the mesh. Unconverted they are generated. When you convert them, they are accessible in Editmode. But you can measure it. If a vertex is at x = 1 and all verts of all faces involved are also x = 1, he will stay at x = 1.

I see two solutions for this. The first is grid fill. It looks like this:

Nice quads all around. Make it like this. Delete the center ngon. Select the same amount of edges on opposite sides of the circle. Ideal is to select 1/4 of the total around the ring.
Hit space and type grid fill.

The other way is to inset the center ngon almost to the center, like this. Some problems will probably stay, but they will be very tiny.

Grid fill is also in Ctrl+F > Faces menu

Grid Fill adds alot of unnecessary geometry, I wouldn't recommend it in this case.


text:
Blender Stereoscopy, What glasses
I see that blender supports Steroscopy in the viewport. What kind of modes are there and which glasses are needed. I am not sure if this is considered off-topic but it is useful to know nevertheless.
Display Modes:

Anaglyph
Interlace
V-Interlace
Side-by-Side
Quad-Buffer

Could it be that this feature is not in 2.68?

not in a official release

"Anaglyph" generally implies red-cyan.

I would guess that one should use red-cyan Anaglyph glasses with this. (BTW, is this the Multiview branch?)

what about active shutter glasses

This feature is not officially in Blender yet, but probably the behavior will not change when it is added.
With a regular monitor, only Anaglyph will give you the 3D effect, and for that you would use the typical red-cyan anaglyph glasses.
The other display modes are meant for 3D monitors or projectors, and you would pick the display mode that works for your device. Those devices would come with the appropriate glasses if they are needed.

I wonder if will make modeling easier. Editing 3d in 3d!

Please update this discussion- While felantai has been working with steady results on Multibranch, I'm still unsure if quad-buffered is supported there. Yes, I DO expect that editing in stereo would greatly enhance modeling!


text:
Separate preview/render border settings possible?
I like to render using the cycles in the viewport. To speed things up I use the render border (Ctrl+B) to mark a small region of interest. However when actually render (F12) the border is still there. I know that I can uncheck the box for border before I render. But is there a way to have the viewport use the render and when I go to main render it render the full resolution?

AFAIK, no. but you can use render border while not in the camera view for it only to affect the viewport (see http://blender.stackexchange.com/questions/2014/render-borders-related-check-boxes-how-do-they-work)

I guess I can live with that.

No. However, as of blender 2.65 you can use Render Border (CtrlB) while not in the Camera view, which will only affect the viewport:


text:
Cycles hybrid rendering
The Cycles render engine can render both on the CPU and the GPU. I often render over-night so I do not need my computer to be responsive.
Is it possible to render with Cycles using both the CPU and GPU? If not, are there any other workarounds that maximize the hardware's potential?

This question here: Can I use both GPU and CPU together when I render with Cycles to decrease render time? focused on single frames optimisation.

Related: http://blender.stackexchange.com/questions/2002/is-netrender-only-useful-for-multiple-frames, and http://blender.stackexchange.com/questions/3082/specify-tile-size-for-blender-cycles-rendering-via-command-line

Related: Is it possible to both GPU and CPU render in the same Blender instance?

If you render an animation, you might achieve what you want by having two instances of Blender running. One renders with CPU, the other with GPU. Both use the same file and the same folder to render the image sequence.
You can tell blender in the Output panel to create placeholders and to not overwrite existing files. Placeholder creates an empty file when the rendering of a frame starts and disabling Overwrite tells Blender to leave this particular frame in peace if it already exists. This is the simplest approach to creating a render farm.
I must admit that my best graphics card is too old to test this approach myself. If it works, you might also want to check temperatures and render for a few hours before you leave the equipment unattended. Everything at your own risk.
If you want to render a single image, you can set a different seed in the Sampling panel and render for example 2000 samples with the CPU and 4000 with the GPU and overlay both images in the compositor.

Does this work on stills? PS: my computer can't overheat, it will shut down before it does that.

-Can blender do distributed rendering?

No, afaik this works for animation only. Hm, if you use border Render, you can render two halves of the same image and combine them. Or you can split the samples between the machines. Although you need to have different seeds in the Sampling panel.

@user320 if your computer overheats when being fully utilized, then its faulty hardware - under-clock it or get better cooling.. or find a way to throttle the system based on temperature. This is outside the scope of Blender to solve and something the system should manage.

how exactly would you overlay them in the compositor (for stills)? What mixing mode would you use?

This sounded great, so I tried this on a simple animation which took 5 seconds to render a single frame on the GPU, when I ran another instance of Blender at the same time, this time using the CPU to render, the GPU render time on the original instance increased to 9.4 seconds with the CPU render taking a similar amount of time, so I'm not sure if it's the speed boost it appears to be.

It's now possible with the 2.79 daily release to render with both gpu and cpu at the same time.
Overall I noticed saving around 15 minutes on a 1 hour render.
I didn't explore all the combinations while testing but I suspect the hybrid feature slows down the gpu part of the process but in the overall it's faster. A reason for this is probably the smaller tile size you have to set because of the cpu implication of the process. Eventually with more improvement, this feature could be a no brainer I guess. Maybe the eventual possibility to set cpu and gpu tile size independently could improve the performances also (While respecting the multiple).
In my opinion, it definitely worths trying and may work even better than the way I observed in some cases.
Ch

I can confirm that it still seems to be true... Just renderer over 800 frames on linux and it saved me 2 minutes by frames (Before it was 11 minutes) using 64 pixel tile size.
512x512 x 2GPU is slower than 64x64 x 2 GPU + 4 Cores. I'm not sure yet but I guess newest releases of 2.79 Beta seems even better than before working with small tiles with Hybrid.

Shouldn't you be able to do this with two instances of blender, one running on every other frame starting on 1, the other on 2 with one set to CPU and the other GPU?
From what I understand from the other answer, (s)he is talking about both working on the same frame, which would improve quality, not time.

Another idea would be to have 2 instances of blender and have 1 of them render the whole animation on CPU with (example:) 200 samples, and with the other render the whole animation on the GPU with a lot more samples.
Then you can use whatever software to mix them together.
As mentioned before, seed for sampling must be different.


text:
Show mesh vertices ID
I am try to do something based on the ID of a vertices. I want blender to show me the vertices ID. How can I have blender show me the ID in the viewport? I do not see an option in the Mesh Display tab.

there is a script that did this in older version but its now broken. http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/Index_Visualiser

There's a built-in feature to show mesh element indices, but the option isn't shown in the user interface by default.
Blender 2.7 and older:
The option only shows if the debug mode is enabled.

Start Blender in debug mode, or simply go to Python Console (Shift-F4) and type bpy.app.debug = True
Go to N-panel > Mesh Display
A checkbox Indices will now show
The colors are controlled by the interface theme

There's also an updated version of the Index Visulizer script:
space_view3d_index_visualiser_bmesh.py
Blender 2.8:
It only shows if the developer UI option is turned on.

Run Blender normally
Click Edit > Preferences...
In the Display panel of the Interface tab, tick Developer Extras
or type bpy.context.preferences.view.show_developer_ui = True into the Python console.
Open the Overlays popover in the 3D View
Look for the label Developer and tick the checkbox Indices

CoDEmanX steps work for Blender Version 2.73.a on OS X.

@CoDEmanX I can't download the visualizer script....    do you know if the address is ok??? thanks

It was probably removed from the repository / old tracker, but I updated the link to point to a phabricator file.

It seems this has been moved to another place in Blender 2.8. Any ideas where I could find it?

@Bauxite It moved into the Overlays popover and depends on a different option now (Developer Extras, bpy.context.preferences.view.show_developer_ui). I updated my answer.

And since, by default, the dark blue indices are so horrible to read on the dark gray background, you may wanna change "Theme >  3D Viewport > Face Angle Text" to a brighter color aswell.

Any update for Blender 3.2? I followed the steps, but I cannot see the "Developer" label in the Overlays popover

@AlexMekx You need to be in Edit Mode of a Mesh to see the option. After enabling it, you need to select something. The selection mode determines whether it displays vertex, edge, face indices, or a combination of them.

I made a usability modification to the script offered by @CoDEmanX, a while back, because it can be a pain to get the theme colours to play nice enough to let me read the indices. Hence I added a polygon background.

script available from: https://gist.github.com/zeffii/9451340
ideally the bpy.app.debug = True would also include some background for the numbers, as is the case with Ruler/Protractor feature.

Any plans to port this 2.8? The immediate mode is gone, bgl.Color etc. are no longer supported and don't know how to use the new way, using bind buffers and stuff. Also, coloring the text will probably require support in blf, because without immediate you can't set a color just like that before the blf draw call to affect it.

On printing one vertex the index comes as a property. So you can utilize that to refer a vertex as well. You can record their indexes while making the vertices.
m=bmesh.from_edit_mesh(bpy.context.object.data)
vertices=[] #include vertices here
m.verts.new(vertices)
indexes=[]
indexes.append( (int)((str)(m.verts[i])[( (str)(m.verts[i]).find('index=') )+2:-1]) for i in range(len(vertices)))

Hope that solves the problem!

The OP wanted to show the index in the viewport.


text:
Look through Spot Light
I have a spot light in my scene and I want to accurately place it. I know there was a way to do this in 2.55, but that doesn't seem to work anymore. How can I look through my light?

Just select the spot light, then press Ctrl-Num-0 (zero) to turn it into an active camera (looking at -Z local axis). To keep looking through it while navigating the scene you will have to enable 'Lock Camera to View' in 'View' under the properties panel. You'll then need to press it again while selecting the camera, to set the active camera back to it.

hint - you might want to temp unlock the view from the current camera, (directly to the right of the layer buttons in the 3d view-port). then you can disable this toggle to get the original camera back.


text:
What is an efficient way to remove loose vertices?
I have a mesh that has some vertices between edges that do not need to be there. How can I easily remove these vertices without selecting them manually? I tired using limited dissolve but that get rid of anything that coplanar not just the floating vertices.

Think about it from an algorithmic perspective: how should Blender know which vertices "do not need to be there?" The only vertices that don't contribute to the geometry (besides vertices not connected to any edges) are indeed coplanar, so Limited Dissolve is probably the closest you'll get. In terms of actually achieving this particular result: as this looks like a circle, you could use circle select C in edit mode to select all the vertices in that ring, then deselect all the ones in a slightly smaller ring to be left with only those selected.

This isn't an answer to your question, but it is related. Ctrl+Alt+Shift+M selects Non-manifold geometry.

In some instances, depending on topology, the following can work:

Select one of the vertices that you want to remove.

Choose Select> Similar> Amount of Connecting Edges from the 3D view header.

Deselect any vertices that have been selected but that you don't want to delete (in this case, the corners) and choose Mesh> Delete> Dissolve Vertices to delete the unwanted vertices.

PS: manifolds can ignore the 3rd step.

The most efficient I guess would be to try and avoid them if you are trying to remove edge loops use delete Edge Loop you will avoid this problem as it deletes Edges and Vertices.
Note it isn't perfect and may create extraneous edges but select them and repeat the process usual only needed once.

Although you didn't specify how you came to have those loose vertices, it is common to get that situation when using 'dissolve edges' to remove edges from your geometry without leaving holes. When you use 'dissolve edges', the vertices that were part of the edges will not be deleted with the edges, however, they will remain selected. You can then just press delete and select 'dissolve vertices' to get rid of them too.

if you select a lot of vertices on an object that has a lot of faces, then the vertices will collapse and you will almost certainly be left with a very deformed object if you follow this method -- but, if you can get select the vertices (which is the difficult part), then you can absolutely use dissolve vertices. It's just that when you have thousands or millons of points, sometimes it's difficult to select the vertices that you want to dissolve.


text:
Create Square Array
I have an object that I want to make a square array like a 3x3x3 cube. I want be able to change length and count for one axis and have all the other ones follow.

What about using drivers?

never used drivers before. not even sure what they do.

A driver is a python expression that gets evaluated, which means it can return values depending on some condition - like what the offset of the first array modifier is. And what it returns is used for the second/third modifier as well. It would basically link the offsets of modifier 2 and 3 to the offset of modifier 1. Not sure how to set it up though :(

You can do this with Drivers

Right click on the Count of the second modifier and select Add Driver.

In the header of the Graph editor, change the editor type to Drivers:

In the Properties region (N) set the variable to Single property, and the object to the object with the array modifier which values you want to copy:

Right click on the Count of the array modifier you want to make the driver equal to and select Copy Data path:

In the graph editor, Paste the copied data path in the Path box:

Set the type to Scripted expression, and put the variable you have created in the Expression box:

As mentioned by Wchargin, as an alternative to scripted expression you could use Sum Values or something similar. These will be considered "trusted" by the python security features.

Security
Blender has some python security features that will prevent the execution of scripted expression drivers. You can configure the settings for this in User Preferences > File. (see After updating to Blender 2.68 Driver Scripts are no longer automatically excecuted)

Thanks for the step-by-step guide gandalf3, it now works for me. Why it didn't before was simply that drivers are disabled by default and I missed the note about it (you can turn it on globally in the User Preferences > File > Auto Run Python Scripts. Here's my .blend: http://www.pasteall.org/blend/24507

Instead of Scripted Expression just set it to Average Value (or Sum Values, etc.) to avoid the Python problem. RNA paths are considered trusted implicitly.

@WChargin Good point, added.


text:
Blender show array instances as wireframe
I have an array in my scene and my computer has some trouble showing them in the viewport. Is there any way that I can get the instances to show up as a wireframe mesh or maybe even a point cloudor bounds?

AFAIK, no. any special reason you want the original to be solid?

I just want to ease up the viewport. At render time i want all of them shown as proper models. IN thee viewport however I only want to see the original as shaded and the rest as wireframe.

In this case you may be better off using dupli-faces or dupli-verts (better performance)

How do I do that?

@user320 another option is applying the array modifier, P > separate by loose parts then linking the object data. (you could set each object to a wire draw type)

then they would no longer be part of the array though. At each of them would take up more ram at render time

@user320 I might be wrong, but doesn't linking the object data have all the object reference one datablock?

I think you're right actually

There are some options. Create a linked duplicate with Alt D. Give it a copy location and copy rotation constraint with your actual object as target or just parent it. Disable rendering and selectability for your fake object in the outliner.Set the object Type of the array object to Wireframe or Boundbox in the Display panel of the Object Properties.
Now you have a fake object that won't bother you much and the whole array set to wireframe. Not ideal if you want to edit the object but going into Local Mode with Numpad/ temporarily gets rid of that, too. Or you don't make it unselectable and hide it.
Or you can put a Decimate or Remesh modifier on top of it all that doesn't get rendered. That way your Polycount gets reduced as well.

Another way might be:

Apply the array modifier(s).
In edit mode, P> Separate by loose parts.
With all the objects selected, press ShiftCtrlAltC> Origin to geometry
CtrlL> Make Links > Object Data.
Deselect one of the objects, set the Display type in Properties > Object Data to Wire, right click and select Copy to selected:

Now you can still edit the original and have your edits copied.


text:
Camera Tracking markers
I want to do some camera tracking. The things that I will be filming does not have a lot of detail on it, so that I will have to place some extra markers here and there. I am not sure what kind if markers to make. Should I make simple X's or should I just put some dots on it?

An X is not very good. If your video has motion blur the tracking can slide along one of the strokes that make up the x.

With the new affine/perspective tracking you can get much better tracking by having a marker that has some features within it. Here's a brief hierarchy of how I think about what makes a good tracking marker:

Bare Minimum:
Some kind of point you can track the position of. Vulnerable to being lost due to noise. Can't track scale or rotation very well.

Better:
A corner gives you more to track, and is less likely to get lost, but can disappear it the camera moves too much around the object, and you probably can't track it's scale.

Best:
Some kind of small pattern or grouping of features. This gives you something with high contrast that you can also keep track of the rotation and scaling of with the Perspective motion model. This should give you a more robust track and thus a better camera solution.

I read somewhere that one should not user the square ones (Best) because they throw the tracker off at different angles

This is true if you can't track perspective changes in the tracker, but blender now supports this.

What is the advantage of being able to track scale and rotation?

@AnsonSavage scale and rotation will improve tracking when features move towards the camera (or camera moves towards them) and if the camera rotates


text:
Rendering - Save Intermediate
When I render an image that could take hours to finish is there a way that I can save the render  at every hour, so that if my computer crashes I do not loose everything?

I don't understand what you mean. Save the file? Or save the image chunks that are rendered? I don't see a use for that since you can't really control the order in which chunks are rendered...

In the performance panel (for either BI or Cycles), there's a Save Buffers option which will save the render to a layered EXR file in your temp directory quite often. I could be mistaken, but I think it's each time it starts a new tile.
On windows, this temp directory is located at C:\Users\[name]\AppData\Local\Temp\ by default, but will use the path specified in User Preferences > File > Temp if set.

i had the same problem (rendertask of 3 days). What you should do is render not a movie but individual pictures. If there is a crash you can tell Blender not to overwrite old images and start where it crashed. In the end you have to do an extra step to generate a movie from those images, but this can also be done from within Blender.
I found a great tutorial that also discusses this subject
https://youtu.be/LPbUuMs2i20

Could you explain how? Perhaps detail the procedure steps, and show a few screenshots of relevant settings


text:
Python buttons not appearing in Blender
I'm still very new to Blender, but I'm trying to get a custom menu up and running.
I followed the video tutorial on Blender Cookie and works great.
I'm trying to create a button that will move and object to the origin.
My code is as followed.
    row = layout.row()
    row.operator("transform.resize", text="Scale")
    row = layout.row()
    row.operator("context.active_object.location=(0,0,0)", text="Orgin")
    row = layout.row()
    row.operator("transform.translate(value=(0,0,0))", text="Orgin")

The "Scale" button works so I know something somewhat works. The other two buttons do not show up. I was trying to see what move commands work.
I tried the commands independently in the console and they work... just not in button form.

Try moving the translate command to the top, and see how many buttons appear, and whether the command works. Also try making three scale buttons. In the console, type help(layout.row); and help(row.operator). I strongly suspect you need to specify a function name, not a statement (such as a function call or an assignment). But also make sure you're using layout.row correctly.

That's because context.active_object.location=(0,0,0) is not an operator. It's a statement.
You could define your own operator:
import bpy
def main(context):
    # This is what happens when your operator is invoked.
    context.active_object.location = (0, 0, 0)

class SnapToCenterOperator(bpy.types.Operator):
    """Snaps an object to the center."""
    bl_idname = "view3d.snap_to_center_operator"
    bl_label = "Snap Object to Center"

    @classmethod
    def poll(cls, context):
        # This is called to determine whether the operator can be invoked
        return context.active_object is not None

    def execute(self, context):
        # This invokes the operator and returns a state
        main(context)
        return {'FINISHED'}

def register():
    # If it's an addon, this is called when the addon is enabled
    bpy.utils.register_class(SnapToCenterOperator)
def unregister():
    # If it's an addon, this is called when the addon is disabled
    bpy.utils.unregister_class(SnapToCenterOperator)

if __name__ == "__main__":
    # We use this to register it in case we're running it manually
    # (which we are; click the "Run Script" button)
    register()

and then use
row.operator("view3d.snap_to_center", text="Origin")

to achieve the desired result.

NOTE: This is just an example on how to create your own operator. In this case you'll actually just want to use bpy.ops.object.location_clear, as such:
row.operator("object.location_clear", text="Origin")

Downvoter, please explain?

Function row.operator() only accepts operators, the full name of which are prefixed with bpy.ops., as in bpy.ops.transform.resize for the 1st row. The 2nd row fails because it's not an operator.
The mechanism for passing arguments to an operator is by using the OperatorProperties object returned by operator(). So, the 3rd row could be rewritten like this:
row = layout.row()
prop = row.operator("transform.translate", text="Orgin")
prop.value = (1, 0, 0)

Note that your original value argument of (0, 0, 0) wouldn't move the object anywhere, as if it fails to execute. The value I use above will move it 1 unit across X axis.

but that wouldn't move it to the origin; the only way to really do it like this would be to set prop.value to some tricky lambda that overrides __getitem__ to check bpy.context.active_object.location[0] * -1 or similar.

Whoops, didn't realize that bit about moving to origin. In that case, object.location_clear() might be more appropriate.

ah, indeed! Didn't know that existed.

You can also use row.operator('transform.translate', text='Origin').value=(1, 0, 0) instead of putting the value assignment on two lines

Sometimes it is convenient to use the bpy.ops.wm.context_* operators to change context properties, as you don't need to create your own operator to wrap single-liners.
# Operator call
bpy.ops.wm.context_set_value(data_path="object.location", value="(1,2,3)")

# Add to layout
props = row.operator("wm.context_set_value", text="Orgin")
props.data_path = "object.location"
props.value = "(0,0,0)"

# data_path can be any member of bpy.context
# If it's not available, the operator will PASS_THROUGH


text:
Blender cycles with alpha texture and glass shader
I'm trying to set a nice material for the leaves.
This is my node setup:

And this is the problem (just 10 samples):

Leaves are simply planes generated by sapling plugin, and the texture is a leaf with alpha channel.
On top you can see green dots around the invisible plane.
Any suggestions?
Blender 2.69

First I'd try swapping the glass node for a translucent. The other thing I would try is to put the transparent mix before the diffuse/glass mix.

It appears that this is caused by the alpha mask not being completely transparent, which results in the Alpha channel being a mix of white and dark grey instead of black. This will result in a mix of a lot of transparent shader and a tiny amount of glass/diffuse, giving the green haze.
As a quick workaround you can add a Math node set to .5 with Greater than as the operation.
This sets all pixels above .5 (gray) to 1 (white) and all those below .5 to 0 (black).
Add this to the alpha channel before the mix node (click for full size):

Without the math node:

With the math node:

I love the effects and I have different uses for your nodes. Thank you very much.


text:
Moving user perspective in Blender with Python
How can I move the user perspective in Blender with Python? I did some research, but I wasn't able, to find anything.
For clarification: I want to move the user camera in the 3D view. I want to achieve the same effect as the user pressing his middle mouse button and moving the mouse.

Are you asking how to zoom the camera when looking through it?

@iKlsR I want do the same, as if i would move around with my mouse. So, not only zooming...

You could try bpy.ops.view3d.move and rotate

@gandalf3 bpy.ops.view3d.move is not intended to be used from python.

You can use bpy.ops.view3d.view_pan() to do the same as Ctrl+Numpad #, e.g.:
for area in bpy.context.screen.areas:
    if area.type == 'VIEW_3D':
        override = {'area': area, 'region': area.regions[-1]}
        bpy.ops.view3d.view_pan(override, type='PANRIGHT')

The amount of the panning can't be controlled.
If you manipulate the view_matrix (or view_location etc.) directly, there's a lot more control. But you will have to calculate the proper matrices and vectors, and if something went wrong, you may end up with strange view or navigation reaction:
r3d = C.screen.areas[2].spaces[0].region_3d # region_3d of 3D View
r3d.view_matrix.col[3][1:4] # translation part of the view matrix

Have a look at the FPS Fly addon to see what can be done and how:
http://www.ewocprojects.be/fpsfly.html
AFAIK viewport navigation is a bit weird after use, as the addon might manipulate the wrong property to fly around. The C-implementation will be different.

See View Navigation: Walk and Fly modes. Soon. :)


text:
Simulate Individual Face Extrusion Via User Input In Python
When you do an alt+e and select individual faces for extrusion in the Blender GUI, you can then either move your mouse around to move the extrusion up or down a path defined by the orientation of the normal of the source face.
Alternatively, I can hit alt+e, select individual faces and then on the number pad proceed to type in the exact value by which I would like the face to be extruded down this path, pressing RETURN to apply the transformation. I can then tap "s" and type a value by which I would like to scale the extruded face by a value I can type in, then again press RETURN to apply the transformation.
Now being a total blender python API/python noob, I'm wondering how I can accomplish this same result purely in python. I've already got a script that will iterate over all objects in my scene, select the face I would like extruded.... but now I need to know how I can extrude that individual face along the path of the normal (just like it would in the GUI) and of course scale it after, just as described above. Any help pointing me in the right direction would be greatly appreciated.

Related: http://blender.stackexchange.com/q/4983/599

Thanks @gandalf3 I'll read over that again. When I first saw it I just assumed it wouldn't apply since he's using bmesh... which I have no idea what that even is. Perhaps it's my own noobness that made me believe it's not helpful to my cause. I'll review again and post back, happy to delete/close if I'm made a duplicate. :)

bmesh is blenders mesh editing api, from python it gives you access to the mesh editing features used by the standard editing tools. TIP: The strip along the top of the blender window (with the logo and vertex count) is an info window, usually only the header is visible but if you expand it you will see a log of actions. When you perform the extrude you will see the python used to perform that step in this window. You can select and copy entries from there.

@sambler thanks for the nfo! I did notice this window when I was using the scripting layout but didn't realize it would trace things in other layouts as well. Thanks for the explanation about bmesh. :)

@samblet. I know this is old but is this still a thing? Cant seem to find it in Blender V3+

The referenced question and answer(s) didn't actually apply because I didn't want or need bmesh and a massive script just to do this. I found a 1 liner that does exactly what I wanted.
bpy.ops.mesh.extrude_faces_move(
    MESH_OT_extrude_faces_indiv={"mirror":True},
    TRANSFORM_OT_shrink_fatten={"value":-0.9,
    "mirror":False,
    "proportional":'DISABLED',
    "proportional_edit_falloff":'SMOOTH',
    "proportional_size":1,
    "snap":False,
    "snap_target":'CLOSEST',
    "snap_point":(0, 0, 0),
    "snap_align":False,
    "snap_normal":(0, 0, 0),
    "release_confirm":False})

bpy.ops.mesh.extrude_faces_move(MESH_OT_extrude_faces_indiv={"mirror":True}, TRANSFORM_OT_shrink_fatten={"value":-0.9, "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "release_confirm":False})

TRANSFORM_OT_shrink_fatten={"value":-0.9... is where you would set the value of the extrusion (-0.9 in this case).

As an followup, I would recommend recalculating normals after this operation.