トップページgamedev
162コメント74KB

★☆★描画順を極めろゴルァァァ!!★☆★

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/11/16 08:19ID:???

  (\_/)  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( `Д´) < 描画順ってメンドクセェ
   /   ノつ  \______________
  (人_つ_つ

パフォーマンスと絵の質にダイレクトに跳ね返ってくる
(不透明/半透明)ポリゴンの描画順、オブジェクトの描画順、Zソート、
ハードウェアオクルージョンカリング効率についてだけ熱く語るスレ。
0002名無しさん@お腹いっぱい。01/11/16 08:20ID:???
それなりに深い話題かもしれないが、
タイトルの装飾はなんとかならなかったのか。
0003101/11/16 08:26ID:???

   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  (´┏┓`)< 正直、タイトルの装飾はスマンカッタ!
  (    )  \_____
  | | |
  (__)_)
0004 01/11/16 09:01ID:S7BNCBJL
オクルージョンカリングって何?
0005名無しさん@お腹いっぱい。01/11/16 11:05ID:???
ここでのオクルージョンカリングはXboxとGefoce3のファンクションで
Zテストを早めに行って表示する必要のないピクセルを高速に捨てる
Radeonはもっと高度なファンクションを持ってて
違う名前がついてるけど基本は同じ
手前のpolygonから順にソートして描画すると
これらのファンクションを生かせる
0006 01/11/16 11:13ID:S7BNCBJL
ただのZテストと違うんか?
重いピクセル処理前にZテストするのは当たり前だと思えるが?
0007名無しさん@お腹いっぱい。01/11/16 12:27ID:???
>>1まずはタイトルの★の描画順をなんとかすれ
0008名無しさん@お腹いっぱい。01/11/16 12:38ID:???
ところで、みんなは真面目にZソートってやってる?

Zソートするためにはまず自前で座標計算しなきゃだめだよね。
そしたらハードウェアT&Lが活かされなくなくなるから
全体的な速度を考えると半透明と不透明オブジェクトを
分けて描画する程度でごまかしてるんだが。

#なんか解かり難い書き方でスマソ
0009名無しさん@お腹いっぱい。01/11/16 16:27ID:???
BSPツリーをトラバースしてソーティング。
0010 01/11/16 16:52ID:S7BNCBJL
計算結果をVertexBufferの残す奴があったと思うが どうか?
でも逆に遅そうな予感
0011名無しサソ01/11/16 19:23ID:???
>8
 やるとしても、せいぜいオブジェクト単位のソートくらい。
ポリゴン単位でやると、多分遅くなる(少なくとも自分の腕では)。
>10にあるように、描画しない座標変換も出来るけどね。

 やっぱり違いの分かる人はアルファブレンドの違和感も非常に
気になる物なのかな。アバウトな自分はあまり気にしない(駄目人間)
0012名無しさん@お腹いっぱい。01/11/17 00:47ID:???
アルファブレンドの違和感というか、
アルファでテクスチャを抜く時、ソートを厳密にやってないと
半透明の縁の部分に背景の色とか変な色が残る。
64はエッジアンチにアルファを使ってるが
たとえば64のマリオを見ると
ソートを厳密にやってないので
よく見るとキャラのエッヂが変な色になっていることがある。
この種の違い。
マリオみたいにゲームが面白ければ気にならないが。
0013名無しサソ01/11/17 03:21ID:???
>12
 そうだね。すっかり忘れてた(苦笑)ただ、市販ゲームでも
その辺が上手く処理できてないのも非常に多いね。やっぱり細かい
見た目より速度を重視しての事かな。

 テクスチャのアルファブレンド&バイリニアフィルタって
色々と気にしないとうまくいかないねぇ。
0014名無しさん@お腹いっぱい。01/11/17 13:46ID:FtDApPxx
FFXの髪の毛の抜きとかうまくいっているときとだめなときがあるのですが
うまくいっているときは抜きを使わずに書いているのでしょうか?(ハイポリ)

それとも細かいオブジェクト単位でソートをきちんとやっているのでしょうか?
0015名無しさん@お腹いっぱい。01/11/18 22:41ID:???
>>14
デザイナさんがソフト上である程度優先順位をつけたデータを使ってん
だべさ。FFXみたいな短冊髪の毛だとどーしてもある角度で矛盾がで
きてしまうんだべ。

 つーか、キミの黒いゲーム機で真面目にソートなんかした日にゃDC
