こんばんは。
電波時計が超ズレたぽりです。
・ウディタはSFCレベルの3Dならできる(キリッ
ちょっと作ってみました。
SFCRPGの擬似3Dでかなり特徴的だと思われるFF6の飛空艇デモです。
飛空艇っぽいの
※天樹さん製作の「SQRT(平方根)コモンと固定小数点演算コモン」をオリジナルで改造して使っています。過去のウディタ3Dからかなり演算精度上がりました本当にありがとうございます。
擬似3Dとは言っても、演算そのものはSFCで用いられたもの、あるいは一般的な3Dソフトで用いられているものとそう大差はないはずです。(まあ、実際問題SFCなどのハードウェア・ソフトウェアがどんなアルゴリズムで演算してるかぽりは知らないのであくまで推測での話になってしまいますが。)
もちろん、処理速度の制約やウディタの仕様上妥協した部分は多々あるので、それらと同列に比べられるほどの出来、というワケはないのでしょうけど。
この技術が実用に耐えうるかどうかなどの問題は今のところ山積みですが、とりあえず今は素直に
「ウディタのポテンシャルすげー」と驚いておくといいんじゃないでしょうか。ぽりだってとっても驚いた。
![拍手](/admin/img/clap_button/001.gif)
PR
こんばんは。
Minecraftすごく面白そうでやってみたいけどやったら最後、全ての時間が消し飛ぶ気がしてまだ手を出していないぽりです。サバイバルってオトコのコだよなあ
3.ウディタ小ネタ 圧縮テクニック
今回の内容は、前回言っていたとおり、処理速度と戦うための節約術の話です。
つまりこの話は必死に学習したところでFPSがちょっと上がるだけの話。何か新しい事ができるわけでもありません。この話がよく分からなかったとしても何も心配する必要はないのです。
ということで大きく予防線を張ってから小ネタの話。
例えば、こんなコモンイベントを作るとします。
1:cself[0]に入力したフレーム数だけウエイトをする
2:ただし、ウエイト中に決定キーを押したらそこで中断
この処理自体はすごく簡単なものですね。
■回数付きループ [ このコモンEvセルフ0 ]回
|■ウェイト:1 フレーム
|■キー入力:このコモンEvセルフ変数10 / 決定(10)
|■条件分岐(変数): 【1】このコモンEvセルフ10が10と同じ
|-◇分岐: 【1】 [ このコモンEvセルフ10が10と同じ ]の場合↓
||■ループ中断
||■
|◇分岐終了◇
|■
◇ループここまで◇◇
■ |
さて、それじゃあこれを発展したこんな処理はどうやって作ればいいでしょうか。
3:どうせだからキャンセルキー・サブキーでも中断できるようにしよう
4:どうせだから[決定] [キャンセル] [サブ] [決定/キャンセル] [決定/サブ] [キャンセル/サブ] [決定/キャンセル/サブ]で中断方法は7択できるようにしよう
いきなり難易度が上がりましたね。まず何も考えずにこの処理を組むとこんな感じかな?
※cself[1]に中断させるキー選択肢[決定(1)][キャンセル(2)][サブ(4)][決定/キャンセル(3)][決定/サブ(5)][キャンセル/サブ(6)][決定/キャンセル/サブ(7)]です。なぜこんな謎の順番なのかは後々。
■条件分岐(変数): 【1】このコモンEvセルフ1<対応キー>が1と同じ 【2】このコモンEvセルフ1<対応キー>が2と同じ 【3】このコモンEvセルフ1<対応キー>が3と同じ
-◇分岐: 【1】 [ このコモンEvセルフ1<対応キー>が1と同じ ]の場合↓
|■変数操作: このコモンEvセルフ11<決定キー> = 1 + 0
|■
-◇分岐: 【2】 [ このコモンEvセルフ1<対応キー>が2と同じ ]の場合↓
|■変数操作: このコモンEvセルフ12<キャンセルキー> = 1 + 0
|■
-◇分岐: 【3】 [ このコモンEvセルフ1<対応キー>が3と同じ ]の場合↓
|■変数操作: このコモンEvセルフ11<決定キー> = 1 + 0
|■変数操作: このコモンEvセルフ12<キャンセルキー> = 1 + 0
|■
◇分岐終了◇
■条件分岐(変数): 【1】このコモンEvセルフ1<対応キー>が4と同じ 【2】このコモンEvセルフ1<対応キー>が5と同じ 【3】このコモンEvセルフ1<対応キー>が6と同じ
-◇分岐: 【1】 [ このコモンEvセルフ1<対応キー>が4と同じ ]の場合↓
|■変数操作: このコモンEvセルフ13<サブキー> = 1 + 0
|■
-◇分岐: 【2】 [ このコモンEvセルフ1<対応キー>が5と同じ ]の場合↓
|■変数操作: このコモンEvセルフ11<決定キー> = 1 + 0
|■変数操作: このコモンEvセルフ13<サブキー> = 1 + 0
|■
-◇分岐: 【3】 [ このコモンEvセルフ1<対応キー>が6と同じ ]の場合↓
|■変数操作: このコモンEvセルフ12<キャンセルキー> = 1 + 0
|■変数操作: このコモンEvセルフ13<サブキー> = 1 + 0
|■
◇分岐終了◇
■条件分岐(変数): 【1】このコモンEvセルフ1<対応キー>が7と同じ
-◇分岐: 【1】 [ このコモンEvセルフ1<対応キー>が7と同じ ]の場合↓
|■変数操作: このコモンEvセルフ11<決定キー> = 1 + 0
|■変数操作: このコモンEvセルフ12<キャンセルキー> = 1 + 0
|■変数操作: このコモンEvセルフ13<サブキー> = 1 + 0
|■
◇分岐終了◇
■回数付きループ [ このコモンEvセルフ0<WaitTime> ]回
|■ウェイト:1 フレーム
|■キー入力:このコモンEvセルフ変数10 / 決定(10) キャンセル(11) サブキー(12)
|■条件分岐(変数): 【1】このコモンEvセルフ10が10と同じ 【2】このコモンEvセルフ10が11と同じ 【3】このコモンEvセルフ10が12と同じ
|-◇分岐: 【1】 [ このコモンEvセルフ10が10と同じ ]の場合↓
||■条件分岐(変数): 【1】このコモンEvセルフ11<決定キー>が1と同じ
||-◇分岐: 【1】 [ このコモンEvセルフ11<決定キー>が1と同じ ]の場合↓
|||■ループ中断
|||■
||◇分岐終了◇
||■
|-◇分岐: 【2】 [ このコモンEvセルフ10が11と同じ ]の場合↓
||■条件分岐(変数): 【1】このコモンEvセルフ12<キャンセルキー>が1と同じ
||-◇分岐: 【1】 [ このコモンEvセルフ12<キャンセルキー>が1と同じ ]の場合↓
|||■ループ中断
|||■
||◇分岐終了◇
||■
|-◇分岐: 【3】 [ このコモンEvセルフ10が12と同じ ]の場合↓
||■条件分岐(変数): 【1】このコモンEvセルフ13<サブキー>が1と同じ
||-◇分岐: 【1】 [ このコモンEvセルフ13<サブキー>が1と同じ ]の場合↓
|||■ループ中断
|||■
||◇分岐終了◇
||■
|◇分岐終了◇
|■
◇ループここまで◇◇
■ |
わーこれはなげー
これでちゃんと動くので、これを完成としちゃっても別に問題はありません。特に
ウエイト処理を1フレームに複数入れる状況は理論上ありえませんので、別にここが長くても何ら影響はありません。ですが勉強のためにこの処理をとにかく短く書いてみましょう。
処理をとにかく短くするときに考えるべき部分は以下のとおり。
1.できるだけ条件分岐を作らない
2.できるだけ1つの計算・分岐に収まらないか考える
3.変数領域を節約しようとはあまり考えない(ちょっとしたことでも保存しておくと後々計算せずに呼び出すことがあるかもしれない)
4.処理を減らすアルゴリズムを考えるときに「ビット積」は地味に有用な場面が多い
さてこんな事を考えながら
今のぽりが思いつく理論最短のキーウエイト処理を書いてみました。↑と全く同じ動きをするはずです。
※cself[1]に中断させるキー選択肢[決定(1)][キャンセル(2)][サブ(4)][決定/キャンセル(3)][決定/サブ(5)][キャンセル/サブ(6)][決定/キャンセル/サブ(7)]です。なぜこんな謎の順番なのかはビット積の処理のため。
■変数操作: このコモンEvセルフ12 = このコモンEvセルフ1<対応キー> 論理積 1
■変数操作: このコモンEvセルフ13 = このコモンEvセルフ1<対応キー> 論理積 2
■変数操作: このコモンEvセルフ14 = このコモンEvセルフ1<対応キー> 論理積 4
■回数付きループ [ このコモンEvセルフ0<WaitTime> ]回
|■ウェイト:1 フレーム
|■キー入力:このコモンEvセルフ変数10 / 決定(10) キャンセル(11) サブキー(12)
|■変数操作: このコモンEvセルフ10 += 1600002 + 0
|■変数操作: このコモンEvセルフ10 = V[このコモンEvセルフ10] + 0
|■条件分岐(変数): 【1】このコモンEvセルフ10が1以上
|-◇分岐: 【1】 [ このコモンEvセルフ10が1以上 ]の場合↓
||■ループ中断
||■
|◇分岐終了◇
|■
◇ループここまで◇◇
■ |
★簡単な解説★
6行目の「キー入力」処理によって、cself[10]には
「決定キーが押されていたら10、キャンセルキーなら11、サブキーなら12、どれも押していなかったら0」が入ります。
その後2行の計算によって、cself[10]には
「決定キーが押されていたらcself[12]の中身が、キャンセルキーならcself[13]の中身、サブキーならcself[14]の中身、どれも押していなかったらcself[2]の中身」が入ってます。
cself[2]は初めから何も処理してませんから必ず0。それ以外の3つには、1~3行目のビット積処理で「0または1,2,4」のどちらかが入っているので「指定した変数の中身が1以上か」を調べることによって分岐できます。
ビット積に関しては
詳しい話を過去にしたのでこちらを参照。
わーめちゃくちゃ減ったー
基本的に
条件分岐1個にかかる処理は、変数操作2~5個分とされています。この例の処理だと、最初のウエイトに入るまでの7つの条件分岐が3つのビット積に収まったのが大きく処理時間削減に役立ってます。
処理時間を減らすアルゴリズムの考え方はいろいろありますが、ぽりがよく使う考え方を紹介。
1.できるだけ条件分岐を作らない
「変数Xが0のとき変数YにAを代入、変数Xが1のとき変数YにBを代入」という処理、フラグ関連処理でよく使いますね。この処理に条件分岐は全くいりません。
Y=A+(B-A)*XでOK。
2.できるだけ1つの計算に収まらないか考える
例えば
「変数Xが10以上15以下の時に分岐する」という処理、まあよくあるでしょう。これを実装するためには分岐を2つ使うのがベターですが、ドモルガンの法則により、この分岐は
「変数Xが9以下でも16以上でもない時に分岐する」と書き換えることができます。これなら
■条件分岐(変数): 【1】このコモンEvセルフ10が9以下 【2】このコモンEvセルフ10が16以上
-◇分岐: 【1】 [ このコモンEvセルフ10が9以下 ]の場合↓
|■
-◇分岐: 【2】 [ このコモンEvセルフ10が16以上 ]の場合↓
|■
-◇上記以外
|▼ ここに処理を書く
|■
◇分岐終了◇
■ |
で条件分岐1つでOK。ウディタの条件分岐は1分岐が2つよりも2分岐が1つのほうがわずかに早くなるようです(ネタ元:
だめだめはきだめ)
主にこんな感じ。改めて言いますが、
覚えたからって何か見た目が変わるわけじゃありません。完全な自己満足の世界です。でもある程度の製作ができるようになったら、自己満足に挑戦してみるのも趣味製作の醍醐味じゃあないかなー、って思うわけです。
![拍手](/admin/img/clap_button/001.gif)
こんばんは。
メモ帳見たらただ一言「border」とだけ書いてあって何が何だかわからないぽりです。
前回のつづき。
とりあえず、ひととおりウディフェスの作品はプレイしてみました。今回はまとめやイラストは参加できなかったけど記念の画像を。
よっしゃウディフェス作品ひととおり遊んでみたので記念画像をば 今回はほとんどなにもできなくてごめんね (Twitterより)
(2MBぐらいあるでっかい画像なので注意してね)
トータルで1950弱のSSが使われてます。
もちろんダブりありで、だけどね。
また、サムネイルの時点で若干バレバレですが、10%ぐらいに画像を縮小するともう1つの小ネタが見えてきます。
下は実際に10%まで縮小した画像
実際に縮小してみた
モザイクアートは最近では結構簡単に配置を指定してくれるソフトとかあってかがくのちからってすげーと思わせてくれます。とは言っても決して簡単な道のりではなかったけどね!
さて本題。MINIUCHI秘話2。
隠れて活動してた最中とその結果のおはなし。
![拍手](/admin/img/clap_button/001.gif)
こんばんは。
書きたいネタが多すぎるとかえって何も書けないぽりです。
1.なにかできること
まあいろいろありました。というか現在進行形ですけど。とりあえず大丈夫かどうかはともかく、元気ではあります。
この一連で自分に何かできるのか、ということは考えてみましたが、どうやら「今まで通りゲームを作りつづける」ぐらいしかないという結論に。弱いね。こういう時って。
2.MINIUCHI(みにうち)秘話
ウディフェスは今まで非参加だと言い続けてましたが、実はこっそり
「ロウガン卿」という名義で参加していました。裏名義で参加した理由や、製作中の裏話をこれから数回に分けて書いていきたいなー、と思います。
![拍手](/admin/img/clap_button/001.gif)
こんばんは。ちょっと所用で今日一日の予定がわからないので、今のうちに今日のネタを。
(クリックで原寸大)
WOLFさんとこが今日で12周年ということでTwitter上でお祝いしました。今までに公開されたキャラからできるだけまんべんなくぐるっと。(1キャラほど公式ではまだ未登場のキャラがいますが)
ゲーム製作3年目、ブロガー6年目のぽりですが、12周年の頃にはいったいどうなっているのかなー、って描きながら考えてました。
何も変わってないっていう可能性が一番濃厚ですけど。
<おまけ>
上画像で、今ヘレンさん(シルフドラグーン・ゼロ)がいる場所は、元々別のキャラを入れる予定で描いてました。
![ColorSilfade2nd.png](https://blog.cnobi.jp/v1/blog/user/ea9f198b2ccf32e41727bdc689e419ea/1293137905?w=416&h=336)
描き終わって最後の編集(髪の色グラデーション)までやった後に
「やっべ今年の作品なのにシルドラ入れてねえ!」ということに気がついて最初から描きなおしました。
ゲーム製作でも「完成したものをボツ」なんてザラにあるから何も考えずに作り直しましたが、
改めて考えるととんでもないことだよなあ、と思います。![拍手](/admin/img/clap_button/001.gif)