日別アーカイブ: 2007年10月27日

DirectX SDK November 2007 Gather と 新DDS フォーマット

今回の DirectX SDK November 2007 では、ReleaseNote を見ただけでは
Graphics 周りだとほど大きな更新がなかったように見えます。

ところがこの更新は、一般の開発者にとっては非常に大きな、とても
意味のあるものとなりそうです。

マニュアルが大幅に刷新されています。

これまでいくつか指摘してきたマニュアルの不備や不具合なども修正され、
説明不足だった点もかなり手が入っているようです。
Direct3D 10.1 など開発や更新自体がひと段落し、マニュアルや解説の
方にも手が回るようなってきたのでしょうか。
と思ったら、build 番号もかなり増えています。
DirectX SDK Version 一覧

マニュアルの更新によって、Direct3D 10.1 の機能もかなり見えてきました。
Shader の説明でも、4_1 で追加された機能がわかりやすく表記されています。

D3D 10.1 / ShaderModel 4.1 の新機能といえば TextureCubeArray がありますが
他に Texture のサンプリング命令として Gather() があるようです。
これは一度のサンプリングで、テクスチャの 4ピクセルの値をまとめて参照
することができます。4 つのピクセルの R だけが、一度に xyzw として
読み出されるわけです。

ATI の RADEON X1900 系の機能に精通している方ならすぐに思い当たる
ものがあるかと思います。
かつて ATI が、NVIDIA ShadowMap に対抗して用意した ShadowBuffer 用の
サンプリングアクセラレータ機能が、まさに Gather() そのものでしょう。
4pixel 同時にサンプリングしてもハード的にコストがかからないので、
これはかなりよい機能だと思います。

実はこちらのエントリで DXGI_FORMAT の詳細を調べたときに、
機能フラグとして D3D10_FORMAT_SUPPORT_SHADER_GATHER が
存在していることを発見しました。このときはマニュアルやヘッダを検索
しても他に GATHER は出てこないので意味がわかりませんでした。

おそらく、このフラグがついているフォーマットだけが Gather() 命令で
利用可能なのだと思われます。(10.0 では無し)
Direct3D 10 DXGI_FORMAT の機能対応一覧
Direct3D 10.0 DXGI_FORMAT_SUPPORT

こちらで調べているような アセンブラ命令の定義の意味も、
マニュアルに乗るようになりました。

他に個人的に大きなトピックとして、DDS の詳細項目の追加があります。
DDS は比較的古いフォーマットです。Direct3D8 で FourCC が拡張されて
Direct3D9 のフォーマットも全部格納できるようになりました。
DDS Texture format memo

ですが、Direct3D10 の全フォーマットを格納することができませんでした。
今回 Direct3D 10 のフォーマットに対応すべく拡張方法が定義されました。

基本的には先頭の DDSURFACE ヘッダ 128 byte は互換性があります。
その直後に 20byte の DDS_HEADER_DXT10 ヘッダが追加された形となるようです。

つまりヘッダは合計 148byte 、少々中途半端です。この追加ヘッダの存在を
識別する方法がまだ不明です。また DDS_HEADER のうち未使用となった
dwCaps がちょうど 20byte あるので、ここに DDS_HEADER_DXT10 が収まるの
だったらしっくりきます。
ヘッダの種別は dwMagic で区別するようにみえますが、この具体的な値が
書かれていないようです。

とにかくこれでようやく TextureArray も dds ファイルとして格納できる
ようになりそうです。
付属の dxtex.exe (DirectX Texture Tool) はまだ D3D10 フォーマットに
対応していないようです。

EMOBILE 経由で PSP ブラウザ

ZEROProxy を使うと ZERO3 や EM・ONE が iPod touch のモデムになる
そうです。
伊勢的新常識 ZEROProxy
iPod touch は非常に薄くて小さいし、よさそうですね。

iPod touch と ZERO3/EM・ONE の間は無線LAN でつながります。
EM・ONE を WM6 にアップグレードする前に一度 WindowsXP のノートで
試してみました。

(1) EM・ONE (S01SH v1.03a) に ZEROProxy を入れる
(2) 無線LAN のアドホック接続で、EM・ONE と NotePC を接続する

Bluetooth で EM・ONE をモデム化するのと似ています。
だけど 無線LAN 方が Bluetooth より速いので、Bluetooth 接続よりも
速度が出ていました。
emobile の通信速度も Bluetooth より速いので、うまく安定すれば
ZEROProxy + アドホック接続は、ノートPC ユーザーにもお勧めな通信手段に
なるかもしれません。
(直後に EM・ONE のアップグレード発送+ノートPCを手放したので
実用レベルでは試してないです)

