夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLensでファンタジーな世界を作る プラズマボールその1 URPへの対応

本日はファンタジー世界をHoloLensで再現します。

〇環境

・Unity2021.1.10f1

・UniversalRP

・Energy Springjoint Ball by Raivo

〇プラズマボール

今回はインターネットマーケットの[Booth]で公開、販売されていた[Energy Springjoint Ball by Raivo]を見たときにHoloLens 2のHandTrackingを用いて面白い表現ができそうと感じたことがきっかけでした。

booth.pm

購入しダウンロードしておきます。

①Unityプロジェクトへ購入しダウンロードしたUnityPackageをインポートします。

f:id:Holomoto-Sumire:20210803204407j:plain

②Assets/Raivos Prefabs/Energy Springjoint Ball by Raivoからプレファブをシーンに配置しています。

f:id:Holomoto-Sumire:20210803205451j:plain

③URPプロジェクトでは[Sine VFX/StartSphereV5]Shaderが対応しておらずピンクのエラーを吐きます。修正します。

ここでは著作物の関係で変更点のみ記載します。

Tagsブロックの中身をコメントアウトします。

Tags {
               // "LightMode"="ForwardBase"
            }

これはURPプロジェクトではLightModeが使用できないためです。

次にCGPRPGRAM~ENDCGをHLSLに変換します。

 HLSLPROGRAM
       ...
            ENDHLSL

UnityCG.cgincから[Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl]へと変更します。

  //#include "UnityCG.cginc"
  #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

fixed4型をhalf4型へと書き換えます。

half4 finalRGBA = half4(finalColor,1);

UnityTransformToWorldNormalおよびUnityObjectToClipPosを次のように[Core.hlsl]で提供される関数に変更します。

                o.normalDir = TransformObjectToWorldNormal(v.normal);
                ...
                o.pos = TransformObjectToHClip( v.vertex );

最後にFOG系の処理をコメントアウトします。

            struct VertexOutput {
               ...
               // UNITY_FOG_COORDS(3)
            };
            VertexOutput vert (VertexInput v) {
               ...
               // UNITY_TRANSFER_FOG(o,o.pos);
                return o;
            }

以上でShaderのエラーを回避することができます。

以上でURPプロジェクトで使用できるようになりました。

f:id:Holomoto-Sumire:20210803210730j:plain

次回以降でHoloLensの機能と組み合わせていきます。