Warning: Trying to access array offset on value of type bool in /home/empty/karanokan.info/public_html/wp-content/themes/lionblog/single.php on line 12

Warning: Trying to access array offset on value of type bool in /home/empty/karanokan.info/public_html/wp-content/themes/lionblog/single.php on line 13

Warning: Trying to access array offset on value of type bool in /home/empty/karanokan.info/public_html/wp-content/themes/lionblog/single.php on line 14
Scriptによるレンダーテクスチャへの数値書き込みについて │ 空の缶詰

Scriptによるレンダーテクスチャへの数値書き込みについて

NO IMAGE

 以前に投稿した波動方程式を用いた波紋の作成という記事内のScriptにおいて、SetPixelによりR=0.5、G=0.5のレンダーテクスチャを作成しました。ただ、少し気になることがあり調べてみました。

問題点

 GetPixelによって レンダーテクスチャの色を調べたところ0.50196・・・という数値が出てきました。そこで、Unityのドキュメントを見てみると”この関数の機能はARGB32、RGB32、Alpha8のテクスチャフォーマットのみに対応しています。”と記載されていました。つまり、SetPixel(0, 0, new Color(0.5f, 0.5f, 0.5f, 1))は8ビット(0~255)の内で一番近い数値(128/255=0.50196・・・ )へ自動的に変換されているようです。確認のために以下のScriptとShaderを作成し、実行してみました。

script

 作成したScriptは以下の通りです。レンダーテクスチャへSetPixelを用いてColor(0.5f, 0.5f, 0.5f, 1)を書き込んだのちに、レンダーテクスチャの色をDebug.Logで出力しています。

実行結果

 上記Scriptの実行結果は以下の通りです。

0.501961となり、128/255がレンダーテクスチャに書き込まれていることが分かります。

解決策

 テクスチャへ目的の数値を書き込めるようShaderの作成及びScriptの変更を行いました。

Shader

 作成したShaderは以下の通りです。RGBA=(0.5,0.5,0.5,1.0)を出力するだけのShaderです。

Scriptの変更及び結果

 テクスチャの作成部分を変更し実行してみました。mat_gray_texは上記Shaderを割り当てたMaterialです。

結果は以下の通りです。

0.5が書き込まれていることが分かります。また、以下のように変更しても

同様の結果となり、目的の数値をレンダーテクスチャへ書き込むことができました。

参考サイト

Unity|Document:スクリプティング API(Texture2D.SetPixels)

ftvlog:[Unity] RenderTextureからピクセル色を取得する