automakeをインストール
ODEのコンパイルには、automakeが必要ですので、Portsからインストールします。# cd /usr/ports/devel/automake && make install clean依存関係のあるPortsもあわせてインストールされますが、まあ、気にしない。
automakeはODEをコンパイルする為だけに必要で、実行時には必要ありません。
ソースコード取得とパッチあて
ODEのサイトの download のリンクをたどると、sourceforgeのサイトにいきます。そこから、「ode-0.12.tar.bz2」をダウンロードし、展開します。ダメなら、ブラウザ等でいったんダウンロードしてから、FreeBSDに転送します。# fetch http://sourceforge.net/projects/opende/files/ODE/0.12/ode-0.12.tar.bz2 # tar xvzf ode-0.12.tar.bz2 ... ... ファイルが展開される ...
展開したソースコードのMakefile.amに次のパッチを当てます。こちらからダウンロードするか、コピペして、「ode-0.12_freebsd.patch」というファイル名で保存してください。
--- Makefile.am.orig 2012-02-12 07:03:27.000000000 +0900 +++ Makefile.am 2012-09-19 21:24:49.000000000 +0900 @@ -40,5 +40,5 @@ CHANGELOG.txt INSTALL.txt README.txt LICENSE.TXT \ bindings -pkgconfigdir = $(libdir)/pkgconfig +pkgconfigdir = $(libdir)data/pkgconfig pkgconfig_DATA = ode.pcこのパッチを当てないと、monoがlibode.soを見つけられなくてエラーになります。odeのソースコードがFreeBSDの devel/pkgconf の仕様に適合してない為みたいです。
# cd ode-0.12 # patch -p1 < /some/where/ode-0.12_freebsd.patch
configure & make
パッチがあたったら、sh autogen.shを実行して、configureスクリプトを作成します。# sh autogen.sh次にconfigureスクリプトに、次の引数をつけて実行します。
# ./configure --disable-asserts --enable-shared --disable-demos --with-drawstuff=none CFLAGS="-O2 -msse -march=i686" CXXFLAGS="-O2 -msse -march=i686"CFLAGSとCXXFLAGSに「-O2 -msse -march=i686」をつけているのは、IntelCPUのSSE命令などをつかって、ちょっとでも最適化し、性能を上げようとしてます。サーバーのCPUのアーキテクチャにあわせて、適切なものに変えるといいかもしれません(どのくらいパフォーマンスが稼げるのかは不明)。
では、ソースコードをmakeし、エラーがなければインストールします。
# make ... ... # make install ... ...インストールが完了したら、OpenSim.exeを再起動します。エラーなく起動されればOK。
動作確認
さて、うまくうごいているか動作を確認してみます。まずは、CUBE を500個だし、物理属性をつけます。
だんだん崩れていきます。
ぺっちゃんこになりました。
さすがに、500個も物理オブジェクトを出すと、身動きがとれません。ちなみにOpenSimを動かしているコンピュータは、Intel ATOM D525、メモリ4GBです。
CUBEの中を歩き回ります。まともに動けませんけど、OpenSimは落ちないみたいです。
この時の、topコマンドによるプログラムの状態は、次の通りです。
last pid: 86961; load averages: 1.13, 0.77, 0.48 up 5+10:20:55 01:07:55 93 processes: 2 running, 88 sleeping, 3 stopped CPU: 25.5% user, 0.0% nice, 2.3% system, 0.0% interrupt, 72.1% idle Mem: 503M Active, 2020M Inact, 224M Wired, 61M Cache, 112M Buf, 188M Free Swap: 2048M Total, 2528K Used, 2045M Free PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 86679 opensim 53 44 0 413M 322M ucond 3 10:17 104.98% mono 1673 mysql 16 50 0 192M 45656K sigwai 2 7:24 0.00% mysqld 2242 opensim 1 44 0 11900K 8732K select 0 0:54 0.00% screen 68091 opensim 1 44 0 3688K 1688K CPU2 1 0:04 0.00% top 1685 root 1 44 0 3384K 1120K nanslp 1 0:04 0.00% cron 1460 root 1 44 0 3352K 1096K select 1 0:03 0.00% syslogd ..... ..... .....重いのは重いけど、sshで接続しているセッションは普通に操作できます。
また、私のリージョンサーバーは、現在4つのリージョンがあるのですが、CUBEをぶちまけた隣のリージョンにテレポートしたら、そこでは普通にうごけました。
また、500個も物理オブジェクトをぶちまけると、次のような警告がOpenSimのコンソールに沢山でます。
01:04:41 - [PHYSICS]: Physical Object went out of bounds. 01:04:41 - [PHYSICS]: Physical Object went out of bounds. ... ... 途中省略 ... ... 01:05:01 - [PHYSICS]: Physical Object went out of bounds. 01:05:03 - [PHYSICS]: Physical Object went out of bounds. 01:05:03 - [PHYSICS]: Physical Object went out of bounds. Region (root) #
これらのオブジェクトは、地面の下にもぐっていたり、リージョン境界でぐるぐるまわってたり、隣のリージョンまでいってしまってたりします。ビュアーのArea Search等で、オブジェクトを探して、一つ一つ削除していかないといけなくなります(>_<)。作業を簡単にするため、あらかじめ物理オブジェクトには、検索しやすいような名前をつけておくことをお勧めします。
まとめ
まだ、もっと様子をみないといけないけど、ODEがいきなり落ちてしまうということはなくなったかもしれません。
0 件のコメント:
コメントを投稿