Last active
January 5, 2022 09:23
-
-
Save coderofsalvation/a764800e172e82ce2bf0fe60bb0241a9 to your computer and use it in GitHub Desktop.
equirectangular map to plain-mipmapped cubemap (lovr) converter (using ffmpeg)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# usage: ./equi2lovr.sh equi.png | |
mkdir env 2>/dev/null | |
ffmpeg -i $1 -vf "v360=input=equirect:output=c6x1" -y -vframes 1 $1.map.jpg | |
i=0 | |
for face in px nx py ny pz nz; do | |
ffmpeg -i $1.map.jpg -filter_complex '[0:v] crop=(iw/6):ih:((iw/6)*'$i'):0,split=10[m][m0][m1][m2][m3][m4][m5][m6][m7][m8]' \ | |
-map '[m]' -s 1024x1024 env/$face.png \ | |
-map '[m0]' -s 256x256 env/m0_$face.png \ | |
-map '[m1]' -s 128x128 env/m1_$face.png \ | |
-map '[m2]' -s 64x64 env/m2_$face.png \ | |
-map '[m3]' -s 32x32 env/m3_$face.png \ | |
-map '[m4]' -s 16x16 env/m4_$face.png \ | |
-map '[m5]' -s 8x8 env/m5_$face.png \ | |
-map '[m6]' -s 4x4 env/m6_$face.png \ | |
-map '[m7]' -s 2x2 env/m7_$face.png \ | |
-map '[m8]' -s 1x1 env/m8_$face.png \ | |
-y | |
i=`expr $i + 1` | |
done |
The 'right' way to do it is using cmgen
at https://github.com/google/filament (available precompiled on releases page) that is able to generate these physically correct "prefiltered cubemaps", along with spherical harmonics constants:
$ convert someequirect.png -flatten +matte env.png # cmgen needs RGB (not RGBA) in case of png/jpg
$ ./bin/cmgen --type=cubemap --format=png -x out env.hdr # but hdr-files are bettetr
Decoding image...
Converting equirectangular image...
Mirroring...
IBL mipmaps for prefiltered importance sampling...
IBL prefiltering...
Level 0, roughness = 0, roughness (perceptual) = 0
100% ████████████████████████████████◀
Level 1, roughness = 0.00417, roughness (perceptual) = 0.0646
100% ████████████████████████████████◀
Level 2, roughness = 0.0179, roughness (perceptual) = 0.134
100% ████████████████████████████████◀
Level 3, roughness = 0.0439, roughness (perceptual) = 0.209
100% ████████████████████████████████◀
Level 4, roughness = 0.0858, roughness (perceptual) = 0.293
100% ████████████████████████████████◀
Level 5, roughness = 0.15, roughness (perceptual) = 0.388
100% ████████████████████████████████◀
Level 6, roughness = 0.25, roughness (perceptual) = 0.5
100% ████████████████████████████████◀
Level 7, roughness = 0.418, roughness (perceptual) = 0.646
100% ████████████████████████████████◀
Level 8, roughness = 1, roughness (perceptual) = 1
100% ████████████████████████████████◀
(base) [leon@ls540/tmp/filament/bin] $ find env
env
env/equirect
env/equirect/is_m5.png
env/equirect/is_m8.png
env/equirect/m0.png
env/equirect/m8.png
env/equirect/is_m2.png
env/equirect/is_m3.png
env/equirect/m6.png
env/equirect/m2.png
env/equirect/m4.png
env/equirect/m1.png
env/equirect/is_m4.png
env/equirect/is_m0.png
env/equirect/is_m6.png
env/equirect/m7.png
env/equirect/is_m1.png
env/equirect/m3.png
env/equirect/is_m7.png
env/equirect/m5.png
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It will just generate all the files into an
env
folder (for lua-usage see https://lovr.org/docs/Lighting/PBR_Materials)ps. you can get equirectangular images from https://polyhaven.com