フリー素材の16×16[ドット]アイコン(ドット絵)を3D化して、レイトレーシングしてみます。
まずはモデリング。
読み込むドット絵(アイコンデータ等)を16×16[ドット]に固定します。この場合でも、最大ドット数は256ドットですので、最大で256個のオブジェクトを生成することになります。もし、32×32[ドット]なら1,024個のオブジェクト……、と、どんどん増えて行きますので、適切なところで歯止めをかけておきます。
アイコンデータは、".ico"、".gif"、".png"等、色々な形式がありますが、Xi-TRACEでは、読み込みできない形式ですので、".bmp"または".xpic"に変換してセーブしておくものとします。
ドット絵データを読み込み、各ドットを1つの立方体に置き換えることで、立体化して行きます。ドットの色をそのまま、立方体の色に設定すれば、元のドット絵のままの3Dデータが完成します。
以下、ドット絵データを検索してリストアップする部分の抜粋です。
// ドット絵データファイルを検索
macro fname;
var n_dotp;
foreach fname, file_in_CWD, sort_name, BMP, xPIC
{
var cmp;
strcmp cmp=$(fname),$(file)"_",ics_left;
if (cmp)
{
continue;
}
static : macro fdot#(n_dotp)=$(fname);
n_dotp=n_dotp + 1;
}
foreach命令で、Xi-TRACEデータの置かれたディレクトリから(file_in_CWD)、BMPファイルとxPICファイルを検索し、1つづつマクロfnameに代入しながら、ブロック内を実行して行きます。
ディレクトリ内に存在する、"dot_pict_"で始まらないBMPおよびxPICデータを除外するためのチェックが入っています。条件に一致したファイルは、fdotと言う名前の配列マクロにリストアップして、後で使います。
ドット絵は2Dなので、少しづつドットをずらしたアイコンを作ってアニメーションさせることはできますが、今回は、3D化したので、別な方法で動かしてみます。
回転させたり、移動させたり、いろんな角度から眺められるのが、3D CGの良いところですから。
それに、色々なドット絵を表示してみたいので、あるドット絵から、別なドット絵にじわっと変化するようにモーフィングもしてみましょう。
まず、準備として、ドット絵データを二次元配列に読み込みます。と、言っても、Xi-TRACEには、二次元配列なんて機能は無いのですけどね。「チェスボードを描画する」の時に、さらっと解説したので、そちらをご覧ください。
指定したドット絵データを配列に取り込む手続きの実行:
load_pix px0, $(fdot#(ofst1 + idx)), 0,0;
load_pix px1, $(fdot#(ofst2 + idx)), 0,0;
2つのドット絵データをpx0およびpx1で始まる二次元配列に取り込みます。
それをブレンドする手続き:
blend_pix px2, px0,px1, fpb;
二次元配列px0、px1に読み込んだドット絵データを、ブレンド率fpb:(1−fpb)でブレンド(混ぜ合わせる)して、新たに配列px2に代入します。0≦fpb≦1です。
最後に、モーフィングするデータを生成する手続き:
gen_3d_pix px2, 0,DH*CL,(1.0 + NFACE/10)*DW*CL, fpb;
ブレンドしたドット絵データpx2から、3Dデータを生成します。この時、各ドットの透明度に応じて、ドットに対応する立方体のサイズを変更させるため、こちらの手続きにもブレンド率fpbを渡しています。
具体的な処理内容については、各手続きの定義をご覧ください。
最後に、肝心なドット絵データが必要です。
今回は、フリー素材の中から、16×16[ドット]のデータ(アイコンデータなど)を探して、使わせてもらうことにしました。作者がお世話になったのは以下のサイトです。
「使用条件」「禁止事項」などの注意点をご覧になって、納得できたら、データをダウンロードします。
ファイルの形式は、".gif"や".png"などでした。これをMicrosoftの「ペイント」ソフトウェアなどで開き、BMP形式でセーブします。
この時、ファイル名の先頭が"dot_pict_"となるようなファイル名を付けてください。頭が"dot_pict_"で始まるファイルだけがリストアップの対象になっていますので、別なファイル名だと、検索に引っかかりません。
後ほどリンクするレイトレーシング用のデータでは、ドット絵データを16×16[ドット]、かつ、座標(0,0)の色を背景色(透明)として固定してあります。背景色のドットには、立方体を配置しませんので、「透明」なドットとして扱われます。座標(0,0)に背景色があるものと言う前提で処理していますので、もし、(0,0)に背景色以外のドットが存在すると、予期しないドットが透明になってしまいます。(0,0)位置に背景色が配置されたドット絵データを選んで使ってください。
16×16[ドット]と言う限られたスペースであるにもかかわらず、なかなか手の込んだ、細かなドット絵が沢山あります。だからと言って、むやみにたくさんのデータを準備してしまうと、その分、計算するフレーム数が増加して、レイトレーシングにかかる時間が爆発しますので、ご注意ください。
完成したデータをリンクしておきます。
1) | Xi-TRACEデータ | dot_pict.xitr |
2) | マッピングデータ(背景色のみ) | dot_pict.xpic |
3) | マッピングデータ(フリー素材) |
作者は、ピクセルガローのフリー素材を使わせていただきました。使用条件、禁止事項など、ピクセルガローのHPでご確認ください。ピクセルガローのデータは再配布が禁止・直接リンクも禁止されていますので、本ページからリンクできません。
本文中の手順に従って、ドット絵データを準備してからレイトレーシングしてください。
今回は、フリー素材としてピクセルガロー様の16×16[ドット]サイズの「ミニアイコン」から、いくつか使わせていただきました。
たった16×16[ドット]の限られたスペースなのに、特徴をとらえた小さなアイコンが素敵だと思いました。今回の動画作成には使わなかったのですが、「野菜ミニアイコン」の中の、キャベツとか白菜とか、葉脈までなまめかしくて、ちょっとぞくっとします。
ピクセルガロー様、ありがとうございました。