月別アーカイブ: 2007年7月

新しい PSP と RAM 容量

新しいスリムになった PSP が発表されたようですね。
 ・薄くなって軽くなった新型PSPを秋に投入
 ・SCEA、スリムで軽い新型PSPを発表この秋、発売へ
よく見ると、スペックも若干更新されているようです。
Main Memory が 32MB から 64MB に増えています。

互換性を考えるとこのような仕様変更は考えにくいのですが、
UMD の読み込みスピードが改善されているらしい
ことなどから、UMD のキャッシュに使われるのかもしれません。
64MB というと Xbox1(VRAM兼) と同じですね。

TV出力も追加されているようです。
個人的には外部コントローラ用端子がほしい。

EM・ONE 新ファームウエア v1.01

EM・ONE の新しいファームウエアが出ました。1.01a にアップデートできます。
同時に EM・ONE 用のバックアップツールも無償でダウンロードできるように
なりました。3DBox のゲームといい、なんだか気前が良いですね。

イー・モバイル、「EM・ONE」の新ファームウェア公開
EM・ONE ~本体アプリケーションバージョンアップについて~
EM・ONE ~バックアップツール「Sprite Backup(S01SH版*1)」を提供開始~

バックアップツール「Sprite Backup(S01SH版)」は、ファームウエアを更新
しなくても使えます。つまり v1.00 でも動作します。
というか、更新時のトラブルがあっても元に戻せるように用意されたツール
なので、むしろ更新前にバックアップをとっておく必要があります。

早速更新してみました。

手順どおりまずは Sprite Backup をダウンロードしてインストールして更新前の
バックアップを取ります。バックアップの前後に自動でリセットがかかります。

アップデータをダウンロードします。EM・ONE は本体のフラッシュメモリ容量も
多いので、ZERO3[es] の更新のときのように神経質にならずに済むのが
ありがたいです。

実行すると AC アダプタを繋ぐように言われます。
超大容量バッテリーを一度使い切ってしまいたかったけれど、仕方ないので繋ぎます。

アップデートのプログラムは1つですが、更新は前半と後半の2回行われます
前半に比べて後半はかなり時間がかかります。プログレスバーがとまったように
見えてもそのまま我慢です。

手順書どおりの操作で更新が完了しました。バージョン番号は

 v1.01a (バージョン1.00からアップデートされています。)

になりました。

  設定→システム→S01SH情報

確認手順も Windows フォルダの exe を探さなければいけない W-ZERO3[es] より
簡単になっています。

更新しても、Direct3DM で GoForce5500 のハードウエアアクセラレータは
使えるようになってませんでした。
そういえばパケットカウンタの前月、前々月がクリアされているのは更新のせい
でしょうか。

今回は安定度の向上が中心らしいので、もうしばらく使ってみます。

W-ZERO3 Linux の build 環境を作る

W-ZERO3[es] で Linux が動き出しました。以前こちら
W-ZERO3[es] Linux
W-ZERO3[es] Linux (2) mini SD
でも書きましたが、詳しくは
Linux on W-ZERO3
に書かれています。

まめに更新されていて、今では es でない W-ZERO3 (WS003SH) 等でも動作
するようになっています。

EM・ONE での動作にも期待がかかるのですが、、今のところはまだ動作対象外
のようです。EM・ONE はグラフィックアクセラレータ GoForce5500 が乗って
いるため、万が一動いても画面は見えないだろうしもしくは描画アクセスで
止まってしまう可能性があります。

無印対応以外にも、キーボードの刻印どおりに入力できるようになっていたり、
sd 周りを簡単に扱えるコマンドが入ったり、
開発者向けにクロス開発環境の作り方などがこちらで解説されています。
FrontPage – 開発room

実際にクロス環境の構築を試してみました。

(1) 仮想PC に Fedora7 を install

先日 PS3 に install したばかりなので、同じように Fedora 7 を使ってみます。

当初 VirtualPC2007 を使おうとしたのですが うまく動きませんでした。
今のカーネルと VirtualPC のエミュレーション対象との相性で問題があるようです。
(ubuntu 7.04 でもマウスが動きませんでした)

そこで、USB が使えたり、RemoteDesktop で仮想 PC へ接続が可能だという
VirtualBox を使ってみました。
WindowsVista に VirtualBox を install し、仮想マシンを作って
Fedora 7 の DVD image ( F-7-i386-DVD.iso ) から install します。
iso を直接マウントできるため物理的にメディアに焼きこむ必要はありません。

マウスのキャプチャ状態は 右の Ctrl キーで Host PC に戻ります。
(Virtual PC だと 右 Alt でした)

