スタイラスで使うと、同じモバイルのペイントアプリがここまで化けるということに対する認識が甘かったと痛感し、早速その後のPaint版のリリース前にボタンへのショートカット登録や、キャリブレーションを実装して、1月19日にPaint版をリリースしたわけです。10.1を買いました。10.1に入れて使ってみた瞬間、これは非常に大きな失敗をしてしまったなと後悔しました。Note10.1で動かすことを考えると、安すぎた」という事です。最近はなんでも、フリーミアムだなんだと、無料のサービスでネット上は溢れています。このブログにしてもそうですが、(あたりまえですが)本来そこには人件費なりネット管理費などといった費用がかかっています。無理な競争で低価格を追求した結果は、邪魔な広告や、品質の低下、歪んだ費用負担などといった形で結局はその業界の構成員や、頻繁に利用するユーザーが不利益を被ることになります。いって一社が有料で高品質なサービスを提供しても、1ユーザーが金を払っても、全体としてこの状況は覆ることはないでしょう。その選択で全体としては全員が損をすることになるとしても、「自分だけは得をしたい、あるいは損をしたくない」という行動を制限できない以上、こうなるのはどうしようもないことです。極論として仮にLayerPaintが無料だったとしましょう。Paintはこの世に生まれていません。Paintが作られたわけです。身も蓋もないですが、当たり前といえば当たり前でしょう。Paintを無料で配布しだしたとしたらどうでしょう?恐らく後続のアプリ・あるいは現存する他の有料アプリにとって、良い影響があるようには思えません。あり得ない話だと思われますか?そうでもありません。Paintを無料にしてしまいたい衝動に駆られています。それについて考えない日は無いと言っていいくらいです。いうのも、私の当初の目的を考えれば明らかでしょう。本来私はゲーム開発者で、別にペイントアプリにそこまで執着があるわけではありません。作り始めれば確かにそれなりに奥深くて面白いことは面白いものの、私でなければ作れないようなものでもないし......といったところです。切実な問題は、大して儲からない......というか、そもそも最低限の生活すらままならない程度の、生活保護の半分よりさらに低い程度の利益しか出ていないということです。これでは趣味かボランティアです。趣味やボランティアなら、もういっそのこと有料アプリはやめて金は別の仕事で儲ければ良いということになります。本来の目的であった「こんなアプリ作りました」という実績を利用する方向で考えれば、無料にして出来る限り知名度を上げたほうが、結局私にとっても利益になります。Paintのアプリ販売で得られる利益の少なくとも5倍~10倍の稼ぎは簡単・確実に得られるわけです。Paintの更新はほぼ完全になくなるでしょう。Paintを超えなければ有料アプリとして出せなくなり、高い壁となるはずです。単純に私個人の利益を考えれば、有料アプリとして作り続ける意味は殆どないと言っていいのに、それでもなぜ作り続けるのか?その理由は大きく分けて3つほどありますが、2つはあまりにも個人的なのでおいといて(Twitterでの私の発言から想像はつくでしょう)、最後の1つは、自分の都合でこの業界の発展を少しでも阻害するような事は私自身のポリシーに反するから嫌だ、ということになります。Paintはどう考えても500円の価値ではなく、普通に考えて2000円、下手すると人によっては5000円以上払ってもいいという価値を持つものに見えたわけです。(実際Twitter上では、「650円出して使えなかったらどうしようと思ってたけど、これ6500円の価値が有る」というような人もいました。Paintは様々なサイズがあるAndroid端末のどれで動かしても、それなりに見れるレイアウトになるよう設計したため、タブレットサイズでもそれなりに使いやすいということです。これがスマホサイズでなければ使い物にならないようなレイアウトであれば、タブレットサイズ用だということで別アプリを出し、それに適切な価格を付け直せばそれで済むのですが、そういうわけにはいかなくなってしまいました。良かれと思って注意深く設計したレイアウトが、値段の付け直しという観点ではむしろ仇になってしまったわけです。Paintの公式Webサイトの実装予定の機能の最後にも書いてあるように、EfTを作ることにしたわけです。Paintの適価はこんな感じです。3000円これでもう、EfTを2000円にした理由はおわかりでしょう。スタイラス付きタブレットで動作させた時の利便性としての2500円~3000円に対し、現在の値段を引いた2000円、というわけです。実のところ、EfTで実装したドッキングやフローティングウインドウの価値が2000円分あるなどとは、私自身これっぽっちも思っていません。Paintに対して300円か、人によっては1000円の価値を追加できたかどうかといったところでしょう。タッチパネルによる操作を切り捨てることでようやく少し差別化できたといった感じです。元がそれほど悪くない中で、スタイラス付きタブレットで動作させた場合の適価に合わせるようEfTに高い値段をつけても、なるべく不満が小さくなるよう、当初予定していたよりは、かなり頑張って色々と実装したつもりです。Paintを超える、スタイラス付きタブレット専用の優れたペイントアプリを1から作ろうという人のモチベーションを削らないギリギリのラインだと思っています。Paint開発の経緯と絡めて説明してみました。Paintを本日公開しました。(デジタイザースタイラスを備えた)タブレットサイズ端末専用のUIにより、これまでのUIに比べて操作性が格段に向上しています。Paintを動作させたものです。EfTの機能を使うためにはオプションからアプリ内課金で購入する必要があります。(2014年1月31日まで試用可能です)購入前の確認画面にもありますが、EfTはデジタイザーでの操作に最適化されています。具体的には2x2mm角程度のサイズのボタンを間違いなく押せる精度を想定してUIをデザインしています。指操作のタッチパネルでは実用的な操作性は得られませんので、間違って購入しないようご注意ください。EfTはモバイル系のツールとしては比較的高い価格設定となっていますが、推奨端末が限られていること等から決定しました。詳しい経緯は後ほど別記事として書くつもりです。前置きはこのくらいにしてEfTの機能ですが、大きく分けて3つになります。フロート/ドッキング可能な新しいUI以下、それぞれの機能について解説していきます。Paintは基本ポートレイト(縦長)固定で、端末を回転させると申し訳程度に正方形なボタンの中身のみ回転させていましたが、今回タブレット用ということで、ランドスケープ(横長)にも対応しました。オプション][スクリーン回転]を「端末の回転に合わせる」に設定してください。各種設定画面も端末の回転に合わせてリストの表示方向が変化します。(ただし、システムの回転はポートレイト固定のままなので、文字入力等のダイアログは端末の回転に追従しません。これはシステムのナビバーが短辺に来て画面が狭くなることを嫌っての仕様です。KitKatではナビバーを消すことができるのでそちらに対応させるときに実装予定です)また、地味に重要で忘れてはならないのが、スタイラス設定でのキャリブレーション情報が四方向独立して設定・保存されるようになっています。面倒ですが、端末を回転させて利用する場合は、利用する方向毎にキャリブレーションしてください。Paintではキャンバス上にブラシや各種機能のショートカットとしてCloverアイコンを作成して自由に配置することができます。長押しからのオプション設定で他のUIを消している場合にも表示するなどといった事が可能なので、描画処理が遅く、UI表示処理が足をひっぱるような端末でもあまり利便性を損なう事なく高速に表示、画面を広く使えるという利点がありますが、数が増えてくるとこれも邪魔になります。そこで利用頻度の低いものや似たようなブラシをひとまとめにしてドロップダウンリストにできるよう機能追加しました。このようにたたむことができます。たたんだ状態で、表示されていないアイコンは、たたんだアイコンをドラッグすると、ドラッグした方向へのドロップダウンリストとしてこのように表示されます。リスト内のCloverアイコンを選んだ時の動作はユーザーがオプションで設定できます。オプション]設定で、[Cloverドッキング]のチェックをONにします。オプションでドッキングを有効にすると、Cloverアイコンをドラッグ中、他のアイコンに近づけると、上の画像のように∞型のアイコンがあらわれます。そこにドロップしてやるとドラッグ中のCloverアイコンがドロップ先のアイコンの子になります。(上図ではバケツが親、鉛筆が子)ドッキングすると、ドッキングリストの1番親にはキャプションバーが、末尾の子にはナビゲーションバーが付きます。キャプションバーやナビケーションバーを長押しすると後述する設定ダイアログでこのドッキングリストのオプションを設定できます。(Cloverアイコン自体のオプションとは異なります)ドッキングリストを開いた状態では自由に子を追加したり、途中に挿入したり、切り離したりなどといった操作を行えます。ドッキングリストを閉じるにはナビゲーションバーをクリックします。閉じた状態では、キャプションバーをつまんだ時のみ、このアイコンを移動させることができます。他の部分をつまんでドラッグすると、中に含まれるCloverアイコンがドロップダウンリストとして表示され、それを選択するモードになります。キャプションバーを長押しすると設定画面が開きます。移動の禁止や、UIの表示モードを無視して強制的に表示するというCloverアイコンにもあるオプションに加え、ドロップダウンリストからリストアイテムを選択した時の動作を以下から指定できます・実行のみ閉じたドッキングリスト表面に表示されているCloverアイコンを変化させず、選択したコマンドを実行します。(ブラシの場合はそのブラシを選択します)・選択のみコマンド実行やブラシの選択などを行わず、ドッキングリスト表面に表示されるCloverアイコンを選択したものにします。選択したCloverアイコンのコマンド実行を行い、さらにそれをドッキングリスト表面に表示されるCloverアイコンにします。・実行と選択(ブラシの時のみ)選択したCloverアイコンのコマンド実行を行い、選択したCloverアイコンがブラシ系のアイコンだった場合には、さらにそれをドッキングリスト表面に表示されるCloverアイコンにします。フロート/ドッキング可能な新しいUI最後になりましたが、機能的にはこちらが1番大きなものになります。オプション][タブレット用UI]をチェックして再起動してください。既存のCloverリストやカラーリストのツールバーとは排他的になっていて、どちらか一方のみ利用可能です。(ナビビューのみ同時に利用可能です)ウインドウの開閉ウインドウのキャプションバーを長押しすると、設定と閉じるボタンがあらわれます。ウインドウ]から目的のウインドウを選択してください。カラー設定関連のウインドウはメインのパレットウインドウのアイコンがトグルになっているので、これで開閉します。左下に移動して、カラーリスト・グラデーションピッカー・スポイト......となります。カラーピッカーはドロップダウンで三種類から選べるのでお好きなものをどうぞ。ここのウインドウに関しては、ほぼ説明の必要はないと思われるのですが、グラデーションピッカーに関してのみ、ガンマ値設定が見慣れないかもしれないので説明します。PaintのグラデーションピッカーではRGBの三原色毎にガンマ値を設定できます。ガンマ値とは0.0(真っ暗)から1.0(もっとも明るい)状態までを直線ではなく、曲線で表そうというものです。通常ガンマ値は入力値のべき乗数で指定します。ガンマ値が2.0ならば、0.0と1.0は2.0乗しても同じですが、中間の0.5は0.5*0.5=0.25になり、下に膨らんだカーブになります。逆に0.5乗すれば0.5は0.707..となり、上に膨らんだカーブになります。モニター等はPC上の数値(入力値)と実際の明るさ(出力値)に関して、2.2程度のガンマ値を持たせるのが一般的です。入力値)とすることで、入力値が0で直線、マイナスで上に膨らむ、プラスで下に膨らむようにしています。Paintの設定では0.0)直線的な補間では、例えば絵の具では普通にみられる青と黄色を混ぜた時に、中間が緑になるというグラデーションが得られないためです。(青と黄色は補色のため、単純な補間では途中は灰色になる)現実世界では緑が強く現れるために、このようなことにはなりません。そこで緑のガンマ値を下げて緑を強めに、他のガンマ値を上げて弱めにしてやると以下ようになります。これで減色混合の絵の具に近い中間グラデーションが得られます。(とはいえ現状他の演算にはガンマ値設定がないので、混合の場合このグラデーションピッカーから細かく中間色を拾ってやる必要はあります)肌色等の中間グラデーションも、このガンマ値をいじることで雰囲気の違うものにできます。ウインドウのドッキング等のタイプ各種ツールのウインドウは、表示内容に合わせて使いやすいよう、いくつかのタイプに分けてサイズ調整やドッキングの時に可能な動作を設定しています。ウインドウの位置・ドッキング状態とドッキング・表示制御用のオプションフラグは、ポートレイト(縦長)とランドスケープ(横長)で別々に持っています。この仕様があるため、横長画面ではツールを多く表示、縦長画面では最小限にする、などといった事が可能です。・ドッキングしたサイドに合わせて回転するものCloverリストブラシ設定レイヤーリストこれらのツールはドッキングした時に、その辺の長さに合わせて伸びます。幅はフロート時に調整したサイズのままになるので、フロート状態で太さを調整してからドッキングさせてください。・ドッキング不可なものスポイトこの種類に入るのはスポイトのみです。ドッキングする意味が感じられないので不可としました。他のウインドウもオプションからドッキング不可にはできます。・回転しないものその他すべてのウインドウこれらウインドウはドッキングさせるとサイズを維持したままになります。余った部分は灰色になりますが、普通にストローク描画もできます。灰色部分が十分余っていればその部分にさらに他のウインドウをドッキングさせられます。ドッキング後はサイズ調整不可になるので、フロート状態でサイズを調整してドッキングさせてください。ウインドウのオプション設定これらウインドウには共通のオプション設定があります。ウインドウの強制表示UI表示モード(通常はMENUキー)の切り替えですべてのUIを非表示にした場合もこのフラグが立っているウインドウは表示されたままになります。ドッキングしている場合は無視されます。ウインドウ移動の禁止ウインドウを移動しないようにします。ドッキング解除もされません。ウインドウのドッキング禁止ウインドウのドラッグ中にドッキングしないようにします。ドッキング中のウインドウに関しては何もしません。ウインドウのサイズ変更禁止ウインドウサイズ変更用に確保されているウインドウ下のバーを非表示にします。サイズ調整が必要ない場合にチェックしてください。ツール特有のオプション設定ウインドウの中には、そのツール専用の設定項目を持つものがあります。ナビゲーションこちらはCloverタイプのナビゲーション実装の時のオプションとほぼ同じ内容です。画像反転用のオプションが追加されています。(Cloverタイプの方にも)また、倍率表示等のテキストや、カメラ操作用のボタンが並んだパネルを独立してON/OFFするスイッチが用意されています。ブラシ各バーの目盛りの対数値を設定できます。使いやすい数値に調整してください。表示されている説明テキストがうるさければ消すことができます。表示されている説明テキストがうるさければ消すことができます。今回はブラシ作成で一番の肝となる濃度調整に関するパラメータを少し詳しく見ていくことにします。ブラシの濃さを決める基本的なパラメータとして流量と不透明度があります。見た目、この2つのパラメータの効果は似ているのですが、内部的には全く違うことをしています。この違いを理解することが重要なのですが、そのためにはブラシの内部動作を知る必要があります。図はブラシ設定内の「描画演算タイプ」に「通常」を選んだ時のブラシ描画の内部動作を、説明のため簡略化したものです。「通常」モードは最も基本的な演算タイプで、混合を伴わないブラシは大抵この演算を使っています。内部濃度バッファ1ピクセル=14bit(16384段階)のモノクロ(グレースケール)バッファです。描画色その時選択されている色です。ストローク内容Bの描画色をAの濃度をマスクとして使い、切り抜いたイメージです。これが実際に描画されるストロークになります。元レイヤー画像ストローク描画される前の画像です。そのとき選択されているレイヤーです。最終結果これがストローク描画した時、実際に目にする画像です。D(元レイヤー画像)にC(ストローク内容)のレイヤーを合成演算してEを生成するとき、Cのレイヤーに適用する不透明度です。レイヤーの合成演算ですから、ここでは不透明度だけではなく加算や減算等を指定して特殊なブラシを作ることもできます。(組み込みブラシのマジックは、ここで減算を使い、色を混ぜると黒くなる効果を出しています)Spotの濃度演算さて、モノクロのバッファにSpotが描画され、それが画面に表示されるまでの流れが理解できたところで、Aの部分の演算を詳しく見ていくことにします。「描画演算タイプ」に「通常」を選んだとき、その下に「通常時追加パラメータ」が表示されます。バッファに描画されている濃度とこれから描画しようとしている濃度のうち、重なる部分(つまり小さい方の数値)を、バッファに加算する比率を指定します。加算変調率すでにバッファに描画されている濃度があるとき、これから加算しようとしている数値を、透明部分の割合で変調します。文章からでは、ちょっと意味が捉えにくいと思います。以下実際に数値を与え、どんな効果があるのか見ながら説明していきます。0.00重複濃度加算率を変えるだけで、見た目が大きく異なる事がわかります。重複濃度加算率が1.00(100%)の場合0.20の流量がSpot同士が重なる度に100%加算されるため、ストロークの末端で0.20→0.40→0.60→0.80という濃度変化を起こし、以降はすべて1.00になっている事が見て取れます。最初は0.20ですが、次の描画はmin(0.20,0.20)*0.30=0.06が加算される事になるため、0.26となります。その次はmin(0.20,0.26)*0.30=0.06で、0.32となり、以降も0.06ずつ加算されます。ここでは流量が一定なため0.06ですが、仮に3つめのSpotの流量が0.5だった場合は以下のような計算になります。0.578重複濃度加算率が0.00の場合ここでは流量が一定なため、重複部分での加算がなくなることで、のっぺりしたストロークになります。仮に筆圧等で流量を変化させれば、その流用変化に素直に対応した濃度のストロークとなります。1.00加算変調率の方は効果がわかりにくいのですが、並べてみると下の方が薄くなっているのがわかります。ストロークの末端の方の変化は上下とも似ていて、加算変調率が1.00の方は濃くなるにつれて濃度変化が小さくなっていることが見て取れます。これは加算変調率を与えたことによる効果です。上の加算加算率が0.00の場合、2つめのSpotで重複する部分の濃度は0.20+min(0.20,0.20)*0.30=0.26です。最後の(1.00-0.20)が加算変調で、すでにバッファに描かれている濃度が0.20あるため、加算される濃度は透明部分の0.8を乗算することで弱められます。バッファに描かれてる濃度が濃くなればなるほど、加算される数値が弱められることで、1.00に漸近するような濃度変化となります。これは、加算変調率が1.00の場合で、変調効果も強さを調整することができるため実際の計算は以下のようになります。(1.0-元の濃度)*加算変調率)「描画演算タイプ」の「通常」に関しては、これで完璧に理解できると思います。ついでに他のタイプも少し説明しておくと、「常に上書き」は、Aのバッファを持たず、常にSpot濃度で直接合成してしまうタイプです。通常使う場面のないものですが、互換性のために残しています。「上書きしない」はAのバッファに0以外の数値(つまり少しでも濃度があれば)が書き込まれている場合、その後の処理をすべてスキップするタイプです。これは二値ペンを流量最大にして使う場合等、処理を軽くするために用意されています。「カラーバッファ」「混合」に関してはややこしいのでまた別の機会に解説しようと思います。Spotは、いくつかの異なったトリガで描画されます。ペン流量(移動トリガ)通常はこれを使ってブラシの濃さを決めます。ペンの移動により、一定距離間隔でSpotを描画します。間隔は別パラメータで指定します。「ペン流量(停止時トリガ)」ペンを止めた時に一定時間間隔でSpotを描画します。エアブラシやマジック等で使います。「ペン流量(時間トリガ)」ペンの移動速度により流量を自動変化させるタイプのトリガですが、表示品質に問題があり、利用はお勧めしません。互換性のために残してあります。今回は重要な部分なのでかなり突っ込んだ説明をしてみました。さわってみてください。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。