2013年3月8日金曜日

3Dレンダリングパイプライン 3

以前はこのブログを検索エンジンで検索出来る設定にしていたのだが、2ヶ月位前に検索できない設定に変更した。そうしたのにはとくに理由はないが、別にアフィリエイトで稼ぎたいわけでもないのでこのブログの存在を知ってる人だけみればいいかな見たいな感じだ。
設定変更したら毎日のページビューの数も見事に減少した。まぁ、もともと多くなかったが。
本当はページビューは殆ど0になるかとも思っていたのだが、数人(数件?)が参照しているようだ。
固定客がついたか?

さて、レンダリングパイプラインIPの作成に挑戦しようとしていたが、以下の理由により一旦中止することにした。

・  昨年の年末から年明けにかけてDFT IPの作成を行っていたが、頑張りすぎたせいかburnout気味で、中々レンダリングパイプラインIPに集中できなくなってしまった。(歳はとりたくないもんじゃ)
 ジオメトリエンジンの方は、やることは行列演算で、基本的にはメモリ上にあるモデルの頂点リストを読込み、変換行列を掛け算すればいいんだと思う。変換行列の値はグローバル座標に配置するモデル毎に異なるので、頂点リストの上位にコマンドリストのようなものがあり、(それをメモリ上に配置し、)そこに変換行列の値と頂点リストのアドレス、長さの情報を書く。それを専用のDMACで処理するというイメージになると思う。 ここまでは、難易度としてもそれほど高くなく、動作的にもレイテンシーは一定のものが作れそうな気がする。 が、難しいのはその後のレンダリングパイプラインだ。レンダリングパイプラインではジオメトリパイプラインで算出した頂点座標で構成される平面(群)に対してテクスチャを貼ったり、色を塗ったりしなければならない。その際には光源とオブジェクトの光の反射率などから明るさも計算しなければならないし、ピクセルの補間演算も必要になるだろう。最終的に描画する対象(VRAM)の解像度が低い場合は、簡略化できるかも知れないがせっかくやるからにはdvi_encで出力できるXGA(1024x768)を対象にしたいが、そうすると恐らく1年位の時間をかけてじっくり取り組まなければ出来そうに無い気がする。趣味でやるというよりは業務としてやるべきレベルのような気がする。

・  とある事情で、知り合いのシステム開発をちょっと手伝う(というか相談にのるというか)ことになり、マイコンについて調査する必要がでてきた。仕様次第ではFPGAの方が良いという結論になる可能性もあるが、現状聞いている限りではマイコンでも実現可能だしその方がコストも断然安くすみそうだ。この件に関しては今後このブログに書くつもりはないが、3~4月はこれに注力することになりそうだ。

以上の理由で、レンダリングパイプラインIPは一旦中止させて頂く。
匿名の方には、「ダメ元で」とこたえたのであまり期待はしていないと思うが、以上の理由なのでご了承願いたい。

最近、このブログの更新も滞りがちだが、しばらくこの状態が続きそうだ。
気が向いたら下らない話とか書くかも知れないし、小規模なIPの作成に着手するかも知れない。


4 件のコメント:

  1. こんばんわ。
    ジオメトリ・エンジンに比してレンダリング・エンジンの方が難しいように思われるかもしれませんが、実際に行われている計算はそんなに異なるものではありません。レンダリング・エンジン内部では、まず算出した頂点座標から外積により面の法線ベクトルを計算し、視線ベクトル側を向いている面のみをレンダリング対象として、面内の座標を補間(方法は色々)し、対応するテクスチャのアドレスを計算、対応するPixelの値を取得した後、光源処理をする場合は法線ベクトルと光源ベクトルから再度ベクトル演算にて視線ベクトルに対する反射光を計算してからフレーム・バッファに書き込みます。ですから必要な演算は、ベクトルの加減算、内積、外積、スカラー倍、ユークリッド距離の計算(=内積+平方根)等々です。行列演算による座標変換は内積演算の繰り返しに相当します。ただし、テクスチャを取得するときにメモリ・アクセスが(大量に)発生するのと、ジオメトリエンジンに比して演算量が各段に多くなるし、ある程度の自由度も要求されるのが違いでしょうか。今なら固定的なエンジンを考えるよりは、プログラマブル・シェーダの形にした方が良いかも知れません。

    返信削除
  2. こんばんは、

    コメント有り難うございます。
    お題を頂戴した方と同じ方でしょうか。やはり、だいぶお詳しい方のようですね。
    ご教示有り難うございます。処理内容としては私も大体そんな感じかなとは考えておりました。
    バッファはどうしてもDRAM上に取らざるを得なさそうなので、レンダリングエンジン部にはキャッシュも必要になるだろうし、DRAMコントローラのポート数も増えるか、あるいは、その前段にアービターが必要になるだろうとも考えております。。。ました。

    機会があればまたチャレンジしたいと思います。

    返信削除
  3. こんばんは
    お題を言ったのは自分で上の方ほど詳しくはないです。
    (Windowsプログラムで(DirectXを使わずに)3D座標を座標変換してワイヤーフレームの球を表示したり、DirectXの簡単なプログラムを作ったりできる程度です)

    自分のお題を一時的にでも採用してくれてありがとうございました。

    返信削除
  4. こんばんは、

    おやおや、そうでしたか。
    それは失礼しました。
    コメントして頂いてとてもうれしかったです。

    匿名だと判りにくいですね。
    今度から、匿名1号、匿名2号、、、ではなくて、
    イニシャルか何かを使っていただけると助かります。(笑)

    返信削除

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...