//www.旧型、PSP開発幼稚園.game.jp/(本館) -47ページ目

#02 DGEN 続メガドラガンマ(その2)

#02 DGEN 続メガドラガンマ(その2)

注意:ええと、きょーのはなしも、けーぞくせーが、つおいから、きのーの後半から、よんでね。

保護者の方へ:お子様の3日坊主の治療の為、前日と継続性の強い物となっております。「ファンタシースター」
はさりげなくお子様の手の届く場所へ保管してください。

<前回までのあらすじ> メモリが訳ワカランと、メモリの改造が難しいので整理。(本当はこれが主題だった筈) 最大ROMが4MBytes(32MBit)で正しい事を確認する為。4MBytes(32MBit)の「ファンタシースター千年紀」 をPSPで起動、動作確認。 せっかく起動したんだから、遊ぶつ。 「あれつ。影がキタナイ、ダンジョンもキタナイ。黒がキツイ」 「メガドラガンマ」実装しないとだめぽ→(管理人のデビルアイを駆使し)実装。 (あんまりデビルシリーズを使いすぎると、管理人の正体が実はデビルマンである事がばれてしまうので、 程々にしておこう。ああっ!聞かれてしまったか。よいこのみんな。みんなには秘密だよ。) ああつ。「サンダーフォースⅢのWAVEが、つよそーになつた」 でも、本物に比べて画質が眠すぎるう。これは、「CRT→液晶」の特性が考慮されてないから。 つー訳で、今日はPSPの液晶の話(の予定)
■PSPの液晶の色ガンマ値が、CRTと比べてずれてるなんて話は聞いた事ないだろ。 そんな事は、ないんだから、今日の話は「メガドラガンマ」(もちろんこのガンマは色ガンマ値)の話だけど、 「色ガンマ値」もっと言えば「PSP液晶の色ガンマ特性」の話じゃねーんだよ。 工学的な特性のみを追求してる、御方には「盲点」になってて、何の事やら想像もつくまい。(頭かたいつ) ここは、液晶の話ではなくて、まずCRTの原理と工学特性。および「それ」の具体的実装。まで解らなければ、 話が見えない。
まず、メガドラが現役だった頃の「家庭用TV」つまり、「低解像度CRT」の話。 各社競って「色補正」をかけていたが、それは「本質」と関係がないので、考慮にいれない。 一画面に262ラスタ描画する。(非表示、戻り含む) TVの調整によるが、画面に実際に映るのは240ラスタ前後。さしあたり240ラスタとする。 仮に20インチのTVだったとして、奇数フレームに走査線が半波ずれる事を考慮しても、 240x2で480ラスタしか、描かない。 PC用のディスプレイを思い出してくれ。(この場合は液晶でもCRTでも構わない) 20インチもあったら、1680x1200グライ映してもバチはあたらんだろ。
480ラスタと1200ラスタなら、縦解像度は2.5倍も違うだろ。 横はビームが滑らかに動いて描画していくから問題にならない。 だが縦解像度が2.5倍も違って、同じような画を写すのならば、ビームの径(直径だお)が、 2.5倍なければ、似たよーな画は出て込んだろ。
■「じゃあ2.5倍太けりゃ問題ないじゃん。」 甘いつ。 2.5倍太くするのは、工学的に無理つ。
CRTの後ろにどれくらいの電圧かけて電子ビームを飛ばしてるか知ってる? 画像が出ても、コントラスト比が低けりゃ、買う人いる? 電圧上げすぎれば、当然放電事故が発生するわな。CRTの周りに碍子でも設置して、 「危険物につき子供は立ち入り禁止。このCRTは20インチだけど、放電するので半径20M(メートル)は立ち入り禁止」 とでもするか?
無理なんだよ。性能が足りなけりゃ強化すれば良いという発想では土台無理。 フォーカス、甘甘に設定すると、ビームは太くなっても画面はぼけぼけになって、明るさがどんどん落ちるだろ。 理屈上。電子ビームを飛ばしてる電圧変わってないんだからさ。 それでも色々あってとにかく民生用(家庭用)のCRT(TV)の方がビームの径が太い。
でも、そんなに太い訳じゃないから、「隙間」ができる。この「隙間」を嫌って、倍密描画して隙間をなくしたのが、 プログレッシブTVとか、それの規格がクリアビジョンとか(多分)その手の奴。 ビームの径を太くして画質を確保するのは、物理的に不可能だから、そおいう技術が生まれた。 もし、低コストでビームの径を太くしてそれで問題ないのなら、そんな技術は生まれなかった。
■ながーーーーなが、書いちゃったけど、纏め。 低解像度CRTはビームの径に限界があるため、縦にスリット状の「隙間」がある。 この「隙間」は工学上はPOWERを補償すれば済む話であっても、 「人間の視覚特性の問題」が別口で発生するため、(注:隙間にはビームが当たらないので、得意の残像特性が使えない) POWERを補償以外に、これを考慮しなければならない。


