126 lines
4.8 KiB
Scheme
126 lines
4.8 KiB
Scheme
; 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"
|
|
_"<Toolbox>/Lephiso/")
|
|
|