こんにちは!SensitiveCubeです!
このチュートリアルでは、ホログラムインディケーターの作成方法を解説します。
この記事では、Cinema4Dを使ったUVの編集とノーマルマップのベイク、PhotoshopとQuixelを使ってノーマルマップの編集、Unity Amplify shader Editorを使ってシェーダーの作成、Unity Playmakerを使ってノードベースでのスクリプティングを行います。.
Amplify Shader Editorを使用してシェーダーを作成:最初のノードを追加
まず、次のアセットをUnityへインポートしてください。
indi_indiset.fbx, indiNormal_quixel.png, screenMask.png, lineNoise.png と wagerFlag.jpg(またはお好みの画像)を5つです。
FBXファイルを選択し、Inspector > Materials から Extract Materials をクリックしてください。
また、RigのAnimation TypeはLegacyに変更してください。
ホログラム用のシェーダーを作成しましょう。このチュートリアルでは、Amplify Shader Editorを使用します。
まずProjectパネルでAmplify Surface Shaderを作成します。
エディター編集ウィンドウが開きます。
エディター編集ウィンドウが開きます。
ウィンドウの左側で、名前を”hologram”に変更してください。
そしてパラメータを変更します。Light ModeをUnlitに、Shader Modelを2.5に、Blend ModeをTransparentに変更してください。Rendering Platformsのパラメータはすべてオンにしてください。
では最初のノード、Color nodeを追加します。
では最初のノード、Color nodeを追加します。
エディター画面で右クリックし、Colorを検索、”Color[5]”をクリックしてください。
TypeをPropertyに変更し、Emissionに接続してください。
TypeをPropertyに変更し、Emissionに接続してください。
Colorはwhiteに変更します。
Texture sample nodeを追加し、”ScreenMask.png”を選択、RをOpacityへ接続してください。
ではシェーダーを確認してみましょう。
ではシェーダーを確認してみましょう。
”indiHolo”マテリアルを選択し、Shader を “hologram”に変更してください。
HierarchyパネルからCubeを作成し、マテリアルを適用してください。良い感じですね。
Amplify Shader Editorを使用してシェーダーを作成:texture animation
新しくTexture sampleノードを作成し、”lineNoise.png”を選択します。
そしてこれらのテクスチャを合成します。
Multiplyノードを追加し、両テクスチャの”R”をMultiplyノードへ接続してください。
そしてMultiplyは”Opacity”へ接続してください。
これでシェーダーを確認してみます。
では、”lineNoise.png”へアニメーションを追加します。
5つのノードが必要となり、少し複雑なので、まず下の画像で全体図を確認してください。
このノードで何をしているかというと、テクスチャのUVを垂直方向に時間で変化させます。
Vector node には animation vertical を設定します。
Time Parameter ではアニメーションスピードを設定します。
更にTexture SamplesとMultiplyのふたつのノードを追加します。
Texture Samplesには”waterFlag.jpg”を追加し、Multiplyに接続してください。
Color nodeもMultiplyに接続し、MultiplyをEmissionに接続してください。
Playmakerを使ってビジュアルスクリプティング:準備
では、シェーダーが完成したのでFBXで確認してみましょう。
Projectの”indi_indiset”を選択、InspectorのAnimationをオンにし、Playボタンをクリックしてください。
シェーダーをアニメーション付きで確認することができます。マテリアルは以下の図のように設定してください。
シェーダーをアニメーション付きで確認することができます。マテリアルは以下の図のように設定してください。
最後に、Playmakerでビジュアルスクリプティングを行います。
プレイヤーとの距離によってホログラムのオンオフが切り替わるよう設定します。”indi_indiset”を選択し、Inspectorを開きます。
RigのAnimation TypeはLegacyに設定します。
RigのAnimation TypeはLegacyに設定します。
Animationでは、クリップを2つ作成しDurationを変更します。
”open”を0.0から50.0で設定し、”close”を50.0から100.0で設定します。
設定後、”indi_indiset”をHierarchyに追加してください。
Playmakerを使ってビジュアルスクリプティング:距離によって変化させる
Inspectorパネルを開き、AnimationのPlay automaticallyをオフにします。Add Componentをクリックし、PlayMakerFSMをクリックしてください。
PlayMakerエディタを開きます。
最初にカメラ情報を取得します。取得の方法は以下の記事を参照します。
Init stateで、Fin Game Objectのアクションを挿入します。Object Nameの項目に”[VRTK]_VIVE”を入力します。
Main CameraをStore内のNew Variable…を選択し、”mainCam”変数へ保存します。
Main CameraをStore内のNew Variable…を選択し、”mainCam”変数へ保存します。
waitNearとwaitFarステートはそれぞれメインカメラ(=プレイヤー)とオブジェクト間の距離を確認します。
”switchVal”より距離が大きい/小さい時、openAnim/closeAnimステートに変遷します。
openAnimとcloseAnimステートではアニメーションが再生され、次のステートに移ります。この動きはUnityのPlayモードでMain Cameraを動かすことで確認することができます。
問題なく動くようであれば、STYLYへアップロードし完成です!お疲れ様でした!