【Unity2018】Entity Component System(ECS)とUniRx.Asyncを和解させる

問題点

ECSを使っているプロジェクトにUniRxをぶちこむと、ECSとUniRxのPlayerLoopが喧嘩してUniRxが勝ちます(ECSが動かなくなります)

やはりECSでも(相性が良いかはともかく)Rxしたいので、UniRxを使う方法を探ってみました。

続きを読む

【Unity2018】Entity Component System(ECS)でZenjectを使う

突然ですが、皆さんECSでもDIしたいしRxしたいですよね?? ということでECSでもZenjectを導入してみました。

導入

いつもどおりSceneContextとSceneInstallerを作り、シーンに置きます。 Odinを入れてるのでインスペクタの見た目がちょっと違います!

f:id:notargs:20180920035609p:plain

続きを読む

【Unity2018】LWRPでUnirtyちゃんをフィギュアっぽく描画するShaderを書いた

概要

皆さんは「フィギュアっぽくしたいけど、PBRにしたら全然思ってたのと違う…!」みたいな経験はないでしょうか?私はあります。 ということで、LWRPを使ってUnityちゃんをいい感じに描画するシェーダーを書いてみました。

ちなみに、あくまでそれっぽく見せるのが目的で、あまり正確なPBRではないため、しっかりとした品質を求める人はHDRPを使うのをオススメします。

After

f:id:notargs:20180918034651p:plain

Before

f:id:notargs:20180918034749p:plain

続きを読む

【Unity2018】LWRP対応のGPU Instancingパーティクルを作る

概要

Unity2018にて、ScriptableRenderPipeline(SRP)を活用して作られた、Standard Shaderより軽量なLightWeightRenderPipeline(LWRP)が追加されました

Surface Shaderが使えないため少し面倒ですが、内部のコードを引っ張ってきて拡張することで、LWRPでもGPUパーティクルなどのシェーダーを活用したテクニックを使うことができます

また、Standard Shaderと違って中のコードがすべて読めるようになっているため、LWRPの限界にぶち当たったときも、LWRPをベースとして独自のSRPを構築していけます

今回は、LWRPのLightweightStandardシェーダーを拡張して、GPUインスタンシングを使ったパーティクルを実装してみました

全てGPUで行った方が処理は早くなるのですが、今回はシンプルに、位置計算はCPUで行い、描画のみをGPUで行う一般的なパーティクルの実装をやっていきます

f:id:notargs:20180917213618g:plain

続きを読む