2015年1月4日日曜日

【Unity】MeshTopology.Lines と vertices

前回 MeshTopology.Quads をいじっている過程で MeshTopology.Lines が使えるなと思い、これでピラミッドが作りたいなと思ったので作ってみました。

ちなみにこれが今までのピラミッドです。

トポロジーを Lines にするとこうなります。

頂点数65535個という上限でこんな頂点の使い方をしているとフィールドが狭くなってしまうし、プログラムが面倒になるしであまり良いことがないのでガッツリ削り取りたいんですよね。
正直四角メッシュが使えればこんなことで悩む必要なかったんですが…

とりあえずFieldを作ってみます。

ここまでは問題なくできました。
あとは頂点の座標をいじり隆起させるだけです。

できませんでした。
確かに指定した頂点座標は変化していました。しかしメッシュは一向に動かず。

こんな風に動いてくれるはずだったんですが…

トポロジーを Lines にしたことか、もしくは triangles を完全放棄してるのが原因かな?少し検証します。



<追記>

できました。どうも再描画する時に

_mesh.vertices = _vertices;
GetComponent<MeshFilter>().mesh = _mesh;
_meshFilter.mesh.SetIndices(MakeIndices(), MeshTopology.Lines, 0);

この3つをセットでやらなければならないようです。
デフォルトのトポロジーなら一行目だけで済んだんですが少しやることが増えているみたい。

_meshFilter.mesh.SetIndices(MakeIndices(), MeshTopology.Lines, 0);
とか必要ない気もするんですけどねぇ…でもこれ入れないと頂点動かした瞬間メッシュが全部消えてしまうんですよね。



<追追記>
このやり方、mesh をどんどん書き換えるわけですが Gameビューの Statisticsを 見てもらえればわかる通りえらいメモリを喰います。
書き換える mesh が小さいものならいいんですが頂点数が大きいものだとあっという間に VRAM usage が跳ね上がり、1GB超えたあたりでフリーズもしくはクラッシュしますので気をつけてください。

Lineを引きたいだけならOpenGLを直接叩いた方が軽いようなので自分はそうしました。

0 件のコメント:

コメントを投稿