疏水分線

ソガ/疏水太郎のブログです。

支持体としてのビデオメモリ

CGと奥行き

コンピュータグラフィックス(CG)の原理的なことや歴史的な移り変わりに興味があります。CGも絵の一種であるため、絵について一般に語られていることはまあまあCGのほうでも当てはまるのですが、CGはコンピュータという機械によって出力されている点で独特の経緯を辿っている部分もあると感じられます。

 

まずは奥行きについて。例えば、遠近法、は絵画において話題にあがる要素の一つです。家庭にファミコンが普及した80年代以降、コンピュータゲームの画面にも背景とキャラクターがあって、そこでは奥行きの表現が用いられていることは馴染みあるものとなりました。90年代のWindows普及以降は、PCの画面にはウィンドウがたくさん表示されて、ウィンドウには前後の重なりがあることにもみんな慣れてゆきました。ゲームの画面もPCのウィンドウも、コンピュータで描画されている以上は一種のCGであると考えることができます。今回、書き留めておきたかったのは、こうしたコンピュータが描画する仕組みとしてのCGの話です。

 

ウィンドウを重ねて描画する方法について、2020年の夏に飯塚さんとお話をしたことがあって、下の飯塚さんの記事でも引き続き触れられています。わたしのほうでもあれから考えたことを書きたいと思います。

kaludoro.hatenablog.jp

奥行きあるCGのはじまり

私は歴史を好むため、コンピュータを用いてグラフィックスを描く仕組みについて、いったんサザランドのSketchpad(1963年)に立ち返ることが多いです。SketchpadはCGツールの祖、とくにCADの原型となったシステムで、いま思いつくような基本的な機能の多くを備えていました。描画はライトペンを用いて、CRT(ブラウン管)に対して直接指示することができました。図形はベクター形式で、拡大縮小、移動、回転、マスター図形からの複製(インスタンス生成)などの機能を持ちます。CRTはベクタースキャンですので、現在みられるようなラスタースキャンのビットマップディスプレイとは方式が異なります。

 

これらはいまでもポピュラーな機能ですが、実現のためにはTX-2と呼ばれる巨大な専用コンピュータが必要でした。TX-2は空軍の資金で作られた高価なコンピュータで、部屋全体が1つのコンピュータシステムを構成します(写真はこちら:Photographs | TX-2 Project)。機械は高価でも、CGツールに求められる機能は変わっていません。つまり、いまでもCGツールを実現するために必要とされる仕組みの検討は、当時から始まっていたと言えます。

 

同年、ティモシー・ジョンソンによって拡張されたSketchpad IIIでは、3Dの奥行きを示すパースペクティブも作図可能となっています。ただし描画はワイヤーフレームであり、手前の面によって背後の面が隠される隠面消去は実装されませんでした。これは当時の技術的な制約でしたが、まずは、透視図・正面図・側面図・平面図といった投影法は、CGツールの最初期から導入されたものだと言えます。

 

Sketchpad IIIのデモ映像は、こちらで一通り見ることができます。だいぶ面白いので初見の人はご覧になってください。英語ですけど今のYouTubeだと日本語の自動翻訳字幕も翻訳音声もだせますのでとっつきやすいと思います。 

www.youtube.com

 

CGの技術において常に課題となるのは、どこからどこまでの範囲を画面に表示するか?を決めることです。Sketchpadでは図形を拡大表示することができますが、画面は9インチしかないため画面の外へはみ出る部分がでてしまいます。はみ出た部分はスクロールで表示すれば良さそうですね。さて、このとき、画面には図形のうちどこからどこまでを表示するのか?ということを、画面のサイズと図形の位置と図形のサイズ、そしてスクロール位置から定まる視野(スコープ)に基づいて計算する必要があります。もちろん、Sketchpadはこの計算処理を行っています。円がはみ出ている場合には弧の途中から描画することになりますし、この処理は難しかったようです。こうした処理は一般にビュー変換と呼ばれ、現在のCGでも全体像と部分画像、拡大図と縮小図の表示、そして3D空間内の視野に収まる範囲を定める際に必要となります。

 

視野に基づいて表示する範囲を定めることは、表示のために必要なメモリや計算の量を減らすことにも役立ちます。コンピュータに搭載されたメモリの量と演算装置の計算能力は、つねにCGの描画技術の制約となります。ここでは、CGで奥行きを描画する際に高性能のコンピュータが用いられた例を、もうひとつ紹介したいと思います。

