三角関数はもっと遅い - Vitalabolove 店長の雑記帳
上記のサイトを見ていただければ分かるように 三角関数 の計算は遅い
なので Shader で利用する際には使いすぎないように注意しようと言われている
だから テクスチャ の rgb に sin, cos, tan の結果を書き込み
ロードして利用すればいいのではということで試してみた
テクスチャは 2のべき乗がいいので 1 × 512 のサイズで作成する
var texture = new Texture2D(512, 1, TextureFormat.RGB24, false); for (int v = 0; v < 512; v++) { texture.SetPixel(v, 0, new Color( (Mathf.Sin(1 / 512f * v * 360) + 1) / 2, (Mathf.Cos(1 / 512f * v * 360) + 1) / 2, (Mathf.Tan(1 / 512f * v * 360) + 1) / 2) ); } texture.Apply(false, false);
こうしてできたテクスチャがこちら
このテクスチャを利用したShaderを書いてみる
この際半分は 三角関数のメソッドを呼び出す
fixed4 frag (v2f_img i) : SV_Target { if (i.uv.y > 0.5) { return fixed4( sin(i.uv.x * 360), cos(i.uv.x * 360), tan(i.uv.x * 360), 1 ); } return tex2D(_MainTex, float2(i.uv.x, 0)) * 2.0 - 1.0; }
結果はこのようになります
360分割をしたわけじゃないので少しずれてしまっていますが許容範囲ということで