原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

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

通信障害

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

 

草生える

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

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

assetstore.unity.com

「グラス(草)シェーダー」という名の通り、色んな地形アセットや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側に上のカメラエフェクトのコンポーネントを付けてみるとこんな感じになります。

 

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

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。