ひさびさの更新。
すでに夏到来。
暑い夏にCPUをさらに熱くするニューリリース。

NATSUMI-TEST ver. 0.4
2001/7/15 update
2001/7/12 NEW release!

2001/4/19 3rd release
2001/3/25 2nd release
2001/3/7 update
2001/3/3 1st release

昔の扉絵1 昔の扉絵2 昔の扉絵3 昔の扉絵4 昔の扉絵5 昔の扉絵6

●スクリーンショット









●動作確認済みビデオカード
メーカー ビデオチップ 起動時の画面の色 シャドウボリューム
nVIDIA GeForce3 16/32
nVIDIA GeForce2 Ultra 32
nVIDIA GeForce2 GTS 32
nVIDIA GeForce2 MX 32
ATI Radeon DDR 16/32 ×
Intel 82810E/82815 16 ×
3dfx Voodoo4 4500 32
matrox millennium G400 16/32
※チップのリビジョンやドライバのバージョンによっては異なる動作になるかもしれません。


●変更点
内部処理系
・頂点シェーダに対応
・ステートブロックを使用
・ミップマップを使用
・インテルコンパイラ5.0に変更
・SSE対応
・シャドウボリュームを導入
 ステンシルバッファが必要。なくてもプログラムは動作しますが影は出ません。
夏海モデル
・髪の毛を修正。新たにセーラー服、靴、靴下を制作。
背景モデル
・海岸をモデリング。大改装。
●7月15日版(ver.0.4b)変更点
・エラーチェックを強化。
・プロセッサ識別部分を修正。
・モデルも微修正。

●ダウンロードとセットアップ
natsumi_7_12.lzh( 1,772,913 バイト)をダウンロードします。
natsumi_7_15.lzh( 1,771,665 バイト)をダウンロードします。
ファイルを適当なディレクトリに解凍すると、以下のようなディレクトリが生成されます。
natsumi_7_15
natsumi.exe
ydata
system.ybm
system.ysn
system.ypb
toon.vsd

●使用方法
natsumi.exeを起動します。
一応、操作のキー対応表を表示できるようにしてあります。
起動時にベンチに座ったあと、放って置くと歩き続けます。
スペースキーでモーションを切り替えます。立ち止まってからモーションが切り替わります。
歩く以外のモーションは、「立ち」「ピース!」「背伸び〜」「手を後ろで組む」「ジャンプ!」があります。
マウスでカメラを移動できます。また、上下キーで画角を変更できます。
その他、O/W/C/D/F/H/G/L/T/B/E/M/S/Vキーで各表示状態を切り替えられます。
Iキーで動作環境情報を表示できます。レポートするときなどに使って下さい。
F3キーで表示デバイスを変更できます。
ALT+ENTERでウィンドウ表示とフルスクリーン表示を切り替えます。
ESCキーで終了します。

