summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorRealBadAngel <mk@realbadangel.pl>2013-07-04 02:36:32 +0200
committerRealBadAngel <mk@realbadangel.pl>2013-07-04 02:36:32 +0200
commit3f6f327cb97662eb95e20f62650abcfac6bce3ab (patch)
tree1bbe3777195dd64344ecffcf6d8e569939a59041 /util
parentb850f0f03829cbb024d22672de0af29cab001d86 (diff)
downloadminetest-3f6f327cb97662eb95e20f62650abcfac6bce3ab.tar.gz
minetest-3f6f327cb97662eb95e20f62650abcfac6bce3ab.tar.bz2
minetest-3f6f327cb97662eb95e20f62650abcfac6bce3ab.zip
Add texture bumpmapping feature.
Diffstat (limited to 'util')
-rwxr-xr-xutil/generate-texture-normals.sh255
1 files changed, 255 insertions, 0 deletions
diff --git a/util/generate-texture-normals.sh b/util/generate-texture-normals.sh
new file mode 100755
index 000000000..6279dfa69
--- /dev/null
+++ b/util/generate-texture-normals.sh
@@ -0,0 +1,255 @@
+#!/bin/bash
+
+# This script generates normalmaps using The GIMP to do the heavy lifting.
+# give any unrecognized switch (say, -h) for usage info.
+
+rm /tmp/normals_filelist.txt
+
+numprocs=6
+
+skiptools=false
+skipinventory=false
+invresolution=64
+dryrun=false
+pattern="*.png *.jpg"
+
+filter=0
+scale=8
+wrap=0
+heightsource=0
+conversion=0
+invertx=0
+inverty=0
+
+while test -n "$1"; do
+ case "$1" in
+ --scale|-s)
+ if [ -z "$2" ] ; then echo "Missing scale parameter"; exit 1; fi
+ scale=$2
+ shift
+ shift
+ ;;
+ --pattern|-p)
+ if [ -z "$2" ] ; then echo "Missing pattern parameter"; exit 1; fi
+ pattern=$2
+ shift
+ shift
+ ;;
+ --skiptools|-t)
+ skiptools=true
+ shift
+ ;;
+ --skipinventory|-i)
+ if [[ $2 =~ ^[0-9]+$ ]]; then
+ invresolution=$2
+ shift
+ fi
+ skipinventory=true
+ shift
+ ;;
+ --filter|-f)
+ if [ -z "$2" ] ; then echo "Missing filter parameter"; exit 1; fi
+
+ case "$2" in
+ sobel3|1)
+ filter=1
+ ;;
+ sobel5|2)
+ filter=2
+ ;;
+ prewitt3|3)
+ filter=3
+ ;;
+ prewitt5|4)
+ filter=4
+ ;;
+ 3x3|5)
+ filter=5
+ ;;
+ 5x5|6)
+ filter=6
+ ;;
+ 7x7|7)
+ filter=7
+ ;;
+ 9x9|8)
+ filter=8
+ ;;
+ *)
+ filter=0
+ ;;
+ esac
+
+ shift
+ shift
+ ;;
+ --heightalpha|-a)
+ heightsource=1
+ shift
+ ;;
+ --conversion|-c)
+ if [ -z "$2" ] ; then echo "Missing conversion parameter"; exit 1; fi
+
+ case "$2" in
+ biased|1)
+ conversion=1
+ ;;
+ red|2)
+ conversion=2
+ ;;
+ green|3)
+ conversion=3
+ ;;
+ blue|4)
+ conversion=4
+ ;;
+ maxrgb|5)
+ conversion=5
+ ;;
+ minrgb|6)
+ conversion=6
+ ;;
+ colorspace|7)
+ conversion=7
+ ;;
+ normalize-only|8)
+ conversion=8
+ ;;
+ heightmap|9)
+ conversion=9
+ ;;
+ *)
+ conversion=0
+ ;;
+ esac
+
+ shift
+ shift
+ ;;
+ --wrap|-w)
+ wrap=1
+ shift
+ ;;
+ --invertx|-x)
+ invertx=1
+ shift
+ ;;
+ --inverty|-y)
+ inverty=1
+ shift
+ ;;
+ --dryrun|-d)
+ dryrun=true
+ shift
+ ;;
+ *)
+ echo -e "\nUsage:\n"
+ echo "`basename $0` [--scale|-s <value>] [--filter|-f <string>]"
+ echo " [--wrap|-w] [--heightalpha|-a] [--invertx|-x] [--inverty|-y]"
+ echo " [--conversion|-c <string>] [--skiptools|-t] [--skipinventory|-i [<value>]]"
+ echo " [--dryrun|-d] [--pattern|-p <pattern>]"
+ echo -e "\nDefaults to a scale of 8, checking all files in the current directory, and not"
+ echo "skipping apparent tools or inventory images. Filter, if specified, may be one"
+ echo "of: sobel3, sobel5, prewitt3, prewitt5, 3x3, 5x5, 7x7, or 9x9, or a value 1"
+ echo "through 8 (1=sobel3, 2=sobel5, etc.). Defaults to 0 (four-sample). The height"
+ echo "source is taken from the image's alpha channel if heightalpha is specified.\n"
+ echo ""
+ echo "If inventory skip is specified, an optional resolution may also be included"
+ echo "(default is 64). Conversion can be one of: biased, red, green, blue, maxrgb,"
+ echo "minrgb, colorspace, normalize-only, heightmap or a value from 1 to 9"
+ echo "corresponding respectively to those keywords. Defaults to 0 (simple"
+ echo "normalize) if not specified. Wrap, if specified, enables wrapping of the"
+ echo "normalmap around the edges of the texture (defaults to no). Invert X/Y"
+ echo "reverses the calculated gradients for the X and/or Y dimensions represented"
+ echo "by the normalmap (both default to non-inverted)."
+ echo ""
+ echo "The pattern, can be an escaped pattern string such as \*apple\* or"
+ echo "default_\*.png or similar (defaults to all PNG and JPG images in the current"
+ echo "directory that do not contain \"_normal\" or \"_specular\" in their filenames)."
+ echo ""
+ echo "If set for dry-run, the actions this script will take will be printed, but no"
+ echo "images will be generated. Passing an invalid value to a switch will generally"
+ echo "cause that switch to revert to its default value."
+ echo ""
+ exit 1
+ ;;
+ esac
+done
+
+echo -e "\nProcessing files based on pattern \"$pattern\" ..."
+
+normalMap()
+{
+ out=`echo "$1" | sed 's/.png/_normal.png/' | sed 's/.jpg/_normal.png/'`
+
+ echo "Launched process to generate normalmap: \"$1\" --> \"$out\"" >&2
+
+ gimp -i -b "
+ (define
+ (normalMap-fbx-conversion fileName newFileName filter nscale wrap heightsource conversion invertx inverty)
+ (let*
+ (
+ (image (car (gimp-file-load RUN-NONINTERACTIVE fileName fileName)))
+ (drawable (car (gimp-image-get-active-layer image)))
+ (drawable (car (gimp-image-flatten image)))
+ )
+ (if (> (car (gimp-drawable-type drawable)) 1)
+ (gimp-convert-rgb image) ()
+ )
+
+ (plug-in-normalmap
+ RUN-NONINTERACTIVE
+ image
+ drawable
+ filter
+ 0.0
+ nscale
+ wrap
+ heightsource
+ 0
+ conversion
+ 0
+ invertx
+ inverty
+ 0
+ 0.0
+ drawable)
+ (gimp-file-save RUN-NONINTERACTIVE image drawable newFileName newFileName)
+ (gimp-image-delete image)
+ )
+ )
+ (normalMap-fbx-conversion \"$1\" \"$out\" $2 $3 $4 $5 $6 $7 $8)" -b '(gimp-quit 0)'
+}
+
+export -f normalMap
+
+for file in `ls $pattern |grep -v "_normal.png"|grep -v "_specular"` ; do
+
+ invtest=`file "$file" |grep "$invresolution x $invresolution"`
+ if $skipinventory && [ -n "$invtest" ] ; then
+ echo "Skipped presumed "$invresolution"px inventory image: $file" >&2
+ continue
+ fi
+
+ tooltest=`echo "$file" \
+ | grep -v "_tool" \
+ | grep -v "_shovel" \
+ | grep -v "_pick" \
+ | grep -v "_axe" \
+ | grep -v "_sword" \
+ | grep -v "_hoe" \
+ | grep -v "bucket_"`
+
+ if $skiptools && [ -z "$tooltest" ] ; then
+ echo "Skipped presumed tool image: $file" >&2
+ continue
+ fi
+
+ if $dryrun ; then
+ echo "Would have generated a normalmap for $file" >&2
+ continue
+ else
+ echo \"$file\" $filter $scale $wrap $heightsource $conversion $invertx $inverty
+ fi
+done | xargs -P $numprocs -n 8 -I{} bash -c normalMap\ \{\}\ \{\}\ \{\}\ \{\}\ \{\}\ \{\}\ \{\}\ \{\}
+