Lephisto/utils/mkplanet/planet.scm

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/")