●内容解説
・頂点シェーダ
頂点シェーダに対応した。ほとんどのポリゴンを頂点シェーダ経由で処理するようにした。これによって無駄なライティング関係の設定が不要になった。ハードで頂点シェーダの処理をするのはGeForce3からだが、それ以前のビデオカードでも恩恵はあるはずである。ところでnVIDIAのシェーダデバッガを使ってみた。まず、ドキュメントがワードで死ぬ。ダンプして中身を読む。ようやく起動してみたが、文字が小さすぎて死ぬ。結局1回トレースしてみて終了。今度使うのはよっぽど判らんバグに遭遇したときにします。一応最新バージョンもチェックしてから。
・ステートブロック
レンダリングステート及びテクスチャステートを可能な限りステートブロックを使用して設定するようにした。はたしてどの程度高速化に寄与しているだろうか。
・ミップマップ
ミップマップテクスチャチェインを生成して、トライリニアフィルタリングを適用した。ポイントサンプリングではブロックなどのテクスチャで激しいモアレが発生していたが、それが抑えられた。描画時間の増加もそれほどないみたいなのでこれを標準に。ただ、アルファテストを行なうテクスチャをミップマップにするとうまくいかないことが判った。金網のテクスチャがそうなのであるが、遠方では完全に消えてしまっている。解決策はまだ見つからず。
・Intel Compiler 5.0
コンパイラをインテル製に変更。英語版である。SJISの文字列が正しく通らないのでちと不便。
・SSE化
ベクトル演算部をSSE化した。インテルの組み込み関数を使用。だいたいの関数がSSEの1命令に対応しているので無理に不慣れなアセンブラで書くよりは安心安全最適。SSE不搭載CPU用と二通りの関数を書くことに。実際に処理時間を計測してみたが、debug版ではSSEの方が遅くなってしまうようですこし混乱。release版だとたしかにSSEの方が速いことが確認できた。
SSE化した部分は、マトリクスの乗算、マトリクスの転置、マトリクスとベクトルの積、ベクトルの正規化、ベクトルの長さ、ベクトルの外積、ボーン変形、モーフ変形、クロスシミュレータ、法線生成。
ところで、平方根、逆数、平方根の逆数、とそれぞれ命令があるのだが、レイテンシはそれぞれ22、6、6、と平方根が一番遅い。実行ユニットとか精度とかの問題があってのことらしいけど。よって、精度をそれほど気にしない場合、平方根の逆数をとってその逆数を求めるほうが速いということになる。なぜ速い平方根がないのかは不明。そこらへんはインテルらしいところか。せっかく手元にPentium4があるのにSSE2を使うケースに遭遇していない。なかなかうまくいかないもんですな。
・風アルゴリズムの変更
SSE化に伴い、SSE化に適した形に変更。
・シャドウボリューム
この手法を使うと、どんな形状のものにも影が落とせるというすごい仕掛け。なんとセルフシャドウも出来ます。しかし誰が考えたんでしょうか。しかし、万能というわけでもなく、いくつかの問題点がある。
エッジがハッキリしているオブジェクトは問題ないが、曲面を近似したような部分のセルフシャドウはうまくいかない。これはライトからの視点でエッジ検出した場合に起こる。等高線アルゴリズムでポリゴンを切断してエッジを生成すればうまくいくと思われるが激重そう。このプログラムでは夏海だけセルフシャドウを行なわないようにしている。(セルシェーディングしている上にセルフシャドウを重ねると変に見えるのも理由の一つ)
シャドウボリューム内にカメラが入ることができない。入ると全く間違った映像となる。これは許容できる間違いではない。これに対する解決方法はまだ見つけられないでいるが、間違った映像になるよりは、カメラの入ったシャドウボリュームの影が消えてしまう方がよっぽど許容できるはずである。よって、シャドウボリュームの消去もしくは変形という方向性で模索中。
影が落ちる物体を突き抜けた先の物体にも影が落ちる。これは、影が落ちる物体の影を生成しなかった時に起こる。しかしこの誤りは許容できる範囲ではある。
シャドウボリュームの一部が筋状に見えることがある。これはシャドウボリュームが潰れてしまってもはやボリュームでなく線状になったときに発生する。これは、潰れたシャドウボリュームを検出し除去もしくは太らせれば回避できそうである。また、複数回のシザリングによっても発生する場合もある。これは、シザリングの誤差によるものだと思われるが、簡単な回避法は見つけていない。
などなど、いろいろやっかいな問題があるのだが、「カメラの位置を限定する」ことによってクリティカルな問題を回避することが可能なのではある。しかし、このプログラムではそんなわけにはいかず、問題点はそのままである。
・ルミナシティーマッピング
白黒のテクスチャを輝度値としてマッピングする。なのでライティングは行なっていない。色のテクスチャと積を取っている。シングルパス−マルチテクスチャ処理である。

・夏海モデル
髪の毛を大幅に変更。短くなって丸顔が一層強調されるようになっちゃいました。
セーラー服と靴、靴下をモデリング。徐々に露出が減っていく傾向。
今回からUVの頂点マップが大活躍。面倒臭いけど狙ってちゃんと貼れるのは塩梅よし。
肌にぴっちりとした服じゃないのでどこまで服の下の肌を作るかが悩みどこですが、とりあえず見えないけど肌は全部あります。ワイヤーフレームにすると見えますが。しかしおかげでプライオリティに苦しむ。特に肩のあたり。襟のプライオリティも厳しい。
・スカーフ
Sキーでスカーフの色を変えられるようにした。実は何色がいいのか決められなかったのでこんな仕様に。赤・青・緑・黄・黒・白・紺・茶・水を用意。それぞれ微妙にイメージが変わって興味深い。キミは何色?
・口
モーフの組み合わせで4通りの切り替え(Mキー)を用意。への字口もなかなか面白い。
・背景モデル
海岸のモデリングをした。さらなる密度アップとクオリティーアップが必要か。
海はまじで仮。今後プログラムで動かす予定。
・レンズフレア&レンズリフレクション
ライトとカメラの間にオブジェクトがあるかないかの判定を、レンダリング後のフレームバッファをロックしてピクセル取得したりして行なっているのだが、マルチサンプルのフレームバッファはロックできないらしい。ロックしなくてもいいうまい方法はないものか。
・マシン情報取得
CPU名の特定、OS名の特定。SSE等の機能の有無を判別。
・開発環境
6月からPentium4 1.7GHz にメモリを768MB積んでビデオカードはGeForce2Ultraという開発環境に。なにごとも快適快適。ちなみにこのマシンで起動直後のFPSは42ぐらい。シャドウボリュームALLで15〜17FPSぐらいに落ちる。

感想
今回モーションには手をつけられず、モデリングとプログラムの高速化がメインになった。新しい技法を導入すればするほど、だんだんGeForce専用アプリっぽくなってきている。そして、速いCPU必須にもなりつつある。ちなみにこのプログラムは、ビデオよりCPUの負荷の方が大きいようである。

さて、実は実験はこれぐらいにしとこうかとも思っている感じ。
これらを素材に1本アプリケーションを制作予定。しかしまだ企画はあるが仕様はないって状態。
夏が終わる前にβ版。これが第1目標ってことでいっちょぶわーっとやったりますか。



COPYRIGHT (C) 2004 YO1 KOMORI ALL RIGHTS RESERVED