夜風のMixedReality

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

Shader

MixedRealityGraphicsTools StandardShaderでZ-fightingを修正する

本日はMRGT枠です。 〇Z-fightingとは? UntiyやBlenderなどの3Dソフトでアプリケーションを作成しているとあるオブジェクトの描画がちかちか見えてしまうことがあります。 これはZ-fightingと呼ばれる問題で、上記の例では赤い板からちらちらと青い板が見…

UnityのShaderGraphでのノーマルマップの扱いについてまとめる

本日はShader枠です。 筆者は基本的にコードを使用してShaderを構築することの方が多いですが、開発環境や状況によってShaderGraphを使用して構築する機会もあります。 ShaderGraphを使用する際にいつもノーマルマップの扱いを忘れてしまっていたので今回ま…

MixedRealityGraphicsToolsのShaderGraphについて

本日はMRGT枠です。 最新のMRGTのバージョンではShaderGraphの機能が提供されています。 今回はこちらについてどのようなものなのか調査していきます。 〇MRGTのShaderGraph ShaderGraphはUnityでノードベースでシェーダーを構築できる機能です。 通常シェー…

ゼロから始めるUnityShader開発 オブジェクトとの距離に応じてフェードがかかるシェーダー

本日はShader学習枠です。 今回はShaderを使用してオブジェクトを描画しているカメラとの距離に応じてフェードを書ける表現を行っていきます。 これはMixedRealityGraphicsToolのStandardShaderではNearFadeと呼ばれる機能に当たります。 redhologerbera.hat…

MixedRealityGraphicsTools StndardShader全機能解説 ⑥ Assigned at Runtime その①

本日はMRGT枠です。 こんかいはMRGTStandardShaderの機能の中のAssigned at Runtimeについて紹介します。 〇Assigned at Runtimeとは? Assigned at Runtimeの設定項目はAlbedoにテクスチャを適応していない場合のみすぐ下に存在します。 MRGTStandardShader…

ゼロから始めるUnityShader開発  メッシュ本来の法線を取得する

本日はShader枠です。 先日はNormalVectorを使用して法線を描画するシェーダーを記述しました。 redhologerbera.hatenablog.com こんかいはメッシュの本来の法線を取得します。 〇メッシュ本来の法線とは 3Dモデルはシェーディングという補正を使用できます…

ゼロから始めるUnityShader開発 ShaderGraphのNormal Vectorノードをコードで再現する

本日はUnityシェーダー枠です。 〇Normal Vectorノード ShaderGraphのNormal Vectorノードはオブジェクトの持つ法線の値を使用することができます。 一般的に法線の向きに拡大縮小するアニメーションやNoramlMapなどに使用されています。 Normal Vectorノー…

Unityで最前面描画されるシェーダーを書く

本日はShader学習枠です。 先日はMRTK(MRGT)Standardシェーダーを使用してオブジェクトが重なっていたとしても最前面に描画されるシェーダーを書いていきました。 redhologerbera.hatenablog.com 今回はコードとして実装していきます。 こんかいは次のような…

Unity MRTKシェーダー、MRGTシェーダーで最前面描画を行う。

本日はMRTK枠および小ネタです。 Unityでアプリケーションを開発するうえで通常はカメラに対しての奥行で、奥から上書きされるように描画が行われることで、通常の物理空間同様に近くにあるオブジェクトほどほかのオブジェクトと重ならない見た目になります…

ShaderのCGPROGRAM~ENDCGとCGINCLUDE~ENDCGの違い

本日はUnity Shader学習枠です。 Untiyのシェーダーでは基本的にShaderLab言語の中でCGPROGOAM~ENDCGと記述されている間にCG/HLSL言語を使用してコードを記述します。 今回は構文に関するTipsです。 〇CGPROGAM~ENDCGとCGINCLUDE~ENDCG オーソドックスなシェ…

HoloLensの視野角を可視化するウィンドウを作成する。 その① ベースシェーダーを作る

本日はHoloLens枠です。 HoloLens 2のアプリケーションを初めての方に体験してもらう際にはデバイスの装着位置がずれている場合視野角の問題でホログラムを見ることができず、途切れて見えてしまうということがあります。 そのためアテンド側、アプリケーシ…

頂点シェーダーでのオブジェクトの回転を実装する

本日はShader枠です。 グラフィックパイプラインの中で3Dオブジェクトは頂点シェーダーステージで描画画面に対しての座標などが処理され、フラグメントシェーダーでピクセル色が決められています。 redhologerbera.hatenablog.com redhologerbera.hatenablo…

Hex表現を使用した出現シェーダーを作る まとめ

本日はUnityShader枠です。 先日までHex表現を行うシェーダーで出現エフェクトを作成しいていました。 今回はまとめ記事になります。 〇Hex.hlsl 今回の出現シェーダーの肝は参考として紹介させていただいているブログ記事様により公開されているShaderGraph…

UnityシェーダーのプロパティからBlendingを切り替えられるようにする

本日はShader枠です。 透明度を扱うシェーダーではそのシェーダーによって描画されたピクセルをすでに描画されているピクセルとどのように合成するか?というBlendingという設定があります。 この設定を行うことで半透明な表現を行うことができますが、これ…

Hex表現を使用した出現シェーダーを作る その⑦ HoloLensにビルドする

本日はShader枠です。 先日よりHex表現を使用した出現シェーダーを開発しています。 先日はSpatialMesh用に調整を行いました。 今回はこのシェーダーを実機で確認していきます。 〇SpatialMeshのマテリアルの設定 今回はMRTKv2.8を使用しています。またMRTK…

Hex表現を使用した出現シェーダーを作る その⑤ Unity上の別の物体との距離に応じてエフェクトをかける