以下しか出せんべ。良くてオブジェクト単位でソート。

 ま、んな事にこだわるぐらいなら中身を作りこめっつーの。
0016名無しさん@お腹いっぱい。01/11/18 22:55ID:???
>>15
角度で矛盾とかゆうよりかは、背景のオブジェクトに半透明使ってるときに
うまくいってないような気が。

>ま、んな事にこだわるぐらいなら中身を作りこめっつーの。
はげしく同意。
0017名無しさん@お腹いっぱい。01/11/19 02:43ID:Gqj0F0jP
>>15
中身作りこむ人と描画部組む人は違うべよ。
ソートがんばって中身がクソになったなんて話はねーだろ。
0018 01/11/19 13:52ID:lEll+zjR
半透明のソートの実装はどうやるのが良いんでしょうか?
バケツ(ビンorPS1方式)ソート?

Z値からバケツのIndexはどう割り振るんでしょう
Z値が0から1まで均等に分布するってこたぁないだろうし、、、
なんて変な小細工するより何にも考えないほうがいいかな

あ、そもそもオブジェクト単位のソートならあんま気にする事もないのかな
(でもPS1ですら(やもえずだけど)ポリゴン単位のソートしてるわけで、
いまどきは全体のポリゴン数は多いとはいえ、半透明部分のみのソートって、
そんなに重い処理ですか?)
0019名無しさん@お腹いっぱい。01/11/19 16:39ID:???
W値でソート
0020名無しさん@お腹いっぱい。01/11/19 16:40ID:???
ソートにWは使わないよ
0021あま01/11/19 21:07ID:bTBvOeio
こないだSCEから配られたっつう Z sort routine はどんな
手を使ってたの?
0022名無しさん@お腹いっぱい。01/11/20 00:24ID:3zSs0zNy
よく知りませんが、
ソートってそんなにコストが高いんですか?(半透明のみなのに・・・)
0023名無しさん@お腹いっぱい。01/11/20 02:27ID:???
諸々のPS2の
ミドルぅエアのこのあたりの半透明ソート問題ってどうやって
解決してるの?
0024名無しさん@お腹いっぱい。01/11/20 16:52ID:???
レンダリング後のZバッファが必要でないなら、
交差ポリゴン分割+フルZソートで良いじゃんと思う今日この頃
0025 01/11/20 20:03ID:oqFT5pPy
交差ポリゴン分割は大変でないの?
0026名無しさん@お腹いっぱい。01/11/20 20:25ID:???
>>24
ハードウェアレンダリングパイプラインの効率を無視しちゃイヤン。
最後まで頂点をレンダリングエンジンに送れないじゃん。
+変形するモデルはどうすんの?
00272401/11/20 20:31ID:???
オレは新しいハードの機能とかについていくのに脱落した人間だから、
自前のソフトレンダラしか使{わ|え}なくなった人間なんで。
ソートとバッファを使い分けたり、めんどくさくてやってられねぇっす
00281901/11/21 15:13ID:???
>>20 そう?いい方法だと思ったんだけどな。
Wつーか、1/Zをキーにしてソートかければいいんでねーの?だめ?
ツッコミきぼんぬ
0029名前は開発中のものです。01/11/23 01:21ID:T/Rr2TFO
>15

>デザイナさんがソフト上である程度優先順位をつけたデータを使ってん
>だべさ。FFXみたいな短冊髪の毛だとどーしてもある角度で矛盾がで

ツールみたいなものでしょうか?Mayaとかでそういった機能があるのでしょうか?
CGツールをまったく知らないのでさっぱりです。よろしければもう少し詳しく教え
ていただけないでしょうか?
0030名前は開発中のものです。01/11/23 01:26ID:???
>>29
 んーにゃ。普通の3Dツールだったらプレビューの表示はポリゴンソート
なんかせずに「作った順番に」表示すんべ?んでもって、普通にコンバート
なりで出力したら「作った順番に」ポリゴン吐き出すベ?
 デザイナがカットアンドペーストでそこそこちゃんと見える順番にポリゴ
ン表示順位を決めてやればなーんも問題ないって訳さ。

 ま、スクウェアだともっと別の方法かもしんないけど、意外とこんなロー
