e.blog

主にUnity/UE周りのことについてまとめていきます

シェーダ

LiDARセンサーのデータを使ってUnityで点群を描画する

概要 今回はiPadやiPhoneに搭載されているLiDARセンサーから得られる深度情報を使って、立体的に点群位置を計算する方法について書いていきます。 具体的な動作は以下の動画をご覧ください。画面中央に表示されているのが、センサーから得られた情報を元に点…

Unity VFX Graphでposition mapを使って導蟲風パーティクルを作る

概要 Meshの頂点をテクスチャにベイクする テクスチャの内容 Texture2Dに保存したPosition Mapをサンプリングする ターゲット位置に徐々に近づける ランタイムにデータをVFX Graphに送る まとめ 概要 今回はVFX Graphを使ってパーティクルをMeshにまとわりつ…

VFX GraphのConform to Signed Distance Fieldのコードを読んでみる

概要 そのVFX Graphの中にConform to Signed Distance FieldというBlockがあります。 SDFを活用することで表現力が向上するので、今回はそのコードを読んでSigned Distance Field、SDFがどういうふうに使われているのかを見ていきたいと思います。 実際に実…

SRP Batcherが有効なURP向けのシェーダを書く

この記事はUnityアドベントカレンダー2020の5日目の記事です。 qiita.com 概要 SRP Batcherを有効にする マクロと関数を覗いてみる ZERO_INITIALIZE CBUFFER_START / CBUFFER_END TransformObjectToHClip まとめ 概要 以前、URPのScriptableRenderFeatureを…

【XR】URP向けのマルチビュー対応イメージエフェクトシェーダの書き方

概要 前回書いた「URPで背景をぼかしてuGUIの背景にする」で書いたことの続編です。 edom18.hateblo.jp 具体的には、前回の実装のままでVRのマルチビュー(やSingle Pass Instanced)に変更すると正常に描画されないという問題があったのでそれへの対応方法…

URPで背景をぼかしてuGUIの背景にする

概要 今までのビルトインパイプラインで利用していたCommandBufferはSRP環境では少し違った方法で実装しないとならないようです。 今回はSRPでのカスタムパスの使い方と、それを利用してuGUIの背景にブラーを掛けるエフェクトについて書きたいと思います。 …

ComputeShaderで動かす様々な形に変化するパーティクルシステム

概要 今回は1/7〜1/10にかけて開催されたCES2020でMESONが展示した『PORTAL』の中で、メインの演出となったパーティクルシステムについて書きたいと思います。 このパーティクルシステムの特徴は、指定したモデルグループの頂点位置にパーティクルをまとわせ…

Generalized Perspective ProjectionをUnityで実装する

はじめに 元記事は、以前自分が英語で書いたものの日本語訳版になります。(自分で書いた英語を翻訳するという初体験w) medium.com 概要 今回のこの記事は、Generalized Perspective ProjectionをUnityで実装するための解説記事です。 これが意味するのは…

Unityで流体シミュレーション ~粒子法編~

はじめに 以前に、格子法を用いた2次元の流体シミュレーションについて概念編と実装編に分けて2つの記事を書きました。 しかし格子法は、その定義領域の範囲を越えてしまうと計算ができなくなってしまうという問題があります。特に今回は3Dに拡張し、AR/VR内…

ドメインワープをテクスチャフェッチで実装する

概要 以前、フラクタルブラウン運動とドメインワープという記事を書きました。 ここで紹介した方法は、ドメインワープの計算のためにランタイムでノイズを計算する方法でした。 ちなみにドメインワープによるアニメーションはこんな感じのものになります↓ が…

Unityで流体シミュレーションを実装する 〜 実装編 〜

概要 前回は流体シミュレーションの概念編を書きました。 edom18.hateblo.jp 今回は前回説明した内容を元に実際に実装したプログラムに関して解説していきたいと思います。 ちなみに実行したデモ動画はこちら↓ 前のやつ、ちょっと計算間違っていてちゃんと動…

Unityで流体シミュレーションを実装する 〜 概念編 〜

はじめに 今回の実装をするにあたってナビエ・ストークス方程式を解いて実装していく必要があるのですが、正直、数学・物理としての正確な意味の理解や方程式のしっかりとした理解には至ってません。 式の内容やどういうことを行っているのかというのは理解…

シャボン玉風シェーダを実装してみたのでメモ

概要 今回の実装はこちらの論文(汎用的な構造色レンダリング手法の開発)を参考に実装したものになります。 ただ理解が足りていない部分や勘違いなどあるかもしれないので、もし間違いなどあれば指摘いただけると嬉しいです。 また今回の実装にあたってこち…

Unityで簡易TexturePackerを実装してみた

はじめに 概要 実装のフロー コード全容 シェーダによる書き込みと読み込み シェーダによる書き込み シェーダによる読み込み 最後に はじめに こちらの記事を参考にUnityで簡易的なTexturePackerを実装してみたのでそのまとめです。 blackpawn.com ちなみに…

Compute ShaderとGraphics.DrawMeshInstancedIndirectを使ったレンダリングを理解する

概要 ComputeShaderを準備する コード システム全体で利用する構造体を定義する C#コード側でデータを準備し計算を実行する コンピュートシェーダで利用するものと同じレイアウトの構造体を定義する 各データ用変数を定義 データのセットアップ Indirect(間…