仮想マシン作成時に聞かれる設定はこんな感じです。

 ・OS の種類は Linux 2.6
 ・RAM は 512M (host PC はRAM 2G)

仮想 HDD のサイズは 20GB にしています。
Fedora 7 の Install オプションは下記の 3つ全部チェックしました。

  ・オフィスプロダクティビティ
  ・ソフトウエア開発
  ・webサーバー

使うインストーラの画面も手順も PS3 と全く一緒。
インストール後、ネットワークにつながることを確認したらおしまいです。
しばらくすると更新を催促されるのでそのまま更新しておきます。

(2) クロス開発環境の構築 buildroot

とりあえず W-ZERO3 用の開発環境を作ってみます。
開発メモ クロス開発環境の構築
を参考に進めました。

まず buildroot を入手します。下記から Download → Daily Snapshots
BUILDROOT

今回は buildroot-20070709 を使いました。
buildroot-20070709.tar.bz2 をダウンロードして PC に保存します。
共有フォルダを使って VirtualBox 上の Fedora7 にコピーします。

Fedora7 上の Firefox から直接ダウンロードしたほうが早かったかもしれません。

ターミナルを開いて、以後全部コマンドラインから作業します。
 アプリケーション→システムツール→端末

適当な作業フォルダを作って、先ほどダウンロードした
 buildroot-20070709.tar.bz2
を入れます。

 $ cd
 $ mkdir zero3
 $ mv Desktop/buildroot-20070709.tar.bz2 zero3

  (作業フォルダとして home に zero3 を作成し、Desktop にダウンロード
  した ~.bz2 を zero3 に移動する。)

tar を展開します。

 $ cd zero3
 $ bzcat buildroot-20070709.tar.bz2 | tar -xvf –

buildroot フォルダができるので、その中で config 設定します。

 $ cd buildroot
 $ make menuconfig

Menu 上で設定を行います。

 Target Architecture → arm に変更
 Target Architecture Variant → xscale に変更
 Target Options → cpio the root filesystem にチェック追加

[→] で <Exit> を選択して save 画面で <Yes>。

この後 make で build が始まります。
build 中必要に応じてパッケージを buildroot/dl フォルダにダウンロードして
くるようです。ダウンロードされたファイルは下記の通りです。
Wiki にあるように、可能なら先に任意のサイトからダウンロードして、
あらかじめ dl に置いておくと良いかもしれません。

  binutils-2.17.tar.bz2
  busybox-1.6.1.tar.bz2
  fakeroot_1.7.1.tar.gz
  gcc-4.2.0.tar.bz2
  genext2fs-1.4.tar.gz
  gmp-4.2.1.tar.bz2
  linux-2.6.21.5.tar.bz2
  mpfr-2.2.1.patch
  mpfr-2.2.1.tar.bz2
  uClibc-0.9.29.tar.bz2

make します。

 $ make

途中で config の追加設定を 2回きかれます。

 ◎Target Processor Type
   15. Intel Xscale (CONFIG_ARM_XSCALE)

  15 の XScale を選択

 ◎Use BX in function return (USE_BX)

  Wiki の解説どおり default の「Y」を選択

完了したら、arm 向けの各種コマンド類が下記の場所にできます。

 zero3/buildroot/build_arm/staging_dir/usr/bin

パスを通します。HOME に armenv というファイルを作って

 $ cd
 $ vi armenv

次の 1行を書き込んでおきます。

———————————————————————–
export PATH=”$PATH:$HOME/zero3/buildroot/build_arm/staging_dir/usr/bin”
———————————————————————–

 $ . ./armenv

これで path が追加されます。

(3) 手抜きテスト

適当なプログラムを作ります。

 $ vi main.c

———————————————————————–
#include
int main()
{
 printf( “HELLO, ZERO3\n” ); /* 適当 */
 return 0;
}
———————————————————————–

 $ arm-linux-gcc main.c
 $ file a.out

a.out: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), not stripped

なんとなくできたっぽいです。

(4) 実行テスト

(3) で作った a.out を miniSD に書き込んでおいてから、W-ZERO3[es] の
Linux を起動します。

最新版(20070707)では勝手に root で login するし、sd コマンドですぐに
miniSD をマウントできるしで、ものすごい楽です。

 # cd /mnt/sd1
 # ./a.out

HELLO, ZERO3

とりあえずうごいたっぽいです。
こんないい加減なものでは動作確認にならないかもしれないし、手順とか構築
とかもミスやおかしな点とかあるかもしれないです。
が、とりあえず今日はここまでにします。