テクで大体の場面は誤魔化せるもんなのよ。具体的によーわからんのだった
ら自分で実際にモデリングして試してみんべ。
0031名前は開発中のものです。01/11/23 07:21ID:???
要Zソートな描画と Triangle Stripって禿しく相性悪いと思うんだけど
みんなはどう対処してるんだろか。
1Stripが回り込んでいたりとか、変形ありのモデルだと更に判断しにくいし。

やっぱStripで繋ぐのは捨てて、最初から独立三角形で描画?
0032名前は開発中のものです。01/11/23 15:12ID:???
事前に開発用のPCでモデルデータの形状解析してストリップ面
を生成すればよろし。
簡単な例だと、球体等は円周上にストリップ化せず、よりローポリ風に
面をまとめる感じにコンバートする。
解析部をGAアルゴリズム化して、勝手にベンチさせて優秀な奴を残すと、
平均で2000ポリ程度のモデル(法線,UV付き)3/4〜2/3の負荷で落ち着くよ。
0033 01/11/23 15:33ID:???
うへ、そこまでするの?
どうやったって全方位から見られる事を考えれば破綻するっぽいけど

DXじゃ短いStrip重くて意味ないしさ
0034名前は開発中のものです。01/11/23 16:30ID:IdkMBMoM
>>32
某車ゲーの開発者にそんな話聞いたことがあったのですが、やっぱ
良いストリップ拾うのって大変なんすね。
0035名前は開発中のものです。01/11/24 03:59ID:???
>>33
一回作れば他でも使えるから、そこまでします。
それがメシのネタなので。
ゲームの場合は全方向性は重要じゃなく、一番頻繁に見る
アングルに偏りがあるから結構効果が高い。
ベンチは、ターゲット機で実際の描画をいろんな角度で
表示させながら成績を出させるから、実情に適したデータになる。
モデル修正した場合も、前回優秀な結果を出した因子で再度計算
させるだけで、この場合は数秒で終わる。
もっとも、描画部のプログラマがちゃんと最適化して
デザイナーが無駄ポリつかわないようにしてないと意味無いけど。
0036名前は開発中のものです。01/11/24 05:16ID:???
>>35
 飯のネタにケチつける訳じゃないが、そこまでやって全方位から完璧な
ストリップが得られる訳じゃないっつーのもなんだね。もっとスマートな
方法があればいいんだけど。

 畑が違うんでよーワカランのだけど、CUBEのタイトルってどいつもコイツ
もドリキャス並みに半透明を気軽に使ってるんだけど、あれは単に力技なの
かねぇ?それともハード的に何か工夫がしてある?
0037 01/11/24 07:23ID:???
飯のネタ じゃなくて 飯の種だろ
日本語の方も頼むよ
0038名前は開発中のものです。01/11/24 07:42ID:X3bbZxMi
>>35
最適化って、やっぱりみなさんアセンブリでイジクリ回してるわけですか?
描画担当って汗技術必須なんすかね?
0039名前は開発中のものです。01/11/24 08:14ID:???
>>37
どうでもいいことだが
「ネタ」ってのはそもそも「タネ」の逆読み(業界語)なんだから
どっちでもいいじゃん。
0040名前は開発中のものです。01/11/24 12:05ID:???
>>39
何業界?おせーてっ!!
0041名前は開発中のものです。01/11/24 12:08ID:???
>ねた
>(「たね(種)」を逆さ読みした隠語)
広辞苑第五版

>ねた
>〔たね(種)の倒語〕
大辞林第二版

つーか、そうだったのか。Σ(゚д゚lll)ガーン
0042名前は開発中のものです。01/11/24 12:15ID:???
>隠語
ハァハァフゥ、ウ、アハァ、ウックッン、ファ
0043名前は開発中のものです。01/11/24 13:48ID:???
>>40
もちろん寿司屋さ
0044名前は開発中のものです。01/11/24 16:10ID:???
>>36
全方向に対して均一な得点配分をして解析させれば、ほぼ
完全な解が求まるけど?
1万ポリならセレロン800MHzで4時間くらいかな?
ただ、実際のゲーム中一番良く見るアングルに最適化したほうが
より処理が高速化するから、得点配分を変えるだけで。
事前ソートで処理効率が2〜3割アプしている現実があって、
なぜそれに否定的というか悲観的なの?>36
仮に1割しかアップしなくてもスマートな方法を夢想して、
実体が無いよりぜんぜんいいと思うが。

