dot_pict.jpg


ドット絵を3D化する

 フリー素材の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ドットのデータ(アイコンデータなど)を探して、使わせてもらうことにしました。作者がお世話になったのは以下のサイトです。

  PixelGaro_banner_3.png

 「使用条件」「禁止事項」などの注意点をご覧になって、納得できたら、データをダウンロードします。
 ファイルの形式は、".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) マッピングデータ(フリー素材) PixelGaro_banner_3.png

 作者は、ピクセルガローのフリー素材を使わせていただきました。使用条件、禁止事項など、ピクセルガローのHPでご確認ください。ピクセルガローのデータは再配布が禁止・直接リンクも禁止されていますので、本ページからリンクできません。
 本文中の手順に従って、ドット絵データを準備してからレイトレーシングしてください。


謝辞

 今回は、フリー素材としてピクセルガロー様の16×16ドットサイズの「ミニアイコン」から、いくつか使わせていただきました。

 たった16×16ドットの限られたスペースなのに、特徴をとらえた小さなアイコンが素敵だと思いました。今回の動画作成には使わなかったのですが、「野菜ミニアイコン」の中の、キャベツとか白菜とか、葉脈までなまめかしくて、ちょっとぞくっとします。

 ピクセルガロー様、ありがとうございました。


home

download

gallery