e.blog

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

C#

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

概要 前回の実装ではパーティクルはすべて常にアップデートされていた 連続してパーティクルをエミットする パーティクルをプールして管理する プールの状態を初期化する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…

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

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

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

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

ランタイムでAvatarを生成してアニメーションに利用する

今日の記事は、UnityのAdvent Calendarの9日目の記事です。 qiita.com 概要 VR開発をしていると、キャタクター(アバター)を表現する方法として頭と手だけの簡易的アバターか、通常のキャラクターモデルを用いたアバターの2種類から選ぶことになります。 そ…

ARKitで撮影した映像を(疑似)IBLとして利用する

今日の記事は、ARKitのAdvent Calendarの2日目の記事です。 qiita.com 概要 今回は、ARKitで平面検出を行っている映像データを使って、(疑似)IBLをしてみたいと思います。 ちなみに、ARKitをUnityで使う際の実装については前の記事で少し書いたので、ARKit…

UnityでThreadを使って処理を分割する

概要 Unityではスレッドを使うことが想定されていません。 というのも、いわゆる「Unity API」と呼ばれる様々なUnityの機能が、メインスレッド以外からは呼び出せない仕様となっているからです。 UIはメインスレッドからのみ操作できるというのと似ています…

iOSのARKitを使ってVRのポジトラをやってみた

概要 ずっと気になっていたARKit。やっと触ることができたので、ひとまず、空間認識して色々触ったあと、VRのポジトラに流用するのをやってみたのでまとめておきます。 AR自体がポジトラしてモデルなんかを表示できるので、これをVRモードのカメラの位置に転…

視錐台とAABBとの交差判定

概要 とあるオブジェクトが「カメラに映る対象か」というのを知りたいケースはあると思います。 また、通常のカメラだけでなく、「視界」を表した視錐台を定義してその中にオブジェクトが含まれるか、というのもあるとありがたい機能でしょう。 (例えば敵AI…

ComputeShaderを触ってみる その2 ~バッファ・テクスチャ編~

概要 前回の記事(ComputeShaderを触ってみる その1 ~スレッド編~)で、Compute Shaderのスレッドの概念について書きました。 edom18.hateblo.jp 今回は、Compute Shaderを実際に使って、少し意味のある計算をしてみたいと思います。 意味のある計算をさせ…

Daydream開発はじめたのでメモ

概要 開発環境の整備 adbをWi-Fi経由で実行する コントローラを使う コントローラの状態を知る Buttons GvrEventSystemを使う ハマったこと Single Passレンダリングを利用すると色味がおかしくなる Daydreamコントローラの感度が悪い Playerにコライダを設…

八分木(モートンオーダー)を使ってエリアを分割して処理負荷を軽減する

概要 今回の記事に関しては以下の記事をほぼそのまま参考にさせてもらっています。 実装自体はUnityで行い、コードもC#で作りましたがベースとなる理論は記事をそのまま参考にさせていただきました。 マルペケさんの記事には毎度本当にお世話になっています…

SkinnedMeshとBoneWeightについてメモ

概要 とある実装をしていて、アニメーション周りをわりと触ったのでそのメモです。 具体的には、メッシュカットを利用してメッシュを分断したあと、分断したメッシュもボーンアニメーションさせたくて実装したメモです。 実際に切断してアニメーションさせた…

UNETを使ってネットワーク間で処理を同期する

概要 前に使っていたNetworkViewを使った処理はdeprecatedになり、新しく UNET という仕組みが登場しました。 今回はこれを使っていくにあたって色々新しい概念が出てくるのでそれをまとめておこうと思います。 用語整理 UNETを使う上で、(慣れるまでは)色…

uGUIのEventSystemを理解する

概要 Unity4.6から導入されたEventSystem。 調べてみると色々と学びがあるのでメモとして残しておきます。 (若干、今さら感がありますが) まず最初に大事な概念として、このシステムはいくつかのクラスが密接に連携しながらイベントを処理していく形になっ…

ComputeShaderを触ってみる その1 ~スレッド編~

概要 並列化可能な、膨大な数の計算を行う場合はCompute Shaderの出番です。 今回はこの「Compute Shader」を触ってみたのでそのメモです。 Compute Shaderの最小単位 Compute Shaderを利用する場合、まずは.computeファイルを作成します。 そして作成したCo…

HTC Viveの埋め込みカメラの映像をテクスチャとして取得・表示する

概要 HTC Viveのヘッドマウントディスプレイには、フロントカメラが埋め込まれています。 このカメラは、メニュー表示時にカメラを起動し外の状況を確認したり、ゲーム画面自体にオーバーレイで周りの状況を表示して、HMDを脱がなくても色々とできるように、…

Photonを使ってネットワーク同期させる

概要 今作っているコンテンツはネットワークの同期を行って遊ぶゲームを想定していて、プラットフォームにPhotonを選びました。 ネットワーク同期をする場合、サーバ・クライアント型のものとP2P型のものとがあり、PhotonはP2P型のものになります。 UNETもPh…