ちなみに、本当は、PS3 上の Fedora7 で W-ZERO3 Linux 用の開発環境を構築
してみたかったのですが、やっぱり通りませんでした。
(PS3 Linux Fedora7 install はそれが目的だった)

PS3 Linux Fedora7 install

すっかり Folding@Home にはまってしまい、PS3 はフル稼働状態でした。
Folding@home
Folding@home 熱いけど静かな戦い
その間に PS3 Linux も動きがあって、本体のファームウエア更新でインストール
手順が簡略化されたり、ADDON CD も 20070425 のあとにさらに 20070516 が
登場して Fedora7 対応となりました。更新のために PS3 Linux を再 install
してみます。
新ADDONCD 20070425

インストールにあたって下記のサイトを参考にさせていただきました。
FIXSTARS: PS3にFedora 7をインストールする
CellFanWiki

●Fedora7 の Install 手順のメモ

(0) 前準備

 ・PS3 のファームウエアは最新にしておく
 ・PS3 のネットワーク接続は 無線LAN ではなく有線LAN にしておく
    無線 LAN 設定は GAME-OS と Linux では別物であるため
 ・PS3 に繋げるための USB キーボードと USB マウスを用意しておく
 ・720p 以上の解像度の TV。(SD でも install できるが今回は説明しない)
 ・PS3 本体の HDD バックアップ用のメディア (必要に応じて)
 ・DVD-R を作れる PC

 などがインストール時に必要になることがあります。

(1) Fedora7 install 用 DVD の入手

 Fedora7 の PPC 版 DVD を入手して DVD-R に焼いておきます。iso イメージ
 として書き込みます。

 入手はこの辺
  ・Fedora Project : Torrents
  ・Fedora Project : Mirrors

 Mirror サイトから落とす場合は下記の場所です。
   releases/7/Fedora/ppc/iso/F-7-ppc-DVD.iso

(2) 20070516 版の otheros.bld のインストール

 二通り方法があるので都合の良い方法を用います。
 過去に一度 PS3 Linux を install したことがあっても、otheros.bld はまた
 新たに入れなおす必要があります。

 ◎ADDON CD を使う方法
   ADDON CD (PS3 Linux Distributor’s Starter Kit) の
   「CELL-Linux-CL_20070516-ADDON.iso」をダウンロードします。
   iso イメージとして CD-R に焼いておきます。

   PS3 のドライブに入れて、PS3 のメニューから
     設定 → 本体設定 → 他のシステムのインストール
   を実行します。CD-ROM 内のファイルを認識したらインストールを行います。

 ◎他のメディアを使う方法
   CD-R を焼かずに直接 otheros.bld をインストールしても構いません。
   USBメモリや SDカード、iPod などのマスストレージ対応デバイスなど
   PS3 で認識できるならどんなメディアでも使えます。

   20070516版 ADDON CD の「\PS3\otheros」フォルダから、もしくは
   FIXSTARS のミラーサイトから otheros.bld をダウンロードします。
   CELL-Linux-CL_20070516-ADDON

   メディアの指定フォルダにコピーします。フォルダ構造は次のようになります。
    \PS3\otheros\otheros.bld
   
   PS3 上で
     設定 → 本体設定 → 他のシステムのインストール
   と選択して、メディアの中のファイルをインストールします。

(3) PS3 へのインストール場所の確保

 今回は PS3 本体の HDD にインストールしました。外部 HDD へインストール
 する場合はパーティション分割やフォーマットはおそらく不要でしょう。
 まだ実験していないので外部 HDD へのインストールは今回は説明しません。

 本体 HDD にインストールする場合、Linux 用のスペースを作成する必要が
 あります。すでにパーティションを分割してある場合はこの手順は不要です。

 方法は次の通りです。

  1. 本体HDD 内容のバックアップ
      設定 → 本体設定 → バックアップユーティリティ

  2. パーティション分割 (フォーマット)
     設定 → 本体設定 → フォーマットユーティリティ
     カスタム → パーティション選択

  3. バックアップ内容のリストア

 バックアップやリストア、パーティション分割などはすべて PS3 のメニュー
 から行うことができます。セーブデータなど重要な情報は、コピー可能なもの
 だけでも他のメディア等に複数保存しておくことをお勧めします。

  参考ページ
  ・PS3 の HDD バックアップ方法の実験
  ・CellFanWiki: HDDの分割はどれを選べばいい?

