3Dグラフィック、プログラミング、ものづくり・・・、創作活動を楽しもう!

DEMの勉強6

やりたいことは、色々なモデルを試すこと。プログラムは遅くたって最低限動けばよし!次はモデルをいじるぞ!

 

っと思っていたのですが、プログラムを眺めてると、さすがに全て粒子で、全ての粒子に対する当たり判定するのは、無駄だよな~っと気になりだし、何となくアルゴリズムを考えるようになったところに、下記の論文を見つけました。

 

GPUによる近接相互作用に基づく粒子計算の近傍探索手法
https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_uri&item_id=107323&file_id=1&file_no=1

 

アルゴリズムの中身がけっこう丁寧に書いてある。これなら実装できそうだ。っと思ってしまったからには・・・やりますか。

 

書かれてる手法は、大きく2つ。

一つは領域を格子に分割して、格子内の粒子を登録しておき、自身がある格子とその周辺の格子内の粒子に対してのみに当たり判定を行う方法。上の論文では、セル分割法と名付けられている。オーソドックスな方法みたいで、他の文献では、格子判定法だとか色々なネーミングがありました。

もう一つは、一度は全粒子に対して当たり判定をして、その際、近くの粒子を登録しておき、一定期間は、登録した粒子に対してのみに当たり判定を行う方法。上の論文では、粒子登録法とネーミングされています。

 

どちらも一定条件の元、情報を更新しなくてはいけない。セル分割法は粒子の数だけの一回ループで情報更新できるのに対して、粒子登録法は粒子数の2乗ループが必要になるので時間がかかる。しかし、粒子登録法はセル分割法に比べ、登録する候補粒子を少なくすることができる。また、論文では書かれていないけど、わざわざ全体の情報を更新しなくても、動きのある粒子に対してのみ情報を更新させることもできるはず。

メモリ消費量の違いもあるけど、今のところメモリは問題ない(多分、2次元なら問題にならない)ので考えません。

 

論文を見る前に、自分で思いついたのは、粒子登録法の方です。通常、土の解析だと激しく動く箇所は一部だから、相対移動量とか拾って、上手いこと更新範囲と回数を抑えるアルゴリズムにすれば、いい感じになるんじゃね?っと思ったのだけど、その更新判定の部分を作るの大変そう。
論文では、セル分割法と粒子登録法の両方を組み合わせたハイブリッドなやり方が書かれてあり、考えるの面倒だから、その通りやってみることにしよう。

 

ってことで、まずセル分割法を導入してみました。とりあえず、登録情報は毎回更新する仕様。

よしよし、結果は同じだな。さて、計算速度は?

(さらに…)

DEMの勉強4

前回のプログラムを要素数492ほどで試してみたら、ネットブック(Acer Aspire One HAPPY2)では、1ステップで2.55秒もかかりました。お、おう。ネットブックで解析を回すつもりは無いとはいえ、最低でも1万ステップくらい回すことを踏まえるとさすがに遅い。ノートPC(Dell Inspiron14 core i3-4010U)でも0.63秒で4倍くらい速いものの、全然遅い。勉強用とはいえ、5000要素で1万ステップくらいは1分以内でやってほしい。1ステップで0.005秒くらいとなると、100倍以上の高速化が必要だ。

 

Pythonが他のプログラムに比べても演算の処理速度が遅いことは知っていたので、最終段階で高速化しようと思っていたけども、現時点で、高速化しないと色々遊んでみることもままならなさそう・・・。っということで、Cython化してみました。

 

(さらに…)

Surfaceをもらった・・・けども

とあるとこから、倉庫で埃をかぶってるらしいSurfaceをもらいました。

「えっ、Surface?あの、これさえあれば何もいらない、ってやつ?わーい」っと大変喜んだのですが、帰ってしばらくすると、わかりました。
びっくりするほど使えない・・・Surface RT。。。

 

5年くらい前の端末で、(調べてみると)散々叩かれた上に、もう開発中止しているので、今更使用感がどうとか書く気はないのですが、せっかくもらったし、端末はかっこいいので、もうちょっと使えるようにならないかなーっと粘ってみました。

とりあえずね、僕はPythonを動かしたい。

 

すると、本来Microsoftが署名したソフト以外は動かないようになっているところを、有志の方がRT用(ARMアーキテクチャ用)にコンパイルしたソフトを使えるように、細工するツールが公開されていました。

[Windows RT 8.1] Developer Tool V3.0
https://forum.xda-developers.com/windows-8-rt/rt-development/windows-8-1-rt-jailbreak-exploit-t3226835

その細工を脱獄と言ったりするようで、Windows RT 8.0は脱獄できるけど、8.1は脱獄できない、と言った情報もあったのですが、8.1でも上記のURLに乗っている手順を踏むと、無署名のソフトを使うことができるようになりました。

 

上記のURLに色々有志の方がARM用にコンパイルしてくれたソフトの一覧があって、その中に、PythonとNotepad++がある!

一覧にある全てのソフトがちゃんと動くわけではないですが、PythonとNotepad++は動きました。ただし、Pythonも一部の機能(ctypesなど)が使えない上に、モジュールを追加できないのが痛いですが。Notepad++のプラグインも同様。とはいえ、これだけでも大きな違い。

 

Notepad++にはこのランタイムも必要です。
Visual C++ 2013 runtime (get vcredist_arm.exe)
https://www.microsoft.com/en-us/download/details.aspx?id=40784

 

Pythonを使えるようにするには、上記のURLに乗っている手順だけでなくて、ちょっとした追加作業が必要でした。
それは、上記URLの手順ではsigntoolで、exeとdllファイルに、署名を加えることで使えるようにするのですが、Pythonにおいて、dllファイルは、pydと言う拡張子で保存されていたりします(pydはdllファイルにちょっとした追加ルールがあるだけで、基本的には同じもの)。ゆえに、pydファイルの拡張子を一旦、dllに変更して、signtoolで署名を加えた後、pydに拡張子を戻すっといった作業をすることで使えるようになりました。

 

多少は使えるようになったとはいえ、やっぱり使えるソフトが少なすぎる。使いたいソフトが使えないのは、不都合が多そうなので、モバイルとしてのメインには使えそうにないかな・・・。埃をかぶる場所が僕の家になっただけのようだよ、Surface君。

ただ、今使っているネットブック(AOHAPPY2)は、画面は正しく認識されていないわ、バッテリーが劣化しすぎて残量が分からないわで、もう寿命が近いので、少しは安全材料にはなったかも。
完全に駄目になった時は、もう少し本気で活用することを考えてみようっと。

TibLab Blog © 2014 Frontier Theme