レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
おちゃめくらぶ掲示板
-
私がカラー対応お絵かきソフトに求めるモノ
プチコン3号のQSPでカラー対応のお絵かきソフト「SIMPLE PAINT QSP」を作ったにょ。
◎SIMPLE PAINT QSP
http://ochameclub.web.fc2.com/petitcom3/soft/qsp.htm#19
以前からtwitterやMiiverse等でカラー対応お絵かきソフトをQSPで作っていると書いていた
のだけどようやく完成したにょ。
実はプログラム自体はとっくに完成していて平行で進行していた簡易関数電卓QSP ver.2.0
用のお絵かきソフトが難航していてそちらを先に公開しようとしていたためなのとこれで
本当に実用になるのかをいろいろ描いていて試してみたため完成から公開まで時間が経って
しまったにょ。
とりあえず、実際に描いてみてとりあえずは何とか実用レベルには達していると判断して
公開することにしたにょ。
QSPで作ったお絵かきソフトといえば「PETIT PAINT QSP」があるにょ。
こちらはQSPとしてはペンと消しゴムの使い勝手や描画品質においては他の高性能なお絵かき
ソフトに引けを取ってないくらいであり、QSPとしては贅沢するぎるレベルのものを搭載
しているにょ。
しかし、単色(デフォでは赤色)のみ対応でプログラムを書き換えることで描画色は変更が
できるものの色を変えるたびに一旦セーブしてプログラムを書き換えて続きを描く必要が
ありとてもカラー絵を描く気にはなれないにょ。(といいつつ数枚描いているけど)
PETIT PAINT QSPをカラー対応にするという案はあるにはあったけどPETIT PAINT QSPの
最大のウリは上記のようにQSPとしては非常に高性能なペン機能であり、これを削って
までカラー対応にしたいとは思わなかったにょ。
PETIT PAINT QSP(ver.1.0)のリストに無駄があるのを見つけそれを元にして当初は
オプション扱いだったロード機能を搭載したver.1.1を制作したにょ。
ところが、その限界までリスト短縮をしたはずのver.1.1もさらに17文字の短縮が可能になる
方法を見つけてしまったにょ。
ならば、せっかくなのでカラー対応・・・は無理でも描画色を赤、黒をトグル切り替えが
できるようにしようと思ったけどどれだけリスト短縮をしても10文字程度オーバーして
しまうにょ。
それならば筆圧対応(といってもハードウェアが対応していないので擬似的に筆圧っぽい
表現ができるだけのものなんだけど)にしてみようと思ったにょ。
しかし、それはすでにPETIT PAINT QSP type Bで行っているにょ。
ただし、PETIT PAINT QSP type Bは初出時から更新してなかったのでPETIT PAINT QSPの
大幅なリスト短縮が可能な手法を用いて当初はセーブ、ロードともにオプションだったのが
セーブもロードも搭載が可能になったにょ。
これによってPETIT PAINT QSP type Bと通常のPETIT PAINT QSPとの違いは筆圧機能の有無
だけになったにょ。
PETIT PAINT QSP type Bは通常のPETIT PAINT QSPに筆圧機能が付いたもののそれ以上に
切り捨てられた機能が多かったのと比べると雲泥の差となるにょ。(初出時にはtype Bは
通常版より使えないと思っていたけどそれが180度変わってきた)
さて、筆圧対応といってもそれを実現するためには様々な方法があるにょ。
しかし、プチコン3号のお絵かきソフトにおいて筆圧機能は「入り」は対応している作品は
結構あるけど「抜き」に対応しているものは少なくとも私が知っている公開作品の中には
無いにょ。
そこで、入り抜き対応のお絵かきソフトをQSPで作ってみようと思ったけどそれだとますます
PETIT PAINT QSP type Bとの差が「抜き」に対応しているというだけになってしまうため
ここはQSPというシンプルな単機能でも問題ないという特性を活かして毛筆のようなタッチで
描けるというのをウリにしようと考えてみたにょ。
それで出来たのが先日も書いた「簡易毛筆QSP」にょ。
◎簡易毛筆QSP
http://ochameclub.web.fc2.com/petitcom3/soft/qsp.htm#18
この簡易毛筆QSPは毛筆っぽさをQSPで収まる範囲内で表現するにはどうするかを考えて作った
のだけど思った以上に良い感じに仕上がったと思うにょ。
プチコンにおいて毛筆というと第2回プチコン大喜利で芸術賞に入賞しているjojo3さんの
「筆一」があるけど(もちろん、グラフィックや筆のシミュレート具合も全然異なるため
単純比較はできないものの)それと比べると数100分の1のプログラムサイズであり、さらに
プチコン3号では初になるにょ。
QSPでこれ以上筆っぽくするのは無理だと思うにょ。
すでにPETIT PAINT QSPのカラー対応版は作りかけていたけど17文字程度の短縮ではとても
QSPには収まらずかといってOSP(普通の1画面プログラム)で作るならばカラー対応だけでは
物足りないためやはりここはPETIT PAINT QSPをベースにするのではなく全く別のソフトとして
1から作り直すことにしたにょ。
簡易毛筆QSPもペン描画ルーチンはPETIT PAINT QSPのものを使用しているのだけどこの
ペン描画ルーチンをもっと簡素化すればカラー対応にできるのではないかと思ったにょ。
カラー対応になってもペンの描画部分が実用レベルに達してないならば本末転倒なのでそこは
十分すぎる性能だったのをそこそこ使えるレベルにすることでリスト短縮をすることに
したにょ。
そこそこ使えるレベルというのは「ペンの太さは1ドット幅で描画が可能」「ペンの太さは
自在に変えられる」「速く描いても線が途切れたりしない」というものにょ。
それを実現するにはGFILLで描画するのが最適だと感じたにょ。
次に考える必要があるのはカラー対応に求める機能は何かということにょ。
必要不可欠なのは任意の色が選べるということにょ。
これには様々な方法があり、使いやすいUIを実現しようと思ったらそれだけでQSPにはとても
収まらないサイズになるにょ。
最初に考えたのはスライドパッドの角度や倒した量でRGBを指定するというものにょ。
プログラム自体はそれほど難しくないのだけどこれで色指定するのは困難にょ。
同じ色を選べといわれて選ぶのは非常に困難なレベルにょ。
確かにRGB各4階調くらいにして64色まで選べる色を減らせば十分に実用レベルにはなるものの
それではカラー絵を描くのには十分とは言えないにょ。
それにスライドパッドを使った手法は単純とはいえQSPに収めるのは困難にょ。
そこで、最も単純なRGBをINPUTで入力するという方法にしたにょ。
これならばQSPで収まる可能性がかなりアップするにょ。
何せXSCREEN 2で下画面を有効化してDISPLAY 1で下画面を使用中であってもINPUTで実行する
際には自動的に上画面で入力となる(下画面がキーボード表示に切り替わるから当たり前の
ことだけど)ので一旦DISPLAY 0に切り替えてまたDISPLAY 1に戻すという処理が不要という
のが非常に大きいにょ。
QSPを作る場合には「DISPLAY」なんていう長い命令が2回必要というだけで避けたくなって
しまうからね。
問題はINPUTでRGB指定をするのが実用になるかだけどこれはとりあえずおいておくことに
したにょ。
さて、私がカラー絵を描くのに欠かせない機能といえばスポイト機能にょ。
実はプチコン3号のお絵かきソフトにおいてスポイト機能がないものも少なくないにょ。
実際は私がよく使い方を理解していないだけで実際はすべてのソフトに備わっているの
かもしれないけどやはりスポイト機能無しではカラー絵を描くのはさすがに辛すぎると
いうのはPETIT PAINT QSPでカラー絵を描いてみて良くわかったにょ。(PCで描く場合は
様々なレイヤーが重なり合っているので単純にスポイト色を使うというのができないため
それほどスポイトは多用しないけど)
もちろん、色指定がワンタッチでできてなおかつユーザー定義パレットが数10色分あり
それがお手軽に使用できる状態になっているならばアニメ塗りで描く場合にはスポイトは
ほとんど使わないだろうから問題はないんだけどね。
スポイト自体の実装はすごく単純なコードで描けるため問題はないのだけどやはりその際に
問題となったのはスポイトで描画色を変更したらせっかくRGB入力した色を入力し直すハメに
なるということにょ。
これは変数名を分けるだけで簡単に実装できたにょ。
これによってRGB入力で空入力時は前回入力したRGB指定色が描画色にできるようになったにょ。
また、白とか黒とかのよく使いそうな色は簡単に使用できるようにしたいというのもの実際に
使ってみて思ったにょ。
白はキャンバスの背景という非常に大きなパレットがあるため問題はないけど黒はわざわざ
RGBで0,0,0と入力するのは避けたかったので空入力ならば黒(正しくは透明色)になる
ようにしたにょ。
空入力だけならば上記のスポイト色と合致してしまうため黒になるのはLもしくはRボタンを
押した場合としたにょ。
この時点でQSPを2文字オーバーしていたのでこれでひとまず仕様は確定させてリスト短縮の
方に取りかかることにしたにょ。
リスト短縮をする場合には特定の条件下のみ動作するコードによって短縮可能になるという
パターンも多いため仕様を決めながら短縮しようとすると究極の短縮を行うことができない
からね。
つまり、逆に言えばそこまで究極のリスト短縮をした後には仕様を変更するのは難しいと
言えるにょ。
これによって何とかQSPに収めることができたにょ。
実際に何枚かカラー絵を描いてみて「(高性能なお絵かきソフトと比べるとやはり大きく
見劣りしてしまうけど)カラー絵を描けなくはないレベル」と思ったにょ。
少なくともPETIT PAINT QSPのプログラムを書き換えながらカラー絵を描くのに比べたら
格段に快適になったにょ。
個人的には欲しい色はほとんどRGBで入力していて脳内でHSVに変換している(SAIとかで
描く場合も基本はRGBで色を決めてHSVは脳内演算との誤差の確認程度にしか使ってない)
のだけどそれ故に「このRGBによる直接入力で問題ない」と感覚が麻痺している部分もあるの
ではないかと感じたにょ。
個人的には大きな支障はないもののRGBの直接数字入力だけというのは人によっては困難で
あると思われるためその改善策を考えたにょ。
しかし、現時点でQSPにギリギリ収まっている状態でこれ以上の改善策は望めないにょ。
というわけで、手っ取り早くするにはオプション扱いにしたにょ。
といっても、簡易関数電卓QSPのように自作関数を追加して機能を追加するというのは
できないのだけど1つだけ方法があるのはロード機能を利用するというものにょ。
つまり、あらかじめベースとなる色が収まっているGRP画像を読み込ませれば解決という
のに至ったにょ。
要するにパレットみたいなものを生成してやれば良いのだけどここでの問題は色数や
パレット自体の大きさにょ。
8色パレット等の色数が少なすぎる場合は使いたい色がそのパレットの中に無い可能性が高い
ためあまり有効な方法ではなくなってしまうし、あまり色数を増やしても1つあたりの色が
小さすぎたり、パレット自体がキャンバスを占有してまともに描けない(このパレットは
キャンバスと同化していて消したら再び呼び出せないので最後に消すというのを想定して
いる)ということで可能な限り邪魔にならない大きさや位置で表示することにしたにょ。
そこから導かれたのはRGB8階調の512色にょ。
これならば8x8の正方形パレットを8つ描くだけで済むのでリストも単純化できる(QSPで
容易に作ることが可能)というメリットがあるにょ。
NxNの正方形をN個描くという場合において縦の解像度が240だから512色の場合はパレット
1つ当たりが3x3ドットになるにょ。
空いた余白にはグレースケール8階調のパレットも用意したので全部で520色パレットと
なるにょ。
問題は位置だけどできるだけ邪魔にならない位置にする必要があるので設定によって
キャンバスの左右が選択できるようになったにょ。
プチコン3号の場合は上下左右5ドット分はタッチが検出できないためそれを避ける必要が
あるのだけどこのキャンバスは余白部分は3ドットにしているにょ。
というのも周囲5ドット分をタッチした場合例えばY=0をタッチしてもY=5を返し、Y=5を
タッチしてもY=5を返す仕様になっていて周囲5ドット分はタッチを検出できないという
よりも丸められた値になるというだけなので周囲3ドットの余白+大きさが3ドットの
パレットであれば実は外枠に近いパレットには3ドットではなく6ドットの当たり判定が
あるため逆に入力しやすくなっているにょ。
あと1つあたりの3x3ドットのパレットでは小さすぎて使えないと感じてしまう人もいる
というのを想定してその2倍の6x6ドットのパレットも生成できる設定も用意したにょ。
その代わりRGB4階調の64色+グレースケール4階調となり、68色のパレットになって
しまったのだけどユーザーの手によって「520色」と「68色」のうち自分が使いやすい方を
選択してもらえたら良いのではないかと思われるにょ。
選択肢が増えると選択するためにQSPに収まらないという問題も生じたのででは起動時に
選択(ただし、ボタン入力を受け付ける時間は長目)としたにょ。
これによって、パレットGRPメーカーは完成したにょ。
パレットGRPメーカーの派生品としてMiiverseのプロフ絵を描くためのフォーマットも用意
したにょ。
「パレットGRPメーカー for Miiverse」を使えばMiiverseのプロフの背景として設定できる
画像サイズに合わせた絵を描くことが可能になるにょ。
単にプロフ画像の枠を追加しただけなんだけどこれがあるのとないとでは実際にお絵かきを
する場合にかなり変わってくるからね。
私が知る限りではプチコン3号においてプロフ用の画像を描くための枠を搭載したお絵かき
ソフトはないのでこれが初かもしれないにょ。
SIMPLE PAINT QSP自体の開発期間は1週間程度(1日1時間程度でほとんどがリスト短縮に
かかった時間)だけどその後のテストプレイならぬ試し描きやマニュアル作成の方に時間が
かかっているのではないかと思うにょ。(作ってから公開まで1ヶ月以上かかってしまった)
実際に使ってみてQSPとして考えるならば「これ以上のカラー対応お絵かきソフトは作る
ことは不可能」と思えるくらいのものになっていると思うのだけどそれでもPETIT PAINT QSP
のような機能面で絶対的なウリの部分(QSPという制限がなくても十分に通じるウリ)は
ないにょ。
逆に言えばバランスが取れていると言えなくはないけどすでに高性能なカラー対応お絵かき
ソフトが多数ある中でこのSIMPLE PAINT QSPを使うメリットはカラー対応としてはシンプル
であるということくらいにょ。
パレットGRPメーカーと併用することで初めてこのソフトを使う人であってもすぐに使える
ようになるわけだからね。
メニューを呼び出さないと使えないというのは高性能、多機能なツールの宿命なのだけど
SIMPLE PAINT QSPが唯一高性能ツールに勝る部分はその部分にょ。
したがって、「PETIT PAINT QSPのシンプルさでカラー対応が欲しい」という人の要望には
応えられるのではないかと思うにょ。
QSPではこれでもう限界だと思うのでこれ以上のツールを作ろうと思ったら通常の1画面
プログラムにするしかないにょ。
では、SIMPLE PAINT QSPには搭載できなかったけどカラー絵を描く際に欲しい機能をいくつか
挙げていくにょ。
@レイヤー機能
レイヤーの順番入れ替え、統合機能付き
◎アンドゥ、リドゥ機能
回数は多い方がいいけど1回でもあるのと無いのとでは雲泥の差
◎キャンバスのスクロール機能
これによって上下左右ギリギリまで描けるようになる
◎キャンバスの拡大機能
これによって細部の修正が容易になる
半透明ペン、ぼかしブラシ、乗算・加算機能なども欲しいといえば欲しいけど上記の4つほどは
優先度が高くないにょ。
QSPでこれだけのものができたからその約4倍のサイズとなる通常の1画面プログラムならば
さぞかしすごいものが作れると思うかもしれないけど実際はRGBによる色指定を行いやすく
したり、パレットGRPメーカーのようなものではなくちゃんとしたパレット機能を搭載したら
それだけでギリギリになってしまい上記の4つの機能を搭載するのは無理にょ。
上記の4つに関しては実装自体は難しくないため数KB規模になっていいのならば簡単に作れると
思うにょ。
ただし、QSPという制限が無くなってしまえば底なし沼地に足を突っ込むようなものなので
「あれも欲しい」「これも欲しい」とどんどん機能を追加していって際限が無くなりそう
なのが目に見えているので二の足を踏んでいるにょ。(やりたいことがたくさんあるので1つの
ツール制作だけにあまり多くの時間を取ることができない)
上記の4つの機能+加算機能ならばクッキーさんが作った「K2KPaint」にも搭載しているので
わざわざ作らなくてもすでにあるわけだしね。
まだプチコンでは前人未踏となるアルファチャンネル付きのレイヤー機能に対応したお絵かき
ソフトを作るというものも考えたにょ。
私もPCでお絵かきをする場合には乗算レイヤーやスクリーンレイヤーは多用しているからね。
プチコン3号でこれを行うことは技術的には簡単にできるものの速度的には極めて困難にょ。
アルファチャンネル付きのレイヤー4枚に対応したお絵かきソフトの試作品(レイヤー表示を
行うだけのものでセーブもロードもレイヤーの並べ替えもできない本当の試作レベル)を
作ってみたところまともに描くことができない速度であり、New3DSで実行時のプチコン3号より
さらに10倍以上速くないと実用にはならないと感じたにょ。
最適化をすればさらに数倍の高速化は望めそうだし、レイヤーを2枚に減らせばとりあえず
使えなくはないレベルにはなるかもしれないにょ。
「QSP史上最強のお絵かきソフト」はできたので次は「プチコン3号史上最強のお絵かき
ソフト」を目指すというのもあまりに大変なことにょ。(別に最強に拘る必要はないけど
自分なりの拘りがないと良い作品は出来ないというのが私の持論となっていて「これくらいで
いいだろう」と妥協すると作品内容も妥協したような作品になってしまう場合が多い)
まぁOSP(1画面プログラム)で作れる最強を目指すというのは次の目標としてはありかも
しれないにょ。
ただし、RGB指定やパレットの使い勝手を改善すると上記4必要機能を搭載するのは難しく
搭載できたとしてもどれか1つを搭載するのが精一杯になりそうな感じにょ。
それとも使い勝手はそのままで機能を優先するか・・・。
機能の取捨選択はサイズの制限付きプログラムの場合は逆に楽しめる部分ではあるにょ。
私が作ったプチコン本「プチコン3号QSP完全マニュアル」や「プチコン1画面プログラムの
ススメ」でも書いていることだけど妥協をしないということが完成度を高めるためには
必要不可欠とはいえそのためには実装したい要素に優先度を付けて優先度の高いものを
確実に実装することが必要となってくるにょ。
特にQSPのように著しいサイズ制限がある場合は実装したくてもできないことというのが
多数出てくるためこの辺を考えることが大きいにょ。
「絶対に無理」と思われたものがリスト短縮や工夫によって搭載できた際の喜びは実際に
経験がないとなかなか理解してもらえないのではないかと思うにょ。
サイズ制限付きプログラムに興味がない人だったら「ペンの書き味だけは最強を目指す」
でもいいし「操作の分かりやすさで最強を目指す」の機能や用途を限定した最強に挑戦しても
いいと思うにょ。
ただし、この辺は感覚の個人差があるため最強が存在するような類のものでもないけど
自分の中では最強と思えるならば問題はないにょ。
「QSPは制限があるから手抜きプログラムでも問題ない」という考えの人もいるだろうけど
私は「QSPという制限があるから限界まで作り込んだものでもそれほど手間を掛けずに
作ることができる」というのが何より大きなメリットに感じているいるにょ。
自分が納得できないもの(自分が面白くないゲーム、自分が使えないと感じるツール)で
他人を満足させられるはずがないし、作っている自分自身も満足できないからね。
まぁ、完成させるのが精一杯という初心者というならばそれが精一杯なのだから問題ない
けどそうではないのに精一杯ではないものを作るのは個人的には度し難いにょ。
今日はクリスマスということで、このSIMPLE PAINT QSPを使ってクリスマス絵を描いて
みたにょ。
http://ochameclub.web.fc2.com/CG/rorie_xmas.jpg
キャラは知る人ぞ知る私のオリジナルキャラのロリエちゃんとビット君にょ。
某所で連載していたラノベのヒロインだけど超ミニスカサンタ服でプレゼントを配って
いるシーンにょ。
なぜ、こういう状況になったのかは頭の中にはすでにストーリーが思い浮かんでいるので
近いうちに「ロリエちゃん外伝」を書いて紹介することにするにょ。
というか、私はイラストを描くときは「単に笑っているバストアップ絵」みたいなのを除けば
頭の中にストーリーを思い浮かべて描いているにょ。
これは要するにそのストーリーの中のワンシーンを絵にしたような感じでにょ。
(上手い下手に関係なく)絵が描けないという人は大ざっぱでいいからストーリーをまずは
考えてみるといいにょ。
そうすると必然的にキャラがどう動くかが分かるのでどういう絵を描こうとかどういう
アングルで描こうとかどんな背景を描こうとかいうのが簡単に分かるようになるにょ。
絵と文は別々のものとして考えがちだけど根本部分は同じものでアウトプットの方法が異なる
だけ(プチコン風に言えばコンソールで表現するのかスプライトで表現するのかという違い)
だと私は思うので絵を描く場合であっても文章を書く場合であってもストーリーを考える
というのは非常に重要だと思うにょ。(例えば「クリスマスケーキを食べている絵」を描く
場合であっても一人で寂しく食べるのと友人同士で食べるのでは表情や食べ方が異なるだろうし
3日間食べずにケーキを食べている場合や食通の批評のために食べているみたいな場合でも
また異なったものになる)
そもそもストーリーが思いつかないという人は5W1Hや起承転結みたいなのを意識しておくと
書きたいもの(描きたいもの)が思いつくのではないかと思うにょ。
ストーリーとまではいかなくてもキャラ設定や状況設定もろくにできてない状態では絵を描く
ことだけではなく文章を書くこともできないと思うにょ。
その辺を考えずに絵を描くという行為は何を作りたいのか分からずにゲームを作るくらい
難しいことにょ。
|
|
|
掲示板管理者へ連絡
無料レンタル掲示板