From 782e11918c036a79f1a539ad1b54cfd2a4478294 Mon Sep 17 00:00:00 2001 From: Allanis Date: Sun, 10 Feb 2013 20:45:29 +0000 Subject: [PATCH] [Add] Some scripts that are pissing me off beyond belief! --- utils/mkplanet/planet.scm | 125 ++++++++++++++++++++++ utils/render/spriteRender.py | 201 +++++++++++++++++++++++++++++++++++ 2 files changed, 326 insertions(+) create mode 100644 utils/mkplanet/planet.scm create mode 100755 utils/render/spriteRender.py diff --git a/utils/mkplanet/planet.scm b/utils/mkplanet/planet.scm new file mode 100644 index 0000000..fd59796 --- /dev/null +++ b/utils/mkplanet/planet.scm @@ -0,0 +1,125 @@ +; lephisto-planet.creator.scm +; Creates a planet. +; +; The script will create its own menu in the toolbox. + +(define (lephisto-planet-creator planetSize planetColor sunAngle sunTilt glowSize) + + (let* + + ( + ; 1/10th of the planet size + (tenth (/ planetSize 10) ) + + ; Image size 10% bigger than the planet + (imgSize (+ planetSize (* tenth 2)) ) + + ; Getting the inverse of the glowSize so it makes more sense to the user + (glowSizeInv (/ 1 glowSize)) + + (theImage (car (gimp-image-new imgSize imgSize RGB) )) + (layerbase (car (gimp-layer-new theImage imgSize imgSize 0 "planet base" 100 NORMAL) ) ) + (layeratmosph (car (gimp-layer-new theImage imgSize imgSize 0 "planet atmosphere" 100 NORMAL) ) ) + (layershadow (car (gimp-layer-new theImage imgSize imgSize 0 "planet shadow" 100 NORMAL) ) ) + (layerglow (car (gimp-layer-new theImage imgSize imgSize 0 "planet glow" 100 NORMAL) ) ) + (angleRad (/ (* sunAngle *pi*) 180)) + (transX (* (sin angleRad) -1)) + (transY (cos angleRad)) + ) + + (gimp-context-push) + (gimp-image-undo-disable theImage) + + (gimp-layer-add-alpha layerbase ) + (gimp-layer-add-alpha layeratmosph ) + (gimp-layer-add-alpha layershadow ) + (gimp-layer-add-alpha layerglow ) + + (gimp-image-add-layer theImage layerglow 0) + (gimp-image-add-layer theImage layerbase 0) + (gimp-image-add-layer theImage layeratmosph 0) + (gimp-image-add-layer theImage layershadow 0) + + (gimp-selection-all theImage) + (gimp-edit-clear layerbase) + (gimp-edit-clear layeratmosph) + (gimp-edit-clear layershadow) + (gimp-edit-clear layerglow) + (gimp-selection-none theImage) + + + (gimp-ellipse-select theImage tenth tenth planetSize planetSize 2 0 0 0 ) + (gimp-context-set-foreground planetColor) + + ; Fill selection with the planet color + (gimp-edit-bucket-fill layerbase 0 0 100 0 FALSE 0 0 ) + (gimp-edit-bucket-fill layeratmosph 0 0 100 0 FALSE 0 0 ) + + ; Shrink and blur for the shadow + (gimp-selection-feather theImage (* 1.5 tenth) ) + (gimp-context-set-background '(0 0 0) ) + (gimp-edit-bucket-fill layershadow 1 0 100 0 FALSE 0 0 );; + + ; Add the light around the planet for the atmosphere + (gimp-selection-layer-alpha layeratmosph) + (gimp-selection-shrink theImage tenth) + (gimp-selection-feather theImage (* 2 tenth)) + (gimp-layer-set-preserve-trans layeratmosph 1) + (gimp-selection-invert theImage) + (gimp-context-set-background '(255 255 255) ) + (gimp-edit-bucket-fill layeratmosph 1 5 90 0 FALSE 0 0 ) + (gimp-selection-invert theImage) + (gimp-context-set-foreground '(0 0 0) ) + (gimp-edit-bucket-fill layeratmosph 0 0 100 0 FALSE 0 0 ) + (gimp-selection-layer-alpha layeratmosph) + (gimp-selection-shrink theImage (/ tenth 3)) + (gimp-selection-feather theImage tenth) + (gimp-selection-invert theImage) + (gimp-edit-bucket-fill layeratmosph 1 0 85 0 FALSE 0 0 ) + (gimp-layer-set-mode layeratmosph 4) + + ; Move,resize the shadow layer + (gimp-layer-scale layershadow (* (+ 1.5 (/ sunTilt 10)) imgSize) (* (+ 1.5 (/ sunTilt 10)) imgSize) 1 ) + (gimp-layer-translate layershadow (* (* transX tenth) (+ 3 sunTilt) ) (* (* transY tenth) (+ 3 sunTilt) ) ) + + ; And now the glow... + (gimp-selection-layer-alpha layerbase) + (gimp-selection-grow theImage (/ tenth glowSizeInv)) + (gimp-selection-feather theImage tenth) + (gimp-context-set-background planetColor ) + (gimp-edit-bucket-fill layerglow 1 0 100 0 FALSE 0 0 ) + (gimp-edit-bucket-fill layerglow 1 7 100 0 FALSE 0 0 ) + (gimp-edit-bucket-fill layerglow 1 7 100 0 FALSE 0 0 ) + + ; Mask a part of the glow + (set! glowmask (car (gimp-layer-create-mask layerglow 0))) + (gimp-image-add-layer-mask theImage layerglow glowmask) + (gimp-selection-layer-alpha layershadow) + (gimp-edit-bucket-fill glowmask 0 0 100 0 FALSE 0 0 ) + (gimp-selection-all theImage) + (gimp-fuzzy-select layerbase (/ imgSize 2) (/ imgSize 2) 15 1 1 0 0 0) + (gimp-edit-cut layershadow) + (gimp-layer-resize-to-image-size layershadow) + + (gimp-image-clean-all theImage) + (gimp-image-undo-enable theImage) + (gimp-display-new theImage) + (gimp-context-pop) + ) +) + +(script-fu-register "lephisto-planet-creator" + _"Lephisto Planet Creator" + "Creates a planet. (For use in Lephisto)" + "http://saracraft.net" + "10/02/2013" + "" + SF-ADJUSTMENT "Planet Size (pixels)" '(80 40 2000 1 10 0 1) + SF-COLOR "Planet Color" '(10 70 100) + SF-ADJUSTMENT _"Sun Orientation (degrees) " '(0 0 360 1 10 1 0) + SF-ADJUSTMENT _"Sun Tilt " '(1 0 25 1 10 1 0) + SF-ADJUSTMENT _"Glow Size" '(.25 .1 .6667 1 2 1 0) + ) +(script-fu-menu-register "script-fu-lephisto-planet-render2" + _"/Lephiso/") + diff --git a/utils/render/spriteRender.py b/utils/render/spriteRender.py new file mode 100755 index 0000000..251e13b --- /dev/null +++ b/utils/render/spriteRender.py @@ -0,0 +1,201 @@ +#!/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)