LoginSignup
0
0

More than 5 years have passed since last update.

【Unity】SimpleVoxel(擬似インスタンシングバージョン)

Last updated at Posted at 2017-06-11

はじめに

擬似インスタンシングでの、Voxelの作成を簡単にするかつ、コード自体、すごくシンプルなので、このコードを元に、使用者自身が、改変し、独自の仕様に仕上がるような便利プログラムを作成しました。
だいぶ古い技術ですので、Asset Storeや、qiita、ブログなどで、同じような物あると思いますが、以下のような、状況に対して、作成を試みました。

・geometory shader/instancing/compute shaderが、使えない環境での開発、
Macや、古い実機で、これらをサポートしていない、端末
・Unityのバージョンアップにより、コードを自分で、メンテナンスできないことを回避
・コードベースで、ゴリゴリやりたい人
・Visual Art作品作りたい人

開発環境

Unity5.3以上
5.4/5.5/5.6とかで、テストしていないので、Meshの更新あたりのプログラムに変更があれば、修正必要です。どこかで、5.5などで、確認して、問題あれば、修正して、PUSHしておきます。

ソースコード

https://github.com/yasuohasegawa/SimpleVoxel
ちょっと訳ありで、コメントとか、英語です。ご容赦ください。
おまけで、Planeのシーンに、パーティクル的なやつをやりたい人向けの、サンプルありです。
Unity純正の、Particleシステムあるので、車輪の再発明みたいですが、コードベースで、ゴリゴリ、やりたい人向けです。

使い方

  1. 空のGameObjectをシーンに追加
  2. MeshRendererと、MeshFilterを追加
  3. Resourcesに頂点カラーを設定できる、ColorMatと、テクスチャを設定できる、CubeMatがあるので、どちらか、設定したいものを設定もしくは、自前で、対応する。
  4. Voxel.csを追加
  5. ブロックを制御させるためのスクリプトを追加 ここは、Voxelシーンで使っている、VoxelTest.csもしくは、Terrainシーンで使っている、TerrainSample.csを参考にしてください。

screen1.png

ブロックへのテクスチャの設定について

サンプルは、512x512のテクスチャに、4x4で、ブロックの面のテクスチャを設定できるようになっています。数を増やしたい場合は、NxNで、好きな数/好きなサイズでテクスチャを作成後、Voxel.csの、m_texUnit変数の、0.24の箇所を変更してください。この、0.24は、uv座標の、分割数になります。

「m_texUnit = 1/設定したいブロックのテクスチャの数n」で、割り出します。

その後の、UVテクスチャの、割り当ては、2Dベクトルで、左上から、new Vector2(0,0)、その隣、new Vector2(1,0)などで、指定したいテクスチャを割り当てます。
今回作成したVoxel.csクラスでは、マインクラフトのような、テクスチャの設定、top面と、そのほかの面を指定できるのと、すべて同じテクスチャで設定できる、メソッドを用意してあります。

iphone5での動作検証結果

カメラ外(クリッピングされているところ)で表示されるcube含めた場合(Meshの更新なし):
cubeの数: 10万
FPS: 約30
メモリ: 約230MB
※カメラ外のcubeは、クリッピングされるので、FPSは出ますが、メモリが、ちょっと厳しい。
実際は、一度に生成させる場合は、端末によりますが、数は、半分以下に減らす必要はありかと。

カメラに表示が収まっているcubeかつ、動かして、頂点情報を更新させた場合:
cubeの数: 2500
FPS: 約30
メモリ: 約8MB

Terrain sceneの実行結果の見た目

screen0.png

その他

コライダーは、つけてません、必要あれば、使用者自身で、対応いただければとです。
移動/回転/拡大の箇所は、個々に、制御できますが、頂点シェーダーで、それぞれ、動かすように、するのも、良いかもです。
単純に、Mesh一つで、いくつもの、Cubeを作成しているだけなので、よく見かける、Voxelの作り方とは、違います、ご容赦ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0