Posted by at

2008年06月29日

スカルプでキレイな曲線を作りたい

● またまた今日も雨なので、久しぶりにスカルプ作りしてます。

最近は、階段、机、イス、箱物とか、直線的なスカルプテッドプリムが作れて
当たり前になりました。

なので、今は数学で描いたような、キレイな3次元の曲線や曲面のスカルプを作りたい、と
あれこれ試行錯誤してます。

Blenderのソフトボディや、ベジエカーブが、いろいろと活用できそうです。




● キレイな曲面の建築物を作れるようになりたい

私のお気に入りの建築家、エーロ・サーリネン氏の作品です。
名前は知らなくても、建物自体は有名ですね。
曲面の屋根が素敵な作品が多いんです。
ちなみに、サーリネン氏は、オーストラリア、オペラハウスコンペの審査員もされてます。


セントルイス、ゲートウェイ・アーチ            ジョン・F・ケネディ国際空港のTWAターミナルビル




● 恐れ多いですが、ゲートウェイアーチを作ってみました。

この手の形には、BlenderのBezier Curve(ベジエカーブ)が役立ちます。
Adobe Illustratorを使っているなら操作は同じなので簡単です。




● アーチの形

ベジエカーブを配置して、アーチの中心線を描きます。






● アーチの断面の形(Bevel Ob)

ベジエサークルを配置します。
コントロールポイントを鋭角に折り曲げて、三角形にします。
アーチの断面の形(Bevel Ob)に使います。






● アーチの太さの変化(Taper Ob)

Taper、先細りという意味です。
ベジエカーブの歪みを、アーチの太さの変化(Taper Ob)に使います。
アーチの真ん中あたりが、細くなってるわけです。






● ベジエカーブ立体化の設定

「Curve and Surface」パネルで、アーチのベジエカーブに対して、
断面形状(Bevel Ob)と、太さ形状(Taper Ob)を指定して、立体化します。






● ベジエカーブの立体化

3Dウィンドウでは、こんな感じになります。
パイプ状のスカルプを作るときに、この機能は欠かせません。








● Blender2.46、アンビエントオクルージョンがパワーアップ ^^/

最新版のBlender2.46に備わった、アプロクシメイト(近似)アンビエントオクルージョン。
これは使えます~。
Blender2.45に比べて、ざらざら(粒子感)が無くなって、とてもキレイです。
計算も速い。
照明効果とAAOを組み合わせてUVエディタにBakeすると、いいテクスチャになります。



【ご参考】
Blender.org : Approximate Ambient Occlusion
http://www.blender.org/development/release-logs/blender-246/approximate-ambient-occlusion/

Blender(2.45)のアンビエントオクルージョン試行錯誤中
http://pastel.slmame.com/e185023.html




● Blenderでレンダリングして雰囲気を確認

ローレゾでレンダリングしてみます。
光源3つ(直接光・地面からの反射光・環境光)と、AAO使用。
天空(Zenith)は、プロシージャルテクスチャの「Musgrave」を、雲のつもりでワールドマッピング。





● スカルプにしてみると、こんな感じでした。

カーブのきついところでは、どうしても微かに直線が出てしまうのが残念です。
修行しなくちゃ。






アーチの表面には、BlenderでBakeしたテクスチャを貼り付けてます。
ほそいのでわかりにくいですが、新しいAAOは、ざらざら(粒子感)がなくて、あきらかにキレイです *^^*






逆光から。






● ダメ押し

あ~、ファントムにしないと、くぐれないじゃないか~ ><;

blender v2.46 Blender Foundation
  


Posted by ぱすてる at 12:17Comments(35)ものづくり

2008年06月22日

Linux版ビューワ コンパイル手順(影がいいです〜)

● 今日は朝から雨なので

最近話題になってる、インワールドの影(Dynamic Shadows)を体験したくて
SLビューワのLinux版を、ソースからコンパイル・ビルドしてみました。

私が最近買ったPCですが、グラフィックボードがGF8800GTXなので、OKみたいです。
OSは、Linux Ubuntu8.04LTS です。




● マニュアルを読みます。

結構親切でわかりやすいのですが、案の定、コンパイル中にエラーが出まくります。
試行錯誤と野生の勘で、何とか動きましたので、ヨシとします。。^^;

http://wiki.secondlife.com/wiki/Compiling_the_viewer_(Linux)




● Required tools

Root権限で、必要なパッケージをインストールしました。

# apt-get install scons
# apt-get install bison
# apt-get install flex
# apt-get install libboost-program-options-dev





● Installing the required libraries

Root権限で、必要なライブラリをインストールしました。

# apt-get install mesa-common-dev
# apt-get install libglu1-mesa-dev
# apt-get install libstdc++6-dev
# apt-get install zlib1g-dev
# apt-get install libssl-dev





● ソースコード(Changeset 575)の入手

http://svn.secondlife.com/trac/linden/changeset/575

slviewer-artwork-shadow-draft-r87814.zip
slviewer-linux-libs-shadow-draft-r87814.tar.gz
slviewer-src-shadow-draft-r87814.tar.gz





このサイトから、必要なソース3つをwgetコマンドでダウンロードしました。

$ wget http://secondlife.com/developers/opensource/downloads/2008/05/slviewer-artwork-shadow-draft-r87814.zip
$ wget http://secondlife.com/developers/opensource/downloads/2008/05/slviewer-linux-libs-shadow-draft-r87814.tar.gz
$ wget http://secondlife.com/developers/opensource/downloads/2008/05/slviewer-src-shadow-draft-r87814.tar.gz





● www.fmod.org サウンド関連ライブラリ(fmodapi375linux.tar.gz)の入手

サードバーティ製のサウンド関連ライブラリが必要と書いてありますので、入手します。

$ wget http://www.fmod.org/index.php/release/version/fmodapi375linux.tar.gz




