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

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

HTC Touch Diamond で Direct3DMobile その(6) 頂点性能続き

Touch Diamond で Direct3DMobile を使った描画の続きです。
CPU 側の各処理の測定時間になります。

頂点数 ポリゴン数  頂点計算時間  1frame合計    cpuv/v   total/v  total/t
   401       760           700       40000      1.75     99.75    52.63
  1679      3120          2800       46000      1.67     27.40    14.74
  5039      9660          8500       90000      1.69     17.86     9.32
 10199     19800         17000      160000      1.67     15.69     8.08
 22799     44700         38000      348000      1.67     15.26     7.85
                          usec        usec

CPU で行う頂点の変換自体は float よりも固定小数の方が 5~6 倍ほど高速でした。
それでも描画速度向上がわずかだったのは、全体の処理時間からみたら
たいしたことがなかったからです。
全体の処理時間のうち頂点計算の割合は 10% 程度。
残りは全部 Present() が占めます。

カメラ位置を変えてポリゴン自体の描画面積が変わっても、動作速度にはほとんど
変動がありませんでした。
よって kick したあとの実際の描画処理では、頂点数に比例して増加するなんらかの
重い処理が CPU で行われていると予想できます。
あとはレンダーステートの組み合わせなど軽くなる条件を探していくしかなさそうです。

iPhone/iPod touch の実際の描画性能がどのくらいなのか気になるところです。

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

LOOX U でも Windows7 beta

looxu50 windows7 beta
LOOX U50 Windows7 beta build 7000

LOOX U50X/V A110

CPU  1.5
RAM  3.9
AERO 2.0
GAME 2.4
HDD  3.7

クリーンインストールです。
EeePC 901 同様最初から Aero ON でした。
LAN/WLAN はそのまま認識したのでネットは使えます。
いくつか足りないドライバがあるけどワンセグその他
追記: 付属 CD-ROM アプリケーションディスク1 より
pt901_p1, button\driver, button\utility, o2micro, fpsensor を install

EeePC 901 はこちら

EeePC 901 N270

CPU  2.2
RAM  4.5
AERO 2.1
GAME 3.0
HDD  2.9

関連エントリ
EeePC 901 Windows7 beta

EeePC 901 Windows7 beta

とりあえず EeePC 901 で試しています。
Windows7 beta build 7000
RAM 2GB + SSD 32GB へ増設済み

eeepc win7

LAN/WLAN 以外はそのままで認識。最初から Aero Glass が有効でした。
LAN/WLAN ドライバは Vista と同じように付属 CD-ROM のもので OK。

Vista フルインストール時と異なり最初から使い物になる印象。
不要なサービスを切ったり設定を詰めなくても軽いです。
RAMDISK 等何も設定していませんが十分かもしれません。
AeroGlass の描画は、Vista の方がかっちり同期をとって描画していた印象。
ただしまだ beta なので何ともいえません。

いろいろ使いやすく軽くなっている反面、Vista で気に入っていた設定が
できなくなってるところも結構あって複雑な気分。
タスクバーとかは慣れが必要です。

d3d10warp.dll、d3d11.dll が最初から入っています。
d2d1.dll というものも。

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