日別アーカイブ: 2009年1月11日

HTC Touch Diamond で Direct3DMobile その(7) ノーマルマップを表示する

Touch Diamond でノーマルマップの表示が出来ました。

bumptest d3dm normalmap

だいたい 22~24fps くらい。
さすがにピクセル単位のライティングは、ローポリでもきれいに出ます。
やっとハードウエアアクセラレータらしい表示が出るようになりました。

bumptest color only
↑カラーマップだけ

normalmap only
↑ノーマルマップだけ

normalmap + colormap
↑両方適用

テクスチャは PC 用 Direct3D のサンプルを使用しています。
本当はレリーフマップ用のデータですが、ただのノーマルマップとしてだけ使っています。
これが PC のシェーダーだったら本当はレイキャストで視差も出るし影も落ちるのですが。

この WindowsMobile 用のプログラムは下記から落として試せるようにしました。

ダウンロード
bumptest v1.00

●動作を確認したもの

◎ハードウエアアクセラレータが有効なもの

 ・HTC Touch Diamond (EMOBILE S21HT 他)
   Qualcomm MSM7201A 内蔵 ATI core
   Touch Diamond はハードウエアアクセラレータで高速に動作します。
   おそらく Touch Pro もいける。

◎ハードウエアアクセラレータが無効だけど動くもの

 ・HTC Touch Dual (EMONSTER lite S12HT 等)
   CPU のリファレンスラスタライザで起動します。
   非常に低速ですが画面はきちんと出ます。

◎動作しないもの

 ・SHARP EM・ONEα S01SH2
   CPU ラスタライザですが XScale ドライバ D3DMXSC50PB です。
   マルチテクスチャ&マルチ UV 未対応なため起動しません。

各端末の 3D 機能について詳しくはこちらを参照してください。

http://hp.vector.co.jp/authors/VA004474/wince/d3dmcapslist.html

●解説など

頂点が遅い&ハードウエアライティングが遅いので、ピクセルライティングを
試してみました。思ったよりきれいに出ました。
これならローポリでも違和感なく表示できそうです。
ただしその分テクスチャが増えます。

タンジェントスペースの計算は CPU で行っています。
前回調べた結果の通り、CPU ですべて頂点変換を行ったとしてもその割合は
たいしたことありません。
よって CPU 側で少々凝った計算をしても全体へはさほど影響しないとの判断です。

ただ何度も述べてるように、rhw バグがあるため CPU だけで全部の計算を行うと
テクスチャのゆがみが見えてしまいます。
そこで次のようにします。

(1) 動的に CPU で頂点バッファを生成する
   ライティングやタンジェントスペースの計算はここで行う。
   頂点カラーを求める。
   座標は素通りさせる。

(2) 座標変換は Direct3D Mobile に任せる
   ここではライティングせずに座標変換のみ。

これで rhw バグを回避できますし、Direct3D Mobile の重いライティングを使わずにすみます。

済むはずでした。

rhw バグは根が深いようです。
フォントの表示など 3D 変換が不要な頂点には最初からスクリーンスペースの座標を
与えると簡単ですが、この場合頂点は XYZRHW 形式になります。
モデルの方は Direct3D Mobile に任せるため RHW の無い XYZ です。

この両方の頂点形式のデータを交互に描画すると、XYZ 形式のモデルが表示されなくなるようです。
仕方なくフォントも 2D 変換の Projection を通して描画するように変更。

その他トラブル
・ZWRITEENABLE を FALSE にすると表示が崩れるので ON 固定に。
・TextureStage の TEXCOORDINDEX が効いてない気がするので頂点側を MultiUV に変更。
・MipFilter を有効にすると MipMap が強制される。MipMap 無しのテクスチャが含まれていると真っ白になる。

問題が多く低速な頂点に比べると、ピクセル側は比較的問題が少なく素直に動いている気がします。
使用可能なテクスチャ形式が少ないことが少々難点です。
16bit フォーマットを選ばざるを得ないので、結局 565 になってしまいます。

22~24 fps くらいしか出てませんが、Touch Diamond の d3dm_ati.dll だとなぜか
空のデータでも最大 28fps 程度にしかならないので、これでも軽い方なのです。

関連エントリ
HTC Touch Diamond で Direct3DMobile その(6) 頂点性能続き
HTC Touch Diamond で Direct3DMobile その(5)
HTC Touch Diamond で Direct3DMobile その(4) 高速化
HTC Touch Diamond で Direct3DMobile その(3) 実際の頂点性能
HTC Touch Diamond で Direct3DMobile を使う。その (2)
HTC Touch Diamond で Direct3DMobile を使う。ハードウエアアクセラレータ

ミニノートで Windows7 beta その(3)

●EeePC 901-X

これまでもずっと EeePC 901 で WindowsVista を使い続けてきたため、特に違和感も
無く普通に使えています。
ただ Vista の時と同じように RAMDISK の設定は行いました。

EeePC の画面縦 600dot だとダイアログが切れることがあるため、タスクバーは左端
縦に配置しています。もともと文字が無くアイコンだけなので意外に大丈夫かも。
Windows7 のタスクバーは他のウィンドウの下にならないので、解像度が足りないと
結構邪魔です。

電源設定は修正。休止状態無しでスリープのみ行うように。
仮想メモリもページングファイル無しに設定しています。

BIOS を更新したらログイン画面などで暗転するようになったので徐々に戻しました。
とりあえず BIOS 902 だと問題なく動いています。
× 1808, 1703, 1301
○ 902
これ以外は未確認。

エクスペリエンスインデックスは、ページングファイル無しで、かつテンポラリを
RAMDISK に設定していると評価に失敗します。
あれこれ設定を行う前に評価を済ませておいた方が良いです。

●FMV BIBLO LOOX U50

A110 800MHz の古いタイプなので、Atom 機と比べると重いです。
ですが、もともと Vista が乗っているマシンなのでほぼそのまま。
指紋認証は使っていませんがワンセグも動いています。
タッチパネルの補正が失敗。
追記: タッチパネル補正できました。

FMV BIBLO LOOX U50X/V
Intel A110 800MHz / RAM 1GB / 1.8HDD
CPU 1.5
RAM 3.9
AERO 2.0
GAME 2.4
HDD 3.7

EeePC 901-X
Atom N270 1.6GHz / RAM 2GB / 32GB SSD (SHD-DI9M)
CPU 2.2
RAM 4.5
AERO 2.1
GAME 3.0
HDD 2.9

関連エントリ
LOOX U でも Windows7 beta
EeePC 901 Windows7 beta
EeePC 901 SHD-DI9M 32G と Vista 設定 (2)
EeePC 901 の SSD 交換 BUFFALO SHD-DI9M 32G と Vista
EeePC 901 に Windows Vista その5
EeePC 901 に WindowsVista