shader

1/3ページ

海洋シェーダ(泡)

 前回の記事(海洋シェーダ(反射と屈折))では、海面に反射して映るオブジェクトや海中の屈折して見えるオブジェクトを追加しました。今回は、海面に生じる泡の追加を行いました。 波の高さにより泡を生成  波が特定の高さになったときに泡を発生させます。波ごとに高さの判定を行っていますが、その際、波の振幅を計算から除外しています。これにより、振幅が低い波でも泡が発生するように処理をしています。また、泡のテク […]

海洋シェーダ(反射と屈折)

 前回の記事(海洋シェーダ(海の色))では、ノイズで変形させたゲルストナー波によって生成された波に、フレネル反射等を追加することで海を表現しました。この海へ、海面に反射して映るオブジェクトや海中にあるオブジェクトが透過して見える様子を追加しました。 海面の反射  以前作成した平面の鏡面反射を利用して、海面に反射して映る画像を取得します。取得した画像をそのまま表示するのではなく、スクリーン座標を海の […]

海洋シェーダ(海の色)

 前回の記事(海洋シェーダ(波の形))では、ゲルストナー波をノイズで変形させることで 海洋における波の形を作成しました。この波に、フレネル反射等を追加することによって海の色を表現します。 基本の色  海の基本となる色(_SeaBaseColor)にランバート反射で凹凸を付けています。また、波の高さ(wave_height)によって色を変えるために、_SeaShallowColor * wave_h […]

海洋シェーダ(波の形)

 以前、ゲルストナー波(Gerstner Wave)についての記事を掲載しました。このゲルストナー波を用いて海の波をシェーダで作成しました。 ゲルストナー波(8個) shader  単純にゲルストナー波を単純に8個組み合わせるシェーダです。法線は近接する頂点を利用して計算しています。また、ランバート反射によって波の凹凸が分かるように処理をしています。 [crayon-5e51dfb21660252 […]

ワールド座標でテクスチャの合成

 以前、Textureを合成するShaderであるテクスチャに他のテクスチャを合成する方法を掲載しました。この時は、uv座標を使用していましたが、今回はワールド座標を用いてテクスチャの合成を行います。 shader  ここに掲載しているshaderのuv座標をワールド座標(x,z)へ変更したshaderです。このshaderにおいて_PaintPositionのy成分をz座標として使用しています。 […]

空の色(大気散乱シミュレーション)

 太陽光が大気へ突入すると散乱が起こります。この散乱をシェーダーでシミュレーションすることで、空の色を描画することができます。この記事では、GPU Gems 2:Chapter 16. Accurate Atmospheric Scatteringを参考にシェーダーを作成しました。 シェーダーの作成 shader  作成したシェーダーは以下の通りです。GPU Gem2のコードから大きな変更はありま […]

法線ベクトルの再計算

 シェーダで頂点を移動すると、元の法線ベクトルは使用できなくなります。そのため、法線ベクトル を再計算する必要があります。法線ベクトルは隣接する頂点もしくはハイトマップから計算することができます。 隣接する頂点を利用する方法  法線ベクトルは、ある点とその近傍の二点の座標を用いることで求めることができます。 ある点 \(P\) における法線ベクトルを求めるには、点 \(P\) から接ベクトル方向へ […]

ゲルストナー波(Gerstner Wave)

※2019/06/16 各シェーダを修正しました。  海洋の荒い波は単純なsin波とは異なり、波の山は鋭く、谷はより広く平になります。このような波はゲルストナー波を用いることで表現することができます。以下にGPU Gems:Chapter 1. Effective Water Simulation from Physical Modelsに掲載されているゲルストナー波の式を示します。3次元における […]

シェーダでトランジション(図形)

外周から回るトランジション  長方形を利用して外側から内側へ回りながら画面を黒くするシェーダを作成しました。 shader  作成したシェーダは以下の通りです。 [crayon-5e51dfb217964945757496/]  uv座標(0~1)を(-1~1)へ変更し、これに分割数(div)を掛けることにより-分割数~分割数とします。 高さと幅が2となる長方形を作成します。画像に示すように正方形 […]

シェーダでトランジション(ノイズ)

 トランジションとは場面転換をする際に使用される演出効果のことです。このトランジションはグレースケールのルール画像からアルファ値を決定することで作成できます。この記事ではルール画像を使用せずに、シェーダによりアルファ値を決定し、UIのPanelにトランジション用のシェーダを設定したマテリアルをアタッチすることでトランジションを行います。このトランジションシェーダにシェーダでノイズ1、シェーダでノイ […]

1 3