202 lines
4.7 KiB
Python
Executable File
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)
|