(4) インストーラの起動

 先に PS3 に USB キーボードと USB マウスを繋いでおいてください。

 (1) で作った DVD を PS3 のドライブに入れて、PS3 のメニューから

   設定 → 本体設定 → 優先起動システム

 を選んで「他のシステム」に切り替えます。すぐ起動するかどうか聞かれるので
 そのまま他のシステムを起動します。

 ブートローダーである「kboot」が起動します。
 プロンプト「kboot:」が表示されたらキーボードから次のように入力します。
 DVD を読み込んで Fedora 7 のインストーラが起動します。

   linux video=720p

 この手順は下記サイトをそのまま参考にしました。
 ・FIXSTARS: PS3にFedora 7をインストールする

(5) Fedora7 インストール

 最初にメディアのチェックをするかどうかきかれるので「skip」します。
 GUI のインストーラが起動したら以後の操作はマウスです。

 最初に Install 言語の選択画面になるので日本語を選びます。
 次から説明は日本語になります。

 パーティションは内蔵 HDD が選択されているので、そのままインストールを続け
 ます。パーティションの中身を消すかどうか聞かれたら「はい」。

 ”メモリが足りないので直ちにパーティションを書き込んで swap を作成する~”
  という内容のダイアログが表示されるので「はい」

 ネットワークデバイスは自動で選ばれているので「DHCP の自動設定」そのまま
 にします。(設定変更が必要なら必要に応じて変更してください)

 タイムゾーンは「アジア/東京」

 rootパスワード入力には、自分で任意のパスワードを登録します。
 「確認」にも同じものを入れます。

 パッケージ選択画面になります。

   ・オフィスプロダクティビティ
   ・ソフトウエア開発
   ・webサーバー

 とりあえず 3つともチェックを入れました。HDD 容量と用途に応じて必要な
 ものを選択してください。

 このあとインストールが始まります。

  昔の ADDON CD を使ったテキストベースのインストールスクリプトと違い、
  暗転のまま止まることもなく、進行具合が一目でわかって安心です。
  特にはまりどころも無さそうです。

  このインストール作業は非常に時間がかかるのでここでひたすら待ちます。

  Windows の OS インストールに比べるとずっと時間がかかります。
  おそらく OS だけでなくアプリケーション等も全部含まれているからでしょう。
  Office や VisualStudio などもまとめて入れているようなものです。

(6) 初回起動設定

 延々待って、インストールが終了するとディスクがイジェクトされます。

 ここで再起動を促されて「再起動」ボタンを押します。しばらくして途中で画面が
 止まってしまいます。電源ボタンを押しっぱなしにして電源を切ってください。
 「ピッ」という音が2回聞こえるまで押しっぱなしです。
 少々間をおいて、また電源を入れ直します。

 電源を入れなおすと Fedora 7 が起動し初期化と残りの設定が始まります。

 ファイヤウォール画面になるので使用するサービスにチェックを入れておきます。
 今回は下記のものにチェックを入れておきました。

  SSH
  Samba
  Secure WWW
  WWW

 SELinux はとりあえずデフォルトのままにしておきます。

 日付と時刻もそのままです。

 Hardware Profile もデフォルト(Do not send)を選びました。

 ユーザーの作成画面でログイン用のユーザー名を入力し、パスワードも設定します。

 サウンド設定も、そのままできちんと音が出ているのでそのままです。

 これで「終了」です。

(7) ログイン画面と更新

 (6) で作成したユーザー名とパスワードでログインします。
 右上のアイコンが全部揃うまで待ちます。

 システム → 管理 → ネットワーク

  パスワードをきかれるので (5) で登録した rootパスワードを入れます。
  DNS タブの「ホスト名」で PS3 のマシン名を設定します。

 システム → シャットダウン
 で再起動します。

  ps3fb_~ と表示された後やはり止まるので、電源ボタン長押しで切ってから
  少々間をおいて、また電源を入れなおしてログインします。

 ログインしてしばらくすると更新を促されるので、更新しておきます。
 これも結構時間がかかります。終わったらまた再起動。

(8) PS3 独自のこと

 起動時の解像度の変更は /etc/yaboot.conf を書き換えます。
 ・FIXSTARS 解像度設定

 PS3 本来のゲーム画面に戻るには /sbin/boot-game-os コマンドを実行します。
 アプリケーション → システムツール → 端末
  $ su
  # /sbin/boot-game-os

 このコマンドは「優先起動システム」を PS3 に切り替えてから reboot します。
 やっぱり途中で止まるので電源を切って入れなおします。

 Linux に切り替えるにはやはり優先起動システムを他のシステムにします。

Direct3D Geometry Instancing

同一形状のモデルを同時に大量に描画する場合は、DirectX9 の
ShaderModel3.0 から導入された GeometryInstancing を使うことができます。
Geometry Instancing は同一の頂点バッファの内容を繰り返し描画できる
機能のことで、頂点ストリームの読み取り周期をずらしてスケジューリング
することで実現しています。

