シェーダでノイズ1
二次元ランダムノイズ 不規則な値を返す関数によってテクセルごとの色を決定します。ただし、使用する関数は入力した値に応じて決まった値を返す疑似ランダム関数を使用しています。 シェーダ ramdom関数へuv座標を渡すことで不規則な値を得ています。この値を色として出力しています。Seedの値を変更すると異なる結果が得られます。Seedをfloatにすると、値によっては常に0となるようです。そのため […]
二次元ランダムノイズ 不規則な値を返す関数によってテクセルごとの色を決定します。ただし、使用する関数は入力した値に応じて決まった値を返す疑似ランダム関数を使用しています。 シェーダ ramdom関数へuv座標を渡すことで不規則な値を得ています。この値を色として出力しています。Seedの値を変更すると異なる結果が得られます。Seedをfloatにすると、値によっては常に0となるようです。そのため […]
Scriptでゲームオブジェクトを作成し、そのオブジェクトに必要なコンポーネントを追加することで、 新たにUI要素を作成します。しかし、この方法でUI要素を作成すると、デフォルトの画像を使用する際に問題が生じます。Editorで実行する場合に限れば以下のコードからデフォルトの画像を取得できます。 [crayon-678b5eadaf830382438672/] 当然、Build後には使用できませ […]
Unityでは画像のフィルタリングをImport Settings→Filter Modeから変更できます。シェーダで特に何もしない場合は、この設定に従って色の補間が行われます。ただ、前回記事(水中の屈折)でフィルタ処理を行う必要がありました。そこで、フィルタリングを行うシェーダを作成してみました。 ポイントフィルタ ポイントフィルタはピクセルの色を決定する際に、色の合成を行うことなく一番近い […]
テクスチャの取得 描画されている画面をテクスチャで取得し、そのテクスチャを歪ませたのちに水面へ描画することで水中の屈折を表現します。そのためにシェーダ内で画面をテクスチャにしたものを取得する必要があります。以下のコードをサブシェーダ内に追加するだけでテクスチャを取得できます。 [crayon-678b5eadb0258394401265/] 次に、このテクスチャを表示するための座標を以下のコード […]
グリッド状の線を表示するシェーダです。 shaderの作成 頂点座標を用いてグリッドの表示を行います。vertex shaderから頂点座標をそのままfragment shaderへ渡します(o.pos)。 [crayon-678b5eadb0718734342633/] vertex shaderから渡された頂点座標を用いて、グリッドの描画を行います。ここでは、x方向のみを扱います。 [cra […]
視差マッピングシェーダを作成する際に、反射光等の計算を行いました。このとき、法線マップは接空間のベクトルを示しているので、vertex shaderでライトベクトル等を接空間へ変換した後に、fragment Shaderで法線マップと変換したライトベクトル等で反射を計算しました。ここでふと、全てのベクトルをオブジェクト空間に変換して計算しても当然同じ結果が得られるはず、と考え新たにシェーダを作成 […]
前回の記事で作成した波紋を用いて、テッセレーションによって分割された平面に波紋を発生させてみました。テッセレーションの詳細に関しては参考サイトに書かれていますので、ここでは割愛いたします。また、平面を揺らしただけでは様子が分かり難いので、下記アセットを利用してワイヤーフレームで表示しました。 UCLA Wireframe Shader shader 前回記事の波紋を表示するためのshaderを […]
Shaderで波動方程式を用いて波紋をシミュレートしてみました。 波動方程式 波動方程式は以下の通りです。 $$ \frac{1}{s^2}\frac{\partial ^2u}{\partial t^2}=\frac{\partial ^2u}{\partial x^2}+\frac{\partial ^2u}{\partial y^2} $$ 離散化した波動方程式 上記の方程式のままではs […]
ReflectionProbeを使用する方法 Create→3DObject→Planeより、鏡面用の平面を作成します。新しくMaterialを作成します。このMaterialのShaderをStandardへ、MetallicとSmoothnessを1へ変更します。そして、このMaterialを平面へアタッチします。 新しく空のゲームオブジェクトを作成し、AddComponentからRefle […]
Textureを任意の位置に好きな大きさで合成することができるShaderです。 図の青色が元のTexture、赤色が合成するTextureです。 外積と内積を使用する方法 ・Textureを合成する領域かの判別 外積と内積を用いて点Qが合成する赤色の領域(点Pを中心とした大きさ2hの四角形abcd)にあるかどうかを判別します。 \(\vec{ab}\)と\(\vec{aQ}\)の外積\(\ve […]