e.blog

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

2018-01-01から1年間の記事一覧

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 パラメーター 違ったコードを見てみる 実例を見てみる 実際に動いている動画 概要 今回はジオメトリシェーダ入門という形で記事を書いて…

OBB(Oriented Bounding Box)を計算する

概要 OBBとは 主成分分析とは 固有値・固有ベクトルとは 分散共分散行列とは 分散 共分散 固有ベクトルを求める jacobi法(ヤコビ法)で固有ベクトルを求める C#コード 概要 今回はOBB(Oriented Bounding Box)についてのまとめです。 今実装している中でボ…

クォータニオン(回転)についてメモ

概要 クォータニオンとは クォータニオンの各要素 クォータニオンTips 内積 回転軸 ワールド空間での回転クォータニオンをローカル空間に変換する クォータニオンのSlerp オイラー角からクォータニオンを求める クォータニオンからオイラー角を求める 回転の…

PlayerPrefsを操作するエディタウィンドウを作成する

概要 EditorWindowを継承した、エディタ拡張のメモです。 普段、エディタ作成をそんなにしていないので忘れがちなので。 ちなみに今回は、汎用的になるようにPlayerPrefsを操作するっていう名目でサンプルを作成しました。 準備 エディタ拡張の詳細はここで…

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

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

簡易的なiOS向けネイティブプラグインを書いてみる

概要 ネイティブ側の処理を「.mm」ファイルに書く Plugins/iOS以下にファイルを置く Cの関数として定義 Objective-Cも当然使える Unityとネイティブ側で連携する ハマった点 Photos.frameworkを追加する NSPhotoLibraryUsageDescription keyを追記する Unity…

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

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

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

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

TransformクラスのTransform**** / InverseTransform****系メソッドのメモ

以前、Qiitaで書いていた記事の移植です。 Inverse系も追加したのでこちらに移動しました。 概要 TransformPoint、TransformVector、TransformDirectionがそれぞれなにをやってくれているのか、ピンと来てなかったので、どういう処理をしたら同じ結果が得ら…

TransformのLookAtをUnity APIを使わずに書く

概要 仕事でLookAtを、Unity APIを使わずに書くことがあったのでメモ。 実行した結果。ちゃんとCubeを注視し続けます。 サンプルコード 実装したサンプルコードは以下。 このスクリプトをカメラに貼り付けて、ターゲットを指定すると常にそれを視界に捉えた…

フリーハンドで描いた図形をポリゴン分割する

概要 フリーハンドで平面に描いた形に図形を形成するのをやりたかったので、頂点群からポリゴンを形成する処理について書きたいと思います。 こんな感じで、適当に打った点からポリゴンを形成します↓ 手書きで書いた点から三角形分割してメッシュ化。 pic.tw…

AndroidのSpeechRecognizerをネイティブプラグイン化してUnityで使う

概要 UnityでAndroidのネイティブな音声認識機能を利用したかったのでプラグインから作成してみました。 今回は作成方法などのまとめです。 なお、ネイティブプラグイン自体の作成方法については以前書いたのでそちらを参照ください。 edom18.hateblo.jp 今…

Unity向けにAndroidのネイティブプラグインを作成する

概要 Unity向けに、Androidのネイティブ機能を呼び出す部分が作りたくて色々調べたのでまとめておきます。 今回は特にこちらの記事を参考にさせていただきました。 indie-du.com Android Studioで新規プロジェクトを作成する 今回作成するのはaar(Android A…

Unreal Engine C++ 逆引きメモ

目次 目次 概要 生成・取得・削除 C++クラスの生成 コンストラクタ内でNewObjectは使えない PlayerController / PlayerPawnを取得する PlayerController PlayerPawn GameModeとの関連 ワールドに存在するアクターをすべて取得する アクターオブジェクトを生…

UnityのネイティブプラグインをC/C++で作成する準備

概要 ネイティブで書かれたプラグインを、使うことはあっても自分で書いたことがなかったのでHello Worldしてみたメモです。 ちなみに、できるだけ動作を把握する意味も込めてコマンドラインで作ることを前提としています。 開発環境を整える 最初、Git Bash…

UnrealEngineでVRことはじめ(C++編)

概要 Unreal Engineで、VR向けコンテンツをC++を使って作るための「ことはじめ」を書いていきたいと思います。 大体の書籍を見ていると、ブループリントの説明しかなくてあまりC++に対して言及しているものが少なく感じます。 ただ、やはり自分としてはでき…

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

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

実行時に使えるユニークな識別子を生成する

概要 Unityで開発していると、ときに、「固定の」ユニークなID(識別子)を割り振りたいときがあります。 Unityにはもともと、Object.GetInstanceIDがありますが、これはユニークではあるものの、実行時や保存時などに書き換わる可能性があります。 (どのタ…