【Unity】続・タブレットで点群データを表示させたかった
今回も失敗談なのでiPad用の点群ビューアをお探しの方は"KiwiViewer"で検索をかけると宜しいかと。
(追記)kiwiViewrが64bit対応されないまま消滅してしまいました。
懲りずに再挑戦
前回の失敗はこちら。
前回はテキストの座標と色データをゲームオブジェクトに反映させて大量のオブジェクトを発生させた結果見づらい上に異常に重い残念な結果に終わりました。
懲りずに色々調べてみたところ、どうもスクリプトからメッシュを生成できるようなのでその方法で挑戦しました。
モノとしてはテキストの座標データと色を各要素ごとに分割して配列に格納しVector3のXYZ座標とColor32のRGBに突っ込んでそれをMeshFilterコンポーネントに代入する程度のスクリプトです。
Color32はbyte型、Colorはfloat型なので点群の生データの形式に合わせると宜しいかと。
ちなみにUnityではメッシュの頂点数は65000までなので、それを超えるデータを作る場合はオブジェクトを分ける必要があります。
スクリプトはこのへんの区切り方が酷い書き方なので割愛させて頂きたく・・・。
そしてメッシュの生成に成功したものの、色が反映されていません。
どうもシェーダ周りが問題な気がします。
更に調べるとこんなサイトを見つけました。
Rendering a Point Cloud inside Unity • Kamen Dimitrov's Blog
ここのシェーダとEnablePointSizeスクリプトを拝借。
EnablePointSizeをカメラにアタッチするとこうなりました。
ちなみに上記リンクに座標からメッシュを生成するコードもあります。
かなり間引いてるのでスカスカですが狙った通りに表示されました。
ここで喜んだのもつかの間、iPadに流し込むと残念な事に。
EnablePointSizeを開いてみるとこんな記述がありました。
const string LibGLPath =
#if UNITY_STANDALONE_WIN
"opengl32.dll";
#elif UNITY_STANDALONE_OSX
"/System/Library/Frameworks/OpenGL.framework/OpenGL";
#elif UNITY_STANDALONE_LINUX
"libGL"; // Untested on Linux, this may not be correct
#else
null; // OpenGL ES platforms don't require this feature
#endif
Macで開発しているのでその段階ではOpenGLのライブラリのお蔭で正常に表示できてるらしいが、iOSはその他扱い。
"OpenGL ES platforms don't require this feature
"とのこと。
iOSはOpenGL ESで処理してるからそもそもOpenGLのライブラリは読むに及ばんと言う事でしょうか。
必要ないとは言ってもそのままで問題なく動くというわけでもなさそうですが・・・。
求ム・解決方法
そんなわけで今回も未解決です。いい方法ないでしょうか。
一応WindowsやOSXでは動くのでこの環境なら当初の目的である3Dモデルと点群の中を歩くといった事はできるという事にはなるといえばなるんですがこの環境でそんな物作っても今更感が半端ないわけで。
本命はあくまでiOS・・・。