GitBook
はじめに GPU Instancing を使うと同一メッシュ・マテリアルを使用したオブジェクトを一度に大量に描画することが出来ます。GPU Instancing そのものについてはテラシュールブログさんや公式ドキュメントをご参照ください。 tsubakit1.hateblo.jp docs.unity3d.com 本エントリでは、シェーダ内でどのようにこの GPU Instancing に対応するシェーダが展開されるかの解説を行います。ただ、Unity がここで解説するような細かいことは覚えて置かなくても良いように設計してくれているので、途中の面倒なマクロの展開を追うコードを読むのが飽きたら、最後のまとめだけ読んでみてください。 環境 Unity 2017.4.11f1 ベースとなるコード 以下の基本的なコードをもとにします。ここに色々手を加えてインスタンシング対応にします。 Shader
今年遭遇した、気づかないうちに嵌ってしまったUnityのパフォーマンス上の落とし穴を振り返っています。 part 2 です。 part 1 はこちら 今回は主に、Unity 独自の c# 実行環境である IL2CPP と、 Unityエンジン部分の c# の API についての経験談を書いてみました。 4. IL2CPPの吐くコードサイズの爆発 IL2CPPとはなんぞや IL2CPP コードサイズ肥大化によって起こる問題 ビルドが通らない .NET 3.5 → .NET 4.6 でさらにコードサイズが爆発 メモリ使用量と実行速度 対策1. ジェネリック型の 型パラメータには int か enum を使う UniRx.Unit.Default Dictionary<TKey, TValue> 対策2. seald 修飾子 5. 無害に見える UnityのAPIが実はアロケートを発生させてる件
はじめに https://docs.unity3d.com/Packages/com.unity.immediate-window@0.1/manual/ エディタ上でコンパイル無しでコードを実行できる拡張機能のパッケージが Package Manager からインストールできるようになっていました 2018/12/17 現在はプレビュー版となっております インストール方法 Unity メニューの「Window>Package Manager」から 「Immediate Window」をインストールすることで使用できるようになります 使い方 Unity メニューの「Window>Analysis>Immediate Window」を選択すると コンパイル無しでコードを実行できるウィンドウが表示されます 例えばウィンドウ下部の入力欄に GameObject.Find( "Main Camer
GC(ガベージコレクション)はコードに紛れひっそりと忍び込みます。 今回はソレを見つけるのに便利なAPIが追加されていたので試してみました。 AllocatingGCMemoryでGCの発生を監視する 実際に使ってみる 関連 AllocatingGCMemoryでGCの発生を監視する Unity 2018.3からAllocatingGCMemoryが新しく追加されました。 このコードとAssert.Thatを使用すると、実装の中でGCが発生しているかどうかをテストすることが出来ます。 Unity - Scripting API: AllocatingGCMemoryConstraint 例えば下のコードはマニュアルのコードです。int aを定義し代入する処理がGCを発生するかといった点をテストしています。 ここで少し注意したいのが、IsがNUnit.Framework.IsではなくUnit
はじめに サーフェスシェーダは Unity が提供してくれているライティングなどの処理を簡略化して書けるシェーダです。予め定義された SurfaceOutput や SurfaceOutputStandard といった構造体に必要な情報を詰め、影を使うかアルファを使うかといったオプションを選択してあげると、それらの情報を元に頂点・フラグメントシェーダに変換してくれます。 docs.unity3d.com 変換後の頂点・フラグメントシェーダはサーフェスシェーダ時と比べるとかなり長いコードになります(Standard Shader よりは少しシンプルです)。パスも複数含まれ、Forward Base(Forward レンダリング時のベース処理)、Forward Add(Forward レンダリング時のライト加算処理)、Deferred(Deferred レンダリング時の処理)、Meta(ライト
前回と前々回で、Android nativeの関数をUnityから呼び出す方法について紹介してきました。 Android StudioでUnity向けmoduleを作る方法 - CrossRoad Android Studioで作ったmoduleをUnityから呼ぶ方法 - CrossRoad この方法によりJavaで書いたコードをUnityで呼べるのは間違いありません。しかし、2回目で書いたように、実際に呼びたいAndroidの側のコードはもっと複雑であることが多く、この方法だけではうまくいかないことがあります。 たとえば、下記の記事で試している音声認識のソースコード(Android Studio)をUnityで使おうとすると、色々なエラーがでてしまい、使うことができません。 【2016/11/27更新】【Android】Bing Speech APIを使う手順とトラブル対応法をまとめま
今回は地味ですが神機能なAssembly Definition Filesについて紹介します。 この機能は地味ですが、Unity開発の上で発生してる問題を(意図せず)かなり解決してくれるので、Unity 2017.3以降を使う人は是非覚えておいた方が良いかもしれません。 物自体は、C#のコードが出力するアセンブリを複数のアセンブリに分割する機能です。 ただし、使い方によってはコンパイル時間の削減によるイテレーションの高速化やビルドサイズ、アセットストアでの不満など様々な要素を解決する可能性がある機能です。 目次 Assembly Definition Filesという神機能 コンパイル時間を削減してくれるという神機能 プラットフォーム毎にコードを分けてくれるという神機能 AssetStoreから購入したアセットのNamespaceやクラス名が被っても大丈夫になる事がある神機能 注意点 特殊
Unity3Dの公式マニュアル翻訳やってる人がiPhone, Androidでのゲームアプリ開発について記事にしています。Unity3Dでの開発をメインにAsset Storeで入手できるNGUI, Playmakerや, Oculus Riftなど作者サイトからの英語情報を翻訳していきます http://unitygems.com/threads/ November 2, 2012 デッドロックにハマらない 結局、変数が同時修正される問題の解決策は、一つの変数に対して一度に一つのスレッドしかアクセス出来ないようにすることだ。当然、複数のスレッドが同時に作業出来なくなることをも意味し、矛盾が生じるため、この制御を行なう時間は制限する必要がある。 C# には、特定のオブジェクトに対して特定の時間帯に、一つのスレッドしか存在し得ないようにする lock キーワードが用意されている。なお、値型や
こんにちは。Aiming エンジニアの久保田です。 僕の携わっているプロジェクトでは、近頃、Unity製クライアントのパフォーマンスの調査や改善を行っている最中です。 プロファイラを眺めていると、僕達が書くアプリケーションレイヤのコードが目立って遅い、ということは珍しいのですが、代わりにC#世界のスパイクとしてよく顔を出すのが、GC実行時間です。 C#は、タイプセーフでありながら人間にやさしく、getter/setter、async/await、Rx、ロケットなラムダ式、他他他…最新型の言語への影響も多大な、ファッション的にも◎な言語です。しかし、闇雲に全ての機能をタダで……というわけにはいかず、ことパフォーマンス面においては、GCというなかなか高い代償を支払うことになりかねないわけですね。 結論としては、UnityのGCは、皆が期待していたほど高性能ではなく、現状では僕達が書くC#が発生
基本的にどのような開発環境であってもシェーダはシェーダ専用の言語を用いて開発します。 特に Unity のシェーダを開発するときは、ShaderLab と呼ばれる Unity 独自の言語仕様と、 それ以外の言語とを組み合わせることになります。 ShaderLab Cg / HLSL / GLSL 学習のためには既存のコードを読み書きする 書籍 その他の資料 開発環境 シェーダのソースコードハイライタ シェーダのデバッグ ShaderLab Unity でデフォルトのシェーダを新規に追加したとき、必ずこの形式で記述された shader ファイルが生成されます。 Shader Lab のソースコードは実際には次のようなものです。 Shader "MyShader" { Properties { _MyTexture ("My Texture", 2D) = "white" { } … } Su
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く