同じ形状のモデルを何個も描画する場合は、その数だけ毎回 Draw 呼び出し
を行うことになります。
WindowsPC 上の DirectX のボトルネックとして有名なのがこの Draw 呼び
出し回数の問題です。1フレームに呼び出す回数が増えるとそれだけで CPU
の負荷が高くなります。
CPU Emulation Driver (HEL) のように HAL を通さない場合や、Xbox の
ように API レイヤが薄い場合はここまで顕著な傾向は現れません。

このオーバーヘッドを軽減するアイデアとして登場したのが
Geometry Instancing です。複数のオブジェクトの描画を一度の Draw
呼び出しで済ませるための工夫といえるでしょう。

注意点は、Geometry Instancing によって恩恵を得られるのはあくまで
CPU 側だということです。必ず描画が速くなるわけではないし、pixel
負荷などで GPU がボトルネックの場合はほとんど速度が変わらない
可能性があります。

GPU の負担が軽くなる要素としては、パイプラインを止めないで済む
ということ。また Constant Register 等の更新が不要になる分効率良く
なるかもしれません。その代わり VertexShader で特殊なストリーム入力
のための負担が増えるのと、16本しかない入力パラメータを圧迫します。

まず描画回数を減らす方法として考えられるのは、必要なオブジェクト
を全部マージしてしまうことです。同じモデルであればマテリアルも共有
されるのでいっぺんに描画することができるでしょう。
Draw 回数のオーバーヘッドは激減しますが、各オブジェクトを個別に
動かしたり位置や向きを変更することができませんし、同一であるはずの
データを頂点バッファに展開するのでメモリ消費も多くなります。

Geometry Instancing ではこの考えをさらに進めて、描画すべき位置の
情報 (Geometry, Matrixなど) を頂点と同じようにストリームで渡す
ことにしました。
Geometry 情報をあらかじめ頂点バッファに書き込んでおきます。
これでマージされたオブジェクトながら、個々のオブジェクトを異なる
座標に配置できるようになります。

Geometry 情報を頂点単位に持たせるとメモリも馬鹿にならないし、
座標更新のために頂点数分書き換えなければなりません。
そのため次の2つのちょっとした追加機能が必要になりました。

・描画するモデル側は何度も繰り返し頂点バッファを読めるようにする

  24頂点の Cube を 10個描画するなら、24頂点の同じバッファを
  10回繰り返して読み込めるようにするわけです。
  Index Buffer を必要回数コピーするようなもの。
  いわゆる Maya とかの Instance。

・Geomtery 情報の頂点バッファは、1モデル単位で読み進める

  つまり 24頂点の Cube があれば、24頂点には同じ Geometry
  が渡されるようにします。

特殊な頂点バッファの使い方に見えますが、これが最小の追加で高い
効果を得られる方法だったのだと考えられます。

Geometry だけでなく、マテリアルカラーなども頂点ストリームで
入力できるので、個々に色や属性等も変更することが可能です。
これらが全部マージされたのと同じように一度の Draw 呼び出しで
描画できるわけです。

ShaderModel3.0 は ConstantRegister 容量の制約があるので、
異なるスキニングモーションをしているキャラクタを一度の Draw
で描画するのは少々難しいかと思います。

すべて同じポーズなら簡単です。例えば 30 frame 分のモーション
なら、各フレーム毎に描画をわけて、30回の Draw で済ませることは
できるかもしれません。
Geometry Instance 系の簡単なアニメーションデモなどはこの方法で
十分だと思います。

骨の数が少なければ、ストリームに Bone 用 Constant Register の
オフセットも入れておくことで、数個の異なるポーズのモーションを
一度に描画することはできるかもしれません。

Geometry Instance は ShaderModel3.0 から付いた機能ですが一部
例外があります。ATI(AMD) RADEON 9700~X800系の場合は、
ShaderModel2.0 であるにもかかわらずドライバのエミュレーション
で Geometry Instance を使うことができました。
あらかじめ Video Card のコントロールパネルで有効に設定して
おくことができます。
エミュレーションなのでパフォーマンス的には限界があるものの
Geometry Instance のコードがきちんと動作します。

このとき Direct3D9 の設定が Debug になっているとエラーチェックに
引っかかってしまいます。
「ShaderModel2.0 なのに Geometry Instance を使っている」
という旨のエラーが出て止まってしまうわけです。
エラーチェックの無い Retail モードだと大丈夫です。

Direct3D10 では DrawInstanced / DrawIndexedInstanced によって
最初から Geometry Instancing の描画がサポートされています。