From 2fd9d2b40bb07892b7228eca4f7e84fc8513633a Mon Sep 17 00:00:00 2001 From: jbienzss Date: Fri, 31 Oct 2025 00:25:43 -0500 Subject: [PATCH 1/3] Added ability to generate cross and strrip cubemaps for Unity and other engines. --- README.md | 21 +++++++++++++++--- mattersky2equi.sh | 20 ------------------ matterskyconv.sh | 54 +++++++++++++++++++++++++++++++++++++++++++++++ sky2cross.sh | 35 ++++++++++++++++++++++++++++++ sky2strip.sh | 33 +++++++++++++++++++++++++++++ 5 files changed, 140 insertions(+), 23 deletions(-) delete mode 100644 mattersky2equi.sh create mode 100644 matterskyconv.sh create mode 100644 sky2cross.sh create mode 100644 sky2strip.sh diff --git a/README.md b/README.md index c4bd5f9..c4137d4 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,26 @@ script to map 6 skybox cubemap faces into an equirectangular projection with ffmpeg v360 filter. This script adds automatically exif tags of 360 equirectangular pano view, this allows to view the pano in viewers like Ricoh Theta https://play.google.com/store/apps/details?id=com.theta360&hl=en&gl=US +this script is also able to convert a skybox into a cubemap in cross or strip layout, compatible with Unity and other engines. + the default size of equirectangular image result is 4 * (cube face width) width. height of equirectangular image is the half of width. `sky2equi.sh` is the main tool +`sky2cross.sh` and `sky2strip.sh` are also available `mattersky2equi.sh` is a tool to simplify the conversion for matterport skybox downloaded with https://github.com/fdd4s/matterport-downloader e.g: to convert all skybox downloaded to a equirectangular: - $ ls -1 pan*skybox1*jpg | awk ' { print "\"" $0 "\""; } ' | xargs -n 1 ./mattersky2equi.sh + $ ls -1 pan*skybox1*jpg | awk ' { print "\"" $0 "\" equi"; } ' | xargs -n 2 ./matterskyconv.sh + +to convert all skybox downloaded to a cross cubemap: + +ls -1 pan*skybox1*jpg | awk ' { print "\"" $0 "\" cross"; } ' | xargs -n 2 ./matterskyconv.sh + +to convert all skybox downloaded to a strip cubemap: + +ls -1 pan*skybox1*jpg | awk ' { print "\"" $0 "\" strip"; } ' | xargs -n 2 ./matterskyconv.sh (both sh scripts and skyboxs must be in the same folder) @@ -26,18 +37,22 @@ this code is designed to work over linux (as /dev/shm ram tmpfs) ## Usage - $ ./sky2equi.sh [] + $ ./sky2equi.sh [] + $ ./sky2cross.sh [] + $ ./sky2strip.sh [] ## Examples $ ./sky2equi.sh f.jpg b.jpg r.jpg l.jpg t.jpg b.jpg equi.jpg $ ./sky2equi.sh f.jpg b.jpg r.jpg l.jpg t.jpg b.jpg equi.jpg 4096 + $ ./sky2cross.sh f.jpg b.jpg r.jpg l.jpg t.jpg b.jpg cross.jpg + $ ./sky2strip.sh f.jpg b.jpg r.jpg l.jpg t.jpg b.jpg strip.jpg ## Known issues "montage-im6.q16: cache resources exhausted " can be resolved changing ImageMagick configuration, more info here: https://github.com/ImageMagick/ImageMagick/issues/396 -## Viewers +## Equirectangular Viewers Android: Ricoh Theta App https://play.google.com/store/apps/details?id=com.theta360&hl=en&gl=US diff --git a/mattersky2equi.sh b/mattersky2equi.sh deleted file mode 100644 index 0e0ce07..0000000 --- a/mattersky2equi.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -if [ "$#" -lt "1" ] || [ "$#" -gt "2" ] ; then - echo "usage: ./mattersky2equi.sh []" - echo "e.g: ./mattersky2equi.sh pan-high-1-skybox0.jpg" - echo " ./mattersky2equi.sh pan-high-1-skybox0.jpg 4096" - exit 0 -fi - -name=$(echo $* | awk -F skybox ' { print $1; } ') - -echo "name is $name" - -ts0=$(date +%s) - -./sky2equi.sh "$name"skybox1.jpg "$name"skybox3.jpg "$name"skybox4.jpg "$name"skybox2.jpg "$name"skybox0.jpg "$name"skybox5.jpg "$name"equi.jpg $2 - -ts1=$(date +%s) -let "dif = $ts1 - $ts0" -echo "Time elapsed $dif seconds" diff --git a/matterskyconv.sh b/matterskyconv.sh new file mode 100644 index 0000000..7679cd9 --- /dev/null +++ b/matterskyconv.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +if [ "$#" -lt "1" ] || [ "$#" -gt "3" ] ; then + echo "usage: ./mattersky2equi.sh [] []" + echo "e.g: ./mattersky2equi.sh pan-high-1-skybox0.jpg" + echo " ./mattersky2equi.sh pan-high-1-skybox0.jpg 4096" + echo " ./mattersky2equi.sh pan-high-1-skybox0.jpg 4096 strip" + echo "formats: equi (default) | strip | cross" + exit 0 +fi + +name=$(echo $* | awk -F skybox ' { print $1; } ') + +# Parse arguments more flexibly +width="" +format="equi" # default format + +# Check if we have a second argument +if [ "$2" != "" ]; then + # If it's numeric, it's the width, otherwise it's the format + if [[ $2 =~ ^[0-9]+$ ]]; then + width=$2 + format=${3:-equi} + else + format=$2 + width=$3 + fi +fi + +echo "name is $name" +echo "format is $format" +echo "width is $width" + +ts0=$(date +%s) + +case $format in + "equi") + ./sky2equi.sh "$name"skybox1.jpg "$name"skybox3.jpg "$name"skybox4.jpg "$name"skybox2.jpg "$name"skybox0.jpg "$name"skybox5.jpg "$name"equi.jpg $width + ;; + "strip") + ./sky2strip.sh "$name"skybox1.jpg "$name"skybox3.jpg "$name"skybox4.jpg "$name"skybox2.jpg "$name"skybox0.jpg "$name"skybox5.jpg "$name"strip.jpg $width + ;; + "cross") + ./sky2cross.sh "$name"skybox1.jpg "$name"skybox3.jpg "$name"skybox4.jpg "$name"skybox2.jpg "$name"skybox0.jpg "$name"skybox5.jpg "$name"cross.jpg $width + ;; + *) + echo "Invalid format: $format. Using default (equi)" + script="./sky2equi.sh" + ;; +esac + +ts1=$(date +%s) +let "dif = $ts1 - $ts0" +echo "Time elapsed $dif seconds" diff --git a/sky2cross.sh b/sky2cross.sh new file mode 100644 index 0000000..985bde6 --- /dev/null +++ b/sky2cross.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +if [ "$#" -lt "7" ] || [ "$#" -gt "8" ] ; then + echo "usage: ./sky2equi.sh []" + echo "e.g: ./sky2equi.sh f.jpg b.jpg r.jpg l.jpg t.jpg b.jpg equi.jpg" + echo " ./sky2equi.sh f.jpg b.jpg r.jpg l.jpg t.jpg b.jpg equi.jpg 4096" + exit 0 +fi + +if [ -f "$7" ]; then + echo "$7 already exists" + exit 0 +fi + +if [ "$#" -eq "7" ] ; then + WIDTH_SRC0=$(identify "$1" | awk ' { print $3; } ' | awk -F x ' { print $1; } ') + let "WIDTH = $WIDTH_SRC0 * 4" +else + WIDTH=$8 +fi + +let "HEIGHT = $WIDTH / 2" + +if [ "$HEIGHT" -lt "100" ] || [ "$HEIGHT" -gt "100000" ] ; then + echo "size out of range" + exit 0 +fi + +convert -size $(identify -format "%wx%h" "$4") xc:none empty.png + +montage "empty.png" "$5" "empty.png" "empty.png" "$3" "$1" "$4" "$2" "empty.png" "$6" "empty.png" "empty.png" -tile 4x3 -geometry +0+0 -background none "$7" + +echo "$7 created" + + diff --git a/sky2strip.sh b/sky2strip.sh new file mode 100644 index 0000000..4d7c2ab --- /dev/null +++ b/sky2strip.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +if [ "$#" -lt "7" ] || [ "$#" -gt "8" ] ; then + echo "usage: ./sky2equi.sh []" + echo "e.g: ./sky2equi.sh f.jpg b.jpg r.jpg l.jpg t.jpg b.jpg equi.jpg" + echo " ./sky2equi.sh f.jpg b.jpg r.jpg l.jpg t.jpg b.jpg equi.jpg 4096" + exit 0 +fi + +if [ -f "$7" ]; then + echo "$7 already exists" + exit 0 +fi + +if [ "$#" -eq "7" ] ; then + WIDTH_SRC0=$(identify "$1" | awk ' { print $3; } ' | awk -F x ' { print $1; } ') + let "WIDTH = $WIDTH_SRC0 * 4" +else + WIDTH=$8 +fi + +let "HEIGHT = $WIDTH / 2" + +if [ "$HEIGHT" -lt "100" ] || [ "$HEIGHT" -gt "100000" ] ; then + echo "size out of range" + exit 0 +fi + +montage "$4" "$3" "$5" "$6" "$1" "$2" -tile 6x1 -geometry x+0+0 "$7" + +echo "$7 created" + + From 026914e568197ff5504558e82b87816a71fa9755 Mon Sep 17 00:00:00 2001 From: jbienzss Date: Fri, 31 Oct 2025 00:29:16 -0500 Subject: [PATCH 2/3] Fixed formatting issue in readme. --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c4137d4..af0aafc 100644 --- a/README.md +++ b/README.md @@ -16,14 +16,18 @@ height of equirectangular image is the half of width. e.g: to convert all skybox downloaded to a equirectangular: $ ls -1 pan*skybox1*jpg | awk ' { print "\"" $0 "\" equi"; } ' | xargs -n 2 ./matterskyconv.sh + +or just + + $ ls -1 pan*skybox1*jpg | awk ' { print "\"" $0 "\""; } ' | xargs -n 2 ./matterskyconv.sh to convert all skybox downloaded to a cross cubemap: -ls -1 pan*skybox1*jpg | awk ' { print "\"" $0 "\" cross"; } ' | xargs -n 2 ./matterskyconv.sh + $ ls -1 pan*skybox1*jpg | awk ' { print "\"" $0 "\" cross"; } ' | xargs -n 2 ./matterskyconv.sh to convert all skybox downloaded to a strip cubemap: -ls -1 pan*skybox1*jpg | awk ' { print "\"" $0 "\" strip"; } ' | xargs -n 2 ./matterskyconv.sh + $ ls -1 pan*skybox1*jpg | awk ' { print "\"" $0 "\" strip"; } ' | xargs -n 2 ./matterskyconv.sh (both sh scripts and skyboxs must be in the same folder) From 9338eabc7ed120ba1dd372f033dcf25fa1d96cff Mon Sep 17 00:00:00 2001 From: jbienzss Date: Fri, 31 Oct 2025 00:30:43 -0500 Subject: [PATCH 3/3] Fixed file names in readme. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index af0aafc..51f47b9 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,8 @@ this code is designed to work over linux (as /dev/shm ram tmpfs) ## Usage $ ./sky2equi.sh [] - $ ./sky2cross.sh [] - $ ./sky2strip.sh [] + $ ./sky2cross.sh [] + $ ./sky2strip.sh [] ## Examples