Shader Minifier / Crinkler minification memo
Stack
同じくShader Minifier・Crinkler
Tips
for文の添字として i を使っていて、直近のループの添字しか使っていない場合、 i はRenameしないようにすると圧縮効率が良くなる……かも
Shader Minifierのオプションとして --no-renaming-list main,i を渡す
Blossomの場合、 blossom/shaders.targets の中を調整する for文の書き方は for ( int i = 0; i < 16; i ++ ) じゃなくて for ( int i = 0; i ++ < 16; )
ループ内では i の範囲が1から始まるので注意
変数を手動でインライン化していく
Shader Minifierのinliningは現状まだまだ頭が良くないきがする
変数名を i_ で始めると、手動でのインライン化ができる (Explicit Inlining)
変数を使い回す
変数のライフサイクルを意識し、使い終わった変数を積極的に再利用する
トークンの種類を少なくする
グローバル変数をたくさん置くより、スコープをたくさん切って、登場するトークンの種類を最小限に抑えたほうが効果的だった
WebGLとネイティブGLとで関数の挙動が微妙に違かったりするので気をつける
ネイティブGLではfloatとintの演算がサポートされているので、 1.0 を 1 と書いていい場合が多い
mix や smoothstep などの関数はintを渡されても動いてくれないことがあるので注意
むやみにfloatをintにしていくと、Shader Minifierによってインライン化された式が想定外の挙動を起こすことがあるので注意
結局最後はCrinklerの設定を変えて数バイトを削る
/COMPMODE:SLOW ・ /COMPMODE:VERYSLOW を試す