寡作家ながら一応voxelartを暇なときにやっておりまして、この半年間で色々なアイデアを試していたので解説も兼ねて紹介します。
23/06/18追記:画像および動画ファイルを外部サイト参照ではなくウェブサイトでホストする形にしたので読み込みが重くなりましたがご容赦ください
低解像度出力(ピクセル感)
出力する際の解像度を下げてピクセルアートっぽくする手法のテストです。
Render->Sample->Sample->Anti-Aliasing
を切るとぼやけずにジャギーが残るので荒削り感が出ます。
さすがに自動化された荒削りなのでピクセルアートではなく「それっぽい」だけです。
これを後日改めて手動でAsepriteで修正、ついでに色数も16色に制限してみた
MagicaVoxel上のパレット色数を制限してもレンダリングでは当然その範囲の外の色が描画されるので、手動で修正する際の色の絞り方は完全にセンスというか難しかった
ステレオグラム
この頃ピクセルアートを見る機会が多く、パターンを構築して広い画面を作っている作品を見かけ、マジカルアイみたいだな~と思ったところからステレオグラムを取り入れられないかなと考えた。が、どうせ仮想3D空間でやるならパターンじゃなくてもいいなと思い(というかシングルイメージステレオグラムの作り方がよく分からなかった)、単純で一番簡単な「同一の対象を左右にズレた視点から撮影した二枚で立体視をする」手法で、ついでだしアニメーションで、ということで出来たのがこれ
見方については、私が交差法がド下手なので平行法でしか確認していませんが、割といい感じに立体に見えるんじゃないかと。これらの画像ペアの視点座標については、当然高さやカメラ角度は変えてはいけないので、
Camera->dH
のバー(Horizontal Movement Step)をスライドしていい感じにしています。
Minecraftで制作した機構再現のリメイク
先程の立体視のモデルもMinecraftのブロック、モデルをそのまま使っていますが、元々レッドストーン回路が好きなのもあって、自作した回路や機構を再現する取り組みを昔やったことがありました。
実はこの頃のMagicaVoxelにはアニメーション機能がなく、1コマ毎にモデルを個別に保存して、手動で全てのモデルを同一の視点からレンダリングしてAviUtlで並べてアニメーションを作っていました。
Minecraftの時間単位はティック(tick)ですが、レッドストーン回路は基本的に1RStick=2tickとなるRStick(レッドストーンティック)が最小単位です。ただ厄介なのが、たとえばピストンの伸び縮みなどの描画自体はRStickの単位と関係がなくフレームレート依存で、というかむしろピストンは信号が入力されてから伸び切るまでが1.5RStickなので、もうこの時点でRStickという概念は手放さなければならない。
ということでとりあえずMagicaVoxel内のアニメーションフレーム1枚を1tickと定め、ピストンが伸び切るまでの1.5RStick=3tickは3フレームで表現することにしましたが、Minecraftのテクスチャの一辺が16pxであることを考慮してゲームでの1ブロックをMagicaVoxelでは8×8×8ブロックで表現することに(もちろんガワだけ)していたので、3と8が互いに素なので等速直線運動にはできない。
結局無難に、かつ伸びてる勢いも多少表現できるかな~と思い、3フレームで8ブロックを移動させる際の内訳は1フレーム目から数えて3, 3, 2ブロックにしました。
ちなみに再現した機構はJava Editionにて制作したもので、このエディションにはMinecraftの他のエディションと異なり「ピストンの引き剥がれ」という裏技じみた特有の挙動があります。自作したこの機構もそれを存分に利用しており(というか昔はJava Editionしか存在していなかった(≒Java Editionという名称自体がレトロニム)ので引き剥がれを利用するのは一般的だった)、細かい仕様を言えばこの引き剥がれが発生する際のピストンの信号入力から伸び切るまでの時間が本来の1.5RStickではなく1RStickなので、そこは律儀にMagicaVoxel内で2フレームで伸ばし切っています。このときの移動は無難に4ブロック+4ブロック
んでリメイクしたのがこれです。
元々、線対称に2つ設置すると横幅2ブロックにできる隠し階段というコンセプトなので、そこが分かりやすいようにすることと、某モブの動きを取り入れて実際の動作にリアリティを持たせることを意識しました。ただいかんせん機構がデカくて映し方には苦労した(というかまだ微妙に納得が行っていない)(見えていない部分も大量にアニメーションしている)のと、ゲーム内での動作の完全な再現なので音も付けられたら良かったな~というのを未練に感じています。面倒なのでやりたくないけど……
Camera->Roll
をいじってみる
ビスマスの骸晶が好きで写真をたまに見たりするんですが、よく考えたら直線的だしボクセル再現いけるなと。それで一通り作ったあとに、見せ方に納得が行かず、色々マテリアルやレンダリング設定を見直していたんですが、多分角度だなと思い当たってRollをいじったところしっくり来ました。
ピッチとヨーとロールの違いについてはここでは割愛しますが、要は一見したときのボクセル感がちょっと無い、画面の垂直方向とボクセルの垂直方向が一致しないという見せ方がハマりました。このアイデアはかなり好きです。実際このあとにもいくつかそういった手法を応用したものがでてきます。
ナノブロック模倣
気まぐれでポケモンのナノブロックを買ってきて、組み終わったあとに再現するかーつって再現しただけです。写真自体はスマホの望遠カメラで撮ったのですが、モニタではMagicaVoxel内で平行投影のカメラにしてしまったので見た目も完全再現とはならなかった(右耳の隠れ方など)
ちなみに、実際のナノブロックの一辺の比は突起も含めて4:4:5とかで、MagicaVoxelで
Render->Display->Scale
で設定した値はRender->Display->Shape->Lego
の突起には影響はしますが、そもそも突起自体の長さと1ブロック分の高さの比が固定で、1ブロック分の高さの1/4よりも突起は短いので、この時点で再現するにはある程度妥協が必須なんだなということがわかります。いちおう高さだけちょっと変えるためにScale->Z=0.90
にしています(X, Y
はともに1.00
)
ちなみに今ブラッキーのナノブロックを買ったまま放置しているので、作ったら同様にボクセルで再現して映し方のリベンジをしたい
等角投影による錯覚
雪の結晶
Camera->Roll
をいじっていたあたりから「もっと面白いことできないかな~」と思い、最終的に思い付いたのがこれです。といってもRollのアイデアはトッピングみたいなもので、本質的には等角投影(Isometric Camera)を活用してヘックスタイル的な一枚絵を出力する狙いがありました。
上の画像と同一のモデルを平たい角度からの平行投影で見るとこのようになっています。
これら8つのオブジェクトは全て合同ですが向きがそれぞれ異なっており、等角投影にして六角形に見せた上で、構成するブロックを
Render->Matter->Glass
などにすることで雪の結晶っぽく見せています。デザイン自体にリアルな雪の結晶感はあんまりないんですが……。ちなみに画像の背景はRender->Display->Grid
内で、Space=1, Width=0.01
の細かいグリッドを敷いています。
等角投影のトリックについては正直百聞は一見に如かずなので、.voxデータを配布します。以下のリンクからダウンロードできます(29KB)。Cameraスロットの0番目にRoll込みの等角投影の視点が設定されているので容易に確認ができると思います。
snowflake_01.vox
で、ちょっとやっぱりデザインがそれっぽくないよな~ということで作り直したのがこれです
デザインを洗練したのと、立体的に拡散していたブロックを薄い一面に見えるように集約させました。これによって回転させたときにも雪の結晶の形を保ってくれるようになりました。gif画像は、Turntableでアニメーション出力したものをAviUtl上で並べ、ベジェ軌道Tスクリプトを用いて緩急を付けたアニメーションにしています(詳細はggって)
ハチの巣
ヘックスタイルといえばハニカム構造だろ! と思って作り始めたけどやる気が途中で尽きてしまいました。特殊な視点にしたときでも一定の並べ方をしたブロックによって描かれる線が途切れて見えないようにEmitマテリアルを活用する手法は自分でも気に入っています。
角度によって変化する影絵
太陽光はモデルに対して影を平行に投影するので、少なくとも2パターンなら簡単に作れるな~と思って東西でやってみました。西の漢字がちょっとワドルディの顔みたいになってしまってかわいい。厳密な平行投影の技法以外に工夫を凝らせば東西南北も作れると思うのですが、これもやる気がなくなっちゃったので途中で断念
極端にScaleをいじる
これは多分ありがちな発想かな~と思います。ブースターのナノブロックを再現して
Render->Display->Scale
をいじったときに、この値で極端な遊び方ができるモデルもありそうだな~と思ってメモ帳と鉛筆を作りました。高さ方向をそれ以外の1/5にまで縮めて、紙が重なっているのを効率的に表現してます(よく見ると白と灰色の縞模様になっている)。模様はモールス符号です。
少ないレンダリング進捗状態で出力
Samples Per Pixel
の値の最小値は64ですが、ここではレンダリングを一時停止するボタンからレンダリングを敢えて進捗させずに出力させています。
要はレンダリングを進捗させないことによって画面の中に描画が追い付いていない箇所を作り、フィルムノイズのように演出するのが狙いです。ブログ冒頭の解像度を下げる試みにも共通しますが、美麗な描画ではリアリティが出過ぎるモデルやオブジェクトをいい感じの解像度、荒さで出力することでより魅力を引き出せるのかな~となんとなく思っています。あとはこういう病んでる系、不穏系、などの雰囲気を出すには効果的かなと。
記事執筆時点でも過去のモデルを引っ張り出してきて一枚作ってみました。低解像度で出力したあと、Asepriteで一般的な画像サイズまで等倍しています(これは2等倍)
こういうレンダリング系のアイデアのいいところは、試すときにいくらでも過去のモデルを活用できるところですね。最近は全然新規に作らないのですが、昔いろいろやっていたお陰でモデル自体には困らないので、有効活用してる感があってよい
そのままスクショしただけですが、こんな感じにすると第三の壁の向こうからジト目で見られている感じもあって良いですね。レンダリング進捗を止めてから色々パラメータをいじると、いじる順番によって画面のザラ付き具合が多様に変化するので、興味があったら遊んでみてください。
おわり