tiistai 21. joulukuuta 2010
Using threads in Blender game engine
I just made an experiment of using threads in Blender's game engine. Even though using threads in Python does not necessarily make code any faster (see GIL), in this case using thread(s) has a really big difference.
AFAIK, rendering and execution of python scripts are running sequential in BGE. This is a bad thing if you have to make some heavy lifting in the script. Whole game engine have to wait until the job is done ruining your FPS. By using threads, the heavy lifting can be done parallel (or at least semiparallel) to main rendering loop.
The script can be found from Blenderartists.
maanantai 20. joulukuuta 2010
Towards Blender 2.55
I had a little break from Blender but now its time to go back and see what devs have been doing. I just converted my old pyramidaze script for 2.55. It is REALLY simple but it was my first python script back in 2006 :)
It just iterates through selected faces of the object and adds a pyramid top of them (see image above).
Here is 2.55 version:
#********************************************************************************************** #pyramidaze.py # - This script adds a "pyramid" over every selected face # # - Open this file in the Blender's text window # - Select faces # - set settings (see below) # - run script (Alt + P) # # there is nothing special in this script but it shows how to iterate # through all faces in selected object, how to get normal and how to create new mesh object. # # Feel free to use this script any way you like, I'm sure this is very useful ;) # #Ari Hayrinen 29.11.2006 # updated for Blender 2.55 20.12.2010 #www.opendimension.org/blender_en # # TODO: # - GUI # #************************************************************************************************* import bpy import mathutils #************************************************************************************************ # settings #************************************************************************************************ py_height = 1 # pyramid height if use_area is 0, negative value inverts pyramid use_area = 1 # if 1, uses face area as pyramid height area_multi = 1 # multiplier for face area, negative values inverts pyramid #******************************************************************************** #main #********************************************************************************* objekti = bpy.context.active_object scene = bpy.context.scene # list for new faces coords = [] faces = [] # counter so we know where to add new faces verts = 0 vertices = objekti.data.vertices # let's go through all faces in selected object for face in objekti.data.faces: #use only selected faces if face.select: center = face.center #number of vertices vco = len(face.vertices) if use_area: py_height = face.area * area_multi #multiple normal with pyramid height and add result to the center of the face center.x = center.x + face.normal[0] * py_height center.y = center.y + face.normal[1] * py_height center.z = center.z + face.normal[2] * py_height #create vertices coords.append([center.x,center.y,center.z]) verts +=1 for i in range(vco): coords.append(vertices[face.vertices[i]].co) verts +=1 #create triangles cco = vco + 1 # number of created vertices for j in range(vco): if j < (vco-1): faces.append([verts-cco, verts-(cco-(j+1)), verts-(vco-j-1)]) else: faces.append([verts-cco, verts-(cco-(j+1)), verts-(cco-1)]) # Create new mesh block and add faces to it mesh = bpy.data.meshes.new('myMesh') mesh.from_pydata(coords,"",faces) mesh.update() new_obj = bpy.data.objects.new("koe", mesh) scene.objects.link(new_obj) new_obj.location = objekti.location
Tilaa:
Blogitekstit (Atom)