垂直・水平同期処理の話

ラスタースクロールから始まる、ラインバッファ表示方式と垂直・水平同期処理の話
14
後藤 浩昭 / GORRY @gorry5

なぜかラスタースクロールの話がTLにあるが、ラスタースクロール系の技術を「画面をうねうねさせるもの」としか考えてない人ってわりといるのかな…

2011-09-29 15:04:05
ゆんゆん探偵 @yunyundetective

スプライトの同時表示枚数を増やしたり、画面同時発色数を増やしたり。これは割り込みでラスター系処理をしている場合。 RT @gorry5: なぜかラスタースクロールの話がTLにあるが、ラスタースクロール系の技術を「画面をうねうねさせるもの」としか考えてない人ってわりといるのかな…

2011-09-29 15:07:45
しんさん @shinsan68k

@gorry5 プレーンが1でも画面の上下とかにステータス表示専用エリアをもうけることができる、ってのが一番利用された例かな?

2011-09-29 15:13:08
圡本 強 @117Florian

@shinsan68k @gorry5 セガMKIII版「北斗の拳」は良くもまぁあのCPUパワーで遠近感のあるラスタースクロールをしていたものです。MC68000くらいだと1ラスター単位でも全然余裕でしたが。

2011-09-29 15:16:07
しんさん @shinsan68k

@117Florian @gorry5 忍者龍剣伝3とかすさまじかったですな。SFC版でラスタースクロール全面カット・・・・え?FCより超劣化w

2011-09-29 15:17:42
sgwr @sgwr

RT @yunyundetective: スプライトの同時表示枚数を増やしたり、画面同時発色数を増やしたり。これは割り込みでラスター系処理をしている場合。 RT @gorry5: なぜかラスタースクロールの話がTLにあるが、ラスタースクロール系の技術を「画面をうねうねさせるもの」としか考えてない人ってわりといるのかな…

2011-09-29 15:19:38
CHEMOOL @chemool

ラスタースクロール=ダライアスボス面のアレ と思ってる人は確かに誤解してそうですね… RT @gorry5: なぜかラスタースクロールの話がTLにあるが、ラスタースクロール系の技術を「画面をうねうねさせるもの」としか考えてない人ってわりといるのかな…

2011-09-29 15:56:55
後藤 浩昭 / GORRY @gorry5

なんとなくまとめ書きしたくなったのでしてみる

2011-09-29 16:20:38
後藤 浩昭 / GORRY @gorry5

今だと意識しなければいけないシーンはそうそうないが、CRTコントローラが扱うレジスタやメモリをCPUから触るときは「いまCRTが画面上のどこを走査しているか」を把握しなければならない時代があった

2011-09-29 16:20:47
後藤 浩昭 / GORRY @gorry5

最も基本的なこととして、CRTは「1つの点が左から右、上から下に動きながら輝度を変えることで面を表現する」ことを知っておく必要がある。画面制御系のレジスタやメモリ内容をCRTへの信号に変えるのがCRTコントローラの役目

2011-09-29 16:20:54
後藤 浩昭 / GORRY @gorry5

最初期は「画面走査中にCRT系のレジスタやメモリに触るとCRT制御に影響が出てノイズになる」ので「画面走査中はアクセスできないようにハード的に処理する」とか「CPUアクセス時は画面走査そのものを止める」とかだった

2011-09-29 16:21:00
後藤 浩昭 / GORRY @gorry5

少し進むと、「CRTが画面走査中でも適宜CPUが書き込めるように配慮する」ようになり、また「画面走査中でない」ことをCPUで監視できるようにすることで高速転送が可能に。「監視しなくてもいいようにCPU割り込みをかけられる」ものも

2011-09-29 16:21:07
後藤 浩昭 / GORRY @gorry5

「1つの点が左から右、上から下に動きながら面を描く」ということは、その点が右端へ到達したら左端へ戻す必要があり、下端に到達したら上端に戻す必要がある。これにかかる期間を帰線期間といい、それぞれ水平帰線期間・垂直帰線期間という

2011-09-29 16:21:14
後藤 浩昭 / GORRY @gorry5

ゲームは高速大量に画面処理を行う必要があるので、帰線期間、それも比較的長い「垂直帰線期間」にまとめてアクセスすることが重要になる。また監視にCPUを割くのがもったいないので割り込みが重宝される。これが垂直同期(VSYNC)処理

2011-09-29 16:21:31
後藤 浩昭 / GORRY @gorry5

もちろん、水平帰線期間も有効に使おうという考えはあり、同様に水平同期(HSYNC)処理といわれた。ただ、当時のCPUは性能が低くあまりできることがないと考えたのか実装はそれほど多くはなかった

2011-09-29 16:21:39
後藤 浩昭 / GORRY @gorry5

HSYNCが検出できるようになると、「任意の水平帰線期間でCRTコントローラが扱うレジスタやメモリを書き換える」ことで、静的な表示では不可能だった表現を行うようになる。これがラスター処理といわれるもの

2011-09-29 16:21:47
後藤 浩昭 / GORRY @gorry5

HSYNCを検出できないハードは珍しくなかったが、「CRTCがスプライトを描画するときに重なりがあったら割り込みを発する」機能を代替で使ったり、「VSYNCからの経過時間」をポーリングor割り込みで検出して代替することもあった

2011-09-29 16:21:57
後藤 浩昭 / GORRY @gorry5

HSYNC処理でできることは「スクロールレジスタの書き換え」だけに留まらず、スプライト座標やパレットカラーの書き換え、CGの書き換え、画面の色モードや解像度の書き換えなど多岐に渡る

2011-09-29 16:22:08
後藤 浩昭 / GORRY @gorry5

うねうね系のスクロールレジスタ変更は使いやすくてインパクトがあったのでよく使われ、ついにはラスター毎のスクロールレジスタまで持つに到ったと

2011-09-29 16:22:16
後藤 浩昭 / GORRY @gorry5

このへんまでがラインバッファ系の画面表示のしくみで、フレームバッファ系の画面表示になるとこの手の知識はほぼ不要、せいぜい「VSYNCでバッファのフリップを行う」ことくらいしか知らなくてよくなる

2011-09-29 16:22:23
後藤 浩昭 / GORRY @gorry5

ただ、フレームバッファ方式でも「1つのバッファをフリップさせず常に表示させ続け、垂直帰線期間に入ったらバッファの更新を始める」やり方もある

2011-09-29 16:22:41
後藤 浩昭 / GORRY @gorry5

更新が間に合わないと画面が崩れるが、間に合うなら「ラインバッファ方式と同等のレイテンシで描画できる」利点があり、昨日TLに出ていたダブルバッファ方式のレイテンシの欠点はなくなる話につながる、と

2011-09-29 16:22:56
ゆんゆん探偵 @yunyundetective

@gorry5 ダブルバッファ方式でも、1フレーム分のCPU処理+GPU処理が1/60s内に完了しておりVSyncと同時にフリップ出来れば、原理的にはレイテンシの欠点は出ないですね。

2011-09-29 16:26:49
勝(まさる) @masaru0714

@gorry5 おつでし。個人的には、帰線期間と言われて一番に思い出すのはX1のPCG定義でした。

2011-09-29 16:26:53