≒ Sphereについて
前のエントリで予定を書いていたやつです。昨日公開しました。アプリそのものと同じく需要あるか分からないけど、以下製作過程まとめです。
1)製作期間
2015年12月9日開始なので約一ヶ月。最初に公開したアプリとConfig画面(=処理)はほぼ共通なのでその部分は端折れた。
球体の3D座標はこのページを熟読して、サンプルからコピペしたコードで生成w
数学的素養がほとんど(まったく)無いからすごく助かった。
今初めて確認したけど(オイ)高専の公式ページだったのか。小坂先生本当にありがとうございました。サンプルコードすごく読みやすかったです。ここで言ってても意味ないな。
2)嵌ったところ
webでThree.js使ってこのブログのヘッダーみたいなの作ったときは、最終的にシェーダー言語使うことを諦めてすべてThree.jsにお任せで処理を記述してるから自覚してるとおりページが糞重い。
ヘッダーの球体なんか色違いの面の数だけ球体を生成して各面の部分だけ表示させてるという体たらく。
そんで今回AndroidのopenGLで球体つくるにあたって、シェーダー言語使って無駄な描画をしないで多面球体を作りたかった。
結果を言えば道半ばで、面はそれぞれ一つのオブジェクトとして生成してる。どうしても座標を共有した状態で各面の色を変えるのは出来なかった。
つまり、小坂先生のコードで生成した(一つの)球体座標から、各面=四角形(台形)=三角形×2の座標をセットで切り出してるということ。ようするに面の数だけドローコール打ってるw やっぱり処理が糞重いw
そしてもっとも嵌ったのは今回もマッハバンド。おかげで4日間試行錯誤して(=ググりまくって)、シャドウアクネだとかピーターパニングだとかopenGLのシャドーイングの定石みたいなのは色々勉強できたけど、結局あきらめた。
確かに視体積の適切な設定=near/far間を描画に必要最低限な長さに設定すると球体上部の細かなノイズは無くなった。
けど球体下部のノイズは残ったまま。AmbientLightの生成する影とpointLightの生成する影がコンフリクト起こしてるような感触はつかめたんだけど解決には至らず。
趣味のプログラミングで諦めるってどうなのとは自分でも思うけど、あきらめた最大の理由はこのアプリで採用してるOpenGL20の制約が結構あることが分かったから。
今回シャドウマッピングでRGBA値(=ColorBuffer)にZ値入れてるとかは、GL30だとデプスバッファが使えるから無用な処理らしい。
デプスバッファ使えたほうが当然精度は高いと思いGL30で書き換えるかと思ったけどGL30対応はAndroid4.3以上、フル規格は5.0からだということで今回は見送ったのです。対応機種減りすぎるからね。
結局カリングして球体裏面だけ描画して、そのあと表面だけ描画、さらにその間で地面の平面も描画してるからトータルで3回×面数ドローコールwwwそりゃ1秒に2回GC走るってw
次点で嵌ったのは球体の脈動。リズムに乗ってるようにしたかったけど「リアルタイムBPM解析」は処理が重過ぎる。色々実装は試した。でも処理量がでかすぎて書いてる途中で躊躇するレベルw で、結局一定周波数以下の低音拾ってるだけww これは別の「リアルタイムBPM解析アプリ」でも作って試してから実装しようと結論。
「嵌ったところ」なんて書いてて全然解決していないw openGL30対応とかリアルタイムBPM解析とか色々課題はあるけど、今後このアプリいじるとしたらGCの軽減が最優先だなぁ。
3)その他
今回ピンチイン/アウト処理を実現するのにGestureDetector初めて触ったんだけど、何これ便利! 実装も簡単だし、何よりGC走りまくってるのに遅延も無くスムーズに動く。前のアプリでonTouch直接いじってたのがうその様だ。
最後の最後、公開用のスクショにも苦労。前のアプリのようにエミュでスクショ撮ろうとしたんだけど、無茶苦茶ノイズが出る。マッハバンドというレベルではなくて球体崩壊w
仕方がないので実機をつないで撮った。実機でもADMでスクショ撮れるのは知らなかった。実機でスクショとるのと違いpngで撮れるので画質もまずまず。
でもその結果タブレットのスクショは撮れず、「タブレット非対応」になってしまった。安いタブ買うかなー。
エミュが使えないので困るのはAndroid 6.0(Marshmallow)でpermisson周りの挙動確認ができないということも一つ。前のエントリに書いたとおり。
4)まとめ
まさに「自分向けのメモ」w 取り留め無く書き散らかしたけど、何ヵ月後かの自分が哀れみの目で見返せるレベルに達していると嬉しい。
あ、それと数少ないこのブログの読者の方でインストールしたよって奇特な方が居たら、どこでも良いのでダメ出しお待ちしてます。
16年1月7日(木)‡12時24分27秒 ‡ ただの自分向けメモ