もちろん最適化が必要ないゲームもあるし、価格対費用効果
が重要なのはわかるけど、デザイナーが手作業でソート順
指定するより生産性高いよ。
でもって、GAソートなんてそんなたいしたモンじゃないし。
参考書とWEB見ながら2週間で形になったけど。サーバ通信部
のほうが教科書どおりに動かなくてなきそうだった。
0045名前は開発中のものです。01/11/25 07:09ID:???
デスマーチ中はモデル追加するたびに4時間も待ってられない。
0046名前は開発中のものです。01/11/25 13:26ID:???
描画まわりの高速化は必要な時だけにな。
描画最適化可能な人材なんだったら、もっともっとやるべき大切なことがいっぱい・・・

プログラマー遠藤雅伸氏が答えるスレ でも見なさい。ご本人様がご光臨なされてるぞ。
って別に布教活動ってわけじゃないんだけどね。
0047名前は開発中のものです。01/11/25 18:31ID:???
>>45-46
44じゃないけど、ワークフローに一度組み込んじゃえば問題ない気がするけど。
4時間(実際はもっと速いマシン使うだろうからもっと短いだろうけど)も、
実データの差し替えをするときだけすれば(実際には寝る前、帰る前)にすれば
いいだろうし。
//プログラマーのところでないと実機でプレビューできないのであれば、それは
//開発環境、ワークフローの準備不足。
0048名前は開発中のものです。01/11/26 03:50ID:5k3ArB+m
なにげに非常に重要な話題のスレだよなあ。上げ。
0049名前は開発中のものです。01/11/26 05:36ID:???
頂点キャッシュ、ストリップ化はこういうスレを立てて独立すれば?


★☆★メッシュ最適化を極めろゴルァァァ!!★☆★

  (\_/)  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( `Д´) < ストリップとか頂点キャッシュってメンドクセェ
   /   ノつ  \______________
  (人_つ_つ

パフォーマンスにダイレクトに跳ね返ってくる
頂点キャッシュ最適化、ストリップ化などの
メッシュ最適化についてだけ熱く語るスレ。
0050名前は開発中のものです。01/11/26 06:33ID:???
何でも別スレ、別スレか・・・。
0051名前は開発中のものです。 01/11/26 08:02ID:???
DirectXで 1000ポリゴンくらいのXファイルを、100ポリゴンくらいに
分割して表示するだけで、なぜか4倍くらいパフォーマンス上がったんだけど、
これって、ただ単に1回に読み込むデータ量が少ないんでほとんどデータを
キャッシュで処理してるから早いってことなのか?
0052名前は開発中のものです。01/11/26 11:56ID:???
>>49あんま独立しすぎてもなぁ。
そのスレたてても44が引き上げたら終了なんじゃねぇの?
0053 01/11/26 12:59ID:???
MSは、一回の描画で100ポリゴン位がパフォーマンス的に最適と
言っているよ
CPUとの並列化の関係といってたが、単に1回の呼び出し部を複数に分けるだけで意味あるのかね
(間に別の処理でも入ってなけりゃ結局連続して呼ばれるわけだし)
0054 01/11/26 13:18ID:???
バッチ サイズ
Direct3D は大きなサイズのプリミティブ バッチに最適化されています。
1 回の呼び出しで送信できるポリゴンの数が増えれば増えるほど、有利
です。呼び出し 1 回当たりおよそ 100 ポリゴンが目安です。下回る値
では最適パフォーマンスとはいえません。逆に上回るようでは、リター
ンが少なすぎて、並列処理で問題が起きるおそれがあります (以下参照)。


並列処理
他の処理とレンダリングを並列に(同時に)実行すれば、システム パフォ
ーマンスを最大限に活用できます。しかしこれは、「レンダーステート
の変更をできるだけ避けよ」という課題と相反します。一括処理による
ステート変更の削減と、できるだけ早くドライバにデータを出力して並
列性の達成に寄与するいう 2 つの課題の間でうまくバランスをとる必
要があります。総当たり方式で複数の頂点バッファを使用すれば並列処
理しやすくなります。
■ このスレッドは過去ログ倉庫に格納されています