反論紹介
目次
8bitテクスチャ・シェーディング
8bitのパレットテクスチャを使い、16色カラーとして扱い、16段階のグラデーションを持たせ、それで光源計算を可能にするテクニックがしばらくして開発される。それだけ工夫しても光源一つとアンビエント光。16段階だから細かく色分けしても16^3=4096色モード相当。メモリも食う。
— kozo (@yukizokin) November 11, 2013
ここからは、グーローシェーディングが使えないパレットポリゴンで、どうやって「光」を表現するか、という話。
先に書いたように、スプライトの色を指定するには、RGB の直接指定と、パレットによる指定がありました。
いずれの場合も、VDP2 は、1ドットを 16bitで処理し、混在することも出来ました。
スプライトは、4枚あるBG画面と、好きなように重ね合わせることができました。全部で5段階の位置を持ちます。
単に重ね合わせるだけでなく、半透明の設定もできました。この半透明度も、最大で8段階の設定が可能です。
パレット1本の中に、16~256色の色がセットになっています。そして、この「パレット」は最大256本持つことができ、色違いのキャラなどの表現に役立てることができました。
実際には、重ね合わせは 1~3bit、半透明度も1~3bit、パレット番号は 1~8bit、色番号は 4~8bit で可変です。先に書いた「RGB との区別用」のbit が必要な場合もあります。全部最大にしてしまうと、16bit には収まりません。
これらを組み合わせて 16bit に納めた「スプライトタイプ」がいくつか用意されていて、その中から選ぶことになります。
さて、kozo さんの話では 8bit のパレット、と言っていますが、これはパレット番号が 8bit、色番号が 4bit …つまり、16色のパレットを 256本持てるモードを使用する、という意味です。
そうすることで、グーローシェーディングが使えないパレットモードでも、シェーディングが使えるようにする機能がSGLにあったはず、というのですが…
僕の記憶になかったのですが、流出している英語版マニュアルを調べたところ、端っこの方にちょっとだけ書いてありました。
Appendix の最後(5ページ目:全体の230ページ目)、一番下の UsePalette の説明です。
Specify with "UseLight" when performing light source calculations for a pallet mode polygon.
In this case, 8 colors are selected from the specified palette number according to brightness (+0 is low brightness).
和訳:
パレットモードのポリゴンに光源計算を行う場合、一緒に UseLight を指定してください。
この場合、明るさによって8本のパレットが選ばれます (+0 が一番暗い)。
意味不明でしょうから説明します。これは、プログラマーがポリゴンモデルの「属性」を与える際の説明です。
UseLight を指定すると、テクスチャ無しや、RGBテクスチャのポリゴンにたいし、フラットシェーディングや、グーローシェーディングをかけられます。
UsePalette を指定すると、テクスチャがパレットモードであることを意味します。
この場合、サターンの機能としては「シェーディングが使えない」のですが…
ここでの説明はつまり、両方の指定を同時に行った場合は、光源計算(ポリゴンの明るさの計算)をしたうえで、本来のパレット番号に適切な「明るさの数値」を足したパレットを使って表示するよ、という意味。
ハードウェアの光の表現が使えないので、ソフトで表現するための工夫です。
光の表現って、ポリゴン3Dではすごく重要な情報なのに、どうして書いてないのだろう…
「8色」となっているのは、明るさの範囲が0~7だということでしょう。
kozo さんの書いた16段階とは食い違いますが、記憶のみで書いたための些細な誤りかと思います。
パレット自体は全部で256本持てるため、明るの表現で8本をセットにして扱うとしても、この「色セット」を32セット用意できます。
全部を使えば、16色 * 8パレット * 32セット = 4096色。
少し計算が変わりましたが結果は同じ。
kozo さんの書く「4096色モード相当」というのは、これを意味しています。
さて、話はこれで終わりではありません。
ここで設定されるパレットの「明るさ」は、光源とポリゴンの位置関係だけで決まります。
でも、洞窟の中でスポットライトが当たっている時と、春の日差しのお花畑にいるときで、光の感じは変わります。
洞窟では1方向からの光しかありませんが、春のお花畑は、乱反射によって周囲からも光が当たるのです。
このような「周辺に満ち溢れた光」を、アンビエント光(環境光)と呼びます。
場合によっては、アンビエント光は「夕日に照らされている」などのように、光の色合いも変わります。
アンビエント光は、「環境」によるものですから、ポリゴンが動いたくらいでは変わりませんが、シーンが大きく変わった際には変化します。
そこで、シーンが変わった際にはポリゴンモデルはそのままでも、「パレット」を全部入れ替えてやります。
これを、アンビエント光の強さによって 16種類ほど用意したとしたら…
「光源一つとアンビエント光」というのは、このようなパレット入れ替えも含めての意味です。
「メモリも食う」とありますが、一色のデータが 2byte で、4096色を、アンビエント別に16段階。
これは、128Kbyte のデータが必要になります。
サターンでの光の表現は「無理ではない」が「大変だった」とよくわかるエピソードです。