Unityで簡易的なドローイングツールを作ってみたので実装についてまとめ

概要 Unityで簡易的なドローイング機能がプロジェクトで必要になったので作ってみたもののまとめです。 実装はシェーダを利用して描いていて、ブラシと色とサイズを変更できるようになっています。 実際の動きはこんな感じ↓ Unityで簡易的なドローイング機能…

Unity AR FoundationでPeople Occlusionをやってみる

この記事はUnityゆるふわサマーアドベントカレンダー 2019 #ゆるふわアドカレの8/11の記事です。 概要 UnityのPackage Managerで提供されているAR Foundation。最近はARKit3のサポートが入ってだいぶ熱くなってきてますね。 ということで、今回はAR Foundati…

ARで影を描画する(影だけをレンダリングするシェーダ)

概要 ARコンテンツを作っているとキャラやオブジェクトの影をつけたくなります。 ただ、通常地面はARKitの機能で認識した平面に対して透明(か半透明)のメッシュを配置して表現します。 そしてUnityの標準のシェーダでは透明なオブジェクトには影が落ちませ…

ソフトパーティクルの仕組みを応用した表現

概要 コード解説 ComputeScreenPos 余談 COMPUTE_EYEDEPTH UnityObjectToViewPos デプスの算出 UNITY_PROJ_COORD SAMPLE_DEPTH_TEXTURE_PROJ LinearEyeDepth 余談 デプスを用いたフェード処理 depthTextureModeをオンに 最後に 概要 ソフトパーティクルの仕…

uGUIの背景をぼかしてオシャレに見せる

概要 最近、Apex Legendsにハマって毎日のように時間が吸われていってます。(まずい) さて、今回はこのApex LegendsのUIで使われているような「背景がボケているUI」を作る方法を書いていきたいと思います。 ↓こんな感じで、背景が透過+ボケている「すり…

Unityの行列の扱いとベクトルのオーダー周りについてまとめておく

概要 自分で直に行列変換周りの処理を書くときに、掛ける順番やオーダー周りについていつも混乱するのでまとめておきます。 座標系の向き これは、行列のオーダーには直接関係はありませんがよく混乱するので書いておきます。 Unityでは「左手系」の座標系を…

Unityでガウシアンブラーを実装する

概要 よく使う&表現力の高いぼかし処理。 以前にもぼかしを利用したコンテンツを作成したり、記事を書いたりしていましたがちゃんとぼかしだけにフォーカスしたことはなかったので改めて書きたいと思います。 今回のサンプルを動かしたデモ↓ ちなみに以前、…

モデルの頂点をUV展開した先の位置に任意の絵をテクスチャに描き込む

概要 UV展開した位置に描き込む、とは? それでなにがうれしいの? ことの発端 どうやって傷(デカール)をつけるか 通常のシェーダのレンダリングをどうテクスチャに展開するか UV値をそのまま頂点位置として利用する UV2に全頂点を書き出す UV2の値はUVと…

CustomRenderTextureを使って波紋エフェクトを作る

概要 ダウンロード CustomRenderTextureとは CustomRenderTexture用のcgincがある CustomRenderTexture用シェーダを書く 波動方程式を解く 波動方程式を解くシェーダ(for CustomRenderTexture) CustomRenderTextureのセットアップ CustomRenderTextureの生…

カールノイズを使ったパーティクル表現

概要 前回の実装ではパーティクルはすべて常にアップデートされていた 連続してパーティクルをエミットする パーティクルをプールして管理する プールの状態を初期化するInitカーネル Append Buffer、Consume Bufferを利用してプールを管理する パーティクル…

ジオメトリシェーダ入門

概要 ジオメトリシェーダとは コードを見てみる ドキュメント Syntax パラメーター ストリーム出力オブジェクト Syntax パラメーター 違ったコードを見てみる 実例を見てみる 実際に動いている動画 概要 今回はジオメトリシェーダ入門という形で記事を書いて…

ライトマップデータから影の情報を抜き出し頂点カラーに焼く

概要 とあるプロジェクトで頂点カラーにライトマップの影情報を焼き込めないか、という話があって試してみました。 結局その機能自体は使いませんでしたが、ライトマップデータへのアクセスなど学びがあったのでまとめておきます。 ライトマップデータの読み…

Unityでクリッピング平面を実装する

概要 今作っているARアプリでクリッピング平面を作る必要が出てきたのでそのメモです。 動作サンプル↓ 動画サンプルで動かしたものはGitHubで公開しています。 ちなみに、クリッピング平面自体の説明は以前Qiitaに書いたのでそちらをご覧ください。 今回書く…

UnityのCompute ShaderでCurl Noiseを実装(衝突判定編)

概要 今回は「衝突判定編」です。 前回の「流体編」の続編です。 edom18.hateblo.jp さて、今回は論文で発表されたカールノイズの『衝突判定』について書きたいと思います。 実際に動いている動画↓ やったー。カールノイズの衝突判定もちゃんと動いた。 pic.…

UnityのCompute ShaderでCurl Noiseを実装(流体編)

概要 ソースコード 今回の記事で書くこと 大まかな解説 非圧縮性を確保する 用語解説 ベクトル場 カール(Curl・rot) ramp関数 本題 ノイズを生成する カールノイズのカーネル 次回予告 - 衝突判定 概要 今回は「流体編」と題しました。 というのも、発表さ…