• Stars
    star
    209
  • Rank 187,591 (Top 4 %)
  • Language
    C#
  • Created over 9 years ago
  • Updated almost 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

English (by Google Translate)

BatchRenderer

alt text
Unity で大量のオブジェクトを描画できるようにするスクリプトです。パーティクル、弾幕などの描画に威力を発揮します。割とポータブルな作りになっており、D3D11、D3D9、OpenGL、OpenGLES (Android, iOS, WebGL)、PS4 で動作を確認済みです。
WebGL による動作例

使い方

このパッケージ をインポートし、BatchRenderer コンポーネントを適当なオブジェクトに追加します。
alt text
描画したいモデルを mesh に設定します。あまり頂点数が多くないモデルが望ましいです。
マテリアルを material に設定します。このマテリアルは BatchRenderer/ 以下のシェーダを使ったものである必要があります。
あとはスクリプトから BatchRenderer.AddInstance() 一族でインスタンスを追加すれば、追加した数だけそれが描かれます。

enable_rotation から enable_uv_offset までのチェックは、各インスタンスに持たせる情報です。
enable_rotation をチェックすると各インスタンスの個別の回転が有効になる、といった具合です。この場合、AddInstanceTR() などの回転を渡せるバージョンの AddInstance() 一族でデータを追加します。
これらはチェックすると GPU に渡すデータが増えて遅くなるので、使わないものはチェックしないようにするのが望ましいです。

max_instances は文字通り最大インスタンス数で、これが描ける数の上限になります。これ以上の数を AddInstance() しても上限数を超えたものは描かれません。このパラメータに比例して使用メモリ量が増加します。
また、AddInstance() 一族はスレッドセーフになっています。

シェーダについて

前述のように、マテリアルには BatchRenderer 以下のシェーダを使う必要があります。
Lambert や BlinnPhong は通常の 3D オブジェクトを描くためのものです。

Billboard 系のシェーダはビルボードを実現するためのもので、常にカメラを向くようになります。
基本的に板ポリゴン (Assets/BatchRenderer/Meshes/quad.asset) をメッシュに使いますが、板ポリゴン以外にも適用できます。
alt text
enable_uv_offset で UV オフセットを有効にすることで、スクリーンショットのようにテクスチャアニメーションもできます。
BatchRenderer 自身はソートはしないので、Billboard に限らず半透明オブジェクトを描く際は描画順に注意が必要です。(AddInstance() した順に描くようになっています)

FixedBillboard 系のシェーダもビルボードを実現するものですが、こちらは表示の中心位置に 3D 座標を使う以外は 2D 的な振る舞いをします。
スクリーンショットを見比べるとどういうことかわかりやすいと思います。下のスクリーンショットは上の Billboard と同じシーンで、シェーダだけが違います。Billboard だとパースがかかっている一方、FixedBillboard はかかっていないのが見て取れると思います。
alt text
FixedBillboard 系のシェーダを使う場合、モデルの描画には画面左端が -1.0、右端が 1.0 の座標系が使われます。(上下はアスペクト比により変動)
例えば、付属の quad モデルは左端が -0.5、右端が 0.5 なので、これをそのままの大きさで画面に出すと横幅がちょうど画面の半分の大きさになります。2 倍のスケールにするとちょうど画面を覆う大きさになります。

注意点

各インスタンスの情報を GPU 側に格納するのに、ComputeBuffer -> RGBAFloat のテクスチャ -> RGBAHalf のテクスチャ の順で使えるものを試します。 (ただし、Data_transfer_mode を Buffer 以外にすると ComputeBuffer は省略します)
RGBAHalf のテクスチャだと精度が大きく落ちるため、位置が原点から大きく離れると移動がぎこちなくなる、などの制限が生じます。 OpenGL ES 系プラットフォームでは現状ほぼ RGBAHalf のテクスチャしか選択肢がないため、この制限を念頭に置いておく必要があるでしょう。

より技術的な詳細に興味があれば、こちらの記事もご参照ください。

License

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.

More Repositories

1

Unity5Effects

C#
1,645
star
2

MassParticle

C#
189
star
3

DynamicPatcher

Runtime C++ Editing
C
158
star
4

RaymarchingOnUnity5

C#
103
star
5

DeferredShading

C#
78
star
6

SmallFBX

An open-source implementation of Autodesk's FBX
C++
50
star
7

UnityCppScript

C++
49
star
8

scribble

scribble
C++
41
star
9

RemoteTalk

VOICEROID & CeVIO CS for Unity
C++
40
star
10

Alcantarea

C
40
star
11

PatchLibrary

C++
39
star
12

exception

http://i-saint.skr.jp/exception/
C++
32
star
13

WebAlembicViewer

Simple alembic viewer that works on browser.
C++
30
star
14

BlueImpulse

C#
30
star
15

OpenSubdivForUnity

C#
29
star
16

MemoryLeakBuster

C++
23
star
17

OpenToonzPluginForUnity

OpenToonz plugin as Unity post effects
C++
21
star
18

SIMDExample

C#
17
star
19

D3D12Raymarcher

C++
15
star
20

atomic

流体シム STG。カワノさんによるサウンドデータはこちら http://pocomo.skr.jp/atomic_sound/
C++
11
star
21

exception_conflict

http://i-saint.skr.jp/exception_conflict/
C++
10
star
22

USDForMetasequoia

C++
9
star
23

CEDEC2022_expand_video

JavaScript
8
star
24

OpticalCircuitUnityPort

C
8
star
25

D3DHookInterface

C++
8
star
26

WebDebugMenu

debug menu implemented by HTTP Server & HTML.
C
7
star
27

ScreenCaptureTest

C
7
star
28

Marionette

C++
6
star
29

BinaryGenerator

C++
4
star
30

GDCVaultExpandVideo

JavaScript
4
star
31

halfVisualizer

C++
3
star
32

CEDEC2016_4kintro

C++
3
star
33

WebInterface

C++
3
star
34

LazyD3D11DeviceContext

C++
3
star
35

glSpriteFont

sprite font の OpenGL 実装
C
3
star
36

ispc_SPH

C++
3
star
37

AlembicForMetasequoia

C++
2
star
38

SerializeCoroutineTest

C++
2
star
39

UnrealPlugins

JavaScript
2
star
40

RaymarchingInUnity

C
2
star
41

legeclodb

Vue
1
star
42

flat_container

C++
1
star
43

WebController

WebController
C++
1
star