e.blog

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

Unity

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

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

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

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

World SpaceのCanvasにWorld SpaceからRaycastする

概要 ARやVRなどの開発を行っているとGUIも3D空間に配置する必要があります。 しかしUnityのuGUIは2Dで扱うことを想定しており、通常のGraphicRaycastはスクリーンスペースの位置から判定を行うものになっています。 つまり、3D空間に置かれた(World Space…

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

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

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

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

Unityが起動しなくなってあれこれしたことを殴り書きしておく

概要 ある日突然、Unityが死んだ。 シーン読み込み時にフリーズして再起動したら、Unity自体が起動しなくなるという自体に遭遇。 結果的に4時間溶かしてなんとか解決した・・・。 ただ、正直謎が多すぎてこれで直るか分からないのだけど、同じ悩みを持ってい…

ネイティブテクスチャ経由で画面キャプチャ(RenderTexture)を保存する

概要 フロー RenderTextureを用意 CommandBufferを用意する ReadPixelsでピクセル情報を読み出す(※ 必要ありませんでした) RenderTextureのGetNativeTexturePtrを使ってネイティブテクスチャのポインタを取得 ネイティブプラグインへテクスチャのポインタ…

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をオンに 最後に 概要 ソフトパーティクルの仕…

Swiftでネイティブプラグインを作る

概要 SwiftからObjCを呼び出すためのBridge用ファイルを生成・設定する Objective-CからSwiftのメソッドを呼び出す Objective-CからSwiftのクラスをイニシャライザを使って生成する Tips その他気になったところ Swift Versionの設定 概要 以前、Objective-C…

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

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

Scriptable Render Pipeline(SRP)についてちょっと調べてみた

概要 いつもお世話になっている凹みさんの記事を参考にさせてもらってます。 基本的には凹みさんの記事を見ながら、自分の理解やメモを書いているだけの記事となります。 tips.hecomi.com なお、SRPについてはUnityのGithubアカウントから提供されているもの…

UnityのARKit Pluginのカメラ映像を利用してなにかする

概要 UnityのARKit Pluginを使えばARコンテンツを手軽に作ることができます。 しかし、当然ですがARは外界をカメラで撮影し、それを元に姿勢を判断しています。 つまり、QRコードリーダーやOpenCVなどを利用した画像認識など「カメラを利用した処理」をする…

特定のUIを除いて画面のスクリーンショットを撮影する

概要 ゲーム画面のスクリーンショットを撮影したい、というのはよくある要望でしょう。 そしてさらに「特定のUIだけを除いて」撮影したい、というのもわりとある要望だと思います。 例えば操作用のUIは非表示だけども、ステータス表示などは表示しておきたい…

揚力を計算して滑空する

概要 今モックで作成しているVRコンテンツに、滑空の要素を入れたかったので揚力の計算について調べてみたのでそのメモです。 ちなみに適当に飛行機っぽい形状を作って適用した動画はこんな感じです↓ Unityでグライダー風のものを作ってみた。 https://t.co/…

UnityのCamera#ScreenToWorldPointを自前で計算してみる

概要 Screen Spaceの座標をシーンのワールド座標に変換して、その位置になにかする、というのはよくある処理だと思います。 (例えば画面をタップしたらその先にレイを飛ばしてなにかする、とか) そのあたりは当然、Unityは準備してくれているのだけど、中…

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

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

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

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

ECSでComponentSystemを自作する

カヤックと自分との関わり 概要 大まかな考え方 なぜデータに着目? 「ComponentSystem」は2つある ComponentSystemとJobComponentSystem ComponentSystemを自作する勘所 データの構造を決める Entityとデータ構造を結びつける システムが要求する「グループ…

ECSをそろそろ触ってみる ~ECS入門 シーンにオブジェクトを描画編~

概要 ECSとは データ指向設計とは なぜデータに着目? キャッシュミスを減らして効率化 登場人物 導入方法 ECS Hello World 全体を管理する「World」クラス エンティティを生成する準備 生成フロー データ指向のための「設計」 設計を元にしたインスタンス化…

SteamVR SDK2.0以降でViveトラッカーを適切にアサインする

概要 Kunclesが手元に届いたということもあって、SteamVR SDK2.0について本腰を入れて調べてみようと思い立ちました。が、そもそも以前から適切にViveトラッカーを認識させられず、結局1.0を使うか騙し騙しトラッカーを使っていた状況でした。 そこで、まず…

点と凹多角形の内外判定を行う

概要 判定の考え方 Crossing Number Algorithm Winding Number Algorithm 角度を利用したアルゴリズムの実装解説 角度を使ったアルゴリズムのソースコード 平面法線を使って回転の方向を判定 浮動小数点誤差などを考慮 辺との交差を利用したアルゴリズムの実…

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

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

Unityでパーリンノイズの実装

概要 今回はパーリンノイズについて書きたいと思います。 以前実装して使ったりしていましたが、しっかりと理論を理解して使ってはいなかったので、改めて、という感じです。 Wikipediaから引用させていただくと、 パーリンノイズ(英: Perlin noise)とは、…

UNETのLow Level APIを使ってシンプルな位置同期の仕組みを作る

概要 概観する 登場人物 クラス enum フロー セットアップ ネットワークの初期化 コネクション、データ受信などのネットワークイベントをハンドリングする サーバへ接続する シリアライズしてデータを送受信する データのシリアライズ プロトコルについて考…

頂点座標とUV座標から接ベクトルを求める

概要 接ベクトル空間 接平面 頂点にある5要素から接ベクトルを求める テクスチャ座標のUV値の変化を観察する ローカル座標をUV座標で表す 実装コード パースペクティブコレクト パースペクティブコレクトを用いるとき 概要 法線マップを利用する際に使われる…

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

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

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

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

ジオメトリシェーダ入門

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