本日は昨日に引き続きShader枠です。 昨日はUnityのワールド座標基準で出現エフェクトを行うシェーダーを作成しました。 今回はさらに発展させ、あるオブジェクトを中心に3次元的にエフェクトが行われる表現を行います。 〇Unity上の別のオブジェクトの位置…

Hex表現を使用した出現シェーダーを作る その④Unityのワールド座標基準でエフェクトをかける

本日はShader枠です。 先日に引き続きHex表現を使用したエフェクトを作成します。 redhologerbera.hatenablog.com 昨日の状態まではオブジェクトの持つUV座標に依存してHex表現を行っていました。 これによってオブジェクトの持つUV情報によっては表現が破断…

Hex表現を使用した出現シェーダーを作る その③発光演出

本日は昨日に引き続きシェーダー枠です。 先日はHex表現を使用した出現シェーダーとして透明度を持たせて出現する仕組みを作成しました。 redhologerbera.hatenablog.com 今回はさらに発光エフェクトを追加してエフェクトとしてディティールアップしていきま…

Hex表現を使用した出現シェーダーを作る その②透明度を実装する

本日は昨日に引き続きShader枠です。 redhologerbera.hatenablog.com 昨日は六角形の形で画像が現れるようなシェーダーを記述しました。 今回はこれをベースに本格的な出現エフェクトを作成します。 〇エフェクトの反転 透明度を実装する前に先日のシェーダ…

Hex表現を使用した出現シェーダーを作る その①

本日はUnityシェーダー枠です。 昨日他ブログにて紹介されていたHexagonNodeを使用してHex=ハニカム上にテクスチャをサンプリングするシェーダーを作りました。 redhologerbera.hatenablog.com 今回はこちらのシェーダーを応用して出現エフェクトを作成して…

UnityシェーダーでHex表現を導入する

本日はShader学習枠です。 〇Hexノード 今回は八角形の形状がタイリングされた見た目をシェーダーに組み込んでいきます。 今回シェーダーを使った面白い表現を探していた時に次の記事を見つけました。 r-ngtm.hatenablog.com 上記の記事ではShaderGraphを使…

ゼロから始めるUnityシェーダー開発  複数のテクスチャを使用するシェーダーを記述する その①

本日はシェーダー枠です。 今回はテクスチャを応用して複数のテクスチャを混ぜ合わせて表示できるシェーダーを記述していきます。 〇シェーダーでテクスチャを扱う方法 シェーダーでテクスチャを扱うシェーダーは次のようになります。 Shader "Unlit/Texture…

Unityエディタ拡張を使用して現在開かれているシーンのすべてのMeshRendererからCastShadowを設定する

本日はUnity枠です。 Unityではメッシュを描画する際は一般的にMeshRendererコンポーネントを使用しています。(アニメーションを行うメッシュなどはSkkinedMeshRendererなどが使用される場合もあります。) MeshRenererでは描画の設定として影を設定するこ…

MRGTShaderdShaderのCastShadowの実装を読み解く

本日はMRGT枠です。 Microsoft MixedRealityGraphicsToolsで提供されているGraphicsToolsStandardシェーダーはMixedRealtiyデバイス向け、特にMicrosoft HoloLensに最適なパフォーマンスを出すことを目的として開発されています。 Unityの描画処理の中で特に…

Unity上でChatGPTを使用してシェーダーを作成するAIShaderを試す。

本日はShader&AI枠です。 23年に入りChatGPTの普及が爆発的になっていますが、先日Unityのエディタ内でChatGPTを使用してシェーダーを作成するテストリポジトリが公開されました。 今回はこちらを試していきます。 〇ChatGPTとは? ChatGPTはDALL・E2やStab…

Unityプロジェクトウィンドウを拡張して直接GprahicsToolsStandardシェーダー適応済みのマテリアルを作成する

本日はMRGT調査枠です。 筆者は基本的にGraphicsToolsStandardShaderのマテリアルを愛用しています。 しかしUnityではマテリアルを作成する際にBuiltInパイプラインではStandard、URPではURP/Litシェーダーのマテリアルがデフォルトで作成されます。 毎回マ…

Unityでステンシル値を任意に変更可能なシェーダーを実装する

本日はMRGT枠です。 MRGTではEnableStencileTestingという項目で一つのシェーダーでマテリアルごとにステンシルプロパティを変えることができます。 この機能を自作シェーダーに組み込んでみます。 〇MRGTの実装 GraphicsToolsStandardShaderの実装は次のよ…

Unityで特定のオブジェクトだけ明るく見えるシェーダーを作成する その② オクルージョンの実装

本日は昨日に引き続きシェーダーを紹介します。 〇Unityで特定のオブジェクトだけ明るく見えるシェーダーを作成する redhologerbera.hatenablog.com 昨日は特定のオブジェクトが明るく強調表現されるような表現を紹介しました。 この方法ではステンシルとい…

Unityで特定のオブジェクトだけ明るく見えるシェーダーを作成する

本日はMRGT&Shader枠です。 今回はMRGTを使用した特殊なエフェクト表現を紹介します。 例えば特定のオブジェクトに注目させたい場合などに全体的に描画を暗くしながらも特定のオブジェクトのみ通常の明るさで描画していきます。 〇環境 ・Unity2021.3.5f1 …

MRTKのNearFade機能を応用してオブジェクトの一部が透明になる表現を実装する

本日はMRGT枠です。 MRGTのStandardShaderにはNearFade機能が搭載されています。 redhologerbera.hatenablog.com この機能は基本的にマテリアルを使用しているオブジェクトとユーザー(カメラ)の距離に応じて透明になるという機能ですが、UseLightのオプショ…