トピック
moh6an moh6an

お絵描きソフトにレイヤを実装したいと思っているのですが

まだプチコン3号で8bitαで複数レイヤは前例ないですよね (あったらごめんなさい) 共有できるところは情報交換したいです。 自分が今考えているのはレイヤ選択時に現選択レイヤより上位/下位レイヤに分けて、それぞれの合成レイヤを作っておいて描画時にその2枚と描画処理だけ合成計算という風にすれば処理量が少なくなると考えているのですが、問題無いでしょうか?
1そうだね
プレイ済み
返信[1]
親投稿
あきと SideBurnsM
レイヤー面白いですね。 キャンバスを512*512よりも少し小さくすれば、グラフィック面・スプライト・BG面をフルに表示したらリアルタイムに重ね合わせできるレイヤーが作れるなあと想像してしまいました。
1そうだね
プレイ済み
返信[2]
親投稿
8bitαって何だかわからないけど、3レイヤーのペイントなら作りました。 あきとさんが言ってる「グラフィック面・スプライト・BG面」野やりかたで3つのレイヤーを使えます。キャンバスサイズはフルじゃない(下画面サイズ)けど。
0そうだね
プレイ済み
返信[3]
親投稿
myu314 myu314
8bitのαチャンネル欲しいですよねー。僕も欲しくて前にちょっとテストしてみたんですが… 400x240をgimpと同じアルゴリズムで合成して1秒弱(@NEW3DS)でした(特に最適化はしてません) そんなわけで仕組み自体は通常合成に限ればそれで良さそうなんですが、合成処理自体がプチコンには荷が重そうです。 ソフト的なαチャンネルでは2レイヤーが限界、描画範囲が制限できるペン描画以外はかなり厳しそう。 僕の実力だとこんな結論になっちゃったので、あきらめてスプライトの乗算合成対応を期待してるところです;) 高速化の魔法あるのかなぁ
1そうだね
プレイ済み
返信[4]
親投稿
なるほど、αチャンネルが8bitって意味なんだ。
0そうだね
プレイ済み
返信[5]
親投稿
moh6an moh6an
みなさん、ご意見ありがとうございます myu314さんの測定、上画面400*240ピクセルで1秒弱ってことは 何も毎フレーム全ピクセル計算するわけじゃないから 自分のソフトで最も多くの画素を処理する64ピクセル幅エアブラシで計算すると 合成にかかる時間は 上画面画素数が400*240=96000画素 エアブラシ画素数32*32*3.14≒3215画素 96000/3215=29.860031≒30回/秒 上位と下位の2回合成するので やったぁ最悪でも1/30秒*2でできる!ってあれ?計算合ってます? わりと速いとは言わないもののソコソコの処理時間で済む様に思えてきます 十分チャレンジに値するかと
1そうだね
プレイ済み
返信[6]
親投稿
moh6an moh6an
自分の考えている方式の弱点は レイヤが増えたら選択時の処理時間が増えてしまいますが 少なくとも描画時の処理は頭打ちにできるかと 他高速化として処理時間を削れる要素として 上位ピクセルが255or0である時は下位ピクセル合成をしないとか いっその事上位は固定モノトーンレイヤにしてしまうとか (線画専用にしてしまう) すればいい線いくんじゃないかと思ってます
1そうだね
プレイ済み
返信[7]
親投稿
myu314 myu314
ブラシ系は大丈夫だと思いますよ、ざっと2~3倍重くなるだけですし。 (旧3DSは流石に厳しくなってきそうですね:) それよりレイヤー選択のたびに数秒待つのが厳しいなと感じてます。 それならばレイヤー数制限して事前合成は止めてしまった方がツールとしては使いやすいのではと。
0そうだね
プレイ済み
返信[8]
親投稿
moh6an moh6an
>それよりレイヤー選択のたびに数秒待つのが厳しいなと感じてます。 これはあんまり気にしてません、事前合成が必要なのは3レイヤ以上ですし、初回から全レイヤ見せるではなく、追加要求で可視化するようにすればいい、自分の計画でも最大レイヤ数は12枚ぐらいなので、使いものにならないくらい遅くなるということは無いと思います、全レイヤ全画面半透明で塗られているような作品を描くような人はまぁ辛抱強いと思って(笑)、先ほど言ったように隠れるようなピクセルとかアルファ値0のピクセルは合成を端折ってしまえばかなり処理時間を減らせると思ってます、 あとはColorsのように一段づつシフトしていくようなレイヤ選択ではなく、決め打ちで選択する方式にすればいいのでは?
0そうだね
プレイ済み
返信[9]
親投稿
moh6an moh6an
とりあえず、実装計画としては いきなり多段レイヤではなく 上位固定モノトーン8bitαレイヤが実用になるかなので それを試してみる予定です
0そうだね
プレイ済み