[最新] ■[前年|前月|前日|2011/09/29|翌日|翌月|翌年] ■表示[全て|@gorry5のみ|個別]
■グループ[Mention] ■その他[Twitter:@gorry5][日記] ■[twtlog 20100921a]

--------
09/29 15:04 なぜかラスタースクロールの話がTLにあるが、ラスタースクロール系の技術を「画面をうねうねさせるもの」としか考えてない人ってわりといるのかな…
--------
09/29 15:08 (@yunyundetective) スプライトの同時表示枚数を増やしたり、画面同時発色数を増やしたり。これは割り込みでラスター系処理をしている場合。 RT @gorry5: なぜかラスタースクロールの話がTLにあるが、ラスタースクロール系の技術を「画面をうねうねさせるもの」としか考えてない人ってわりといるのかな… (ruri)
09/29 15:13 (@shinsan68k) @gorry5 プレーンが1でも画面の上下とかにステータス表示専用エリアをもうけることができる、ってのが一番利用された例かな? (reti)
09/29 15:16 (@117Florian) @shinsan68k @gorry5 セガMKIII版「北斗の拳」は良くもまぁあのCPUパワーで遠近感のあるラスタースクロールをしていたものです。MC68000くらいだと1ラスター単位でも全然余裕でしたが。 (rega)
09/29 15:18 (@shinsan68k) @117Florian @gorry5 忍者龍剣伝3とかすさまじかったですな。SFC版でラスタースクロール全面カット・・・・え?FCより超劣化w (rezo)
09/29 15:57 (@chemool) ラスタースクロール=ダライアスボス面のアレ と思ってる人は確かに誤解してそうですね… RT @gorry5: なぜかラスタースクロールの話がTLにあるが、ラスタースクロール系の技術を「画面をうねうねさせるもの」としか考えてない人ってわりといるのかな… (gura)
09/29 16:20 なんとなくまとめ書きしたくなったのでしてみる
09/29 16:20 今だと意識しなければいけないシーンはそうそうないが、CRTコントローラが扱うレジスタやメモリをCPUから触るときは「いまCRTが画面上のどこを走査しているか」を把握しなければならない時代があった
09/29 16:20 最も基本的なこととして、CRTは「1つの点が左から右、上から下に動きながら輝度を変えることで面を表現する」ことを知っておく必要がある。画面制御系のレジスタやメモリ内容をCRTへの信号に変えるのがCRTコントローラの役目
09/29 16:20 最初期は「画面走査中にCRT系のレジスタやメモリに触るとCRT制御に影響が出てノイズになる」ので「画面走査中はアクセスできないようにハード的に処理する」とか「CPUアクセス時は画面走査そのものを止める」とかだった
09/29 16:21 少し進むと、「CRTが画面走査中でも適宜CPUが書き込めるように配慮する」ようになり、また「画面走査中でない」ことをCPUで監視できるようにすることで高速転送が可能に。「監視しなくてもいいようにCPU割り込みをかけられる」ものも
09/29 16:21 「1つの点が左から右、上から下に動きながら面を描く」ということは、その点が右端へ到達したら左端へ戻す必要があり、下端に到達したら上端に戻す必要がある。これにかかる期間を帰線期間といい、それぞれ水平帰線期間・垂直帰線期間という
09/29 16:21 ゲームは高速大量に画面処理を行う必要があるので、帰線期間、それも比較的長い「垂直帰線期間」にまとめてアクセスすることが重要になる。また監視にCPUを割くのがもったいないので割り込みが重宝される。これが垂直同期(VSYNC)処理
09/29 16:21 もちろん、水平帰線期間も有効に使おうという考えはあり、同様に水平同期(HSYNC)処理といわれた。ただ、当時のCPUは性能が低くあまりできることがないと考えたのか実装はそれほど多くはなかった
09/29 16:21 HSYNCが検出できるようになると、「任意の水平帰線期間でCRTコントローラが扱うレジスタやメモリを書き換える」ことで、静的な表示では不可能だった表現を行うようになる。これがラスター処理といわれるもの
09/29 16:21 HSYNCを検出できないハードは珍しくなかったが、「CRTCがスプライトを描画するときに重なりがあったら割り込みを発する」機能を代替で使ったり、「VSYNCからの経過時間」をポーリングor割り込みで検出して代替することもあった
09/29 16:22 HSYNC処理でできることは「スクロールレジスタの書き換え」だけに留まらず、スプライト座標やパレットカラーの書き換え、CGの書き換え、画面の色モードや解像度の書き換えなど多岐に渡る
09/29 16:22 うねうね系のスクロールレジスタ変更は使いやすくてインパクトがあったのでよく使われ、ついにはラスター毎のスクロールレジスタまで持つに到ったと
09/29 16:22 このへんまでがラインバッファ系の画面表示のしくみで、フレームバッファ系の画面表示になるとこの手の知識はほぼ不要、せいぜい「VSYNCでバッファのフリップを行う」ことくらいしか知らなくてよくなる
09/29 16:22 ただ、フレームバッファ方式でも「1つのバッファをフリップさせず常に表示させ続け、垂直帰線期間に入ったらバッファの更新を始める」やり方もある
09/29 16:22 更新が間に合わないと画面が崩れるが、間に合うなら「ラインバッファ方式と同等のレイテンシで描画できる」利点があり、昨日TLに出ていたダブルバッファ方式のレイテンシの欠点はなくなる話につながる、と
09/29 16:22 以上まとめ書きおわり
09/29 16:27 (@yunyundetective) @gorry5 ダブルバッファ方式でも、1フレーム分のCPU処理+GPU処理が1/60s内に完了しておりVSyncと同時にフリップ出来れば、原理的にはレイテンシの欠点は出ないですね。 (zaga)
09/29 16:27 (@masaru0714) @gorry5 おつでし。個人的には、帰線期間と言われて一番に思い出すのはX1のPCG定義でした。 (zagi)
09/29 16:29 (@hasegaw) .@gorry5 さんのつぶやきが熱くてうっとりする (zabi)
09/29 16:29 (@117Florian) @gorry5 「垂直帰線期間」に(VBLANK)という一言が欲しかったです。 (zabu)
09/29 16:35 @yunyundetective ええ、要は表示期間内の変化を帰線期間内に更新&フリップできればいいんですが、それだったらダブルバッファを使うまでもなくシングルバッファでもいいよと。間に合わなかったときの画面乱れがない利点がダブルバッファにはありますが
09/29 16:37 @masaru0714 実は帰線期間どうこうをちゃんと理解したのはX1のPCG定義のプロセスで :D
09/29 16:42 (@yunyundetective) @gorry5 ダブルバッファ使えば、1フレーム内でさえあれば、垂直帰線期間が来る前から描画開始できますよ。 (zuho)
09/29 16:45 @yunyundetective ええ、実はむしろラインバッファ方式より早く画面更新処理が始められる(ラインバッファ方式は垂直帰線期間まで更新できない)のですが、そのへん絡ませるの忘れてたな…
09/29 16:49 さて友人の迎撃に行く支度をせねば
09/29 16:50 (@yunyundetective) @gorry5 ラインバッファ系でも、メモリ上のバッファへ更新処理自体は行なっておいて、垂直帰線期間が始まると同時にDMAでばんばん!と転送して終わりってパターンは多いですよね。絡めるならその辺も。 (zupe)
09/29 18:22 迎撃呑み開始@まさみや
09/29 18:42 迎撃呑み@まさみや URL:p.upa.jp URL:twitpic.com (bebi)
09/29 18:52 迎撃に塩兄も参戦
09/29 20:19 (@yuinejp) .@gorry5 グラディウスか... (sina)
09/29 20:27 @yuinejp 今回あえてターゲットを記述してないけどわかる人にはすらすらわかるはず :D
09/29 20:36 (@yuinejp) @gorry5 うに。最初はx68kな話題かなーと思たけど、色々ありますな。 (sesa)
09/29 21:27 品川でかけん見送り完了
09/29 21:41 (@kakei_jp) . @gorry5 @AoiMoe 今日は有り難うございました。無事新幹線に乗って帰路についています。 (nute)
09/29 21:42 @kakei_jp またおいで?

■グループ[Mention] ■その他[Twitter:@gorry5][日記] ■[twtlog 20100921a]
[最新] ■[前年|前月|前日|2011/09/29|翌日|翌月|翌年] ■表示[全て|@gorry5のみ|個別]