v4k-git-backup/tools/cook.ini

215 lines
9.9 KiB
INI

; this is where you specify and configure the V4K pipeline.
; tweak the pipeline and add new importers just by editing this file.
; there is no flow control in this script file: lines are parsed and evaluated, from top to bottom.
; ------------------------------------------------------------------------------
; let's create a symbol. symbols are uppercase words always.
; syntax: symbols are defined in KEY=value form, as seen below.
TOOLS=./ ; folder where our pipeline tools are located
ART=../demos/art/,../engine/art/,../editor/art/ ; comma-separated folder(s) that store all our asset files
; lines starting with @windows, @linux or @osx will be processed only where OS matches.
; we are defining here some symbols differently for each platform.
; syntax: lines starting with @keyword. valid keywords are win/dows, lin/ux, and osx.
@linux NUL=/dev/null
@osx NUL=/dev/null
@window NUL=NUL
@linux .EXE=.linux
@osx .EXE=.osx
@windows .EXE=.exe
; you can invoke shell commands directly with `command` at anytime.
; also, once a symbol is found, it is replaced by its value always.
; some predefined symbols: INPUT (input filename), OUTPUT (output filename), PRETTY (clean input filename), PROGRESS (cook progress).
;@windows `echo Cooking PROGRESS% PRETTY...`
;@linux `echo "Cooking PROGRESS% PRETTY..."`
;@osx `echo "Cooking PROGRESS% PRETTY..."`
; ------------------------------------------------------------------------------
; groups below are collection of files that we want to cook, and then package.
; by default, no assets are cooked unless explictly listed below.
; syntax: group=ext1,ext2[...]
[cook]
icon=ico
image=jpg,jpeg,png,bmp,psd,pic,pnm,hdr
texture=pvr,ktx,ktx2,dds,astc,basis,tga
anim=fbx
model=iqm,iqe,gltf,gltf2,glb,fbx,obj,dae,usdc,md3,md5,ms3d,smd,x,3ds,bvh,dxf,lwo
audio=wav,flac,ogg,mp1,mp3,mid,sfxr ; ,mod,xm
audio-module=mod,xm,s3m,it
audio-furnace=fur
font=ttf,ttc,otf
text=json,xml,csv,ini,cfg,doc,txt,md,c,h,inl,cpp,hpp,htm,html
shader=hlsl,fx,dxil,dxbc,glsl,vert,frag,geom,tese,tesc,comp,vs,fs,gs,ts,cs,spirv,spv,slang
script=lua,tl
video=mp4,ogv,avi,mkv,wmv,mpg,mpeg
tiled=tmx,tsx
atlas=ase,aseprite
;excel=xlsx
; ------------------------------------------------------------------------------
; let's convert mod,s3m,xm,it and flac as streamable ogg files
;
; hint: remember that both INPUT and OUTPUT symbols are automatically provided.
; hint: the ->ogg and ->wav parts below do signal the pipeline that the commands we are about
; to execute are performing a data conversion (from flac to ogg for example).
[cook audio-module]
TOOLS/mod2wav.EXE INPUT OUTPUT -> wav
TOOLS/ffmpeg.EXE -hide_banner -nostdin -loglevel fatal -y -i INPUT -threads 1 -f ogg -b:a 192k OUTPUT -> ogg ; -stats
[cook flac]
TOOLS/ffmpeg.EXE -hide_banner -nostdin -loglevel fatal -y -i INPUT -threads 1 -f ogg -b:a 384k OUTPUT -> ogg ; -stats
; cook midis as wavs here
[cook audio && mid]
SOUNDBANK=AweROMGM.sf3 ; note: GeneralUser_GS_v1_471.sf3 or FluidR3.sf3 likely to produce better results
TOOLS/mid2wav.EXE INPUT OUTPUT TOOLS/SOUNDBANK -> wav
; and furs as wavs...
[cook audio-furnace]
TOOLS/furnace.EXE INPUT -output OUTPUT 2> NUL -> wav
; ...and sxfrs as wavs
[cook audio && sfxr]
TOOLS/sfxr2wav.EXE INPUT OUTPUT -> wav
; then any audio (except mp3 and ogg) gets converted into adpcm_ms finally
; note that all the recently generated wav files from previous steps are included in here as well (like those from the flac->wav recipe above).
[cook audio && !mp3 && !ogg]
TOOLS/ffmpeg.EXE -hide_banner -nostdin -loglevel fatal -y -i INPUT -threads 1 -f wav -acodec adpcm_ms OUTPUT -> wav ; -stats
; ------------------------------------------------------------------------------
; cook all videos that are not mpeg, into mpeg.
; FLAGS symbols contain the default encoding options when cooking videos.
;
; hint: we're checking that ffmpeg is returning 0 exitcode (see `==0` below)
[cook video && !mpg]
FLAGS1+=-hide_banner -nostdin -loglevel fatal -y ; -stats
FLAGS2+=-qscale:v 4 -y -c:v mpeg1video -c:a mp2 -ac 1 -b:a 128k -ar 44100 -format mpeg
;FLAGS_EXTRA_QUALITY=-vf scale=iw*2:ih*2
TOOLS/ffmpeg.EXE FLAGS1 -i INPUT -threads 1 FLAGS2 OUTPUT ==0 -> mpg
; ------------------------------------------------------------------------------
; let's cook all images into ktx
[cook image && !png && !jpg && !hdr]
;TOOLS/cuttlefish.EXE -q -i INPUT -o OUTPUT -f R8G8B8A8 -> ktx
TOOLS/PVRTexToolCLI.EXE -noout -m -i INPUT -o OUTPUT -> png
[cook texture && tga]
TOOLS/cuttlefish.EXE -q -m -i INPUT -o OUTPUT -f BC1_RGB -> ktx
[cook texture && !dds && !ktx]
TOOLS/PVRTexToolCLI.EXE -noout -m -i INPUT -o OUTPUT -> dds
[cook dds]
; @todo: support per-asset options. ie, you can override
; or expand the FLAGS symbol, per asset basis. let's say that for each input `file.ext`
; asset, there could be a sibling `file.ext.ini` file that would contain all the
; initial symbols and flags. then, we can merge (+=), remove (-=) or replace (=) them.
; FLAGS+=-quality 75.00 -p ; merge (+=) these flags on top of any existing per-asset flags.
TOOLS/cuttlefish.EXE -q -m -i INPUT -o OUTPUT -f BC1_RGBA -> ktx
; # Compatibility and modes. What to choose.
; - iOS: PVRTC1_4_RGB or PVRTC1_4 (RGBA) with q:pvrtcnormal.
; - Desktop (OSX/Linux/Windows): BC1, BC1a or BC3 with q:normal.
; - Android: ETC2_RGB or ETC2_RGBA with q:etcfast. ASTC_4x4 or ASTC_8x8 with q:astcmedium, as a fallback.
; - [ref] https://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/
;
; PVRTexToolCLI > DDS
; PVR, KTX, KTX2, [DDS,] ASTC or BASIS
;
; Cuttlefish > KTX
; BMP,CUT,DDS,EXR,G3,GIF,HDR,ICO,IFF,JBIG,JNG,JPEG,JPEG2K,JPEGXR,KOALA,MNG,PCD,
; PCX,PBM/PGM/PPM,PFM,PNG,PIC,PSD,RAW,RAS,SGI,TARGA,TIFF,WBMP,WebP,XBM,XPM
;
; >> bin\cuttlefish -i uv_checker_1k.png -o uv_checker_1k.png.ktx -f bc1_rgba
; R4G4,R4G4B4A4,B4G4R4A4,A4R4G4B4,R5G6B5,B5G6R5,R5G5B5A1,B5G5R5A1,A1R5G5B5,R8,R8G8,R8G8B8,B8G8R8,R8G8B8A8,B8G8R8A8,A8B8G8R8,
; A2R10G10B10,A2B10G10R10,R16,R16G16,R16G16B16,R16G16B16A16,R32,R32G32,R32G32B32,R32G32B32A32,B10G11R11_UFloat,E5B9G9R9_UFloat,
; BC1_RGB,BC1_RGBA,BC2,BC3,BC4,BC5,BC6H,BC7,ETC1,ETC2_R8G8B8,ETC2_R8G8B8A1,ETC2_R8G8B8A8,EAC_R11,EAC_R11G11,
; ASTC_4x4,ASTC_5x4,ASTC_5x5,ASTC_6x5,ASTC_6x6,ASTC_8x5,ASTC_8x6,ASTC_8x8,ASTC_10x5,ASTC_10x6,ASTC_10x8,ASTC_10x10,ASTC_12x10,ASTC_12x12,
; PVRTC1_RGB_2BPP,PVRTC1_RGBA_2BPP,PVRTC1_RGB_4BPP,PVRTC1_RGBA_4BPP,PVRTC2_RGBA_2BPP,PVRTC2_RGBA_4BPP,
;
; >> bin\PVRTexToolCLI -i uv_checker_1k.png -o uv_checker_1k.png.ktx -f bc1
; PVRTC1_2, PVRTC1_4, PVRTC1_2_RGB, PVRTC1_4_RGB, PVRTC2_2, PVRTC2_4, PVRTC1_HDR_6, PVRTC1_HDR_8, PVRTC2_HDR_6, PVRTC2_HDR_8,
; ETC1, BC1, DXT2, BC2, DXT4, BC3, BC4, BC5, UYVY, YUY2, 1BPP, RGBE9995, RGBG8888, GRGB8888, ETC2_RGB, ETC2_RGBA, ETC2_RGB_A1, EAC_R11, EAC_RG11,
; ASTC_4x4, ASTC_5x4, ASTC_5x5, ASTC_6x5, ASTC_6x6, ASTC_8x5, ASTC_8x6, ASTC_8x8, ASTC_10x5, ASTC_10x6, ASTC_10x8, ASTC_10x10, ASTC_12x10, ASTC_12x12,
; ASTC_3x3x3, ASTC_4x3x3, ASTC_4x4x3, ASTC_4x4x4, ASTC_5x4x4, ASTC_5x5x4, ASTC_5x5x5, ASTC_6x5x5, ASTC_6x6x5, ASTC_6x6x6, BASISU_ETC1S, BASISU_UASTC, RGBM, RGBD
;
; -f [UB, UBN, SB, SBN, US, USN, SS, SSN, UI, UIN, SI, SIN, UF, SF]
; -f [lRGB, sRGB]
; -q [pvrtcfastest,pvrtcfast,pvrtcnormal,pvrtchigh,pvrtcbest]
; -q [etcfast,etcslow,etcfastperceptual,etcslowperceptual]
; -q [astcveryfast,astcfast,astcmedium,astcthorough,astcexhaustive]
;
; -m 16 -mfilter cubic ;; mipmaps
; -c ;; debug mipmap tail chain with saturated colours: truncate upper mipmaps if dont see any original colors
;
; -l ;; bleed
; -flip y,flag ;; flip
; -p ;; premultiply
; -r 512,256 -rfilter cubic ;; resize
; -rotate 0 ;; rotate
; -dither ;; dither
;
; ------------------------------------------------------------------------------
; finally, let's cook all models. the logic here is:
; 1. cook all models into iqe (ass2iqe), then into iqm (iqe2iqm): any -> iqe -> iqm
; 2. unless input is iqe. these models will run iqe2iqm only (no ass2iqe): iqe -> iqm.
; 3. unless input is iqm. these models will not run any conversion at all: iqm.
; 4. also, dae models need to flip their UVs coordinates (see -U flag below).
[cook model && dae] ; pass dae, reject iqm,iqe or any other model
FLAGS=
TOOLS/ass2iqe.EXE FLAGS -o OUTPUT INPUT -U 2> NUL -> iqe
[cook model && !dae && !iqm && !iqe] ; pass anything which is not iqm,iqe or dae
FLAGS=
TOOLS/ass2iqe.EXE FLAGS -o OUTPUT INPUT 2> NUL -> iqe
[cook model && !iqm]
TOOLS/iqe2iqm.EXE OUTPUT INPUT > NUL -> iqm
[cook anim]
FLAGS=
TOOLS/ass2iqe.EXE FLAGS -L -o OUTPUT INPUT 2> NUL -> animlist.txt
; ------------------------------------------------------------------------------
; cook localization files
;[cook excel]
;TOOLS/xlsx2ini.EXE INPUT OUTPUT -> ini
; ------------------------------------------------------------------------------
; cook sprites
[cook atlas]
TOOLS/ase2ini.EXE "INPUT" > OUTPUT
; ------------------------------------------------------------------------------
; assets that need to be compressed at end of whole pipeline process are specified here.
; by default, no assets are compressed unless explictly listed below.
; supported compressors: DEFLATE (default), LZMA, LZ4, ULZ, BALZ, BCM, CRUSH, LZW3, LZSS and PPP.
; syntax: compression quality[0..15]|optional_compressor on the left, and type names on the right.
; where: level [0:fastest compression .. 10 max level .. anything >=11 is expensive ... 15 is uber]
;
; valid examples: 0, 3, 4, 6|LZMA, 6|DEFLATE, 6|ULZ, 9|ULZ, 9|LZ4, 2|BALZ, 3|BCM, 1|CRUSH, ...
;
; hint: use plain `0` to exclude non-compressible files (jpg,png,...)
; hint: use plain `0` to exclude those usually large files that compress poorly (<1%) (like mpg)
; hint: use plain `0` to exclude those files we would like to directly stream within the final zipfile (flac,mp3,adpcm wav,...)
[compress]
0|ULZ=texture,image,model,audio,font,text,shader,script
0=video,flac,ogg,wav,mp1,mp3,jpg,png,atlas,tiled