2020/01/21(火) [n年前の日記]
#1 [love2d] Love2Dがサポートしてる画像フォーマットについて
調べてみたら、Love2D はそもそも gif をサポートしてなかった…。Love2D 0.10.0 の時点で、対応画像フォーマットを絞っていたらしい。
_0.10.0 (日本語) - LOVE
_0.10.0 - LOVE
道理で、gif をドロップしても「そんなフォーマット知らねえよ」と言われたわけで。
コミュニティの掲示板でも、「gifを表示したいんですけど…」「はあ? あんなクソ画像フォーマット使ってんじゃねえよ。png使え」みたいなやり取りが。
_GIFs in love? - LOVE
もっとも、gifに対応させるライブラリをガリガリと書き上げた方もいらっしゃるようで…。
_pgimeno/gifload: Love2D module to load GIF files, in pure LuaJIT+FFI - Keywords: library gif love2d - NotABug.org: Free code hosting
_gifload, a GIF image loader in pure LuaJIT+FFI - LOVE
また、Love2D から画像を保存する場合は、pngのみに対応、とのことらしい。
_What image files are supported on LOVE? - LOVE
_0.10.0 (日本語) - LOVE
_0.10.0 - LOVE
PNG, JPEG, TGA, および BMP を除くすべてのファイル形式 (非圧縮テクスチャ) への対応を廃止。つまり、使えるのは、この4種類。gif には未対応。
道理で、gif をドロップしても「そんなフォーマット知らねえよ」と言われたわけで。
コミュニティの掲示板でも、「gifを表示したいんですけど…」「はあ? あんなクソ画像フォーマット使ってんじゃねえよ。png使え」みたいなやり取りが。
_GIFs in love? - LOVE
もっとも、gifに対応させるライブラリをガリガリと書き上げた方もいらっしゃるようで…。
_pgimeno/gifload: Love2D module to load GIF files, in pure LuaJIT+FFI - Keywords: library gif love2d - NotABug.org: Free code hosting
_gifload, a GIF image loader in pure LuaJIT+FFI - LOVE
また、Love2D から画像を保存する場合は、pngのみに対応、とのことらしい。
_What image files are supported on LOVE? - LOVE
◎ 昨日のソースを修正。 :
画像ファイルのパスを渡すと Image で返す関数、にしてみた。前述の、4種類の画像フォーマットに対応してみたつもり。動作確認環境は、Windows10 x64 1909 + Love2D 11.3。
拡張子の判別は、渡したファイルパスの最後の4文字だけをチェックしている手抜き処理なので、「.jpg」は開けるけど、「.jpeg」は開けない。
Lua の文字列用関数についても、一応メモ。
function loadImage(fpath) -- Support : png, jpg, bmp, tga -- Not support : gif, tif local ext = string.lower(string.sub(fpath, string.len(fpath) - 3)) if ext == ".png" or ext == ".bmp" or ext == ".jpg" or ext == ".tga" then local f = io.open(fpath, "rb") local contents = f:read("*all") local data = love.filesystem.newFileData(contents, "temp" .. ext) local imgdata = love.image.newImageData(data) f:close() return love.graphics.newImage(imgdata), ext end return nil, ext endImage と、拡張子の文字列(".png"等)を返すけれど、未対応の画像フォーマットを渡したり、何か問題があって読み込めない場合は、Image として nil が返ってくる。
拡張子の判別は、渡したファイルパスの最後の4文字だけをチェックしている手抜き処理なので、「.jpg」は開けるけど、「.jpeg」は開けない。
Lua の文字列用関数についても、一応メモ。
- string.len("hoge") で、文字列の長さを返す。
- string.sub("hoge", n) で、n文字目から最後までの文字列を取り出す。
- string.lower("HOGE") で、文字列を小文字に変換。
- 「..」で、文字列を結合。
> lua -i Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio > string.len("hoge") 4 > string.sub("hoge", 2) oge > string.sub("hoge", 3) ge > string.sub("hoge", 4) e > string.lower("HOGE") hoge > "hoge" .. "fuga" hogefuga
◎ ファイル選択ダイアログについて。 :
ググっていたら、FFIなるものを使って、Love2D からファイル選択ダイアログを利用することができていた時期もあるらしい。
_File chooser dialogs with FFI - LOVE
_Foreign function interface - Wikipedia
ただ、各OS向けに記述が必要になるし、昔は動いてた Windows用の記述が Windows10 では動かなくなった、との報告もされていた。
_File chooser dialogs with FFI - LOVE
_Foreign function interface - Wikipedia
ただ、各OS向けに記述が必要になるし、昔は動いてた Windows用の記述が Windows10 では動かなくなった、との報告もされていた。
[ ツッコむ ]
#2 [blender] blender 2.81a で簡単な2Dアニメを作れないか試していたり
_Chasys Draw IES
の
_Object Animation Mode
のようなことを
_blender 2.81a
を使ってできないものかなと思って手元で試していたり。
◎ 手順をメモ。 :
とりあえず、2Dアニメなのだから、blender 起動時の新規ファイル選択で、2D Animation を選んで…。もしくは、ファイル → 新規 → 2D Animation。
Images as Planes アドオンを有効にしておけば、画像を1枚のPlaneとして簡単に読み込める(インポートできる)。編集 → プリファレンス → アドオン → 検索欄に「image」と入力 → Import Images as Plane にチェックを入れる。
ちなみに、2D Animation の時は、一番下のタイムラインウインドウの縦サイズが小さくなっているので、ちょっと大きくしておいたほうが作業が捗る時もある、ような気がする。下から2番目のドープシートウインドウで、「グリースペンシル」を「ドープシート」に変えるのもアリだけど。
画像を読み込む。左上の「ドロー」と表示されてる欄をクリックして、オブジェクトモードに切り替える。追加 → 画像 → Images as Plane。ファイル選択ダイアログが開くから、任意の画像を選択。右側の設定欄では、マテリアル設定を「陰影なし」に。右下の「平面として画像をインポート」をクリック。これで、画像が Plane としてインポートされる。
Plane として配置できたので、位置決めをする。Gキーを叩いて移動。Sキーを叩いて拡大縮小。Rキーを叩いて回転。位置や大きさが決まったら、Iキーを叩いて、記録したい項目を選ぶ。これで、現在フレーム上でキーフレームを設定できた。
現在フレームを変更して、また位置決め。Iキーを叩いてキーフレームを指定。
これで、キーフレームとキーフレームを自動補間した、簡単なアニメなら作れる。
動きを調整したければ、どこかのウインドウの種類を「グラフエディタ」にして…。グラフの制御点をクリック → ハンドルをマウスの左ボタンを押しながらドラッグして、グラフの形を調整。これで動き方が変わる。
Images as Planes アドオンを有効にしておけば、画像を1枚のPlaneとして簡単に読み込める(インポートできる)。編集 → プリファレンス → アドオン → 検索欄に「image」と入力 → Import Images as Plane にチェックを入れる。
ちなみに、2D Animation の時は、一番下のタイムラインウインドウの縦サイズが小さくなっているので、ちょっと大きくしておいたほうが作業が捗る時もある、ような気がする。下から2番目のドープシートウインドウで、「グリースペンシル」を「ドープシート」に変えるのもアリだけど。
画像を読み込む。左上の「ドロー」と表示されてる欄をクリックして、オブジェクトモードに切り替える。追加 → 画像 → Images as Plane。ファイル選択ダイアログが開くから、任意の画像を選択。右側の設定欄では、マテリアル設定を「陰影なし」に。右下の「平面として画像をインポート」をクリック。これで、画像が Plane としてインポートされる。
Plane として配置できたので、位置決めをする。Gキーを叩いて移動。Sキーを叩いて拡大縮小。Rキーを叩いて回転。位置や大きさが決まったら、Iキーを叩いて、記録したい項目を選ぶ。これで、現在フレーム上でキーフレームを設定できた。
現在フレームを変更して、また位置決め。Iキーを叩いてキーフレームを指定。
これで、キーフレームとキーフレームを自動補間した、簡単なアニメなら作れる。
動きを調整したければ、どこかのウインドウの種類を「グラフエディタ」にして…。グラフの制御点をクリック → ハンドルをマウスの左ボタンを押しながらドラッグして、グラフの形を調整。これで動き方が変わる。
◎ 課題。 :
位置、大きさ、角度が変化する程度のアニメなら、これで作れるわけだけど。透明度が変化するアニメを作りたい場合、どうすればいいのかが分からない…。Plane のマテリアル設定を変更しないといかんのだろうか…?
そもそも、Plane を半透明にする方法が分からない…。
そもそも、Plane を半透明にする方法が分からない…。
[ ツッコむ ]
#3 [neta] サイズが変わる○○
思考メモ。
寝ていたら夢の中で、とある有名漫画家が大きさを自由に変えられる車を使ったレースゲーム漫画を描いた、みたいな話を聞いて。夢の中で、それってTVゲームにできるんじゃないの、と思ったのだけど。
目が覚めた直後、そういうのってマリオカートあたりで既にやってそうだなと。アイテムを取ったら小さくなる、みたいな仕様が入ってたりしそう。プレイしたことないから分からんけど、やってそうなイメージが。
マリオを作った任天堂の宮本茂氏は、「風呂で浮かんだネタは使えるが、寝床で浮かんだネタは使えない」 *1 という名言(?)を残しているけれど。本当にそうだなあ、と…。
でも、そのままは使えなくても、何かを考えていくスタート地点ぐらいにはなるのではないか、と自分は思っていたりもするので、ここからもうちょっと考えてみる。
寝ていたら夢の中で、とある有名漫画家が大きさを自由に変えられる車を使ったレースゲーム漫画を描いた、みたいな話を聞いて。夢の中で、それってTVゲームにできるんじゃないの、と思ったのだけど。
目が覚めた直後、そういうのってマリオカートあたりで既にやってそうだなと。アイテムを取ったら小さくなる、みたいな仕様が入ってたりしそう。プレイしたことないから分からんけど、やってそうなイメージが。
マリオを作った任天堂の宮本茂氏は、「風呂で浮かんだネタは使えるが、寝床で浮かんだネタは使えない」 *1 という名言(?)を残しているけれど。本当にそうだなあ、と…。
でも、そのままは使えなくても、何かを考えていくスタート地点ぐらいにはなるのではないか、と自分は思っていたりもするので、ここからもうちょっと考えてみる。
◎ 設定としてアリなのか、ナシなのか。 :
そもそも、何かしらの物体の大きさが変わる設定は、アリなのか。ナシなのか。
そういう設定、アリだよな。例えば、「アントマン」があるし。「ウルトラマン」「ウルトラセブン」だってそうだし。あのへんは人型だけど、何かしらのメカのサイズが変化するのもアリだろう。ロボットアニメでは、「ブライガー」「バクシンガー」「アクロバンチ」があるし。…いや、「アクロバンチ」は違ったかもしれん。記憶が怪しい。
ということで、既存のヒット作を眺めれば、サイズが変わる設定も全然アリ、と言えるはず。一般的には人型が多いけれど、別にメカでもいいはず。車のサイズが変わってもいいし、戦闘機のサイズが変わってもいいし、戦艦のサイズが変わってもいい。「え? そんなものの大きさが変わっちゃうの? それは見たことないや」と驚かせるネタが、まだどこかに眠ってそうな気もする。
そういう設定、アリだよな。例えば、「アントマン」があるし。「ウルトラマン」「ウルトラセブン」だってそうだし。あのへんは人型だけど、何かしらのメカのサイズが変化するのもアリだろう。ロボットアニメでは、「ブライガー」「バクシンガー」「アクロバンチ」があるし。…いや、「アクロバンチ」は違ったかもしれん。記憶が怪しい。
ということで、既存のヒット作を眺めれば、サイズが変わる設定も全然アリ、と言えるはず。一般的には人型が多いけれど、別にメカでもいいはず。車のサイズが変わってもいいし、戦闘機のサイズが変わってもいいし、戦艦のサイズが変わってもいい。「え? そんなものの大きさが変わっちゃうの? それは見たことないや」と驚かせるネタが、まだどこかに眠ってそうな気もする。
◎ どんなアクションができそうか。 :
設定はアリ、ということにして。では、サイズが変わることで、どんなアクションができるだろうか。
人型の場合、「アントマン」を見れば、かなりのアクション・シチュエーションが網羅されている気がする…。人型でできることのほとんどは、アレでやりつくされてる印象が。
TVゲームでも、例えば「ダイナマイトヘッディー 」でそういうステージがあったような気がする。「ヘッディー」は、頭を変えると自機の能力が変わる仕様だけど、体のサイズが小さくなることで通れる場所、というのが用意されてたような…。まあ、あまり使いどころが思いつかなかったのか、その場所以外では使った記憶が無いのだけど…。
メカのサイズが変わることでこんなアクションができる、というのは…ちょっと例が思いつかない。サイズが変わる設定って、大体は人型ヒーローで使うものだし…。「ブライガー」等も、玩具を巨大ロボット扱いするためだけに設定していたような雰囲気が…。
人型の場合、「アントマン」を見れば、かなりのアクション・シチュエーションが網羅されている気がする…。人型でできることのほとんどは、アレでやりつくされてる印象が。
TVゲームでも、例えば「ダイナマイトヘッディー 」でそういうステージがあったような気がする。「ヘッディー」は、頭を変えると自機の能力が変わる仕様だけど、体のサイズが小さくなることで通れる場所、というのが用意されてたような…。まあ、あまり使いどころが思いつかなかったのか、その場所以外では使った記憶が無いのだけど…。
メカのサイズが変わることでこんなアクションができる、というのは…ちょっと例が思いつかない。サイズが変わる設定って、大体は人型ヒーローで使うものだし…。「ブライガー」等も、玩具を巨大ロボット扱いするためだけに設定していたような雰囲気が…。
◎ ゲームのジャンルに当てはめてみる。 :
STGで、自機のサイズが自由に変えられることで遊びにならないかな…。縦に長くなったり、横に広くなったり。と思ったけど、今時のSTGの自機の当たり判定って1ドットだったりするから、見た目のサイズを変えてもな…。
3DのFPSで、自機のサイズが変わったら、見た目はどのように変化するのだろう。…視点が高くなる・低くなる、ぐらいしか違いは無いのかな。いや、ステージのスケールが変わるのだろうか。
メカのサイズが変わるソレは、これといって面白くなりそうなイメージが浮かばないな…。
3DのFPSで、自機のサイズが変わったら、見た目はどのように変化するのだろう。…視点が高くなる・低くなる、ぐらいしか違いは無いのかな。いや、ステージのスケールが変わるのだろうか。
メカのサイズが変わるソレは、これといって面白くなりそうなイメージが浮かばないな…。
◎ メカ縛りを排除してみる。 :
メカにこだわらず、○○のサイズが変えられるのだ、という方向で考えてみよう。
男性の場合、「サイズが変わる」と聞くと、体の特定の部位についているアレをついつい連想してしまうのだけど。アレのサイズを自由自在に変化させることで繰り出せるアクション、というのはどうだろう。方向を決めてビヨーンと伸ばすとステージの壁にピタッとくっついて「オゥ…」「アハン…」と音声SEが鳴って、後は海腹川背のように…。あるいは、その下についている部位を広げると落下速度を遅くできるとか…。
「寝床で浮かんだネタは使えない」ってのは、やっぱり本当なんだなあ…。
男性の場合、「サイズが変わる」と聞くと、体の特定の部位についているアレをついつい連想してしまうのだけど。アレのサイズを自由自在に変化させることで繰り出せるアクション、というのはどうだろう。方向を決めてビヨーンと伸ばすとステージの壁にピタッとくっついて「オゥ…」「アハン…」と音声SEが鳴って、後は海腹川背のように…。あるいは、その下についている部位を広げると落下速度を遅くできるとか…。
「寝床で浮かんだネタは使えない」ってのは、やっぱり本当なんだなあ…。
[ ツッコむ ]
以上、1 日分です。