支持体としてのビデオメモリ

1970年代のSmalltalk環境では、ダン・インガルスのビットブロック転送(BitBlt)によってスタック型のマルチウィンドウ*1の描画が実現されました。マルチウィンドウでは、前面のウィンドウは背後のウィンドウの一部分を隠すように描画されます。さて、この前後関係は、どのようにして描画されたのでしょうか?

 

当時ダン・インガルスがとったのは、隠面消去の研究ではZソート法、または画家のアルゴリズム(Painter's algorithm)と呼ばれる手法でした。画家が油絵を描く場合、まず部屋の奥の壁を描き終えて、次に、手前にあるテーブルを壁の上に塗り重ねで描いて、最後にテーブルの上の林檎を塗り重ねで描けば、手前のものが奥のものを隠した奥行きを描くことができます。コンピュータのマルチウィンドウの場合も、まず奥のウィンドウを描いて、その次により手前のウィンドウを塗り重ねて描けば同じことができそうですね。

 

コンピュータの画面に表示されている内容は、コンピュータのビデオメモリ(VRAM)内のフレームバッファと呼ばれる領域にピクセル値として格納されます。このピクセル値がディスプレイ装置へ転送されると、わたしたちの眼で見ることができるようになります。Zソート法とは、原理としては、このビデオメモリ(フレームバッファ)の上に、奥にあるものから順に塗り重ねで描いてゆく手法です。この方法を取る場合、油絵がキャンバスを支持体とするように、コンピュータはビデオメモリを支持体として奥行き順に絵を塗り重ねて、わたしたちに見せているということになります。

 

しかしこのZソート法は、どのようなコンピュータ環境にも最適というものではありませんでした。当時のSmalltalk環境が動作したAltoコンピュータは、とても高価な機械です*2。 高価な機械では効率の悪い方法でも動作しますが、普及型の機械ではそうもゆきません。CGがわたしたちの手に届くために、奥行きの実現はこの支持体から離れる必要がありました。

支持体から論理の空間へ

Smalltalk環境におけるマルチウィンドウのことを知ったビル・アトキンソンは、当時の普及型のコンピュータ「Macintosh」(1984年)でも同等の描画を実現できるQuickDrawを開発しました。Zソート法では手前のもので隠されて見えない部分もいったん描画する必要がありましたが、QuickDrawではこの見えない部分を描画しません。各ウィンドウの座標と縦横サイズと重なり順さえ決まっていれば、あとは計算によって、他のウィンドウによって隠されていない領域を複数の矩形領域(region)の和集合として求めることができます。例えばL字型の領域ならば2つの矩形の和で表現できます。その計算結果の領域内のみをビデオメモリへ書き込むことで、普及機の演算能力でもスムーズに表示できるようになりました。また、アルゴリズムは高速で、プログラム自体もコンパクトに作られていました。

 

人間はこのような手順で奥行きを描くでしょうか? 矩形を作ることはしませんが、それ以外はやや近いことをやっているように思われます。先ほどは油絵の手順でしたが、手書きのドローイング、とくにスケッチやデッサンの場合は、エッジの交わりを見たままに書いてゆくことが多いと思います。そこでは陰線あるいは隠面となる部分を先に描いて、あとから消すということはあまりなさそうです。ただ、CGツールのレイヤが普及してからは事情が変わって、技法としては油絵のようなメディウムの隠蔽力を用いたものに限らず、どんな場合でも、Zソート法つまり画家のアルゴリズムを人間の画家がとる機会が増えたように思います。

 

1980年代以降、メモリが安くなるにつれてコンピュータ機器には多くのメモリを搭載することができるようになりました。そのなかで、画面表示のちらつきをなくすために、いったんオフスクリーンと呼ばれる別のメモリ領域へ描画してから、フレームバッファへまとめて転送される方法が標準的に用いられるようになりました*3。こうして、フレームバッファは直接描画される支持体ではなくなってゆきました。

 

その後のマルチウィンドウは、ディスプレイへの出力処理を担うビデオカードの表示性能の向上、とくに3D能力の高いGPUの普及により姿を変えてゆきます。機器に搭載できるメモリが増えて、フレームバッファ以外の用途に使える領域も多く確保できるようになった結果、3DCGの世界ではZバッファ法と呼ばれる効果的な隠面消去の手法が普及しました。このため、2000年代の一般向けコンピュータでは、OSのマルチウィンドウ処理にも一貫してZバッファ法が用いられるようになりました。*4

 

Zバッファ法を用いたマルチウィンドウでは、ウィンドウの奥行きに基づいて矩形で切り抜くことはしません。代わりに、複数のウィンドウを仮想的な3次元の空間内へ配置して、デスクトップの視野に収まるようビュー変換を行います。ここで、3次元空間内のウィンドウの位置は、ウィンドウ同士の奥行きの前後関係を正しく反映させています。その一方で、どのウィンドウを先に3次元空間へ配置しても問題はありません。Zソート法では画家がキャンバス(支持体)上に油絵で奥行きを描くときのように、必ず奥のウィンドウから描く必要がありました。Zバッファ法ではZバッファという論理上の奥行きを保持するビデオメモリ領域を用いて前後関係を演算します。具体的な存在である支持体への直接の描き込みは手順に縛られるのですが、Zバッファ法では奥行きを抽象的に扱うことで、手順に縛られない描画を可能としました。

 

以上ではマルチウィンドウを例題として、CGを表示する処理の歴史上、メモリの増加や演算装置の性能向上とともにオフスクリーンやZバッファ法が採用され、ビデオメモリのことを当初のような単純な支持体とは呼べなくなっていった様子を紹介しました。コンピュータにおける処理手順は、最初のうちは人間の手順を真似ることがありますが、コンピュータにとってより効率的な方法があれば変わってゆきます。その処理は具体的なハードウェアを離れ、抽象化されてゆきました。高度に抽象化され効率的となったコンピュータは、再び人間に具体的な価値を提供することになります。いまではハードウェアのことはあまり意識することなく、CLIP STUDIO PAINTのようなアプリケーションのキャンバスで、人間の画家が厚塗りを楽しめる時代となっています。

 

*1:ウィンドウ同士が重なることができる場合はスタック型、重ならない場合はタイル型のマルチウィンドウと呼ばれます。以下ではスタック型であることは前提として書いてゆきます。

*2:一般販売されなかったため正確な価格をつけられませんが、Computer History Museumによると当時の40,000ドルとなっています。物価上昇からみて現在では数倍以上の価値でしょう。Alto I CPU with monitor, mouse, keyboard and 5-key chording keyset - CHM Revolution

*3:QuickDrawやWindowsのGDI。

*4:オフスクリーン上で全てのウィンドウをいったん描画して、その際に奥行きに基づく合成処理を行ったのち、フレームバッファへ転送する方法は、コンポジット型のウィンドウマネージャと呼ばれています。この方法は2D処理でも可能ですが、その場合はZソート法を用いる必要があります。この処理に3D処理のZバッファ法を用いたものとして、普及機ではmacOSのQuartz Composition、Windows Vista以降のDWMが知られています。

ぱたぱた


きゃわわ。

おこがましいとは思いつつも、最初に動かせる女の子がわたしが描いた子みたいに感じられて親しさがあります。

 

羽で飛ぶの可愛すぎでしょ。

 

最終面チートなしでは難しかったです。最後にアヒルさんたちに羽が生えたらどういう絵になるのかもひととおり確認しておわり。

小さきものたち

作家が道具的に手元へ描き置く絵。たとえば、わたしなら特定の絵柄を作ろうとするとき、眼の感じは、輪郭の具合は、といったん決めて描いておいて、以降の絵はそちらを参照しながら描くということがあります。複数の絵に対して、一定の要素を維持しながら描くとき、そのための参照点を伴うということがあると思います。

 

龍谷ミュージアムの眷属展にて。下の諸尊集会図は中世日本で流布していた尊像を網羅的に集めたものといいます。検索してみると諸尊集会という画題は多く見られるようですが、会場で見た西國寺の諸尊集会図には、《図像集の要素を持つ特殊な作例》という解説が加えられていました。

図像集とはなんでしょうか。アニメの設定画集のようなもの、と思ってよいでしょうか。つまり、特定の仏様や眷属の姿を描くときに参考にするもの?

アニメの本編では設定画を参考に様々な絵が描かれることになりますが、諸尊集会図の性質はむしろテンプレートに近いものと思われました。ここに描かれた姿を見ながら、それを大きく引き伸ばしたり、精細度を上げて、一枚の絵を描くという使い方。絵画において他の人の作品を見ながら描くことはよく行われましたが、貸出を受けることなくその絵を手元に置いておくには、スケッチをして持ち帰るしかなかった。そういう小さなスケッチを集めてゆくうちに諸尊集会図という形を取る、ということもあったのではないでしょうか。

また、会場では江戸から明治にかけての仏像の雛形も多く展示されていました。京都の仏師、畑治良右衛が15代にわたって伝えてきた四百の雛形のうち一部ということで、彫像を作るときの模型や手控えとして作られたことが解説でははっきりと語られていました。大きさは5から15センチ程度で、頭部のみだったり、全身像だったり。

同じ題の作品を彫ることが何度もあった仏師の家系において、納品した作品が手元にない以上、手元に雛形を置くことは工芸的な工夫であったと言えるでしょう。つまり、小さな彫像は参考資料として作家の元におかれ、それを取って眺める作家の手のひらのことを思わせる大きさでありました。

眷属は、図像や立像では主に対する小さな存在として置かれます。眷属にもまた小さな眷属がいて、彼らは童子として愛されました。眷属の展示において雛形の置かれたことは、作家のそばにあった小さきものたちのことを想像させる良さを感じました。

聖無動尊一字出生八大童子祕要法品という江戸時代の文書に、童子の姿や身色(体の色)、持物が記されていると紹介されていました。いわゆるアトリビュートかと思われたのですが、ちょっと素敵なことが書かれていたので紹介しておきます。

持徳童子であれば、
「姿」は、梵天に似る、三目ある、甲冑を身に着ける、
「身色」は、虚空のよう、
「持物」は、左手に輪宝、右手に三叉鉾、

と記されています。

その身色は虚空、て。まるで見てきたかのような物言いだと思いませんか。

阿耨達童子(あのくたどうじ)の身色は《黄金のよう》とされていて、これとはだいぶ違いますよね。黄金という言葉が指し示すものは、そこそこストレートに絵にすることができそうです。しかし、虚空はどうでしょうか?虚空を描くとき、わたしはまず虚空を「見る」必要があるように思えます。アトリビュートとは完全に索引的なものではなく、どこか幻視の混ざり込む余地があるのかもしれません。

作家にしてみると、参照するということには収集と手のひらの眺め、そして虚空を見るような行為が伴っているものと思われるところです。

きみの色

赤のセロファンと緑のセロファンを重ねると茶色を作ることができる、この発見は小学生のわたしを大変よろこばせたのでした。

どういう授業だったかは忘れたのですが、B4くらいの黒い紙をくり抜いて、そこに色とりどりのセロファンを貼って、ステンドグラスみたいなのを作っていたのでした。たしか大仏殿の中の様子を描いた気がするのですが、そうすると木造建築の茶色に近い色がほしくなってね。黄土色のほうが近いかもですが、わたしはこれを茶色と呼んでいました。

セロファンは物質なので、複数枚を重ねるとどうしても色が濁ります。そこに不満がないでもなかったのですが、それでもなおこの色はわたしだけが手に入れた色だという喜びが勝っていました。

赤と緑を重ねた茶色の部分を光に透かすと、茶色の光が通り抜けてきます。この成功体験はずっと、わたしにとって光の三原色を奇妙なものに思わせています。光の三原色、つまり、赤と緑の光が同時にひとの眼を撃つと、それはひとにとって明るい黄色として認識されます。ブラウン管やカラー液晶では表面の赤緑青のフィルタを通して色のついた光のうち、赤と緑が強ければそれはやはり明るい黄色として感じ取られます。

 


しかし、赤と緑の半透明のフィルタは重ねると濁った茶色になるのではなかったでしょうか? マテリアルとして色を重ねる性質と、光を透過する性質の両方をもつセロファンの存在は、光が、色が混ざるとはなにか?ということについて、わたしにちょっとした錯誤をもたらしてくれます。

「きみの色」のなかで、光源の色、透過による色、反射による色、の区別はしておきたい、というのは、わたしの興味に長らく関わってるところだからですね。ステンドグラスとは普通、光源である日光がガラスの色を透過した結果の色を見るものですが、冒頭のように床に映ったステンドグラスの花は、それがさらに床によって反射された色です。この過程においてもっとも印象に残るのは透過光のキラキラとした部分だと思うのですが、全体の過程としては混じり気があります。わたしにとって光は純粋な雰囲気を帯びているのですが、そこに複雑な物質の存在を同時に感じさせるのが、実空間における光と色の現象なんだと思われます。たとえば、日光以外の光源だと、ライブハウスのカラースポットライトは光源であると同時にカラーフィルタという物質によって色のつけられた透過光でもあったりします。

最後にトツ子さんが日光に対して手をかざしたとき透過される色の様子にはステンドグラスのモチーフを感じました。そして、やはりここでも、人間の肌を透過するときの光の散乱は複雑であって、屋外の純粋な光線の心打つ様子とこの世界の混じり気とがそこに一緒にあるように思えたのでした。

 

90年代から00年代の私は都築和彦さんのCGの影響を強く受けて、発光する少女像への愛を説いていました。PCのモニタという人工の光源を得て光を放つCGの少女のことは今でも私にとって特別な存在です。当時の議論の中に、そういう愛着は、好きな人をみると瞳孔が開いて、相手がきらきら眩しく見えてしまうことと何か関係があるのでは?というご意見がありました。

トツ子さんの視覚世界も、そのひとのいいところが色として見えてるので、そうしたきらきら感を伴っているのかもしれません。作中の色感として最初にあるのは、ステンドグラスの光線の属性だったと思います。

 

光は赤と緑と青が混ざると白に近づいてゆきます。一方、作中できみさんの色とされる青とルイさんの色とされる緑が、絵の具のような質感で混ざってゆくカットでは、最初、白にならずどんどん深い色になります。これは物質の反射する光で、色の三原色に従っています。

以上は、ルイくんがきみさんの曲にフレーズを足す場面に登場します。ここでは透明水彩を重ねるときのような減法混色の表現が中心となっています。

しかし、この青と緑の混ざるカットは後にもう一度登場します。こちらでは混ざりあうふたつの色は加法混色で明るくなる、つまり、光の三原色としての合成が行われています。

トツ子さんにとっての色は、キラキラ透過してくる光でもあり、深く混じり合う物質でもある。「きみの色」の映像はこんなふうに色の諸相を使い分けながら色を綴ってゆく心地よいものだったと思います。ここで日光の白は、RGBのLEDのように混色されたものではない純粋な光という扱いだった気がします。そうした所与の光の存在は、ミッションスクールという背景に相応しいものだったのではないでしょうか。

 

 

つながる。


あごの線がなくなって首とつながるのは、絵を描いていればときどき起こることではありましたが、どうやら2021年の元旦以降の絵は突然この線がなくなり続けています。お正月になにかありましたか?たぶんたまたまそうなって、そのまま気に入ったんじゃないかなと。

見た目の理屈をしいていえば、チャーリー・ブラウンたちが横向いたときにあごの線がなくなるの好きです。

指先の理屈をいえば、サインペンは交線を嫌います。線は交わらないほうがシュッとする。

CGの理屈をいうと、まるい輪郭を描いてから、あとで首のところだけ消すのが好き。水たまりのダムを川へとつなげるみたい。

 

陰影よりもテクスチャを好む、という話をしようと思って、考えてたら飯塚さんが前におっしゃってたこっちの話になりました。

 

空間におけるオクルージョン、つまり、あるものが別のものを隠してしまうという前後関係は、線を手がかりに示されることがあります。線をとりはらう、つまりオクルージョンの欠如は平面をもたらすのですが、いっぽう、交線とはもともと単に交線でもありました。Illustratorやクリスタのように、交点と交点の間の線を削除することで、ふたつの図形をつなげること。線に触れるだけで自動的にそこが線分として削除されるツールの使い心地は、もともと線分たちによって構成された世界で、図形は、線分を取り払うと、隣の図形とつながるという快を感じさせてくれます。

 

ペンで描くときと、消せる道具で描くときでは最終形が同じでも異なる手順がありえて、ただし、だいぶ気まぐれなもののようではあります。JIKKYは消せるのでCG寄りの書き方をする部分もありますが、消しやすいわけでもないので、ペンのニュアンスが強め。

 

アクションと名付け

小斬り、前歩き、大斬り。

 

2月ごろに描いたものです。左上はガードではないのか?と見えますが、小斬りのつもりでした。なんで斬りなのに武器を投げるのか、こういうことはよくあって、コントローラのボタンと紐づいたターミノロジーの面白さだと思っています。