はじめに
Shaderで思うようにTextureの値が正確に取得できなかったのでメモ
前提としてsRGBのチェックは外れていて、圧縮はしていないものとします。(値を正確に取得するのに必要なため)
環境は Unity 2021.3.25f1です
Universal Render Pipeline を使用しています。
128に設定しているTextureから0.5が取得できない
試しに(128,128,0)の値を見てみると0.5になっていません。
原因
0~255から0~1に変換すると計算式は 「128 / 255 = 0.5019...」になるためちょうど0.5で取得できてないみたいです
0.5を取得できないと困ること
ちょうど0.5を取得できないと0.5を基準とした計算がうまく動作しなくなります。
たとえば0~1を-1~1に変換した際に0.5に設定してるものは0に変換されてほしいのに0に変換されません。
そのため0.5を基準にするFlowMap使用して強度を上げる(極端ではありますが)と下記のようにUV全体が動いてしまいます
対策
0~1を-1~1に変換する際は通常は「テクスチャの値 -0.5 × 2」を使用しますが「テクスチャの値 -0.5019... × 2」にすることで128に設定している部分を0として計算に使用することができるようになります。(これでいいかは不明。なにかいいやりかたがあったら教えてください)