見出し画像

【Unity】Line Rendererで破線を引く(Shader Graph編)

前回の記事(ビルトインシェーダー編)に続き、今回はShader Graphを用いてLine Rendererで破線を引いてみたいと思います。既にUniversal Render Pipeline(URP)とLine Rendererが設定済みの場合は3へお進みください。

1.Line Rendererの設置と設定

Line RendererのSceneへの設置と設定は前回の1~2の項目と同様に行ってください。

2.Univsersal Render Pipelineの設定

Shader Graphを使用するためにはUnityのレンダーパイプラインをUniversal Render Pipeline(URP)に変更する必要があります。URPの設定方法はネットで検索すると詳しく解説している記事がたくさん見つかるため、ここでは軽く説明する程度に留めておきます。

手順
1.Package ManagerからURPをインストール
2.Project内にPipeline Assetを作成
3.Project SettingsのGraphicsで作成したPipeline Assetを設定

3.Shaderの作成

ここからShader Graphを使ってShaderを作成していきます。エディタ上のProjectパネルで右クリックし、[Create] > [Shader] > [Unlit Graph]を選択します。名前は「DashLine」とします。

画像1

4.マテリアルの作成

作成したShaderを選択した状態で右クリックし、[Create] > [Material]を選択します。名前はShaderと同じように「DashLine」とします。選択した状態で作成することでShaderとマテリアルが紐づけられます。

画像3

5.Shader Graphの作成

作成したShaderをダブルクリックするとビジュアルエディタが表示されます。以下の図のようにノードを繋げてください。

画像2

内容的には前回の記事のビルトインシェーダーで処理している内容+少し拡張を行っています。簡単に解説すると

1.Tiling And Offsetでタイル状のUVを生成
2.Fractionで小数点のみを抽出
3.SplitでXのみのグラデーションを取得
4.Stepでしきい値を基準に0と1に変換
5.指定の色と乗算
6.指定の色をColor、Stepの値をAlphaとして出力

6.Line Rendererへのマテリアル設定

先ほど作成したマテリアルをLine RendererのMaterialsのElement 0へドラッグアンドドロップします。

画像4

7.確認!

うまく設定されていればLine Rendererは以下のような破線になります。

画像5

8.調整

Line Rendererの設定で線幅や長さを調整します。さらにインスペクタ上のShaderパラメータでは以下の設定が可能です。

1.Rate:透明と不透明の長さの比(0~1、0.5で同等幅)
2.Tiling:破線の間隔
3.Offset:破線の位置
4.Color:破線の色

画像6

Rateがスライダー式になっていない場合は、ビジュアルエディタのPropetiesのRateのModeを「Slider」に変更してください。

Offsetは破線の開始位置をずらすことができます。ただし、UVはタイル状になっているため位置をずらしても線が途切れることはありません。この値をShader GraphのTimerノードで時間的に変わるように設定すると以下のように破線が流れる演出が可能になります。

画像7

9.まとめ

Line RendererとShader Graphを使って破線を引くことができました。シェーダーを使っているため線の輪郭がくっきりと描画されます。

Shader Graphは視覚的にシェーダーを記述できるため分かりやすい部分もありますが、複雑な処理がやりたい場合やシェーダーテクニックの情報量を考えると従来のコードで記述するビルトインシェーダーにはまだ及ばない部分もあります。

またレンダーパイプラインをURPに変更することでシェーダー、カメラ、バッファ処理などの仕様が大きく変わるため、場合によってはやりたいことができなくなってしまうこともあります。

ビルトインレンダーパイプライン、URPそれぞれメリットとデメリットがありますので取り組んでいるUnityプロジェクト全体を考えながら適切なパイプラインを選択してください。

最後はレンダーパイプラインの話になってしまいましたが、シェーダー自体は気軽に扱えるようになると表現の幅が一気に増えますので、私自身も積極的に勉強していきたいと思っています。

それでは良いシェーダーライフを!🌱

参考


いいなと思ったら応援しよう!