(10) The effect of sub-pixeling

GMT animations all start with designing plots that are created using the PostScript language. It is therefore vector graphics with no limitations imposed by pixel resolutions. However, to make an animation we must render these PostScript plots into raster images (we use PNG) and a pixel resolution enters. Unlike printed media (laserwriters), the dots-per-unit in an animation is much lower, and compromizes are made when vector graphics must be turned into pixels. GMT’s movie module (and psconvert for still images) offers the option of sub-pixeling. It means the image is temporarily enlarged to have more pixels than requested, then shrunk back down. These steps tend to make the lower-resolution images better than the raw rendering. Here we show the effect of different sub-pixel settings - notice how the movies with little or no sub-pixeling “jitters” as time goes by. The resulting movie was presented at the Fall 2019 AGU meeting in an eLighting talk: P. Wessel, 2019, GMT science animations for the masses, Abstract IN21B-11. The finished movie is available in our YouTube channel as well: https://youtu.be/FLzYVo7wXAg The movie took ~2 minutes to render on a 24-core MacPro 2013. Demonstrate the effect of sub-pixeling

#!/usr/bin/env bash
#
# GMT animations all start with designing plots that are created using the
# PostScript language.  It is therefore vector graphics with no limitations
# imposed by pixel resolutions.  However, to make an animation we must render
# these PostScript plots into raster images (we use PNG) and a pixel resolution
# enters.  Unlike printed media (laserwriters), the dots-per-unit in an animation
# is much lower, and compromizes are made when vector graphics must be turned
# into pixels.  GMT's movie module (and psconvert for still images) offers the
# option of sub-pixeling.  It means the image is temporarily enlarged to have
# more pixels than requested, then shrunk back down.  These steps tend to make
# the lower-resolution images better than the raw rendering.  Here we show
# the effect of different sub-pixel settings - notice how the movies with
# little or no sub-pixeling "jitters" as time goes by.
# The resulting movie was presented at the Fall 2019 AGU meeting in an eLighting talk:
# P. Wessel, 2019, GMT science animations for the masses, Abstract IN21B-11.
# The finished movie is available in our YouTube channel as well:
# https://youtu.be/FLzYVo7wXAg
# The movie took ~2 minutes to render on a 24-core MacPro 2013.
# Demonstrate the effect of sub-pixeling
# 1. Create the angle file
cat << 'EOF' > pre.sh
gmt begin
	gmt math -T0/30/0.05 T 15 ADD = angles.txt
gmt end
EOF
# 2. Set up the main frame script
cat << 'EOF' > main.sh
gmt begin
	echo "BELL" | gmt text -R-26/-12/63/67 -JM6i -F+f144p+cCM -Bafg \
		-X2i -Y1.25i -p${MOVIE_COL0}/${MOVIE_COL1}+w20W/65N+v3i/1.5i
	echo -15 65 100 | gmt plot -SE- -Gred -p
	echo -25 66.5 -20 66.5  | gmt plot -SV0.5i+s+e+h0.5 -Gblue -W3p -p
gmt end
EOF
# 3. Run the movie without and with scale
gmt movie main.sh -C540p -Njitter_H0 -Tangles.txt -Sbpre.sh -D24 -Fmp4 -G+p2p -Z -W -Lc0+jTL+t%05.1f+o1c -Ls"0 sub-pixels"+jBR+o1c
for H in 2 4 8; do
	gmt movie main.sh -C540p -Njitter_H${H} -Tangles.txt -Sbpre.sh -D24 -Fmp4 -G+p2p -H${H} -Z -W -Lc0+jTL+t%05.1f+o1c -Ls"${H} sub-pixels"+jBR+o1c
done
# 4. Assemble the four movie frames into a 2x2 HD layout via ffmpeg
ffmpeg -loglevel warning -i jitter_H0.mp4 -i jitter_H2.mp4 -filter_complex hstack=inputs=2 top.mp4
ffmpeg -loglevel warning -i jitter_H4.mp4 -i jitter_H8.mp4 -filter_complex hstack=inputs=2 bot.mp4
ffmpeg -loglevel warning -i top.mp4 -i bot.mp4 -filter_complex vstack=inputs=2 anim10.mp4
rm -f top.mp4 bot.mp4 jitter_H?.mp4 main.sh pre.sh angles.txt