●  Unpack the source tree

ソースコードを解凍します

$ tar xvzf slviewer-src-shadow-draft-r87814.tar.gz
$ tar xvzf slviewer-linux-libs-shadow-draft-r87814.tar.gz
$ unzip slviewer-artwork-shadow-draft-r87814.zip


上書きしますか?の質問に、ALL を選んでみました。

replace linden/indra/newview/app_settings/windlight/clouds2.tga? [y]es, [n]o, [A]ll, [N]one, [r]ename: A

ローカルディレクトリに「linden」というディレクトリが作成され、ソース1式が解凍されます。




● サウンド関連ライブラリを解凍して、ヘッダ、ライブラリを、「linden」配下にコピーします。

$ tar xvzf fmodapi375linux.tar.gz
$ cd fmodapi375linux/
$ cp api/inc/* ../linden/libraries/i686-linux/include/
$ cp api/libfmod-3.75.so ../linden/libraries/i686-linux/lib_release_client/





● Compiling

最後にパッケージ一式を圧縮してくれる、releasefordownloadモードでコンパイルして見ました。

$ scons DISTCC=no BTARGET=client BUILD=releasefordownload MOZLIB=yes




● エラー出まくり ーー;

(1) g++-4.1 がありません、と出たので

# apt-get install g++-4.1




(2) libboost 関連がありません、がたくさん出るので、「SConstruct」ファイルの中を調べて
libboost 関連のパッケージを片っ端から、インストールしてみました。^^;

# apt-get install libboost-dev
# apt-get install libboost-regex-dev
# apt-get install libboost-signals-dev





(3) boost_signals-gcc34-mt が無い、というエラーが出ます。

マニュアルにも解決方法が書いてありました。

http://wiki.secondlife.com/wiki/Compiling_the_viewer_(Linux)
Required tools

「SConstruct」ファイルには、以下のようにlibboost関連の指定がたくさんあります。

(linden/indra/SConstruct)

client_external_libs += [ 'boost_program_options-gcc34-mt', 'boost_signals-gcc34-mt', 'boost_regex-gcc34-mt']
external_libs += ['boost_signals-gcc34-mt']
boost_signals_lib = 'boost_signals-gcc33-mt-d'
boost_libs = [ 'boost_regex-gcc33-mt-d', boost_signals_lib ]

など

でも、ubuntu8.04のファイル一覧を調べると、ファイル名に「gcc33」「gcc34」などバージョンがついていないので
「SConstruct」ファイルを修正してしまいます。(オリジナルのSConstructファイルはコピーしておく事)

(linden/indra/SConstruct)

client_external_libs += [ 'boost_program_options-mt', 'boost_signals-mt', 'boost_regex-mt']
external_libs += ['boost_signals-mt']
boost_signals_lib = 'boost_signals-mt-d'
boost_libs = [ 'boost_regex-mt-d', boost_signals_lib ]





● やっとこさ、コンパイル・ビルド終了~

(正常終了時のメッセージ)

Running command: mv newview/packaged newview/SecondLife_i686_1_20_6_0
Running command: tar -C newview --numeric-owner -cjf newview/SecondLife_i686_1_20_6_0.tar.bz2 SecondLife_i686_1_20_6_0
Running command: mv newview/SecondLife_i686_1_20_6_0 newview/packaged
scons: done building targets.





圧縮されたパッケージが作成されます。

linden/indra/newview/SecondLife_i686_1_20_6_0.tar.bz2




● パッケージを解凍して、実行

$ tar xvjf linden/indra/newview/SecondLife_i686_1_20_6_0.tar.bz2
$ cd SecondLife_i686_1_20_6_0
$ ./secondlife





● ビューワで、「Debug Settings」の設定

ビューワの「Advanced」->「Debug Settings」ウィンドウを開いて

1.RenderDeferred を FALSE(誤) に設定
2.RenderUseFBO を TRUE(正) に設定
3.RenderDeferred を TRUE(正) にもどす




● 京都河原町サンドボックスの夕暮れ

なんか、夕ご飯の匂いが漂ってきそうな感じです~。^^
こんな苦労しなくても、はやく影が表示できるようになるといいですね。


  


Posted by ぱすてる at 19:25Comments(5)SLViewer

2008年06月21日

OpenSimサーバ構築記録その4(Gridmode移行編)

● そのまえに

(http://opensimulator.org/svn/opensim/tags/)

OpenSim 0.5.8-releaseが出たので、緊張しながらアップデートしてみました。
MySQLデータベースとか移行できるかドキドキでしたが、ただコンパイルして、
default.xmlをコピーしただけで動いてしましました。 ヨカッタ。。。



● ポート TCP/8002の開放

Grid modeでは、SLビューワの接続先UserServerのポート番号は、TCP/8002なので、ファイアウォール起動シェル
に追加しました。

(/etc/init.d/myfirewall.sh)

/sbin/iptables -A INPUT -i $WANPORT -p tcp -m state --state NEW -s $TRUSTWAN --dport 9000 -j ACCEPT
/sbin/iptables -A INPUT -i $WANPORT -p udp -s $TRUSTWAN --dport 9000 -j ACCEPT
/sbin/iptables -A INPUT -i $WANPORT -p tcp -m state --state NEW -s $TRUSTWAN --dport 8002 -j ACCEPT


(補足)
myfirewall.sh は、私が組んだ自家製のFW起動用シェルスクリプトです。



● OpenSim.ini の修正

(http://opensimulator.org/wiki/OpenSim_Configuration)

とにかく、英語のサイトと格闘しながら、OpenSim.iniを、Grid mode用に変更しました。
あってるのかなぁ? まあ、とりあえず動いたし。 ^^;

(/usr/local/opensim/0.5.8/bin/OpenSim.ini)

5: gridmode = true
35: ; storage_plugin = "OpenSim.Data.Null.dll"  <--コメントにした
39: ;storage_connection_string="URI=file:OpenSim.db,version=3";  <--コメントにした
43: storage_plugin="OpenSim.Data.MySQL.dll"
44: storage_connection_string="Data Source=localhost;Database=opensim;User ID=root;Password=********;";
64: ;asset_database = "local"  <--コメントにした
65: asset_database = "grid"




● XEngine サポート

(http://opensimulator.org/wiki/XEngine)

OpenSim 0.5.8-releaseから、スクリプトエンジン(XEngine)がサポートされたので、追加してみました。
OpenSim.iniの[Startup]セクションに記述します。

(/usr/local/opensim/0.5.8/bin/OpenSim.ini)

116: ;Experimental remote ScriptServer plugin (does not currently work):
117: ;script_engine = OpenSim.Region.ScriptEngine.RemoteServer.dll  <--コメントにした
118: script_engine = OpenSim.Region.ScriptEngine.XEngine.dll  <--追加した


(補足)
知ったように書いてますが、何がどう良くなったのか、ぜんぜん調べてません。。。><



● サーバ起動の順番

Grid modeでは、次の順番で起動します。
正常に起動すると、コマンド入力待ち状態になり、コンソールをつかんでしまいますので注意です。

1.OpenSim.Grid.UserServer.exe
2.OpenSim.Grid.GridServer.exe
3.OpenSim.Grid.AssetServer.exe
4.OpenSim.Grid.InventoryServer.exe
5.OpenSim.exe



● 1.UserServerの起動

コンソールから、monoコマンドでUserServerを起動します。
途中の質問はとりあえず全てデフォルトですが、「Connection String for Databas」
には、MySQLへの接続コマンドを打ってみました。
ここを省略すると、./Regions/default.xmlを見に行きます。
どっちの方法がいいんだろう?

root@sv:/usr/local/opensim/0.5.8/bin# mono OpenSim.Grid.UserServer.exe

USER SERVER: Default Startup Message [Welcome to OGS]:
USER SERVER: Default Grid Server URI [http://127.0.0.1:8001/]:
USER SERVER: Key to send to grid server [null]:
USER SERVER: Key to expect from grid server [null]:
USER SERVER: Default Inventory Server URI [http://127.0.0.1:8004/]:
USER SERVER: DLL for database provider [OpenSim.Data.MySQL.dll]:

USER SERVER: Connection String for Database []:  <-- 省略しない
Data Source=localhost;Database=opensim;User ID=root;Password=********;

USER SERVER: Http Listener port [8002]:
USER SERVER: Use SSL? true/false [False]:
USER SERVER: Known good region X [1000]:
USER SERVER: Known good region Y [1000]:

20:40:12 - [REGION]: Establishing data connection
20:40:12 - [USERSTORAGE]: Attempting to load OpenSim.Data.MySQL.dll
20:40:12 - [USERSTORAGE]: Found 7 interfaces.
20:40:12 - Using obsoletely mysql_connection.ini, try using user_source connect string instead
20:40:12 - [MYSQL]: Connection established
20:40:12 - MIGRATION: Match: 001
20:40:12 - Resource 'UserStore' was not found
20:40:12 - [USERSTORAGE]: Added IUserData Interface
20:40:12 - [LIBRARY INVENTORY]: Loading library inventory
20:40:12 - [LIBRARY INVENTORY]: Loading libraries control file ./inventory/Libraries.xml
20:40:13 - [REGION]: Starting HTTP process
20:40:13 - [HTTPD]: Starting up HTTP Server
20:40:13 - [HTTPD]: Spawned main thread OK
20:40:13 - [SERVER]: Userserver 0.5 - Startup complete
Enter help for a list of commands

User# :  <-- コマンド入力待ちになったら(たぶん)OK.




● UserServerの初起動により、以下のファイルが作成されます。

./bin/UserServer_Config.xml
./bin/OpenSim.Grid.UserServer.log



● 起動途中の質問項目は、UserServer_Config.xmlファイルに記録されてました。

(/usr/local/opensim/0.5.8/bin/UserServer_Config.xml)

<Config default_startup_message="Welcome to OGS" default_grid_server="http://127.0.0.1:8001/"
grid_send_key="null" grid_recv_key="null" default_inventory_server="http://127.0.0.1:8004/"
database_provider="OpenSim.Data.MySQL.dll"
database_connect="Data Source=localhost;Database=opensim;User ID=root;Password=********;"
http_port="8002" http_ssl="False" default_X="1000" default_Y="1000" />




● 2.GridServerの起動

root@sv:/usr/local/opensim/0.5.8/bin# mono OpenSim.Grid.GridServer.exe

GRID SERVER: OGS Grid Owner [OGS development team]:
GRID SERVER: Default Asset Server URI [http://127.0.0.1:8003/]:
GRID SERVER: Key to send to asset server [null]:
GRID SERVER: Key to expect from asset server [null]:
GRID SERVER: Default User Server URI [http://127.0.0.1:8002/]:
GRID SERVER: Key to send to user server [null]:
GRID SERVER: Key to expect from user server [null]:
GRID SERVER: Key to send to a simulator [null]:
GRID SERVER: Key to expect from a simulator [null]:
GRID SERVER: DLL for database provider [OpenSim.Data.MySQL.dll]:

GRID SERVER: Database connect string []:  <-- 省略しない
Data Source=localhost;Database=opensim;User ID=root;Password=********;

GRID SERVER: Http Listener port [8001]:




● GridServerの初起動により、以下のファイルが作成されます。

./bin/OpenSim.Grid.GridServer.log
./bin/GridServer_Config.xml



● 3.AssetServerの起動

root@sv:/usr/local/opensim/0.5.8/bin# mono OpenSim.Grid.AssetServer.exe

ASSET SERVER: Default Startup Message [Welcome to OGS]:
ASSET SERVER: DLL for database provider [OpenSim.Data.MySQL.dll]:

ASSET SERVER: Database connection string []:  <-- 省略しない
Data Source=localhost;Database=opensim;User ID=root;Password=********;

ASSET SERVER: Http Listener port [8003]:



● AssetServerの初起動により、以下のファイルが作成されます。

./bin/AssetServer_Config.xml
./bin/OpenSim.Grid.AssetServer.log



● 4.InventoryServerの起動

なぜか、データベースのデフォルトが「SQLite」になってます。
よくわからないのですが、やっぱり、「MySQL」を指定した方がいいのかな?

root@sv:/usr/local/opensim/0.5.8/bin# mono OpenSim.Grid.InventoryServer.exe

INVENTORY: Default Startup Message [Welcome to OGS]:
INVENTORY: Default User Server URI [http://127.0.0.1:8002]:
INVENTORY: Key to send to user server [null]:
INVENTORY: Key to expect from user server [null]:

INVENTORY: DLL for database provider [OpenSim.Data.SQLite.dll]:
OpenSim.Data.MySQL.dll

INVENTORY: Database Connect String []:
Data Source=localhost;Database=opensim;User ID=root;Password=********;

INVENTORY: Http Listener port [8004]:




● InventoryServerの初起動により、以下のファイルが作成されます。

./bin/InventoryServer_Config.xml
./bin/OpenSim.Grid.InventoryServer.log



● 5.OpenSimの起動

これは、いつものとおり。

root@sv:/usr/local/opensim/0.5.8/bin# mono OpenSim.exe

23:20:01 - =========================================================
23:20:01 - ============== STARTING OPENSIM =========================
23:20:01 - =========================================================
23:20:01 - [OPENSIM MAIN]: Running in grid mode




● ログファイルを監視しましょう~

Linux(Unix)には、テキストファイルの末尾を表示するtailコマンドがありますが
「-f」オプションをつけると、ファイルの末尾に追加されるテキストデータを
リアルタイムに表示してくれるので、ログファイルの監視にとっても便利です。

OpenSim.Grid.UserServer.log
OpenSim.Grid.GridServer.log
OpenSim.Grid.AssetServer.log
OpenSim.Grid.InventoryServer.log
OpenSim.log

これら5つのログファイルを、まとめて監視してしまいます。
OpenSim.exe起動時や、ビューワログイン時に、UGAIサーバと連携する様子がコンソールに
出力されるので、参考になります。

root@sv:/usr/local/opensim/0.5.8/bin# tail -f *.log



● ビューワのポート変更を忘れずに

Grid mode は、TCP/8002、でしたね。

SecondLife.exe -set SystemLanguage ja -multiple -loginuri http://サーバ名:8002/



● つぎは

前回のMySQL移行に比べたら、今回はずいぶん簡単でした。(もちろんドキュメントはちゃんと読みましたけど)
つぎは、やっぱり、複数のSIMやRegion作りと接続ですね~。
VMWareの仮想ネットワークも準備できたし、いろいろ実験できそうです。
でも、夏に向けて熱暴走とか心配、それになんかエコによくない趣味だなぁ。。。。




【資料4.1】
OpenSim.iniファイル V0.5.7 -> V0.5.8差分

XEngine 定義が追加

447 [XEngine]
448: ; How many threads to keep alive even if nothing is happening
449: MinThreads = 2
450: ; How many threads to start at maximum load
451: MaxThreads = 100
452: ; Time a thread must be idle (in seconds) before it dies
453: IdleTimeout = 60
454: ; Thread priority ("Lowest", "BelowNormal", "Normal", "AboveNormal", "Highest")
455: Priority = "BelowNormal"
456: ; Maximum number of events to queue for a script (excluding timers)
457: MaxScriptEventQueue = 300
458: ; Stack size per thread created
459: ThreadStackSize = 262144
460: ; Rate to poll for asynchronous command replies (ms)
461: AsyncLLCommandLoopms = 50
462: ; Save the source of all compiled scripts
463: WriteScriptSourceToDebugFile = false
464: ; Default language for scripts
465: DefaultCompileLanguage = lsl
466: ; List of allowed languages (lsl,vb,js,cs)
467: AllowedCompilers = lsl
468: ; Compile debug info (line numbers) into the script assemblies
469: CompileWithDebugInformation = true
470: ; Allow the use of os* functions (some are dangerous)
471: AllowOSFunctions = false
472: ; Interval (s) between background save of script states
473: SaveInterval = 120
474: ; Interval (s) between maintenance runs (0 = disable)
475: MaintenanceInterval = 10
476: ; Time a script can spend in an event handler before it is interrupted
477: EventLimit = 30
478: ; If a script overruns it's event limit, kill the script?
479: KillTimedOutScripts = false
480: ; Allow OS console command functionality (VERY DANGEROUS!!)
481: AllowosConsoleCommand = false




【資料4.2】

Grid modeに移行したことで、データベース内のテープルが、15個になりました。



・テーブル名:land


・テーブル名:landaccesslist


・テーブル名:migrations


・テーブル名:primitems


・テーブル名:prims


・テーブル名:primshapes


・テーブル名:regions


・テーブル名:terrain

  


Posted by ぱすてる at 16:53Comments(10)OpenSim

2008年06月14日

OpenSimサーバ構築記録その3(VMWareで動かす編)


● Grid mode 勉強の準備

Standalone modeやMySQL連携の設定は理解できたので、次はGrid modeなのですが、
OpenSimが1台だけでは、いまいち盛り上がりません。
そんな時に、とても役立つのが、Webサイト構築の自己学習などで、以前からお世話になっている、
VMWare Workstationの出番です。


● WindowsXPで、OpenSim4台を動かす

XP上に、ubuntuで仮想サーバ2台、Debian/Gnu Linuxで仮想サーバ2台を作り、
Standalone modeで、OpenSim1~4を立ててみました。
プライベートアドレスの仮想ネットワークでOpenSim4台と、XPがつながっています。
グリッドモードのUGAI(User, Grid, Asset, Inventory)サーバがPC1台で作れてしまいます。 ^^




● 実際は、テキストモードで。

最初の画像はGUIモードで見栄えよく見えますど、サーバ専用なのでGUIはメモリやCPUを浪費
するだけで、実は無駄。 次の画像のようにテキストモードで起動させれば十分です。




● リソースの消費状況

仮想OS4台に、それぞれ 「たった」256MB割り当ててます。
4台合わせても1GBメモリで動いてますので、UGAI+Simの5サーバが余裕で起動できます。
仮想OSがWindowsだったら、こうはいきません。
やっぱり、Linuxは軽くてエコなOSです。 ^^




● スナップショットは強い味方

仮想OSの現在の状態を、名前をつけてハードディスクに保存できる、VMWareのスナップショット。
OSの改版作業の前にスナップショットしておけば、ミスして起動しなくなっても
元に戻せるので安心して作業できます。
どれだけスナップショットのお世話になった事か。。^^;




VMWareには、フリーソフトの「VMWare Player」がありますが、やっぱりこちらが重宝します。
約190$の価格ですけど、持っていて損はしません。

VMWareは30日限定の評価版が配布されていますので
興味のある方はぜひ試してみてください。
https://www.vmware.com/tryvmware/login.php?eval=workstation-w





【資料3.1】 Debian/Gnu Linuxでの、OpenSimコンパイルエラー対処

Debian/Gnu Linux 4.0 (Etch)の安定版(Stable)で、配布されている「nant」は
バージョンが古く、OpenSimコンパイル時にエラーがでます。

リポジトリ定義ファイルを変更し、テスト版(unstable)の「nant」をインストールします。

「/etc/apt/sources.lst」

(安定版定義を無効にする)
# deb http://ftp.nara.wide.ad.jp/debian/ etch main
# deb-src http://ftp.nara.wide.ad.jp/debian/ etch main

(テスト版定義を作成する)
deb http://ftp.nara.wide.ad.jp/debian/ unstable main
deb-src http://ftp.nara.wide.ad.jp/debian/ unstable main

この設定で、apt-getコマンドで、nantやmono関連をインストールする。




【資料3.2】 ubuntu起動時の、GUIモード/テキストモードの切り替え

● gdm(グラフィカルディスプレイマネージャ)の起動シェルを削除する

root@opensim1:~# update-rc.d -f gdm remove

Removing any system startup links for /etc/init.d/gdm ...
  /etc/rc0.d/K20gdm
  /etc/rc1.d/K20gdm
  /etc/rc2.d/S20gdm
  /etc/rc3.d/S20gdm
  /etc/rc4.d/S20gdm
  /etc/rc5.d/S20gdm
  /etc/rc6.d/K20gdm

● gdm を有効にする

root@opensim1:~# update-rc.d gdm defaults

Adding system startup for /etc/init.d/gdm ...
  /etc/rc0.d/K20gdm -> ../init.d/gdm
  /etc/rc1.d/K20gdm -> ../init.d/gdm
  /etc/rc6.d/K20gdm -> ../init.d/gdm
  /etc/rc2.d/S20gdm -> ../init.d/gdm
  /etc/rc3.d/S20gdm -> ../init.d/gdm
  /etc/rc4.d/S20gdm -> ../init.d/gdm
  /etc/rc5.d/S20gdm -> ../init.d/gdm




【資料3.3】 インストーラのバグ? (keymap配列異常)

私のパソコンでは、英語キーボード(PC101)を利用しているので、ubuntuインストール時に
英語キーボードを選択しました。
なのに、ubuntuをGUIモードで起動したら、keymapが日本語に。 記号が打てない~ ><

X Window Systemの設定ファイルを確認したら、レイアウトは「US」なのに、モデルが
日本語キーボードになってる。。 ーー;

「/etc/X11/xorg.confファイル」

Section "InputDevice"
 Identifier "Generic Keyboard"
 Driver   "kbd"
 Option   "XkbRules"  "xorg"
 Option   "XkbModel"  "jp106" <-- おかしい
 Option   "XkbLayout"  "us" <-- あってる
EndSection

【修正後】
 Option   "XkbModel"  "pc101"




【資料3.4】 VMWare Workstation 6 での、仮想マシン作成手順

















※ NATモードにすると、XPがNAT(NAPT)変換するブロードバンドルータの役目になります。
※ Bridgedモードにすると、仮想OSにグローバルIPアドレスを割り当てて、直接外部に公開できます。














※ 仮想CDROMデバイスにISOイメージファイルを指定することで、CDROM装置に
  インストールCDが挿入されているのと同じ意味になります。




※ これで、仮想マシンのできあがり。 CDROMにはubuntuのインストールディスクが
  挿入されている状態です。




※ 電源ボタンを押すと、ISOイメージのCDROMから起動します。
  


Posted by ぱすてる at 18:53Comments(0)OpenSim

2008年06月06日

OpenSimサーバ構築記録その2(MySQL移行編)


● まえがき

OpenSimのデータベースは、内蔵されているSQLiteがデフォルトなんですが、
グリッドモードで動かす為にも、データベースをMySQLに変更する必要があります。
英語のサイトと格闘しながらも、意外と苦労せず動いてしまいました~。 ^^

また、OpenSimは、今日現在最新の、0.5.7-releaseで動作確認しました。
環境ファイルOpenSim.iniファイルを確認すると、ODE(Open Dynamics Engine)物理や、LSL
関連のパラメタが、前回のVer0.5.6からずいぶん増えているので、今後が楽しみです。 ^^



● 手順書を確認

教えて君にならないように、説明書はちゃんと読みます。

 【OpenSim Database support】
 http://opensimulator.org/wiki/OpenSim_Database_support

 【MySQL configuration】
 http://opensimulator.org/wiki/Mysql-config

 【Mysql-config example】
 http://opensimulator.org/wiki/Mysql-config_example



● Mysqlサーバ Ver5.0 のインストール

(1) ubuntuインストール時には指定しなかったので、パッケージ指定で、MySQLをインストールします。

root@sv:~# apt-get install mysql-server-5.0



(2) MySQLサーバの、起動用シェルスクリプトの確認

MySQL起動用シェル本体は、/etc/init.d/ 配下に、自動的に作成されます。

root@sv:~# ls /etc/init.d/mysql*
/etc/init.d/mysql* /etc/init.d/mysql-ndb* /etc/init.d/mysql-ndb-mgm*

起動用シェル本体のエイリアス(ショートカット)が、ランレベル2起動用のディレクトリ/etc/rc2.d/
配下に、自動的に作成されます。

root@sv:~# ls /etc/rc2.d/*mysql*
/etc/rc2.d/S17mysql-ndb-mgm@ /etc/rc2.d/S18mysql-ndb@ /etc/rc2.d/S19mysql@

ubuntu(Debian/Gnu Linux系OS)は、通常、GUIモード、テキストモードにかかわらず、
ランレベル2なので、OS起動時に、/etc/rc2.d/配下のシェルスクリプトが実行されます。
(ちなみに、RedHat系Fedora、CentOS等は、テキストモードがランレベル3、GUIモードが
ランレベル5、ですね。)



● MySQLサーバ Ver5.0 の起動確認

(1) MySQLのインストールに問題なければ、自動的に起動しています。

root@sv:~# ps ax | grep -i mysql
5056 ?  S   0:00 /bin/sh /usr/bin/mysqld_safe
5098 ?  Sl  0:02 /usr/sbin/mysqld



● MySQLサーバ Ver5.0 の管理者(root)権限設定

MySQLインストール直後のユーザ権限は、
 ・アノニマスユーザが有効になっている。
 ・rootで、パスワード無しでログインできる。
と、問題だらけです。

MySQLにログインして、SQL文を発行します。(パスワード無しでログインできる。。。><)

root@sv:~# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.0.51a-3ubuntu5 (Ubuntu)


mysql> select host,user,password from mysql.user;





(1) 全てのRootユーザにパスワードと権限を設定し、アノニマスユーザを削除します。

mysql> grant all on *.* to root@localhost identified by '********';
mysql> grant all on *.* to root@sv identified by '********';
mysql> grant all on *.* to root@127.0.0.1 identified by '********';

mysql> delete from mysql.user where user='';

mysql> flush privileges;



(2) 設定の確認

mysql> select host,user,password from mysql.user;



【補足】
 画面のパスワードは、ハッシュで暗号化されたものが表示されています。



(3) これで、パスワード無しでMysqlにログインできません。

root@sv:~# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)



● データベースの作成

(1) 手順書にしたがって、SQLのcreateコマンドで、データベース(データベース名:opensim)を
  作成します。

mysql> create database opensim;
mysql> show databases;



【補足】
データベースで日本語データを扱う場合は、文字コードを指定する事が多いです。
mysql> create database データベース名 default character set utf8;



(2) テーブルは?

データベース内のテーブルはどうするんだ~?、というわけで、README.txtを読むと、
テーブルは、OpenSim起動時に自動的に作成されますよ。
と、書いてありました。 とりあえず、信じよう。

 【/usr/local/opensim/0.5.7/share/sql/mysql_README.txt】
 This directory used to contain sql files for mysql that needed to be manually sourced in order to
 set up the database tables required by OpenSim. This is no longer necessary - OpenSim now
 sets up these tables automatically.

 All you need to do is create the database that OpenSim is to use and set the configuration in
 bin/mysql_connection.ini (using bin/mysql_connection.ini.example as a reference).



● MySQL接続用環境ファイルの作成

(1) 環境ファイルのひな型が用意されているので、コピーして、viエディタで修正します。

root@sv:/usr/local/opensim/0.5.7/bin# cp mysql_connection.ini.example mysql_connection.ini
root@sv:/usr/local/opensim/0.5.7/bin# vi mysql_connection.ini

 【mysql_connection.ini】
 hostname=localhost
 database=opensim
 username=root
 password=******** <- パスワードを合わせる
 pooling=false
 port=3306



● OpenSim環境ファイルの修正

(1) OpenSim.iniは、インストール直後は、SQLiteの設定になってます。
  SQLiteの設定部分を無効(コメント化)にして、MySQLの設定部分を有効にします。

 【OpenSim.ini】
 ; asset_plugin = "OpenSim.Data.SQLite.dll"  (無効にする)
 asset_plugin = "OpenSim.Data.MySQL.dll" ; for mysql  (有効にする)
 ; inventory_plugin = "OpenSim.Data.SQLite.dll"  (無効にする)
 inventory_plugin = "OpenSim.Data.MySQL.dll"  (有効にする)
 ; userDatabase_plugin = "OpenSim.Data.SQLite.dll"  (無効にする)
 userDatabase_plugin = "OpenSim.Data.MySQL.dll"  (有効にする)



● さぁ、OpenSimの実行~。。。。。起動しませんでした。_| ̄|○

root@sv:/usr/local/opensim/0.5.7/bin# mono OpenSim.exe

14:26:20 - [ASSET SERVER]: Starting asset storage system
14:26:20 - [SQLAssetServer]: AssetStorage: Attempting to load OpenSim.Data.MySQL.dll
[APPLICATION]:
APPLICATION EXCEPTION DETECTED: System.UnhandledExceptionEventArgs
Exception: System.Exception: Error initialising MySql Database:
System.Exception: Connection error while using connection string
[Server=localhost;Port=3306;Database=opensim;User ID=root;Password=********;Pooling=false;]
---> System.NotSupportedException: CodePage 1252 not supported
 at System.
Text.Encoding.GetEncoding (Int32 codePage) [0x00000]
 at MySql.Data.MySqlClient.Driver..ctor (MySql.Data.MySqlClient.MySqlConnectionStringBuilder settings) [0x00000]
 at MySql.Data.MySqlClient.NativeDriver..ctor (MySql.Data.MySqlClient.MySqlConnectionStringBuilder settings) [0x00000]
 at MySql.Data.MySqlClient.Driver.Create (MySql.Data.MySqlClient.MySqlConnectionStringBuilder settings) [0x00000]
 at MySql.Data.MySqlClient.MySqlConnection.Open () [0x00000] --- End of inner exception stack trace ---



● エラーメッセージを見て、思い出す。

「---> System.NotSupportedException: CodePage 1252 not supported」
このエラーメッセージ、確かどこかで見かけたなぁ、と手順書を見直すと、

 【OpenSim Build Instructions】
 http://opensimulator.org/wiki/OpenSim_Build_Instructions

のページに、

 Ubuntu 8.04
 If you get an exception "System.NotSupportedException: CodePage 1252 not supported"
 running OpenSim with MySql, install also libmono-i18n2.0-cil.

OpenSim+Mysqlで、このエラーが出た場合は、libmono-i18n2.0-cil をインストールしなさい、
と、書いてあります。 ちゃんと読んどいて、よかったです。 ^^



● libmono-i18n2.0-cil のパッケージを検索して、インストール

(1) apt-cacheコマンドで、パッケージlibmono-i18n2.0-cilの検索

root@sv:~# apt-cache search libmono-i18n
libmono-i18n1.0-cil - Mono I18N libraries (1.0)
libmono-i18n2.0-cil - Mono I18N libraries (2.0)

よかった、ちゃんとありました。^^



(2) パッケージlibmono-i18n2.0-cilのインストール

root@sv:~# apt-get install libmono-i18n2.0-cil
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
 libmono-i18n2.0-cil




● OpenSimの起動

(1) これで、OpenSimが問題なく動きました。
  起動ログのMySQL接続部分です。コネクションが確立しています。

root@sv:/usr/local/opensim/0.5.7/bin# mono OpenSim.exe

14:38:20 - [ASSET SERVER]: Starting asset storage system
14:38:20 - [SQLAssetServer]: AssetStorage: Attempting to load OpenSim.Data.MySQL.dll
14:38:20 - [MYSQL]: Connection established
14:38:20 - [ASSETS DB]: Creating new database tables
14:38:20 - [AssetStorage]: Added MySQL Asset storage engine 1.0.0.0

14:38:21 - [AGENT INVENTORY]: Inventory storage: Attempting to load OpenSim.Data.MySQL.dll
14:38:21 - [MYSQL]: Connection established



(2) OpenSimデータベース内に、テーブルが自動的に作成されています。
  READMEに書かれているとおり、テーブルをわざわざ作る必要はありませんでしたね。

mysql> use opensim;
mysql> show tables;



【補足】
 「avatarappearance」は、Ver0.56では、外部データベースでしたが、
 Ver0.57からopensimデータベース内のテーブルに移行したようです。
 Ver0.56のOpenSim.iniファイルに存在したavatarappearanceの定義も、
 Ver0.57では無くなっています。



(3) ユーザテーブルを、確認します。
  一番最初に作った、OpenSimの管理者アカウントも、MySQLに引き継がれてます。
  なかなか親切だ。 ^^

mysql> select username,lastname,passwordHash from opensim.users;





● 一般ユーザ(自分)の作成

(1) OpenSimのコンソールから、ユーザアカウント(私ぱすてるさん)を作成します。

Region# : create user
First name [Default]:
Pastel
Last name [User]:
Flow
Password:
********



(2) MySQLにログインして、確認してみます。
  ちゃんと、ユーザアカウントができてました。

mysql> select username,lastname,passwordHash from opensim.users;





● ついにお友達ができました~、、って、ひとり二役ですけど。。。><





● ちょっと疑問

ところで、OpenSimをアップデートしたら、今あるMySQL内のデータベース(ユーザアカウントとか、
インベントリ)は引き継げるんだろうか?
OpenSimを最初にコンパイル、起動する時は、SQLiteだし。。。
アップデートのたびに、DB移行作業が発生するのはゴメンです。
要調査ですね~。



● 予定は未定

データベースをMySQLに移行した事で、Apache Web ServerとPerlやPHP、Rubyで、いろいろな、
Web-DB連携アプリが組めるようになりました。
さすがにテーブルを書き換えるような処理は危険だけど、インベントリを検索したり、一覧表示する
様なアプリを組んでみよう。
それから、やっぱり本命は、グリッドモードの仕組みや、移行方法を覚えないとね。
当分、英語と格闘です。。。><



● 補足

通常、データベースが稼動しているサーバに、グローバルIPアドレスを割り当てて、インターネットに
公開することは決してしません。 
セキュリティ対策を十分した上で、自己責任で。 (^^ゞ




【資料2.1】
データベース「opensim」内、テーブルカラム情報 (OpenSim Ver0.57)

・テーブル名:agents




・テーブル名:assets




・テーブル名:avatarappearance




・テーブル名:inventoryfolders




・テーブル名:inventoryitems




・テーブル名:userfrends




・テーブル名:users






【資料2.2】
OpenSim.iniファイル V0.5.6 -> V0.5.7差分

● V0.5.6から削除

34: ; Avatar appearance persistence
35: appearance_persist = false
36: appearance_database = "MySQL"
37: appearance_connection_string = "Data Source=localhost;Database=avatar_appearance;User ID=root;Password=xxxx;pooling=false;"


● V0.5.7から追加

71: ;permissionmodules = "DefaultPermissionsModule"
104: ; asset_plugin = "OpenSim.Data.NHibernate.dll" ; for nhibernate

115: ; inventory_plugin = "OpenSim.Data.NHibernate.dll" ; for nhibernate
116: ; Inventory Source NHibernate Example (DIALECT;DRIVER;CONNECTSTRING)
117: ; inventory_source = "SQLiteDialect;SqliteClientDriver;URI=file:Inventory.db,version=3"

123: ; userDatabase_plugin = "OpenSim.Data.NHibernate.dll" ; for nhibernate
124: ; User Source NHibernate Example (DIALECT;DRIVER;CONNECTSTRING)
125: ; user_source = "SQLiteDialect;SqliteClientDriver;URI=file:User.db,version=3"

156: [ODEPhysicsSettings]
157:
158: ;# World Settings
159:
160: ;Gravity. Feel like falling up? change world_gravityz to 9.8 instead of -9.8. m/s
161: world_gravityx = 0
162: world_gravityy = 0
163: world_gravityz = -9.8
164:
165: ; World Step size. (warning these are dangerous. Changing these will probably cause your scene to explode dramatically)
166: ; reference: fps = (0.09375/ODE_STEPSIZE) * 1000;
167: world_stepsize = 0.020
168: world_internal_steps_without_collisions = 10
169:
170: ;World Space settings. Affects memory consumption vs Collider CPU time for avatar and physical prim
171: world_hashspace_size_low = -4
172: world_hashSpace_size_high = 128
173:
174: ;Dynamic space settings Affects memory consumption vs Collider CPU time for static prim
175: meters_in_small_space = 29.9
176: small_hashspace_size_low = -4
177: small_hashspace_size_high = 66
178:
179: ; # Contact properties. (the stuff that happens when things come in contact with each other)
180:
181: ; surface layer around geometries other geometries can sink into before generating a contact
182: world_contact_surface_layer = 0.001
183:
184: ; Non Moving Terrain Contact (avatar isn't moving)
185: nm_terraincontact_friction = 255.0
186: nm_terraincontact_bounce = 0.1
187: nm_terraincontact_erp = 0.1025
188:
189: ; Moving Terrain Contact (avatar is moving)
190:
191: m_terraincontact_friction = 75.0
192: m_terraincontact_bounce = 0.05
193: m_terrainContact_erp = 0.05025
194:
195: ; Moving Avatar to object Contact
196:
197: m_avatarobjectcontact_friction = 75.0
198: m_avatarobjectcontact_bounce = 0.1
199:
200: ; Object to Object Contact and Non-Moving Avatar to object
201:
202: objectcontact_friction = 250.0
203: objectcontact_bounce = 0.2
204:
205: ; # Avatar Control
206:
207: ; PID Controller Settings. These affect the math that causes the avatar to reach the
208:
209: av_pid_derivative_linux = 3200.0
210: av_pid_proportional_linux = 1400.0
211:
212: av_pid_derivative_win = 2200.0
213: av_pid_proportional_win = 900.0;
214:
215:
216: ;girth of the avatar. Adds radius to the height also
217: av_capsule_radius = 0.37
218:
219: ; Max force permissible to use to keep the avatar standing up straight
220: av_capsule_standup_tensor_win = 550000
221: av_capsule_standup_tensor_linux = 2000000
222:
223: ; used to calculate mass of avatar.
224: ; float AVvolume = (float) (Math.PI*Math.Pow(CAPSULE_RADIUS, 2)*CAPSULE_LENGTH);
225: ; av_density * AVvolume;
226:
227: av_density = 80
228:
229: ; use this value to cut 52% of the height the sim gives us
230: av_height_fudge_factor = 0.52
231:
232: ; Movement. Smaller is faster.
233:
234: ; speed of movement with Always Run off
235: av_movement_divisor_walk = 1.3
236:
237: ; speed of movement with Always Run on
238: av_movement_divisor_run = 0.8
239:
240: ; # Object options
241: ; used in the mass calculation.
242: geometry_default_density = 10.000006836
243:
244: ; amount of ODE steps where object is non moving for ODE to automatically put it to sleep
245: body_frames_auto_disable = 20
246:
247: ; used to control llMove2Target
248: body_pid_derivative = 35
249: body_pid_gain = 25
250:
251: ; amount of time a geom/body will try to cross a region border before it gets disabled
252: geom_crossing_faiures_before_outofbounds = 5
253:
254: ; start throttling the object updates if object comes in contact with 3 or more other objects
255: geom_contactpoints_start_throttling = 3
256:
257: ; send 1 update for every x updates below when throttled
258: geom_updates_before_throttled_update = 15
259:
260: ; Used for llSetStatus. How rigid the object rotation is held on the axis specified
261: body_motor_joint_maxforce_tensor_linux = 2
262: body_motor_joint_maxforce_tensor_win = 5
263:
264: ; # Sculpted Prim settings
265:
266: ; Do we want to mesh sculpted prim to collide like they look?
267: mesh_sculpted_prim = true
268:
269: ; number^2 non-physical level of detail of the sculpt texture. 32x32 - 1024 verticies
270: mesh_lod = 32
271:
272: ; number^2 physical level of detail of the sculpt texture. 16x16 - 256 verticies
273: mesh_physical_lod = 16

279: [RestPlugins]
280: enabled = false
281: password = unknown
282: prefix = /admin
283:
284: [RestRegionPlugin]
285: enabled = false

451: ; Maximum number of llListen events we allow per script
452: ; Set this to 0 to have no limit imposed.
453: max_listens_per_script = 64


blender v2.46 Blender Foundation
  


Posted by ぱすてる at 22:13Comments(2)OpenSim