以下の内容はhttps://www.karvan1230.com/entry/2022/07/05/214239より取得しました。


【Unity】アセット紹介:Shell Texture技術を利用したグラスシェーダーBrute Force Grass Shader

通信障害

auの携帯を使っているのに通信障害の影響を微塵も受けなかった皆さんこんにちは。だって誰からも電話は掛かってこないからね。会社でもひとしきり話題になっていましたが会話に参加できなかったです。

 

草生える

ゲーム内で山などの地形に草を生やそうとした場合、テレインを使って地面から生成したり草の3Dモデルをチマチマ設置するのではなく、シェーダーを使って一気に表示する方が効率的です。

Unityアセットストアにはそういったグラス(草)シェーダーが多数出品されていますが、つい先日、その中の一つを購入したので今回はそのアセットのご紹介

「グラス(草)シェーダー」という名の通り、色んな地形アセットや3Dモデルに草を生やすことができます。

試しにシーン内にPlaneを作って、

アセットに付随しているマテリアルをPlaneのマテリアルとして設定すると

こんな感じで芝生が出来上がります。

 

使い方

他のグラスシェーダーアセットではマテリアルのシェーダーをグラスシェーダーに変更するだけですが、このアセットでは一つだけ手間が掛かります。

というのも、このアセットではグラスシェーダーが適用された3Dモデルを上空から撮影し、その画像からレイヤ画像を自動生成して草として表示しています。
その為、草を生やす範囲を撮影するカメラを事前に設置しておく必要があります

このカメラはコンポーネントの設定等も含めてPrefabとしてアセットに付随しているので、シーン内にドラッグするだけで大丈夫です。

BruteForce-GrassShader>Prefab>CameraEffect配下の「CameraEffect」をシーン内にドラッグします。

 

カメラはOrthographic(平行投影)で撮影しており、カメラコンポーネントのsize値を変更して芝生を生やす範囲をカバーします。

ただし、このカメラは回転させないでください

先ほども説明した通り、レンダリングに使用されるカメラには「BF_SetInteractiveShaderEffects」がアタッチされており、これはターゲットテクスチャ「GrassRT」にレンダリングされます。
芝生の解像度を上げるには、プロジェクトで「GrassRT」を選択して、「サイズ」を2048x2048または4096x4096に設定します。
ただし、この値を変更すると、メモリ消費量が大幅に増加します。

 

カメラを設定した後、芝生を生やす地形アセットをカメラの真下に配置して

グラスシェーダーを適用したマテリアルを設定すると、綺麗に草を生やすことができます。

 

プロパティ

芝生の草の色や植生の範囲、地面の色、影の色等々、シェーダーのプロパティで設定できます。
風に吹かれて揺れる動きもプロパティで設定できます。

各プロパティの中で重要なものを説明すると

-Grass Shading:レイヤーの暗さを制御します。値を低くすると、最下層が非常に暗くなります。

-No-Grass Texture:草と地面の位置を制御するための白黒テクスチャ

-Grass Pattern:草の形を制御するための白黒テクスチャ。白の値はより多くの草を描画します

-Number of Stacks:草の層の数、値が高いほどパフォーマンスが高くなります(最大は17)

-Offset Normal:面法線に基づく草の位置のオフセット(草の高さを変更する場合は、これを変更します)

-Offset Vector:Vector3に基づく草の位置のオフセット

-Fade Distance Start/End:パフォーマンスを節約するために草がカリングされる距離

-Minimum Number of Stacks:フェード距離によってカリングされたときに表示されるレイヤーの最小量

-Grass Thinness:草の密度、値が高いほどブロック状になります

-Grass Thinness Intersection:草のないテクスチャ(地面)の周りの草の密度の遷移

-Tiling of Grass:草のパターンのUVスケール、UVタイリングの代わりにこれを使用します

-Grass Cut:地面のカットアウト値。値を大きくすると地面が消えます。

-Use RenderTexture Effect:インタラクティブな効果が必要ない場合は無効にします

-Use Procedural Tiling:タイルブレーカー機能を使用して、草の塊を遠くから見栄えよくします

 

カメラエフェクト

このシェーダーはレイヤ画像を使って草を表現しているので近距離で見ると少し違和感を覚えるかもしれません。

至近距離でみるとこんな感じ

 

この為、それを誤魔化す?用なのかブラーを利用したカメラエフェクトのスクリプトも付随しています。

サンプルシーンを参考にしてMainCamera側に上のカメラエフェクトのコンポーネントを付けてみるとこんな感じになります。

 

先程の画像と比べてどうでしょうか?リアル感が少し増した気がします。




以上の内容はhttps://www.karvan1230.com/entry/2022/07/05/214239より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14