夜風のMixedReality

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

Shader

ComputeShaderでRenderTextureを用いた描画プログラムを作る その①

本日はComputeShader枠です。 〇ComputeShaderとは? ComputeShaderはその名の通りシェーダープログラムであり、GPU上で実行されますが、一般的なShaderと異なり、描画を目的としていません。 GPGPU(General Purpose GPU)の考え方に基づき、GPUの並列演算機…

ゼロから始めるUnityShader開発 第六章 Unity座標で定義される球を使った表現

本日はShader枠です。 今回はUnityでワールド空間上に任意の点を等間隔で指定し、描画するシェーダー表現を行います。 〇完成物 〇Unityの座標で定義される球 Unityの座標空間上に一定間隔で定義される球表現は以下の関数で行います。 float SphereGroupHard…

UnityでMRGTを使用したマテリアルの使い方

本日はUnity,MRGT枠です。 今回は初歩的な記事としてUnityでのMRGTのマテリアルの使用法をまとめます。 〇環境 ・Unity2022.3.26f1 ・Windows11PC ・Microsoft GraphicsTools v8.0 〇マテリアルの作成と使用 3DCGの描画には造形情報であるポリゴン(頂点と辺…

ゼロから始めるUnityShader開発 第六章 セルルックなライティングを行う その③ハイライトの実装

本日はShader枠です。 現在はライティングについてのシェーダー構築をステップアップで見ています。 前回はShadowColorを追加して影の色を任意に変更できるようにしました。 redhologerbera.hatenablog.com redhologerbera.hatenablog.com 今回はハイライト…

ゼロから始めるUnityShader開発 第六章 セルルックなライティングを行う その②シャドウカラーの実装

本日はShader枠です。 前回はライティングの一環としてセルルックなシェーダーを実装しました。 redhologerbera.hatenablog.com 前回の状態だと影が真っ黒になります。 今回は影の色を変更可能にします。 〇影の取得 影に色を付けるためにはまずは影のピクセ…

ゼロから始めるUnityShader開発 第六章 セルルックなライティングを行う その①

本日はShader枠です。 今回はShaderの 〇環境 ・Unity6000.0.2f1 ・Windows11PC 〇セルルックなライティング Unityのシェーダーの場合ライティングによる影の計算はNdotLが基本的な考え方です。 NdotLとはメッシュの法線=Normal、とライト=Lightのドット積に…

UnityComputeShaderで頂点一つ一つに対して独自の処理を実装する

本日はUnity Shader枠です。 昨年よりComputeShaderに力を入れ始めましたが、筆者の中でコンピュートシェーダーの挙動に関してまだ慣れない点があり、今回は検証も兼ねて実装します。 〇環境 ・Windows11PC ・Unity2022.3.6f1 〇頂点ごとに違う出力を与える …

ゼロから始めるUnityShader開発 第六章 ステンシルを用いたShader表現

本日はShader枠です。 〇環境 ・Windows11PC ・Unity6000.3.2f1 ・URP 〇ステンシルとは? Shaderにおけるステンシル(Stencil)は、特定のピクセルを描画するかどうかを制御するための機能です。 シェーダープログラムでは最終的な出力をRGBの色としていま…

MRTK3のUIのボードを半透明にする

2024年最後の記事はMRKT3,MRGT枠です。 MRTK3ではMRTKv2から引き継いだMicrosoft FluentSystemに基づいたUIコンポーネントが提供されています。 〇環境 ・Windows11PC ・Unity2022.3.6f1 〇MRTKのUIを半透明にする MRTK3ではUGUIに基づいたCanvas上に構成さ…

UnityComputeShaderで外部に定義した処理のHLSLファイルを使用する

本日はShader枠です。 通常のShaderでは型や関数の定義や一般的使用可能な処理は外部ファイルに定義し、includeすることで使いまわします。 今回はComputeShaderでも同様に外部ファイルに処理を記述して読み込むことが可能であるのか気になったので調べてい…

ComputeShaderでオブジェクトを拡大縮小させる

本日はUnity枠です。 前回はComputeShaderでメッシュの回転を行っていきました。 redhologerbera.hatenablog.com ここでは回転行列を使用することでメッシュを回転させるアニメーションを行いました。 今回はスケールをアニメーションさせていきます。 〇環…

ComputeShaderでオブジェクトを回転させる

本日はShader枠です。 現在ComputeShaderを学習中ですが、今回はその例としてオブジェクトを回転させていきます。 〇環境 ・Unity2022.3.26f1 ・Windows11PC 〇コンピュートシェーダーでメッシュを回転させる コンピュートシェーダーでメッシュを回転させる…

シェーダー処理の中でif文は避けるべきか?ComputeShader内での利用は?

本日はShader枠です。 Shaderの処理内でif文は避けるべきということはよく言われることですが、ComputeShaderでの実装の場合やなぜそもそもそのように言われているのか理解をしていないところがあったため今回は学んでいきます。 〇Shader内でIF分の処理を行…

Unity ComputeShaderのデバッグを行う

本日はShader枠です。 先日からコンピュートシェーダーの勉強を始めた筆者ですが、あらゆるプログラミングにおいてデバッグログというものはとても大切です。 しかしながらGPU上で実行されるシェーダーはもともと色を出力するためのプログラムであるためログ…

Unity ComputeShaderでメッシュの頂点カラーを設定する その③任意の色を分ける

本日はShader枠です。 昨日はコンピュートシェーダーを使用して、Unityの任意のオブジェクトの情報を毎フレームコンピュートシェーダー内で使用することができました。 redhologerbera.hatenablog.com redhologerbera.hatenablog.com 今回は任意のColor型の…

Unity ComputeShaderでメッシュの頂点カラーを設定する その②あるオブジェクトを基準に色を分ける

本日はComputeShader枠です。 先日Unityのコンピュートシェーダーを用いてメッシュの頂点カラーを設定しました。 この時にワールド座標に基づいて色を付けていました。 今回はUnityのゲームオブジェクトを基準に頂点カラーを与える実装を行います。 〇環境 …

Unity ComputeShaderでメッシュの頂点カラーを設定する

本日はShader枠です。 少し前にUnityのComputeShaderを使用して頂点カラーを設定していきます。 redhologerbera.hatenablog.com redhologerbera.hatenablog.com redhologerbera.hatenablog.com というのも以前頂点カラーを実装した際にfor文で処理を行ってい…

Unityでコンピュートシェーダーを使用して頂点の状態を調べる その②

本日はコンピュートシェーダー枠です。 コンピュートシェーダーに関しては苦手意識があったため一つ一つ学んでいます。 redhologerbera.hatenablog.com 現在はコンピュートシェーダーの概要を学びながらある条件の頂点座標数を抽出する処理を実装しています…

Unityでコンピュートシェーダーを使用して頂点の状態を調べる その①

本日はUnity枠です。 筆者はシェーダーに関してはある一定以上の理解と構築力があると思っていますが、近年用いられているコンピュートシェーダーに関しては苦手意識を持っていました。 今回はコンピュートシェーダーを使用した簡単な実装を行っていきます。…

MRGT StandardShaderをカスタマイズしてオリジナルの機能を搭載するときに見るべきこと その①

本日はMRTK3およびMRGT枠です。 先日久々にMRGTのStandardShaderを改造して独自のシェーダーを開発しました。 ゼロイチでシェーダーを開発することもあるのですが、特に光の影響を受けるLitな表現や、透明度の実装などが入ると、実装がかなり大変になり、こ…

GraphicsTools/wireframeShader機能解説 

本日はMRGT枠です。 MixedRealityGraphicsTools(MRGT)には様々なマテリアルが提供されていますが、 〇環境 ・Windows11PC ・MixedRealityGraphicsTools 0.6.9 ・Unity2022.3.26f1(URP) 〇WireframeShaderとは? GraphicsTools/WireframeShaderはMRGTで提供さ…

ゼロから始めるUnityShader開発 第九章 射影行列

本日はシェーダー枠です。 CGを理解するにあたって重要な概念である行列についての勉強です。 コンピュータ内では多くのデータをテンソルであらわします。 テンソルとは、多次元配列を意味し、例えば画像データを見てみると、RGBAの四次元であらわされる色チ…

レイトレーシングについて歴史を交えまとめる その3 アリゴリズム2 レイとオブジェクトの交差

今回はオブジェクトとの交差についてのアルゴリズムについてみていきます。 〇レイとオブジェクトの交差 レイとオブジェクトの交差とは視点から発射されたレイが3D空間内のどの物体と交差するかを判定するプロセスです。 レイが物体の表面に当たるかどうか…

レイトレーシングについて歴史を交えまとめる その2 アルゴリズム1 カメラ座標の定義とレイの生成

本日はグラフィック枠です 前回はレイトレーシングの歴史についてみていきました。 redhologerbera.hatenablog.com レイトレーシング自体は1986年のレイキャスティングのアイデアをベースとして1979年に初めての論文が登場しました。 レイトレーシング自体は…

レイトレーシングについて歴史を交えまとめる。 その①概要

本日はShader枠(どちらかというと)です。 本日は論文などを読みながらレイトレーシングについての理解を深めながら書置きの記事になります。 〇レイトレーシングとは? レイトレーシングはコンピュータグラフィックスのレンダリング技術の一つで、非常にリア…

ゼロから始めるUnityShader開発 第五章 オブジェクトを回転させるシェーダー2 回転軸を変更する

本日はシェーダー枠です。 以前回転するシェーダーを書きました。 redhologerbera.hatenablog.com このシェーダーでは回転行列を使用して頂点シェーダー内でオブジェクトを構成する頂点を回転させました。 今回はこの回転軸を任意に変更可能にしていきます。…

ゼロから始めるUnityShader開発 第九章 スケーリング行列

本日はシェーダー枠です。 前回は平行移動行列を見ていきました。 平行移動行列は座標変換において使用される行列で、イメージとしてはワールド座標系に位置するあるオブジェクトの子オブジェクトを移動させる際などに使用される行列です。 3Dグラフィック…

ゼロから始めるUnityShader開発 第九章 平行移動行列

今回はシェーダー枠です。 前回は回転行列についてみていきました。 redhologerbera.hatenablog.com 回転行列は座標返還で使用されます。 3DCGの世界ではローカル座標、多くの物体に対してトランスフォームというプロパティが存在します。 ワールド座標とは…

ゼロから始めるUnityShader開発 第九章  座標変換と回転行列

本日はShader枠です。 昨日はUnityのシェーダーで頂点シェーダーをしようして回転を行うアニメーションを実装しました。 redhologerbera.hatenablog.com シェーダーで回転を行うことはCPUで実行されるスクリプトのUpdate関数を使用しないため比較的軽量とい…

ゼロから始めるUnityShader開発 第五章 オブジェクトを回転させるシェーダー

本日はShader学習枠です。 今回は頂点シェーダーを利用してオブジェクトを回転させます。 頂点シェーダーステージでは3Dデータから頂点をスクリーン座標に直した計算が行われています。 つまり座標変換に際してバイアスをかけることでメッシュの形状を変え…