Lephisto/utils/render/spriteRender.py

202 lines
4.7 KiB
Python
Executable File

#!/usr/bin/blender
"""
Name: 'Lephisto Sprite Renderer'
Blender: '242'
Group: 'Export'
Tip: 'Renders images and places them in a directory'
"""
#
# Lephisto Sprite Renderer
#
# NOTE: You must set the context.renderPath variable on line 122 to your chosen directory.
#
###########################
# importing modules
###########################
import Blender
import math
from math import *
from Blender.BGL import *
from Blender.Draw import *
from Blender import Scene
from Blender import Object
from Blender import Lamp
from Blender import Camera
from Blender import NMesh
from Blender import Types
from Blender.Scene import Render
###########################
# random initialization
###########################
objList = Blender.Object.Get()
print objList
fileName = Blender.Get('filename')
scn = Blender.Scene.GetCurrent()
context = scn.getRenderingContext()
Render.EnableDispWin()
context.extensions = True
context.imageType = Render.PNG
context.enableOversampling(0)
osaafter = 1
ypos=5
sliderLight = Create(0)
###########################
# GUI
###########################
def draw() :
global Button3, Button2, Button1
global sliderWidth, sliderLight, sliderSpriteSize, sliderObjectSize
global ypos
glClearColor(0.753, 0.753, 0.753, 0.0)
Blender.BGL.glClear(Blender.BGL.GL_COLOR_BUFFER_BIT)
glColor3f(0.000, 0.000, 0.000)
glRasterPos2i(10, ypos)
Button('Exit', 1, 10, ypos, 50, 15, 'Exit script')
ypos = ypos + 20
Button('Render', 2, 10, ypos, 50, 15, 'Render the ship with current settings')
ypos = ypos + 20
Button('Test', 3, 10, ypos, 50, 15, 'Test your settings')
ypos = ypos + 20
Button('Initialize', 4, 10, ypos, 50, 15, 'Initialize the camera and lights')
ypos = ypos + 40
sliderWidth = 300
sliderLight = Slider('Light Intensity ', 5, 10, ypos, sliderWidth, 25, sliderLight.val, 0, 10, .1, 'Light Itensity')
ypos = ypos + 40
glColor3f(0.000, 0.000, 0.000)
glRasterPos2i(10, ypos)
Text('3: Finally push the "Render" button to render your frames.')
ypos = ypos + 20
glRasterPos2i(10, ypos)
Text('2: Hit the "Test" button to see if your lighting is good.')
ypos = ypos + 20
glRasterPos2i(10, ypos)
Text('1: Put in your settings and hit the "initialization" button.')
ypos = ypos + 20
glRasterPos2i(10, ypos)
Text('Usage:')
ypos = ypos + 20
glRasterPos2i(10, ypos)
Text('Created for Lephisto: http://saracraft.net')
ypos = ypos + 20
glRasterPos2i(10, ypos)
Text('Lephisto Sprite Renderer')
def event(evt, val) :
if (evt == QKEY and not val) :
Exit()
def bevent(evt) :
if evt == 1 :
Exit()
elif evt == 2 :
render()
elif evt == 3 :
test()
elif evt == 4 :
initialize()
Blender.Draw.Register(draw,event,bevent)
###########################
# Variables that should be
# put into gui but will
# remain in the script for now
###########################
spriteSize = 500
context.renderPath = "/home/allanis/Code/Lephisto/utils/mksprite/"
def initialize() :
####################
# Orienting the object(s)
# in the correct position
####################
for obj in objList :
if obj.getType() == 'Mesh' :
obj.RotZ = 0
obj.RotY = 0
# obj.RotX = 45
##########################
# Onitializing the camera
##########################
cam = Blender.Object.Get("Camera")
cam.LocZ = 9.0
cam.LocX = -5.0
cam.LocY = 0
cam.RotY = 0
cam.RotX = 0
cam.RotZ = 0
cam.RotZ = -(pi / 2)
cam.RotX = (pi / 7)
###########################
# Setting up the lighting, bitches!
###########################
for obj in objList :
if obj.getType() == 'Lamp' :
scn.unlink(obj)
lamp = Blender.Lamp.New()
Lamp1 = Blender.Object.New('Lamp', 'Lamp1')
Lamp2 = Blender.Object.New('Lamp', 'Lamp2')
Lamp1.LocZ = 4.0
Lamp1.LocX = 4.0
Lamp1.LocY = 0
Lamp2.LocZ = 2.0
Lamp2.LocX = -4.0
Lamp2.LocY = 0
Lamp1.link(lamp)
Lamp2.link(lamp)
lamp.setEnergy(sliderLight.val)
scn.link (Lamp1)
scn.link (Lamp2)
def test() :
context.imageSizeX(spriteSize)
context.imageSizeY(spriteSize)
context.render()
def render() :
###########################
# Rendering the first frame
###########################
origSX = context.imageSizeX()
origSY = context.imageSizeY()
context.imageSizeX(spriteSize)
context.imageSizeY(spriteSize)
spriteName = '001'
context.render()
context.saveRenderedImage(spriteName)
Render.CloseRenderWindow()
###########################
# Rendering the rest of the frames
###########################
for i in range(1,35+1) :
n = str(i + 1)
for obj in objList :
if obj.getType() == 'Mesh' :
obj.RotZ = ((pi * 2) / 36) * i
spriteName = n.zfill(3)
context.render()
context.saveRenderedImage(spriteName)
Render.CloseRenderWindow()
###########################
# Returning settings to normal
###########################
context.imageSizeX(origSX)
context.imageSizeY(origSY)
context.enableOversampling(osaafter)