残念ながらブラウザでアクセスポイント経由の接続しかサポートして
いない PSP では、直接 ZERO3/EM・ONE につながらないと思われます。
今後のファームでアドホックのインターネット接続をサポートしてくれれば、
たぶん使えるようになるでしょう。

直結が無理でも、無線LAN のアクセスポイント経由だと使えます。

emone psp

無線LAN AP 経由で EM・ONE+ZEROProxy とつないで、
PSP のブラウザでインターネットにアクセスできました。

ここでは持ち歩ける小型の 無線LAN アクセスポイント を使っています。
Logitec SkyLink LAN-PWG/APR
USB 電源で動くので、外付けのバッテリーをつないでいます。
EM・ONE と上のセットをかばんの中に入れておけば、電車の中でも
ゲームをしているふりをしつつネットを見たりできると思います。

LAN-PGW/APR はルータですが、ZEROProxy を使うのでアクセスポイント
モードで使っています。

Proxy 経由なので、残念ながらゲームでのネット接続はおそらくできない
でしょう。リモートプレイも TCP 9293 が必要らしいので、この構成では
つながりませんでした。
リモートプレイをする(インターネット経由)

以下設定手順の詳細

●ルータ/アクセスポイントの設定

(1) アクセスポイント(AP)モードにします
(2) 無線LANの基本的な設定を行います。
  ・SSID の設定
  ・セキュリティの設定(WEP等)
(3) DHCPサーバーが有効になっていたら off にします。

ルータの初期 IP アドレスは仮に 192.168.1.200 としておきます。

●EM・ONE (WM端末) の設定

(1) ZEROProxy をインストールします。

(2) 無線LAN を ON にしておきます。

(3) 無線LAN の設定を行います。
  ・設定→接続→ネットワークカード→ワイヤレス
  ・ワイヤレスネットワークの構成から、新しい設定の追加
  ・ネットワーク名 に SSID を入れる
  ・接続先 社内ネットワーク設定
  ・ad-hoc にはチェックを入れない
  ・次へ
  ・認証: 任意(ルータに設定したものと合わせる)
  ・次へ
  ・ネットワーク認証の構成: IEEE 802.1x~のチェックをはずす

(4) IP アドレスを登録します
  ・設定→接続→ネットワークカード→ネットワークアダプタ
  ・社内ネットワーク設定
  ・内蔵ワイヤレスLAN を選択
  ・「指定したIPアドレスを使用する」
  ・IPアドレス: 192.168.1.2 (必要に応じてアレンジしてください)
  ・サブネットマスク: 255.255.255.0

EM・ONEα(S01SH2) で実験していますが、ZERO3 等他の WindowsMobile
端末でもほぼ同様だと思います。

●PSP の設定

(1) 設定→ネットワーク設定→インフラストラクチャーモード

(2) [新しい接続の作成] → 手動で入力する

(3) 無線LAN の設定をします
  ・SSID: ルータに設定したもの
  ・ワイヤレスLAN セキュリティ設定 : ルータの設定に合わせる
  ・アドレス設定: カスタム
  ・IPアドレス設定: 手動
  ・IPアドレス: 192.168.1.3
  ・サブネットマスク: 255.255.255.0
  ・デフォルトルータ: 192.168.1.2
  ・プライマリDNS: 192.168.1.2
  ・プロキシサーバー: 使用する
  ・プロキシサーバー アドレス: 192.168.1.2
  ・プロキシサーバー ポート番号: 8080
  ・インターネットブラウザ: 起動しない
  ・接続名: 任意

●接続実験

(1) ルータの電源をON
(2) ZEROProxy を起動する
(3) EM・ONE でダイヤルアップ接続する (HSDPA)
(4) EM・ONE で無線LANを ON、ルータ(アクセスポイント)に接続する
(5) PSP でブラウザを起動する。上で設定した接続を選ぶ。

関連エントリ
PS3/PSP emobile EM・ONE 経由でリモートプレイ

追記: この構成の接続は実用性は皆無です。機材があったので当時試してみただけですが、決してお勧めしません。ゲームはできずブラウザだけで速度も遅く、EM・ONE そのまま使ったほうが速いです。

2008/12/26 追記: WMWifiRouter を使った接続設定はこちらです。 WMWifiRouter の場合ブラウザ以外も使用できます。