2014/01/10(金) [n年前の日記]
#1 [cg_tools] 自機画像っぽいものを作成
STGのサンプルに使えそうな自機画像っぽいものを作成。
不透明部分と透明部分の境界をドット単位でパキッとさせたかったので、GIMP上でレイヤーマスクを作って、そのレイヤーマスクに対して、色 → しきい値で二値化してみたり。ただ、これだと、境界の部分に変な色が載ってしまう…。
そこで、もうちょっと工夫したり。
ちなみに、メニュー → レイヤーで、アルファチャンネルをしきい値で二値化、という機能もあるのだけど。これだと見た目でどんな結果になるかプレビューできないので、使ってなかったり。どの程度の値にすればいいのか、既に分かってる場合は一番手っ取り早いのだろうけど。
ImageMagick で一つの画像にするのは、以下のような記述で。
で、一応、64x64 で数パターンの画像はできたのだけど。どう見ても…「ああ、かなり昔の同人ゲームのソレですね」てな感じの悲しい画像に。自分の作るその手の画像は、根本的なところで何か重大な要素が欠落しているような気がする。
そもそも、64x64ぐらいなら、3DCGツールなど使わずにドット打っていったほうが早いだろ、と笑われそうな気もする。…ピタリと止まってるドット絵なら、自分もなんとかなりそうだけど、アニメのさせ方がよくわからないわけで。いや、3DCGのソレは下絵に使って、とかやればいいのかもしれないけど。
- blender でモデリング・レンダリングして。
- GIMPでトリミング、色調補正、コントラスト変更、縮小して。
- ImageMagcik で、複数の画像ファイルを一つの画像ファイルにまとめて。
- OPTPiX、または EDGE2 で減色。
- EDGE2 でドット修正。
不透明部分と透明部分の境界をドット単位でパキッとさせたかったので、GIMP上でレイヤーマスクを作って、そのレイヤーマスクに対して、色 → しきい値で二値化してみたり。ただ、これだと、境界の部分に変な色が載ってしまう…。
そこで、もうちょっと工夫したり。
- あらかじめレイヤーのアルファチャンネルをどこか(チャンネル or 別レイヤー)に仮保存。
- 黒ベタ画像を背景にしてレイヤー統合。
- そのレイヤーに対してレイヤーマスクを作る。
- 仮保存してあったアルファチャンネル分をレイヤーマスクに反映。
ちなみに、メニュー → レイヤーで、アルファチャンネルをしきい値で二値化、という機能もあるのだけど。これだと見た目でどんな結果になるかプレビューできないので、使ってなかったり。どの程度の値にすればいいのか、既に分かってる場合は一番手っ取り早いのだろうけど。
ImageMagick で一つの画像にするのは、以下のような記述で。
convert +append hoge*.png output.png
montage -tile 4x4 -geometry 64x64 -background none hoge*.png output.png
で、一応、64x64 で数パターンの画像はできたのだけど。どう見ても…「ああ、かなり昔の同人ゲームのソレですね」てな感じの悲しい画像に。自分の作るその手の画像は、根本的なところで何か重大な要素が欠落しているような気がする。
そもそも、64x64ぐらいなら、3DCGツールなど使わずにドット打っていったほうが早いだろ、と笑われそうな気もする。…ピタリと止まってるドット絵なら、自分もなんとかなりそうだけど、アニメのさせ方がよくわからないわけで。いや、3DCGのソレは下絵に使って、とかやればいいのかもしれないけど。
◎ 爆発パターン画像を作成。 :
爆発パターン画像の作成は、
_Detonation
を使わせてもらったり。ありがたや。
このツールで作った画像のライセンスはどうなるのかな…? と思ったけど、ヘルプhtmlに書いてあった。
このツールで作った画像のライセンスはどうなるのかな…? と思ったけど、ヘルプhtmlに書いてあった。
○著作権とかなるほど。てことは、作成した画像を OpenGameArt あたりに CC0ライセンスで投稿してもOK、なのかな…?
このソフトの著作権はRRRQにありますが、
このソフトで作ったデータはそれを作成した本人に著作権が発生します。
よ〜するに、作った爆発はどんどん使っていーよんってことです(w
あ、あとサンプルに付けたデータも著作権フリーということで。
[ ツッコむ ]
#2 [dxruby] STGっぽいものを作成中
自機画像もできたので、DXRuby を使って、横スクロールSTGっぽいものを作成中。
Sprite を使っていて、ちょっとハマったり。アニメパターンの最初の1フレームだけ、変な位置に表示されてしまって。
initialize() 中で super しか呼んでなかったのがマズかったらしい。super(x, y, image) までやらないとダメなのだな。…と思ったけれど、それでもやっぱり何かの拍子におかしくなるような。alpha、blend、angle、scale_x、scale_y、全部使うと、何かの拍子に変な位置に表示される。ただ、必ずいつでも起きるわけでもなくて。どんな条件で発生するのか、よく分からない。そのうち検証してみよう…。
Shader を使って背景をラスタースクロールさせたいなと思ったのだけど、HLSL とやらが、よく分からず。脳内イメージとしては、サンダーフォースIVのステージ5の宇宙面っぽい背景がやりたいわけで。
_Thunder Force IV HD Full Run (Long Play) No Miss (Progressive) - YouTube (14:00頃)
昔の2Dゲーム機って、ラスター本数分のスクロール値を格納するメモリ領域があって、その領域にCPUがあらかじめスクロール値を書き込んでおくと、後はハードウェア側でその通りにラスタースクロールしてくれる、てな感じだったのだけど。
そういうことを、DXRuby の Shader + HLSL でやれないかなと思えてきたり。そういう仕組みができれば、処理が変わるたびにHLSL側を弄ったりせず、Ruby側で配列内の値を生成・変更すれば事足りるはずで。つまり、HLSLの知識まで要求せずに済むだろうなと。たぶん、そういうクラスを作って、 require すればOKであろう予感。
ただ、HLSL側で配列相当を扱えるのかどうかが分からなくて。Shader/HLSLのサンプルの中に、ラスタースクロール関係のサンプルがあるかもしれないので、眺めてみないと…。
でも、もしかすると、今時のGPUなら、BG相当の画像を十数枚ほどそのまま重ねて描画しちゃったほうが速かったりするのかな、てな疑問も。
Sprite を使っていて、ちょっとハマったり。アニメパターンの最初の1フレームだけ、変な位置に表示されてしまって。
initialize() 中で super しか呼んでなかったのがマズかったらしい。super(x, y, image) までやらないとダメなのだな。…と思ったけれど、それでもやっぱり何かの拍子におかしくなるような。alpha、blend、angle、scale_x、scale_y、全部使うと、何かの拍子に変な位置に表示される。ただ、必ずいつでも起きるわけでもなくて。どんな条件で発生するのか、よく分からない。そのうち検証してみよう…。
Shader を使って背景をラスタースクロールさせたいなと思ったのだけど、HLSL とやらが、よく分からず。脳内イメージとしては、サンダーフォースIVのステージ5の宇宙面っぽい背景がやりたいわけで。
_Thunder Force IV HD Full Run (Long Play) No Miss (Progressive) - YouTube (14:00頃)
昔の2Dゲーム機って、ラスター本数分のスクロール値を格納するメモリ領域があって、その領域にCPUがあらかじめスクロール値を書き込んでおくと、後はハードウェア側でその通りにラスタースクロールしてくれる、てな感じだったのだけど。
そういうことを、DXRuby の Shader + HLSL でやれないかなと思えてきたり。そういう仕組みができれば、処理が変わるたびにHLSL側を弄ったりせず、Ruby側で配列内の値を生成・変更すれば事足りるはずで。つまり、HLSLの知識まで要求せずに済むだろうなと。たぶん、そういうクラスを作って、 require すればOKであろう予感。
ただ、HLSL側で配列相当を扱えるのかどうかが分からなくて。Shader/HLSLのサンプルの中に、ラスタースクロール関係のサンプルがあるかもしれないので、眺めてみないと…。
でも、もしかすると、今時のGPUなら、BG相当の画像を十数枚ほどそのまま重ねて描画しちゃったほうが速かったりするのかな、てな疑問も。
[ ツッコむ ]
以上、1 日分です。