創作日記

大好きなゲームについて色々書きます

【プチコン4】プチコンでパース変形〜スプライト分割法〜

f:id:kabukichi0429:20200510222142j:plain

 

こんばんは、最近あつもりにハマっているかぶきちです。

 

あつもり関連で今日知ったことがあります。

 

Twitterなどで人気のちゃちゃまるの性別を女の子と思い込んでいたのですが、

 

ふと調べてみたら男の子と知って軽くショックを受けています……。

 

 

 

さて、余談はさておき。

 

今回は数ヶ月くらい前にプチコンで作ったパース変形のプログラムについて解説しようと思います。

 

 

パース変形とは

まずはパース変形について解説しようと思います。

 

パース変形とはイラスト編集などでつかわれる画像加工技術です。

 

実際にパース変形を行なった画像を見てみましょう。

 

f:id:kabukichi0429:20200509184600j:plain

 

画像は私がトップ画像として使っているものをibisPaintでパース変形したものです。

 

左が変形前で右が変形後です。

 

正方形の画像を平行四辺形にしたり台形にしたりして変形できます。

 

またこのように変形することで平面画像には現れなかった奥行きが表現できます。

 

 

プチコンでパース変形

なぜプチコンにパース変形を実装するのかというと、3Dゲームを作りやすくなると考えたからです。

 

プチコンで3Dゲームを作るとなるとかなり専門的な知識が必要になりますし、

 

スプライトやBG(今作ではユーザー定義文字)は正方形か長方形なので3Dに見せることが困難です。

 

ですがパース変形があれば3Dゲームのハードルは下がると考えました。

 

こちらの画像をご覧ください。

 

f:id:kabukichi0429:20200509223647j:plain

 

パース変形させたスプライトのみで立方体を描画してみました。3Dに見えますよね?

 

このようにパース変形だけで3Dが表現できます。

 

もちろんパース変形に似たものとしてLMATRIXがあるのですがレイヤー単位なので数に限りがあり、大量に変形させることができません。

 

大量の3Dキャラクターを描画させたいのならやはり別の命令が必要です。

 

 

そこでSPCSETとSPCPERTHという自作命令を紹介します。

 

 

パース変形プログラムの考え

パース変形をどのように実装するかというと今回の副題にもついている「スプライト分割法」を使おうと思います。

 

どんな考えかというと名前の通りで、スプライトをドット単位で分割し無理やりパース変形のように見せてしまおうという話です。

 

わかりづらいと思いますので早速自作命令の解説を見てみましょう。

 

 

自作命令の解説

f:id:kabukichi0429:20200509225212j:plain

こちらがSPCSETです。(サンプルプログラムの公開キーは後述)

 

パース変形するスプライトを定義する命令です。

 

分割したスプライトの一つ一つをセルと呼びます。ちなみにSPCSETのCはCELLの頭文字です。

 

 

SPCSET I,C,TX,TY,U,V,W,H

I=管理番号

C=セルのドット数(2マス単位や4マス単位で分割してスプライト数を減らし負荷を軽減することができます)

TX,TY=倍率

U,V=参照する画像のグラフィックページ上の座標

W,H=定義するスプライトの大きさ

 

 

この命令でパース変形するスプライトを定義した後、SPCPERTHを実行します。

 

f:id:kabukichi0429:20200509230115j:plain

 

SPCPERTHは実際にパース変形する、核となる命令です。

 

 

SPCPERTH I,X1,Y1,X2,Y2,X3,Y3,X4,Y4

I=管理番号

X1,Y1,X2,Y2……=頂点座標 左上が(X1,Y1)で以下右上、左下、右下

 

FX,FYは1マス単位の大きさを表してます。

MX,MYは各セルの倍率です。

 

 

 

使い方としてはSPSETのようにSPCSETを実行。ループの中でSPOFSのようにSPCPERTHを実行すると覚えてもらえれば結構です!

 

 

反省点と実装例

以上、自作命令の解説を見ていただきましたがこのプログラムには重大な欠陥があります。

 

それは使用するスプライト数が多すぎる、ということです。

 

実際に実行してみると16×16のいちごを表示させた場合、使用するスプライト数は256。

 

f:id:kabukichi0429:20200509231826j:plain

実行画面

一度に定義できるスプライトは4096までなので単純計算で16体までしか出せません。(4095番はグラフィック用に使えないから実質15体では?というツッコミはなしで!)

 

 

なので右側の軽量化パース変形も作りましたが解説はまたの機会に。(実はまだ完成してません……)

 

 

 

また別の問題として隙間が空いてしまう問題もあります。

 

f:id:kabukichi0429:20200509232038j:plain

実行画面

かなり隙間が空いていますね。

 

今のところねじると隙間が出現することはわかっていますがまだ対策はわかりません。

 

 

 

この二つの問題のため実際にこれらを用いて3Dゲームとして完成させるのは難しいと思います。

 

が、全くもって使えないという訳ではないと思います。

 

たとえばタイトルロゴをすこしだけかっこよくするのに使えます。

 

f:id:kabukichi0429:20200509232307j:plain

パース変形使用例

プチコン4のロゴをすこしだけ変形させてみました。なんだかBack to the Futureみたいですね笑

 

 

まとめ

一本の3Dゲームとして作りきるのは難しいがロゴの演出としては使える!……かも

 

パース変形で素敵なプチコンライフを!それでは〜

  

 


今回のサンプルプログラム

ファイル名:KAB_PERTHCELL

公開キー:4KAMV8334