■ここまで書けば判るでしょ。後の周辺の細かい話は「想像」してくれ。それで殆どあつてるから。 (それでも疑問なら、調べろな。せっかくインターネット繋がってるんだから、活用よーせんと。) で、今度はPC用の「家庭用ゲーム機エミュ」の話。 その走査線の隙間。ゲーセンのゲームでもあったし、家庭用TVでもある。 当然見た目が違うから、気になる奴は気になる。 メガドラの画面は320x240程度だが、PCのVGAは640x480だ。 当然その「走査線の隙間」を再現してみたくなる。 で、やってみた。が、上手くいかない。
幾多のエミュに「ラスタ抜き」モードがあるだろ。最近の輩はこいつを試してみて、 「何でこんな訳解からん画面モードがあるんじゃい。目茶目茶汚いだけで、存在価値ないやんけ、 実機の画質とも全然無関係やん」 って、思うはず。事実、各エミュが実装した「ラスタ抜き」モードは構造的に欠陥がある為。あまり意味はない。 ただし「場合に拠ってはいい感じになる」が、その為の(物理的)条件は厳しい。
ちなみに640x480で320x240のラスタ抜きを真似すると、とてつもなく暗い画面になり、 しかも隙間だらけで訳のわからん画質となる。とても本物の画質の「真似をした」とは思えない。 「真似」のレベルが低いんである。
次、じゃあ、二倍密の480じゃあ、縦解像度が足りないんだな。三倍密の縦720ドットや四倍密の960ドット。 5倍密の1200ドットで、「真似」を試せばいいじゃないか。
世界は広いから現実に実行した人はいるし。それに対応してるエミュもある。効果は解像度が高い程、真似の 精度も高い。ただし「それ」用に考慮したプログラムを組んだ場合。 ■前項の「それ」ってなあに? 「それ」を理解する為には、またCRTの仕組みに立ち返らないと、イケナイ。
「家庭用TVとPCのディスプレイって、電子ビーム飛ばしてる電圧。殆ど、一緒何でしょ?」 「工学的に殆ど一緒なのに、なんで全く一緒。じゃないの?」 「同じような物があるなんて、場所の無駄だよ」
こういう疑問を持った事はないかな?。 殆ど同じようなもの。なのだから、同じ。だったら、どこかの企業が「抜け駆け」して、 「家庭用TV(おまけ機能でPCが映ります)」あるいは、 「PC用CRT(おまけ機能で家庭用TVが映ります)」 こういう物があってもおかしくない。現に家庭用コンピューターが「MSX」とか「X1」とか「FM77AV」とか 320x240レベルの低解像度であった時代は、こういう商品が存在した。
しかし、640x480の解像度の時代では、この手の「商品」は、 「(おまけ機能)→(追加機能)」へと移行し、特殊な需要では存在するものの値段が高い。 という状態になった。もしくは「スキャンコンバーター」を追加し画像信号自体を変換する。という時代になった。
■「工学」というのは、「技術」だけではなくて、「コスト」も重要な要素である。 「技術」的にはすごいが、「コスト」もすごく高いというのは、既に「工学」ではない。
「工学」はその基本姿勢として、 1.「技術」は使えるだけ使う。 2.「コスト」は下げられるだけ下げる。 3.「性能」は妥協出来る所まで妥協する。 4.「営業?」そんなの知ったことか、需要があれば売れるし、需要があっても「宣伝」しなきゃ売れない。 それは専門の部署を配置して、一切任せるから、「工学」には入れないでくれ。 という事。注意して欲しいのは(3)。PSPだってDSだって、(3)が基本姿勢だって事、お忘れなく。
■だいぶ前の「それ」の説明が、まだ足りてないな。 「それ」を理解するためにはCRTの仕組みに立ち返らなければいけない。 「ビームの径を太くする第二の方法」がある。 硯に墨を磨って、お習字をする事にしよう。最近の子供も「習字」が必須科目だから、習字道具一式持ってる だろ?業者がもうける為に。(あ、つい一言余計なこの口がぁ。ううう、デビルマウス嫌い) よし、そろそろ硯に墨が擦れたかな? バカ。水入れて擦る奴があるか、そんな事してたら、習字の時間が終わっちゃうだろ。墨汁から擦るんだよ。 そんなの子供の常識だよ。 ガンガレ。そうそう。一生懸命擦れ。管理人(正体はデビルマン)も応援してるぞ。ガンガレ。習字の時間が 終わりそうになつたら、次回の為に、墨汁の容器に戻すんだぞ。容器の口を上に向けて腹を押しそのまま すばやく擦った墨汁に突っ込んで、逆流させ、全部吸わせろ!充実したいい時間だったろ?次回はもっと 濃くする事にチャレンジせよ。一年後の墨汁の成長が楽しみだ。 ええと、自分の擦った墨汁はもったいないから、隣の奴ので、実験しろ。ええと洗ってあげるとか、一見親切そ うな台詞を口にすれば良い。習字の時間も終わりだから、その辺に失敗作が転がってるだろ。そうそう、それ ごみばこから、そいつを持って来い。だめだめ。そんな丸めた奴は、ぐしゃぐしゃで書きにくいから却下。端っこの 折れてるそいつ、それそれ。 さて、やっと実験の材料がそろつた。
■ピンポーン。番組の途中ですが、CMにゃん。昨日の、をちと変えたにゃん。 #if 1 /* メガドラガンマ、テスト実装b */ int blue; int red; int green; blue =((cram[i+1]&0x0e)<<2); blue =blue +blue +blue ; blue +=87; red =((cram[i+1]&0xe0)>>2); red =red +red +red ; red +=87; green =((cram[i ]&0x0e)<<2); green =green +green +green ; green +=87; *ptr++ =( ((blue )>> 3)&(0xf8>> 3)) | /* ここはマスク要らない */ ( ((red )<< 2)&(0xf8<< 2)) | ( ((green)<< 7)&(0xf8<< 7)); #endif はOKにゃんけど、 #if 1 /* メガドラガンマ、テスト実装c */ int blue; int red; int green; blue =((cram[i+1]&0x0e)<<2); blue =blue +blue +blue ; blue +=87; red =((cram[i+1]&0xe0)>>2); red =red +red +red ; red +=87; green =((cram[i ]&0x0e)<<2); green =green +green +green ; green +=87; *ptr++ =( ( ( ((blue )>> 3)) | ( ((red )<< 2)) | ( ((green)<< 7)) ) & ( (0xf8>> 3)| (0xf8<< 2)| (0xf8<< 7) ) ); #endif は駄目。問題の本質がすこし見えてきたにゃ。 (文責:ねこ、CMは15秒でおしまいにゃん)
■2本目のCMにゃん。人気番組、特にゲーム&アニメ関係はCMが一本じゃないんにゃよ。 そんなの、子供の常識にゃん。 ええと、メガドラガンマは、パックド演算で考えるなら、3回足すのではなくて、一回引く方向で考えなければ、 オーバーフローして隣の値に影響を受ける(つまり壊す)から駄目という事にゃん。にゃーんか、昔MMXの パックド演算で似たような事で嵌った記憶があるにゃん(その場合は、飽和演算を使う)デビルマンでんでん、 成長してにゃいにゃん。だめぽ、にゃん。 (文責:ねこ、CMは15秒でおしまいにゃん)
■3本目のCM!!ぐあーっ今気がついたあー。昨日の最後の擬似パックド演算。 grb  = ((10<<10)|(10<<5)|(10)); じゃなくて、 grb += ((10<<10)|(10<<5)|(10)); だろ!!上手くいく訳ねー。しかしここ直しても「オーバーフロー問題」が解決しないとむだぽ。 (文責:デビルマン、CMは15秒でおしまいだぎゃ)
■4本目のCM!!!!!!!!(C)ドラゴンボール、鳥山明。 と、おもったら、論理をすっかり変えたのわすれてたつ。死んでしまうとはなさけない。なんと、うまくいきやがった。そーすは、 #if 1 /* メガドラガンマ、擬似MMX風(パックド演算)、実装 */ int grb; grb =((cram[i ]&0x0e)<<9)|((cram[i+1]&0xe0) )|((cram[i+1]&0x0e)>>1); /* -ggG GGrr RRRb bBBB 7:7:7=0x1ce7 */ grb =grb +grb +grb ; // grb = ((10<<10)|(10<<5)|(10)); /* 10==31-21==31-(3*7)==[0001_1111]-(3*[0000_0111]) */ grb += ((10<<10)|(10<<5)|(10)); /* 7*3=21=0x15=[0001_0101], [0001_0101]+[0000_1010]==[0001_1111] */ /* -GGG GGRR RRRB BBBB grb=555 */ /* -ggg --rr r--b bb-- 0x739c */ *ptr++ =( grb & 0x739c ); /* */ #endif 頭の硬い奴には理解できんじゃろ。intはunsigned shortにしても、全く同じ。 ぐわー美味く逝ったじぇー。(註:上手くいった) ええっ?もう15秒? (文責:デビルマン、翼の調子も良いようだ)