Nicholas86 opened this issue on Jan 12, 2005 ยท 6 posts
Nicholas86 posted Wed, 12 January 2005 at 9:38 AM
Attached Link: http://www.elysiun.com/forum/viewtopic.php?t=30101&highlight=render
A nice script if you want to read more about it. The attached link goes to some images. Pretty slick I think. And shows the power of scripting. Definetly think every program should have scripting capabilities. by shteeve from Elysiun: new to version 0.2: -restructured the way vertex data is managed... should give a large speed improvement -now operates on the currently selected mesh so you don't have to change any code (although it'll crash if you've got nothing selected) -provided a simple gui Blender import * import math scale = 0.01 falloff = 0.5 object = Object.GetSelected() mesh = object[0].getData() faces = mesh.faces vList = mesh.verts vInf = range(len(vList)) def event(evt, val): if evt == Draw.ESCKEY: Draw.Exit() return def button_event(evt): global scale, falloff if evt == 1: scale = B1.val elif evt == 2: falloff = B2.val elif evt == 3: time1 = sys.time() print "Gathering mesh data..." for faceNum in range(len(faces)): face = faces[faceNum] verts = face.v cols = face.col for vertNum in range(len(verts)): vert = verts[vertNum] col = cols[vertNum] for v in range(len(vList)): if vert.co[0] == vList[v].co[0] and vert.co[1] == vList[v].co[1] and vert.co[2] == vList[v].co[2]: if vInf[v] == v: vInf[v] = [[faceNum, vertNum]], col else: vInf[v][0].append([faceNum, vertNum]) if vInf[v][1].r < col.r: vInf[v][1].r = col.r if vInf[v][1].g < col.g: vInf[v][1].g = col.g if vInf[v][1].b < col.b: vInf[v][1].b = col.b print "Calculating..." factor = [] for x1 in range(len(vList)): v1 = vList[x1].co factor.append([]) for x2 in range(x1 + 1, len(vList)): v2 = vList[x2].co dist = pow(pow(v1[0]-v2[0], 2) + pow(v1[1]-v2[1], 2) + pow(v1[2]-v2[2], 2), falloff) if dist > 0: factor[x1].append(scale / dist) else: factor[x1].append(0) sss = [] for x1 in range(len(vList)): c1 = vInf[x1][1] sss.append(NMesh.Col(c1.r, c1.g, c1.b, c1.a)) for x2 in range(x1): c2 = vInf[x2][1] sss[x1].r = sss[x1].r + int(factor[x2][x1 - x2 - 1] * c2.r) sss[x1].g = sss[x1].g + int(factor[x2][x1 - x2 - 1] * c2.g) sss[x1].b = sss[x1].b + int(factor[x2][x1 - x2 - 1] * c2.b) for x2 in range(x1 + 1, len(vList)): c2 = vInf[x2][1] sss[x1].r = sss[x1].r + int(factor[x1][x2 - x1 - 1] * c2.r) sss[x1].g = sss[x1].g + int(factor[x1][x2 - x1 - 1] * c2.g) sss[x1].b = sss[x1].b + int(factor[x1][x2 - x1 - 1] * c2.b) for ref in range(len(vInf[x1][0])): mesh.faces[vInf[x1][0][ref][0]].col[vInf[x1][0][ref][1]] = sss[x1] mesh.update() Redraw() time2 = sys.time() print "calculation time: ", time2 - time1 def gui(): global B1, B2, B3 BGL.glClearColor(0.7, 0.7, 0.7, 1) BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) BGL.glColor3f(0.75, 0.75, 0.75) BGL.glRecti(5, 5, 195, 55) BGL.glRecti(5, 60, 195, 115) BGL.glColor3f(0.65, 0.65, 0.65) BGL.glRecti(5, 115, 195, 135) BGL.glColor3f(1,1,1) BGL.glRasterPos2i(10, 122) Draw.Text("Effect Options") BGL.glRasterPos2i(10, 150) Draw.Text("SSS by shteeve") B1 = Draw.Number("Scale: ", 1, 10, 90, 180, 20, scale, 0.001, 1.0, "Intensity of effect (usually small numbers)") B2 = Draw.Number("Falloff: ", 2, 10, 65, 180, 20, falloff, 0.001, 1.0, "Falloff of effect") B3 = Draw.PushButton("Calculate!", 3, 10, 10, 180, 40, "Calculates effect.") Draw.Register(gui, event, button_event)