カラーAAについて-B面
はじめに
こんにちは、インコマンです。今回は、前回の記事「カラーAAについて-A面」の続きになります。未読の方は、こちらからどうぞ。
A面があるならB面もあるのが常です。というわけで、前回からさらにステップアップした内容……というか、自分の研究内容を説明できればと思っています。
どうぞよろしくお願い致します。
A面から時を経て
記事「A面」を公開してから年を跨ぎ、およそ3週間が経過しました。その間何があったかと言えば、そう、第十七回紅白AA合戦が開催され、作品投稿期間が終了しました。
私はその第十七回紅白AA合戦の一枚絵部門で「富士桜」を投稿したわけですが、
▲ 「富士桜」24行34万byteのカラーコード+ユニコードAA
もうAAと言っても信じてくれない方もいるんじゃないかとか、従来のAAを愛する方ももちろんいるでしょうからこういった形態の作品は受け入れられないんじゃないかとか、「リンク先のお前のスレ表示させようとすると重いんだけど??」みたいな罵倒が飛んでくるんじゃないかとか様々な不安もあったわけですが、それでも既に何人かの方からは感想も頂いており、苦労して作った甲斐があったなあとしみじみしているところです。
それでこの「富士桜」なんですが、こちらは昨年――つまり2020年5月の時点での思い付きから始めた研究の集大成ともいえる作品です。
上に説明があるように、カラーコードとユニコードの両方を使ったAAであり、24行という小さいサイズながら34万byteという超容量のAAなのです。
ですが、ここでAAになじみのある方は、そして前回記事「A面」をご覧になった方は「あれ? おかしくないか?」と思うのではないでしょうか。
文字はそれぞれ幅があり、四角形の姿をしている
AAは、文字で作る絵のようなものですが、文字はそれぞれ幅を持ち、描画が行われています。
例えばひらがなの「あ」という文字は、幅15dotであるので、縦16dot×横15dotの領域をこの「あ」という文字で占有します。
次に「い」という文字を並べる場合を考えます。「い」も幅15dotです。
なので、「あ」と「い」を横に並べる場合、縦16dot×横15dot(16dot目~30dot目まで)を「い」の文字が占有するのです。
つまり、AAとはその実、積み木のようなものなのです。文字はそれぞれ固有の長方形ないし正方形の占有領域を持ち、これを組み立てていくのがAA作成の本質です。
では、カラーAAはどうでしょうか。最低1文字から、色を指定できるカラーAAでも、もちろん文字それぞれの占有領域があることには変わりません。つまり、AAという積み木に色を付けるということには変わりありません。
先ほどの例に戻れば、「あ」を赤に、「い」を青に塗る場合、「あ」が占有する16×15dotの空間は赤の空間で、「い」が占有する16×15dotの空間は青の空間である(実際には描画が行われないピクセルは背景色になりますが)ということで、例えば同じ行の上半分は赤、下半分は青というようなことは通常できないわけです。
「富士桜」で用いた新技術
では、拙作「富士桜」に戻ります。
先述の通り、こちらは24行のAAです。24行ということが分かりやすいように、行を区切る線を入れてみます。
行間2dotに、黄色の線を引いてみました。さらに、1行目だけを抽出して見てみましょう。
これだと分かりやすいでしょうか。同じ行中に、同じdot地点で上下に異なる色がある箇所が多数存在することが分かると思います。
先ほどの説明だと、文字はそれぞれ固有の占有する領域があり、従って1行中の同じ地点の上下に異なる彩色を行うことは不可能なはずです。しかし、実際には青やピンク、緑や茶色など、細かく彩色を行えていますよね。
今回の「富士桜」は、端的に言えば、同じ行中、同じ地点で上下に異なる文字を置き、異なる彩色を行うという技術を用いて作られた作品なのです。
「f」と「も」
「富士桜」に使用した技術についての説明ですが、その前に、そこに至るまでの経緯を簡単に説明したいと思います。
先ほどの「文字ごとに固有の占有領域がある」という話ですが、何事も例外というものがあります。そしてそれは、例えば「f」(半角小文字のエフ)や「も」が該当します。
「f」は幅5dotの文字で、しかし以下に示す通り、6dot目まで描画が行われます。
「f」の次の文字はこの6dot目から始まるので、文字によっては描画が重なることもあり得ます。
また、「も」は幅13dotの文字ですが、「f」とは逆に占有する領域から1dot手前に描画が1dot分行われます。
ですから、「も」の手前の文字の最後の1dot分には、その直後の「も」の描画が重なるということです。
これは興味深いことで、AAを構成するパーツである「四角形の積み木」が部分的に「複雑な形の積み木」になるということを意味しています。
ただ、このような一部の例外文字だけを使用して緻密なAAを作れるかと言われれば、実際には難しいです。というのも、例えば「f」にしても「も」にしても使用できる場面は限られていますし、これらの文字であっても固有の占有する領域がある以上、その領域では描画密度が「f」や「も」に引っ張られてしまうからです。
ですがそれでも、「f」や「も」のように「占有幅」と「実描画」の異なる文字で緻密なAAを作りたい、そう考えました。
そこで目を付けたのがUnicodeです。
187個のUnicode
Unicode(ユニコード)とは、端的に言えば世界中の文字を表現できる単一の文字規格です。
元々ASCII文字というのはアメリカが標準化した規格なのですが("A"はAmericanのAです)、各国でそれを元に様々な規格が作られてしまい、国際間で文字をやり取りをする際に、この互換性のなさが問題になったわけです。
それで作られたのがあらゆる文字を単一で表現できる規格、Unicodeなのですが、膨大な文字が表現できるということは、上で例示した「f」や「も」のような占有幅と実描画に差異がある文字も多く含む可能性があるということです。
というわけで、ひとつずつ掲示板に書き込み、ルーペで覗き、その占有幅と実描画を調査し始めたのが2020年の5月のことなのですが、その結果187個の非常に特徴的な文字をピックアップすることに成功しました。
その187個の文字の特徴とは、「占有幅が0dotである」ということです。
つまり、文字として入力しても1dotも進まないけれど、指定の描画を行うことができるということです。
以下が、その187個の0dot文字です。
(※画像だと見辛いという方で、掲示板を見るための専ブラを導入している方はこちらのURLからご覧になっていただくと快適かもしれません)
それぞれの文字の、中央やや右の大きな「Ⅰ」が入力地点となります。だから例えば「͟」と入力すれば、上から16dotの高さに、横方向-2dot~+10dotまで描画が行われるということです。ただ、「͟」の両端の描画はやや薄く、-2dotと+10dotは半透明になる(背景色が混ざる)のですが。
こうして地道な調査でピックアップされた幅0dotの文字たちを駆使し、それをさらに1つずつ彩色してできたのが「富士桜」というわけです。
おわりに
通常のAAが縦方向・横方向の2軸で構成される文字の積み木であるのに対し、
「富士桜」ではさらに「行の中の上下描画」「それぞれの文字の彩色」の2軸を追加する必要があり、
通常のAAと比較するととんでもなく容量(そして作業量も!)の大きなAAとなってしまいました。
そのため、紅白会場に直接貼ると、参加者、閲覧者がスレを読み込む度に超重力を味わうことになると事前検証で判明してしまい、自分の地下スレに投下し、そのリンクを会場に貼ることになってしまいました(会場もシェルター様や自地下スレのある掲示板と同じくぜろちゃんねる系列なので、カラーコードは使用可能で、キャップを使用すれば大容量AAも投下自体は可能でした)。
今後、同様の手法で緻密なAAを作成する場合、軽量化を図ったり、あるいは、カラーコードが使用不可な掲示板向けに彩色抜きの3軸で緻密なAAを作ったりなどの方向性を考えております。
というわけで、記事「B面」は以上になります。本記事への感想はもちろんのこと、紅白に投稿した「富士桜」への感想も絶賛大募集中です。
ではでは。
この記事が気に入ったらサポートをしてみませんか?