CloverPaint雑記

CloverPaintの解説・開発状況・内部仕様・利用法などについてつらつらと

ブラシ作成指南(その3) ~動的パラメータ設定

すでに概観で少し触れていますが、今回は動的パラメータ設定について少し詳しく見ていくことにします。

f:id:CloverPaint:20131112175224p:plain

この 図ではパラメータ設定用のボタンの左上が点灯しています。

これは内部に有効な関数カーブが存在する事を示しています。

 

 

動的パラメータ設定とは、各種パラメータをストローク中にアニメーション(動的に変化)させることができる機能です。

ただし、パラメータの右端に図のような赤丸で囲んだボタンが付いているパラメータに限られます。

動的パラメータ設定では、筆圧やストローク速度等の入力値に対して、どのようにアニメーションさせるか(そのパラメータの出力値を変化させるか)を関数のカーブとして設定します。

これとは別に、アニメーションには特に何の入力もなくても自動的に起きるものがありますが、これはジッターと呼び、Clover Paintでは別に扱います。

 

関数カーブの入力側に使われる外部トリガには以下のものが利用できます。

f:id:CloverPaint:20131116215353p:plain

・筆圧(通常は筆圧検知に対応したデジタイザーが必要)

・速度(ストロークの速度)

・傾き(現状Androidで利用できるのはCintiq Companion Hybridのみ)

・エッジ(入り効果)

・時間(入り効果)

・移動距離(入り効果)

・エッジ(抜き効果)

・時間(抜き効果)

・移動距離(抜き効果)

・ストローク時間位置(入り抜き効果)

・ストローク移動位置(入り抜き効果)

 

普通、よく使われるのは筆圧でしょう。

「ペン太さ」パラメータに対して「筆圧」 のカーブを設定すれば、「筆圧」の入力によって「ペン太さ」の出力を変化させることができるわけです。

エッジとはストローク中ペン座標の末端ポイント2点を結んだ線分にかかる効果です。

 

関数カーブは複数同時に設定することができます。そのとき、最終的な出力値はそれらの関数カーブをすべて乗算したものになります。 

 

カーブ指定方法

CBSv1では効果のかかる比率と、効果のかかり方の硬さ(指数関数を使ったカーブ)のパラメータ指定による簡単な指定方法しかなかったのですが、CBSv2ではスプラインや自由曲線によりS字型やより複雑なカーブを指定できるようになっています。

ただし、ブラシデータのコンパクトさとしては

硬さ指定>>スプライン>自由曲線

となりますので、特に必要なければ硬さ指定で済ませるのが良いでしょう。 

 

ちなみにスプライン・自由曲線での指定では、グラフを直接触ってカーブの編集ができます(スプラインでの直接編集はAndorid 4.0以降+デジタイザーが必要)

 

2-passストローク

一部入力に使われる外部トリガの利用には、2-passストロークスイッチをONにする必要があります。(関連性が高いため内部に入っていますが、これは選択したペン太さ等のパラメータに対するスイッチではなく、ブラシ全体に対する設定となります)

これはストローク全体の最終的な(または終了地点からの)長さや時間を利用して、その中の位置でアニメーションさせるために、ストロークが終わるまで計算が始められないタイプの外部トリガです。

2-passストロークを有効にすると、リアルタイムでの正確なストローク描画はなくなり、ポリゴンで近似した内容が描画され、ペンを離した時点で再度最初からストロークを描画するようになります。

 

最小値制限

出力値がここで指定した数値以下にならないよう、制限をかけることができます。比率設定で最低値制限に0.2を指定すれば、ペン太さが50の場合、50*0.2=10以下にならないようになります。絶対値設定と両方指定する事もできます。

ただし、最小値制限は入り抜き系の効果には適用されません。

 

 

最後に

動的パラメータ設定のカーブは書き味に大きく影響します。

私はGALAXY Note 10.1を開発機として利用し、スタイラス設定でマスター筆圧カーブを少し硬めにした上で組み込みブラシを作成していますが、同じような電磁誘導式スタイラスでも端末毎に筆圧カーブの特性は大きく異なるのが通常です。

システム標準の組み込みブラシはあくまでサンプルとして考え、自分が使い易いよう関数カーブを触ってみることをおすすめします。設定がある部分はボタンが点灯していますので、それを開いてみて自分好みに調整するだけのことです。

ブラシ作成指南(その2) ~ブラシ設定概観2

さて、前回はブラシパラメータのうち、Spotの形状や濃度に関わるパラメータを概観して来ました。

今回はその続きとなります。

Spotの位置や回転を制御するパラメータ 

・中心移動

・中心回転

・軸合わせ

・Spot動的回転

 

f:id:CloverPaint:20131112195609p:plain

これらパラメータを設定することで、Spotの形状はそのままに、ペン先からの位置の移動や回転をさせることができます。通常Spotの中心はペン先の真下にありますが、中心移動でSpotの下端をペン先にまで移動させることが可能です。これは筆などをイメージしたものです。

中心回転を使えばSpotを中心位置ごと、ペン先を軸に回転させることができます。変形で細長くしたブラシを回転させることで平筆を斜めに切った片羽ブラシのような表現になります。(画像を参照)

軸合わせパラメータは、端末の回転や、Cintiqではスタイラスを傾けた方向で中心回転をどのように補正するか指定します。

これらのパラメータと、傾き入力による動的パラメータ設定を組み合わせて、太さ・変形等を適切に設定すれば、スタイラスを立てた時は尖った、寝かせた時は帯状になるといったリアルな鉛筆を実現することも容易に可能です。(ただし傾き入力ができるのは現状Cintiq Companion Hybridのみ)

Spot動的回転を使うと、ストロークの進行方向に合わせ、Spot中心を軸にSpotを回転させることができます。やわらかく回転する筆先等を表現したいときに使います。

 

ストロークの濃度演算に関わるパラメータ

・Spot間隔

・濃度演算

・ストローク合成

 

ストロークの濃度演算に関する動作は非常に複雑です。

完全に理解するためにはブラシシステムが持っている、内部ピクセルバッファの構成と、それらの演算動作を知る必要があります。

ここでは、濃度演算とはSpotがストローク上で重なり合う時に、それらSpot間でどのような演算が行われるかの設定だと考えておいてください。

f:id:CloverPaint:20131112202415p:plain

 

(間隔倍率に5.0を指定しているのでSpot同士が半分オーバーラップしている)

Spot間隔はどの程度の間隔でSpotをストローク上に敷き詰めるか指定します。小さければ小さいほど密になりますが、その分パフォーマンスに問題が出ます。標準設定では10でペンの太さとSpot間隔が一致して、見た目数珠つなぎのようになります。

濃度演算の設定にもよりますが、Spot間隔が狭いほどSpot同士が重なりあう部分が多くなるため、流量でSpotを薄くしていても、結果として得られるストロークは濃くなります。流量補正をチェックすると、Spot間隔やその他パラメータを考慮して、流量の設定とストロークの見た目の濃さが比例するよう内部的に流量の値を補正するようになります。

ストローク合成はこれら演算が終わった後のストローク情報がキャンバスに適用されるときに使われる合成パラメータを指定します。ここはレイヤーの合成モード設定と同じです。ストロークが開始される毎に特別な透明レイヤーが指定した合成モードで作成され、ストロークが終わったら自動的に統合されると考えても問題ありません。

 

その他特殊なパラメータ

・ジッター

パラメータの右端にあるボタンから行える動的パラメータ設定は、筆圧など外部からの入力や状態の変化による効果を設定するものでしたが、こちらはパラメータに対して外部から何の入力もなくても継続的にかかる効果を設定します。いわゆるノイズです。

Spot単位ジッターはストローク描画中にSpot毎にランダムな値を適用します。線の太さを変えて凸凹させるなどの効果を与えることができます。

Stroke単位ジッターはストローク描画の開始時に一回だけランダムな値を適用します。線の色がストローク毎に微妙に異なるなどの効果を与えることができます。

Spot単位ジッターでは完全ランダムなホワイトノイズの他に、サインカーブやパーリンノイズを利用して、ある程度規則的な変化を与えることもできます。パーリンノイズとは一時期流行った1/fゆらぎのようなもので、自然界によくみられる揺れをシミュレートしたノイズです。

 

・縁取り

濃度演算の結果に応じて濃い部分を描画色、薄い部分を背景色にすることで縁取りします。

 

・色変化

ここで設定された値で、描画色と背景色の間を線形補間してブラシの色にします。

 

・テクスチャパターン

通常ブラシのSpotは描画色で全体が塗りつぶされ、Spotの形状・濃度でマスクされるわけですが、ここでテクスチャパターンを指定するとピクセル毎に違う色を適用することができます。

 

・破線タイプ

ストローク上の進行度合いで規則的にSpotの描画をON/OFFすることで破線にします。

 

 

これで全パラメータの概観が終わりました。

個別に詳しく見ていくと非常に難しい設定もあるのですが、それぞれのパラメータの役目はハッキリと分かれていて、設定できるパラメータの数が多いからと言って、必ずしも難しいわけではありません。

 

ブラシ作成指南(その1) ~ブラシ設定概観1

これから何回かに分けて、Clover Paintの新しいブラシの設定方法について説明していきます。

リファレンスでなく、出来るだけ普通の人にもわかるように順序を考えて話すつもりです。

 

今回はまず、ブラシの各設定項目について概観します。

最初に膨大な量の設定項目がどんな意味を持ってそこにあるのか、だいたいの見当がついていたほうが、最初から細かい部分を説明するよりも理解が早くなると思われるからです。今回は突っ込んだ説明を省くため、かなり感覚的なざっくりした表現で流していきます。ある程度詳しい説明は次回以降となります。

 

f:id:CloverPaint:20131112171108p:plain

 

適当なペンを選択中に「ペン」→「ブラシ…」を選択すると上のような画面が開きます。

Sandbox

一番上の「Sandbox」となっている部分に(自動更新がONだと)現在のパラメータによるストロークが常時表示されます。ここにペンを走らせて描き味を試したり、ピンチ操作でカメラの操作も可能です。

 

システム用のパラメータ

ブラシ設定用のウインドウですが、一部ブラシ描画とは関係ない、システム上の都合による設定が含まれています。

1つは画面一番上の「太さ/流量 ツールバー」となっている部分です。

次にその下の「サイズ固定モード」ですがこれをチェックしておくと、ズームでキャンバスの倍率が変わっても、ペンが見た目一定の太さを保つようになります。

他にも、寄付版を購入されている場合は、設定項目リストの一番下に「ワンショットUndo」の設定があります。これは見かけ遅延を少なくするため、未決定部分のストロークを描画しながら、決定したら描き直したり(このために利用している内部的なUndoのことをワンショットUndoと呼んでいる)少し未来のペン先位置を予測して描画しておくなどの機能を持ちます。書き味に大きく影響しますが最終的な描画結果には反映されません。

また、その上にある「ホバー中ブラシカーソルに適用する筆圧値」も描画結果には関係ないので、とりあえず無視しましょう。

逆に言えば、これ以外のパラメータはすべてブラシの描画結果に反映されます。

 

Spotの大まかな形状に影響するパラメータ

・ペン太さ

・ペン先形状

・変形

・砂ブラシ

これらには特に説明の必要もないでしょうが、一応少しだけ。

ペン先形状の四角は変形と組み合わせて硬い平筆を作れますが、テクスチャパターンによりSpotの形状を決める場合にも利用します。

砂ブラシは特殊で、Spotで指定した形状内をランダムなドットで描画するようになります。

 

Spotとは

ペン先の形をした「しみ」の1つ1つをClover PaintではSpotと呼びます。これらの「しみ」をペンの移動に合わせて継ぎ目がわからない程、密に並べることで連続したストロークに見せています。

 

Spotの濃度や詳細な形状に影響するパラメータ 

・ペン流量(移動時トリガ)

・ペン流量(停止時トリガ)

アンチエイリアス

・ぼかし

・ぼかし補間法

・テクスチャパターン

・パーリンノイズ

・形状濃度ポストエフェクト

 

ペン流量はSpotの濃度を指定します。後ほど出てくるストローク合成の「ペン合成不透明度」とは全く効果が違いますので注意が必要です。

ペン流量は通常、(移動時トリガ)で指定します。(停止時トリガ)は、ペンを止めた時に利用される流量です。マジック等の浸透圧でインクがどんどん出てくるような画材の場合に設定します。

アンチエイリアスはペンの移動座標を1ピクセル内で128分割して、Spotの描画位置を細かく濃度を調整しながら描画します。細いペンの抜き等を綺麗に出したい時には必須です。逆にドット打ちの場合には外しておく必要があります。多少重くなるので必要なければチェックを外す方がいいかもしれません。 

テクスチャパターンでは、(円形やぼかしなどの)システムで用意されているSpot形状・濃度変化では表現できない複雑な形状・濃度変化を持つSpotを指定したいときに利用します。 

 パーリンノイズはおおまかなSpot形状はシステムのまま、Spotに微妙な濃度変化を与えて質感を表現したいときなどに、様々なテクスチャを簡単に作成できます。

形状濃度ポストエフェクトはSpot濃度演算の最終段階に演算式を入れて濃度を調整します。組み込みブラシの平筆(硬い)で、濃度のなだらかな変化をスポット内のベタ面積の変化になるように変換する時などに使われています。

 

 動的パラメータ設定

f:id:CloverPaint:20131112175224p:plain

ここまで説明したパラメータの中には、赤丸で囲んだようなボタンのついているものがあります。

このボタンがあるパラメータは、「筆圧、ストロークの速度、ペンの傾き(Cintiqのみ)、ストローク中の位置(入り抜き)」などの入力値に反応してその出力値を変化させることが出来ます。

これら効果は、レンジバーで指定した数値に0.0~1.0の値を掛け合わせます。例えばペンの太さに50を指定していたら、効果カーブの設定で0.0~50.0までの変化を作ることができるということです。

 

概観といいながら、少し長くなって来ました。

続きは次回で!

Clover Brush Synthesizer version 2 実装

前回記事から、かなり間が開いてしまいましたが、予告していたブラシ処理の大幅改修処理が終わりました。すでに二日前にアップ済みです。

 

新しいブラシシステムを旧ブラシシステムと区別するため、ブラシシステムに名前を付けました。

新しいブラシシステム → Clover Brush Synthesizer version 2(CBSv2)

旧ブラシシステム → Clover Brush Synthesizer version 1(CBSv1)

 

Clover Paintはv1.20からCBSv2で、CloverメモやCloverメモLiteは現状のまま、CBSv1です。

Cloverメモは通常状態では旧ブラシシステムであるCBSv1の簡易版で、期間限定でオプションからClover Paintと同様のCBSv1フルバージョンが有効になるようになっていましたが、CBSv2が実装されて差別化されたので期間限定はなくし、これを標準仕様とします。

 

さて、CBSv2の解説を……と言いたいところなのですが、PCの有名ペイントツールと比較しても引けをとらない程の膨大な仕様を持つブラシシステムのため、これについては後々いくつかに分けて記事にする予定です。リファレンスマニュアルに関してもいつ用意できることやら……

 

今回はブラシ設定以外の新しい機能に関する説明と、CBSv2実装前からClover Paintを利用していた場合、新しいCBSv2に対応したブラシがそのままでは利用できないため、その導入について説明します。

 

新組み込みブラシの導入

 

最新のClover Paintでは、ブラシデータを簡単に交換する機能が追加されました。これは画像データ内にブラシデータを含んだ特殊なイメージパターンを出力する機能と、そのパターンからブラシデータを復元する機能で実現されています。

 

f:id:CloverPaint:20131112041002p:plain

 

 ブラシの入出力は、ペンツールを選択した状態で「ブラシ出力」や「ブラシ入力」を選択して行います。

「ブラシ出力」

現在のブラシ情報を含むパターンを新しいレイヤーに作成します。

出力時のダイアログにも書いてありますが、PNG等劣化のない画像フォーマットで、完全にピクセルが劣化なしにロードできるよう出力する必要があります。出力時にスケールや回転、1ピクセル以下の移動などが含まれないように注意してください。 

「ブラシ入力」

現在見えている画像内に含まれるブラシ情報をCloverショートカットアイコンとして入力します。画像を読み込む時は縮小等を行わないようにしてください。(v1.20はブラシ入力にバグがあるため、v1.20.01になっていることを確認してください。組み込みブラシに関する説明ダイアログが表示されればv1.20.01以降になっています)

 

上記「ブラシ入力」機能を使って、組み込みブラシを読み込むことができます。

Clover Paint:ブラシ設定

上記リンクにあるブラシデータを含む画像をClover Paintで読み込み(原寸で読み込んでください)、「ブラシ入力」すれば以下のような画面になるはずです。

 

f:id:CloverPaint:20131112042337p:plain

 

そのままキャンバス内で移動して使っても構わないとは思いますが、画面の狭い端末ではかなり窮屈になるため、重複している旧ブラシを消して上書きするなどの方法で整理した方が良いでしょう。

(ちなみに今回のバージョンからキャンバス上のCloverアイコンがスナップするようになっているので多少整理しやすくなっています)

 

Cloverリスト上のアイコンはそのままではプロテクトがかかっていて上書きできないので、長押しして「設定」→「クローバーアイコン移動の禁止」のチェックを外してください。上書きできるようになります。

 

なお、CBSv2の組み込みブラシは筆圧対応のスタイラスを搭載した端末での利用を前提とした調整を行っています。そのため、スタイラスのない端末では殆どのブラシが意図した動作をしません。その場合、上記リンクにはCBSv1ブラシもありますので、そちらを導入してご利用ください。(CBSv2は、ほぼ完全なCBSv1の上位互換となっています)

 

利用環境による組み込みブラシ微調整のお願い 

新しいブラシシステムでは、ブラシのペン先(spot)の中心をスタイラスの先端ではなく、少し移動した位置にズラす機能が追加されました。(筆などをイメージしたブラシではこちらの方が自然なためです)

ただし、ズラす方向が左上なため、標準の組み込みブラシは右利きを前提としたものになっていると言えます。左利きのため、これが使いにくいという場合は、ブラシ設定を開いて「中心回転」の値を30~45度程度に設定し直すことで使いやすくなります。

なお、Cintiq Companion Hybrid端末をお持ちの場合、ブラシの傾いている方向を検知できるため、「中心回転」を0、「軸合わせ」を「キャンバス回転とペン傾き方向 (Cintiqのみ)」に設定することで、自動的に傾いている方向の逆にペン先中心を持っていくことができます。ぜひお試しください。

 

 

カーソルの詳細な設定機能

 これまでスタイラス等で表示されるホバーカーソルは一種類だけでしたが、これまでのツール用カーソルに加え、システムカーソルとブラシカーソル、そしてそれらのカーソル形状を選べるようになりました。

また、これまでブラシカーソルは最大サイズの円形ブラシ固定で表示されていましたが、筆圧等による動的な変化を反映したリアルタイムなサイズで表示されるようになりました。ブラシ先端(spot)の回転等にも対応しています。

小さくなると見えにくくなるため、オプションで指定した一定サイズ以下になったときには組み込みのカーソルに変化させることも可能です。

f:id:CloverPaint:20131112052406p:plain

 (楕円がブラシカーソル、十字がツールカーソル、その右下の点がシステムカーソル)

ホバー中に表示されるカーソルは以下の三種類です。

システムカーソル

UI等の操作に利用される座標を示します。

Clover Paint内部のスタイラス設定から行える「スタイラスの補正(キャリブレーション)」により、端末が表示するホバーカーソルとはズレることがあります。

 

ツールカーソル

これまで、ホバーカーソルを表示する設定にしていた場合は、このカーソルが表示されていました。

ホバー中のツールとはショートカット(ホバー中)で利用されるスポイト等のことです。

スタイラス設定内の「ホバー中ツール中心オフセットX/Y」で、システムカーソルからの相対位置を設定すると、ツールカーソルをシステムカーソルとは別の位置にすることができます。通常はX/Yにマイナス値を与えて左上に移動するのが使い易いでしょう。

 

ブラシカーソル

ホバー中にもブラシカーソルを表示できるようになりました。

ブラシカーソルの中心位置はスタイラス設定内の「ブラシ中心オフセットX/Y(スタイラス時)」で設定できます。通常はX/Yにマイナス値を与えて左上に移動するのが使い易いと思われます。

ホバー中のブラシは筆圧が取れないため、通常は最大(1.0)筆圧が設定されていますが、ブラシ設定を開いて一番下の方にある「ホバー中ブラシカーソルに適用する筆圧値」を変えることで小さな値にすることもできます。最大筆圧では不自然なブラシの場合にはこちらで調整してください。 

 

最小サイズの設定

スタイラス設定の「ブラシカーソル(描画時)の最小サイズ」を変更することで、この値以下になった時に表示するブラシを変更することができます。

「ブラシ」を選択した場合は、どんなに小さなブラシになっても最小サイズで表示されます。それ以外を選択した場合は、選択したカーソルテクスチャが表示されるようになります。

 

ブラシの著作権についての考え方 

ブラシ出力時のダイアログにもありますが、ユーザーが作成し公開されたブラシに関する著作権はFAREAST Inc.が所持します。

これはブラシ部分にユーザーの著作権を認めてしまうと揉め事の元にしかならず、ブラシ交換システムを利用したブラシの自由な利用・発展の妨げになると考えたためです。

当然ではありますが、FAREAST Inc.の著作権が及ぶのはブラシデータ部分のみであり、ブラシデータを含む画像全体は含みません。例えばClover Paintのブラシデータを含む画像を販売するなどといった場合、購入者がその画像に含まれるブラシを抽出してそのブラシデータを、再配布を含め自由に利用する事を制限することはできませんが、画像そのものの著作権はその画像の作者に帰属します。わかりやすい説明文や、そのブラシを利用したかっこいいサンプル画像には、もちろんそれだけの価値があると考えています。

 

ただ、他人の作ったブラシをどう利用しようと勝手ですし、出典を示さず自分のサイト等にまとめてアップするのも自由ですが、さも自分が苦労して作ったように語るのはカッコ悪いのでやめましょう、とは言っておきます。 

 

※ 後日Clover Paintの掲示板の方にブラシ交換用スレッドを立てる予定です。私が作った、あまり一般的でないためシステム組み込みブラシとしては採用しなかったものも、そこで公開したいですね。

 

その他追加機能

 

新規作成時の背景パターン設定

 ギャラリー内の「新規」→「設定」から行える、イメージ新規作成時のフォーマット設定で、背景パターンを指定できるようにしました。(これまでは画像ツールからいちいち設定しなおす必要がありました)

 

確認ダイアログ等の表示・非表示設定 

「ギャラリー」→「オプション」→「ダイアログ」で、各種確認ダイアログの表示を制御できます。

 

ブラシサイズの見た目での固定

これはCBSv2の機能の一部なのですが、ペンの太さ等を設定するツールバーの左端アイコンを長押しすると「Lock」ボタンが表示されます。選択すると「見た目サイズで固定」状態になり、キャンバスをズームして倍率を変えてもブラシのサイズが見た目同じになるように自動的にブラシサイズが変わるようになります。この状態のトグルはショートカットからも行えます。

 

 

 次回からはCBSv2のブラシ設定を何回かに分けて説明していく予定です。

 

ブラシ処理 大改修前の雑多なアップデート

Clover Paint v1.19を公開しました。

今回はCloverメモも同時にアップデートされています。

 

次回大型アップデートでは、ブラシ・ストローク関連が大幅に変更される予定なのですが、この変更に取り掛かると完成まで他の修正を殆ど入れられなくなる可能性があるので、最近出てきた比較的修正が簡単な要望などをその前に実装しています。

 

次に、Clover SCで作った低遅延ストローク描画ですが(描画処理まわりの違いはどうしようもないものの)、アルゴリズム系の低遅延化処理はClover Paintでも取り込むことが可能なので、ブラシのパラメータとして実装してみました。ただし、Clover SCのために作った処理であること、特になくても機能的に困らない部分であること、遅延にこだわるならばClover SC開発費用を負担して欲しい、などといったことから、この低遅延処理はClover SC(寄付版)を購入した人のみ利用可能なよう制限をかけています。

ただ、Clover SCとClover Paint/メモでは描画系の処理が全く異なるため、Clover SCの描き心地がそのままClover Paintで再現されるかというと、機種により異なります。私の手持ちの端末で言えば、GALAXY Note10.1では何の問題もなく、ほぼClover SCと同レベルの描き心地になりますが、FlyerやThinkPad Tabletではメニューなど、余分なUI表示を完全に消去してやっとClover SCに近づく・・・といった感じです。手持ちの端末でどういう感触になるか購入前に試したいという人のためにCloverメモ LITE版では寄付版を購入していなくても、低遅延ストロークを試せるようになっています。とはいえ、あくまでこの機能は寄付版のオマケという位置付けです。この機能のためだけに寄付版を購入することはお勧めしません。 

 

塗り潰しのClover化とショートカットへの登録機能

 

キャンバスの単色塗り潰し(イメージ→編集面→塗り潰し→XXXという非常に深い位置にある処理)をClover化してキャンバスに置けるようになりました。また、ショートカットへも登録可能にしました。

 

ギャラリーからキャンバスの新規作成時にレイヤー構成等を指定可能に

 

これまでキャンバスを新規作成すると、単一透明レイヤーを作成していましたが、

Photoshopに魂を縛られた可哀想な人達のために、キャンバス構成を最初に指定して新規作成できるようにしました。

ギャラリーの「新規」を長押しすると「設定」があるので、それで設定画面に移動します。

  • レイヤー構成
  1. 透明レイヤーのみ
  2. 単色レイヤーのみ
  3. 単色+透明レイヤー

3種類のレイヤー構成から望みのものを選びます。 

 

  • レイヤー色

レイヤー構成で単色レイヤーを含む構成を選んだ時に、そのレイヤーを塗り潰す色をここで設定します。

 

  • 編集サイズ固定

これまでは「イメージ→設定→編集枠→固定…」で設定していた編集枠の固定サイズを、ここで指定して新規作成するかどうかのスイッチです。OFFにしていればこれまで通りの無限キャンバスになります。

 

  • 編集枠サイズ

編集サイズ固定を有効にしたとき、ここで設定したサイズでキャンバスの編集枠が固定されます。

 

 

  • 新規作成

上記設定を保存せずに、その設定を使ってキャンバスを新規作成します。いつもとは違う設定のキャンバスを作るときに利用してください。

 

  • ディフォルトに設定

この設定ダイアログに入らず、ギャラリーの「新規」ボタンを押した時に作られるキャンバスを、いまの設定に書き換えます。便利ですね。

 

 

低遅延ストローク処理ブラシ設定

 

Clover SCのアルゴリズム系低遅延処理と同等の処理をClover Paintでも有効にします。

f:id:CloverPaint:20130612211256p:plain

この機能はClover SC(寄付版)を購入した人へのオマケです。寄付版を購入して一度起動している事が機能解除条件になっています。

設定項目は、現状ブラシ設定の一番下に表示されます。

  • ワンショットUndo

低遅延ストローク処理のON/OFFを設定します。OFFにしておけばこれまでと同じ処理になります。詳しい処理の内容は以下の記事を参照してください。

 http://cloverpaint.hatenablog.com/entry/CloverSCDelay

この記事にもある通り、この機能を使うと通常のストロークよりも処理が重くなります。 なお、混合系のブラシではこの機能は使えません。

 

  • -限界サイズ 

ワンショットUndoを有効にするサイズの上限を指定します。前述の通り、ブラシ処理が通常より重くなり、太いブラシではかえって遅延が酷くなるケースがあります。端末の処理速度や利用シーンにより適切な限界サイズが変化するため、ここでユーザーが指定できるようにしています。Clover SCと違い、サイズだけでなくキャンバスの拡大率等でもストロークの速度は変わるため、この設定は気休めでしかありません。利用シーン毎に何種類かペンを用意しておくのがいいかもしれません。

 

  • -予測強度

スタイラスから座標データが送られてくる間隔を1フレームとして、何フレーム先まで予測ストローク描画を行うかを指定します。大きな値を指定すると、その分処理が重くなり、予測が外れてはみ出したり線が揺れたります。

これはClover SCでも実験的に、将来遅延の少ない端末が現れた時の描き心地を少しでも体験できるように実装した機能です。適切な値を指定することで、それなりに気持ちいい描き心地になるかもしれません。お好みで設定してください。

 

おまけ

低遅延処理や予測がついたので、ついでにClover SCで使っているペンのブラシパラメータも紹介しておきます。新規にキャンバスを作成した直後のペンブラシから、以下のパラメータをいじってください。

  • ブラシ設定

ペン太さ → 7.0
描画演算タイプ → 濃度マスクして最大値を書き込む
入り抜き設定:開始太さ → 0.7
入り抜き設定:終了太さ → 0.0
速度効果:動的速度レンジ最小 → 1200
速度効果:動的速度レンジ最大 → 5000
速度効果:速度 → 太さ相関率 → -0.4
速度効果:速度 → 太さの硬さ → 1.0
筆圧効果:筆圧 → 太さ相関率 → 0.9
筆圧効果:筆圧 → 太さの硬さ → 1.50
筆圧効果:筆圧 → 流量相関率 → 0.6
筆圧効果:筆圧 → 流量の硬さ → -1.0

 

  • 筆圧設定(こちらは参考まで)

筆圧範囲最小 → 検知筆圧最小+検知筆圧幅*0.25
筆圧範囲最大 → 検知筆圧最小+検知筆圧幅*0.9
筆圧固さ → 2.0
筆圧適用率 → 0.99

 

Clover SCで手持ちの端末を比べてみた

 

折角なので、手元にあるデジタイザに対応したAndroidタブレット端末をClover SCで調査した結果を紹介します。

  • GALAXY Note 10.1(4.0.4) - Exynos 4412 (4コア) 1.4GHz
  • HTC Flyer(3.2.1) - Snapdragon (1コア) 1.5GHz
  • ThinkPad Tablet(4.0.3) - Tegra2 (2コア) 1GHz

この三機種の比較になります。

 

まず、画面に余計な表示物が無い状態での、時間分解能(スキャンレート)の総合スコアの結果です。

f:id:CloverPaint:20130607000429p:plain

Guide[x] Csr[x] Dly[x] Ers[o] Inf[x]

HTC FlyerはAndroid3.xのためホバーの情報が取れないので、空白になっています。

結果としては、GALAXY Noteが比較的高い数値を示しています。

ただし、描画が行われないホバーの場合はTPTの方が高いスコアを出しています。

描画が行われる場合、HTC Flyerの方がTPTより高いスコアになっていますが、これは標準偏差が小さいためです。詳しくは最後にソースにしたデータへのリンクがあるのでDLしてご覧ください。

あと、気付きにくい部分ですが、スタイラススタイラス(5%cut)を比べると、他の端末は(5%cut)付きでかなりスコアが上昇しているのに比べて、HTC Flyerは殆ど変化がないことがわかります。5%cutは最大値と最小値から5%のデータを異常値としてカットしているため、標準偏差が縮まり、スコアが上昇する傾向があります。逆に言えば、カットしても変化しないのは異常な値が少なく、元々非常に安定した数値を出しているということです。これは優れた特徴です。(6月8日追記)

 

f:id:CloverPaint:20130607000455p:plain

Guide[o] Csr[o] Dly[o] Ers[o] Inf[o]

次に、 遅延ガイドやリアルタイム情報表示などを行った場合のスコアです。

表示がない場合と比べて、 GALAXY NoteとTPTのスコアの開きがかなり大きくなっています。またHTC FlyerがTPTよりスコア的に低くなっています。これはシングルコアのため、描画処理の重さが他の部分の処理も重くしているためだと考えられます。

 

f:id:CloverPaint:20130606232448p:plain

単純な1スレッドでのCPUベンチマークに近い「画面更新なし」の項目では多くの場合GALAXY Note10.1よりHTC FlyerやTPTの方が上回っています。ただし、描画更新有りの時はシングルコアのHTC Flyerはスコアが極端に落ちています。TPTは2コアなので、「画面更新あり」でも速度を保っていて不思議ではないのですが、やはりこちらもGALAXY Note 10.1よりも、画面更新を同時に行った時、全体の性能が大幅に低下するようです。Tegra2の特性でしょうか?興味深いところです。

 

全体的に見て、実際の利用シーンに近い状況では、GALAXY Note 10.1が他の端末よりかなりいいスコアを出していて、実際に触った時のイメージに近いスコアが出ているように思います。特に画面に余計な表示物がないときの時間分解能(スキャンレート)の総合スコアのスタイラスの欄が、実際の描き味に近いスコア差になっているように感じられます。やはりこの部分が描き味に大きく影響するのでしょう。

 

[2013/07/02 追記]

Cloverベンチマークですが、v 0.1xには相対スコアに関して致命的なバグがありました。また、上記グラフもその致命的バグの影響でGALAXY Note 10.1のスコアが低く出ています。正しいグラフはこちらになります。

f:id:CloverPaint:20130702025144p:plain

v 0.1xでは、ベンチマークの時にも、ストローク予測強度設定の効果がOFFになっておらず、GALAXY Note 10.1では予測3でベンチマークをとっていたため、本来の速度よりも3割ほど遅くなっていました。

v 0.2ではこれを修正し、常に効果OFFでベンチマークをとるようになりました。また、相対スコアの基準もそれに合わせたため、v 0.2では相対スコアが下がります。

正しいベンチマークでは常にGALAXY Note 10.1が圧勝でした・・・

 

 

以下は、表を作るのに使った元データへのリンクです。(ベンチマークはv 0.2のものに更新しました)

手持ちの端末をClover SCで計測し、データを追記するなどしてご自由にお使いください。

http://www.cloverpaint.net/Clover SC - 時間分解能.xlsx

http://www.cloverpaint.net/Clover SC - Cloverベンチマーク.xlsx

 

この記事で使った表は、Googleドキュメントに上記ファイルを送ればすぐに表示されます。 

Clover SC利用マニュアル

先の記事「Clover SCと描画遅延に関する考察」ではClover SCの開発動機などについて話しましたが、この記事は具体的な利用方法や表示されるデータの意味を解説します。

 

基本操作

BACKボタンでメインメニューを呼び出せます。

f:id:CloverPaint:20130605211829p:plain

メインメニューからは様々な情報表示に関する設定やベンチマークの起動などを行えます。詳細については後述します。

 

ストローク描画に関する操作は以下の通りです。

  • 左右反転 [三本指タップ]
  • 白黒反転 [三本指↓]
  • 消去 [三本指→]
  • Undo [タイラス ボタン1クリック/ボリューム↓]
  • Redo [スタイラス ボタン2クリック/ボリューム↑]
  • 消しゴム [スタイラス ボタン1押下中 + タッチ]
  • Undo/Redo [ボリューム]

筆圧範囲は起動後に検知した筆圧範囲で正規化されます。

利用する筆圧範囲で最初に一度ペンを走らせ、慣らしてからご利用下さい。

消しゴムに関しては、「メインメニュー ⇨ 設定→⇨消しゴム→」でボリュームボタンに割り当てることもできます。

Clover SCのストローク描画は、あくまで遅延の少ない描き味の良いペンストローク描画の体験サンプルです。セーブ機能等はありません。

 

メインメニュー ⇨ 遅延ガイド

遅延ガイドはペン描画の遅延を、肉眼で確認するための機能です。

遅延ガイドのボタンをONにすると、キャンバスに上から下へ一定速度で移動する、三本の緑の線が表示されます。この三本の線は1cm間隔になっていて、アニメーションの速度は毎秒10cmです。

ペンを移動させると、ペン先の位置と表示されるストロークの先端がズレますが、遅延ガイドのアニメーション移動速度にあわせてペン先を移動させることで、どの程度遅延しているかがわかります。例えば三本の線の間隔は1cmなので、その間隔と同じだけズレていれば1cmです。アニメーションは1秒に10cm移動しているので1秒*1cm/10cm=1000ms*1cm/10cm=100msで、遅延は100msということがわかります。

つまり、アニメーションと同じ速度でペンを移動させたときのズレ1mmにつき、10msの遅延があると換算できるわけです。

例えば、

下の写真は手持ちのGALAXY Note 10.1で遅延ガイドに合わせてペンを移動させ、EX-ZR200で高速撮影したもののうちの一枚です。 

f:id:CloverPaint:20130606000304j:plain

写真で、

ガイドのライン間のピクセル数 : 468

ペン先からシステムホバーカーソルまでのピクセル数 : 322

ペン先からストロークの末端までのピクセル数 : 435

となっています。ガイドのライン間の1cmが100msですから、

システムホバーカーソルの遅延 = 100x322/468 = 68.8ms

ストロークの遅延= 100x435/468 = 92.9ms

このようにして、比較的簡単に遅延を計測できるわけです。

 

ホバーカーソルは端末に用意されたオプションによるシステム内部の表示処理なので、アプリではこれ以下の遅延にすることは不可能だと思われます。ただ、92.9-68.8=24.1msとなり、この部分がアプリで発生している遅延だとしても、「Clover SCと描画遅延に関する考察」で書いたClover SCのアプリ起因の推測遅延発生量である10ms~18msよりも大きな値になっています。これはなぜかというと、実はアプリからイベントデータが来た瞬間に何も演算を行わず、単純に受け取ったペン先座標に点を打つだけのプログラムを書いても、ホバーカーソルよりも約1座標データ時間分(10数ms)の遅延が必ず発生することを確認しています。GALAXY Note 10.1ではこの部分にも何かアプリ開発者では手出し出来ない遅延の要因になる処理が入っているようです。つまり、実質的にアプリ起因の遅延量は24.1ms-10数msで、この場合、10数ms程度のようです。 アプリでは1座標データ時間(10数ms)程度しか遅延していないのに、見た目は92.9msも遅延しているわけです。端末やOS側に改善を求めたくなるのも、当然ではないでしょうか・・・

 

メインメニュー ⇨ 時間分解能

これを選択すると、どの程度の頻度でスタイラスやタッチパネルから座標データが送られて来ているか、実測したデータを確認するウインドウを開きます。つまり、これを選択する前に、キャンバスにスタイラスなどで落書きをしていないと、サンプルとなるデータがないため何も表示できないので注意が必要です。

f:id:CloverPaint:20130606011213p:plain

 

データ数は少ないと正確な値にならないので、1000くらいはあった方が良いでしょう。

総合スコアは分かりやすさのために単一の数値で時間分解能性能を表したものです。10000 / sqrt(平均値ms x (平均値ms + 標準偏差ms x 5))で算出しています。(sqrtは平方根)計算式は特に深い根拠があるわけではなく、感覚的にストロークの美しさとスコアが比例するような計算式を無理矢理でっちあげただけです。

平均値はデータの送られてきた時間間隔(ms)の平均値です。pps表示は1秒間に何回データが送られてきたかという数値に換算(逆数化)しただけのものです。

標準偏差は送られてきた座標データの時間間隔(ms)にどの程度のバラつきがみられるかを表します。すべて同じ間隔ならばこの値は0になります。

 

一般的に、平均値標準偏差は共に小さければ小さいほど、詳細な座標データが安定した間隔で送られて来ていることになるため、性能が良いということになります。当然、総合スコアも両方が小さい時に高いスコアを示すようになっています。

 

最小値は送られてきたデータの内、最も小さな時間間隔を示したものです。ただし、0msのデータは異常値として扱い、カウントしていません。

最大値は送られたきたデータの内、最も大きな時間間隔を示したものです。ただし、300ms以上のデータは異常値として扱い、カウントしていません。

 

下の方には(最小/最大5%カット)となっている表があります。これはデータ全体の内上下5%を異常値としてあらかじめ取り除いたうえで表にしています。こちらの方が感覚的な実態に近いかもしれません。

 

また、表の上に「Guide[x]/Csr[x]/Dly[x]/Ers[o]/Inf[x]」という表示がありますが、これはデータのキャプチャ中にどのような表示物が同時にONになっていたかを表しています。xなら常に非表示、oなら常に表示、-ならば非表示と表示が混ざっていたということです。

Guide=遅延ガイド

Csr=通常カーソル

Dly=遅延カーソル

Era=消しゴムカーソル

Inf=タッチ情報

これらの表示物はタッチイベントと同じメインスレッド内で描画処理が行われています。そのため、メインスレッドが重い場合にどの程度タッチイベントに取りこぼしや不安定さが現れるのかを、これら表示物のあるなし両方の条件でデータを取ることで判定できます。手持ちの端末で試した結果を公開するときは、この情報も含めた画像やテキストで公開することを推奨します。

 

総合スコアでは標準偏差をかなり重視していますが、標準偏差の大小で実際どんな変化があるのかピンと来る人は少ないと思います。以下は遅延ガイドと情報表示ONの状態でGALAXY Note10.1とThinkPad Tabletでぐるぐるとペンストロークを円状に描いた時のスクリーンショットを紹介したツイートです。

ツイートで言っているような、7ms間隔でイベントが来たり、そうかと思うと80ms以上の間隔が空いたりした場合、下のような気持ち悪いストロークになります。このとき標準偏差も大きくなるため、標準偏差が小さく保たれる端末が、いい端末だと判断できるわけです。実際にはメインスレッドでここまで重い処理を走らせることはないので、通常これほど極端な結果は出ないと思われますが。

 

メインメニュー ⇨ 時間分解能(表示OFF)

上記の時間分解能は普通にストローク描画している時にタッチイベントを常時監視し、そのデータを表示するものでしたが、これは一定時間ストローク描画すらも止めて、純粋にタッチイベントだけを取得した場合の時間分解能性能を取得するために利用します。表示結果に関しては通常の時間分解能と同じなので割愛します。

 

メインメニュー ⇨ スタイラス性能

これまでタッチイベントとして受け取った情報から、スタイラスが対応している情報を分析してウインドウに表示します。

f:id:CloverPaint:20130606022008p:plain

同時押し点数 : 指など、複数同時押しがサポートされている場合同時押しされた最大数を表示します

ボタン1/2 : タッチ中にスタイラスのボタン1やボタン2が押されたかどうかを表示します。実際には対応していても押したことがなければoにならないので注意してください。現状Wacomではボタンは1のみ対応、N-trigはボタン1/2両方使えるものが多くなっています。

ホバー中1/2 : ホバー中にスタイラスのボタン1やボタン2が押されたかどうかを表示します。

メタbits : Android OS 3.x以前、Androidがデジタイザに正式対応していなかった頃にボタン押下等の情報通知に使われていた領域です。1に変化したことがある部分のビットが立ちます。

筆圧範囲 : 検出した筆圧の最小から最大までの範囲を表示します。通常は筆圧検知に対応したデジタイザが送ってくるデータですが、静電容量の方式のタッチパネルでも、指の触れている面積等から筆圧らしきものを生成して送ってくれる端末もあるようです。

筆圧段階数 : 検出した筆圧の値が何種類あるかを表示します。様々な筆圧でストロークテストした後でここを見ることで、その端末の対応筆圧段階数を推測することができます。

サイズ範囲 : 端末によっては、指などでタッチパネルに触れているサイズが入ってくることがあります。

傾き範囲 : ペンの傾きの最小から最大までの範囲を表示します。OSとしては対応していますが、現状このデータを送ってくれる端末は存在しないようです。いちおう今後出てくるであろう新しいデジタイザ搭載端末に期待ということで、入れてあります。

方向範囲 : ペンの画面に垂直な軸まわりの方向の最小から最大までの範囲を表示します。OSとしては対応していますが、現状このデータを送ってくれる端末は存在しないようです。

距離範囲 : ホバリング時の画面からペン先までの距離の最小から最大までの範囲を表示します。OSとしては対応していますが、現状このデータを送ってくれる端末は存在しないようです。

 

メインメニュー ⇨ Cloverベンチマーク

Clover Paintのストローク演算を使ったベンチマークを走らせて、ペイントアプリのストローク処理に特化したCPU速度性能を割り出します。

f:id:CloverPaint:20130606024220p:plain

特に説明しなければならないようなことも殆どありませんが、このベンチマークの画面更新ありとなっている項目は、Clover Paintの処理とは全く違う表示ルーチンのため、Clover Paintで使った時の速度を表しているとは言えないことに注意してください。画面更新なしで、純粋にストローク演算だけの項目では、Clover Paintでもその部分は同じ処理をしています。

なお、このベンチマークではストローク処理と描画処理以外は同時に走らないため、ほぼ2コア(2スレッド)しか使われません。そのため、4コアCPU搭載端末でもあまりスコアが上がらない傾向があります。Clover Paintではレイヤーの合成、OpenGL画面処理、テクスチャへの画像転送等、2スレッド以上が同時に走るのがわりと普通なので、そういう意味でもClover Paintの実際の実行速度・使用感とベンチマーク結果のスコアが正しく比例関係になるとは限りませんのでご注意ください。

 

メインメニュー ⇨ タッチ情報

タッチ情報をリアルタイムにオーバーレイ表示するウインドウを開きます。

このウインドウを開いていると非常に処理が重くなり、タッチイベントの時間分解能や安定度に大きな悪影響が発生する端末が多いのでご注意ください。逆に重い場合にどの程度悪影響が発生するかを調べるのには役立つため、敢えてSurfeceViewを利用した別スレッドへの処理移動等の最適化をしていないとも言えます。

 f:id:CloverPaint:20130606093712p:plain

  • 筆圧・サイズ・メタBits・同時押し点数・傾き・方向・距離

これらに関してはスタイラス性能で説明しているものと同じです。

現在の状態がリアルタイムに表示されている点だけが異なります。

 

その下の欄は、最新の10個のタッチイベント履歴リストが表示されます。

各カラムの意味は以下のとおりです。

 

  • 時間

イベント発生時間として送られてきた時間の下4桁です。ミリ秒単位になっています。

ここで表示されている各イベントの時間の差を取って、時間分解能を算出しています。

 

  • 位置X,位置Y

スタイラスのその時の座標です。

 

  • 筆圧

スタイラスのその時の筆圧です。

 

  • 1/2

スタイラスのどのボタンがその時押されていたかを表示します。

 

  • 動作

イベントの発生原因です。

 

DOWN : 画面にデバイスでタッチした

MOVE : 画面に触れたままデバイスを移動した

UP : 画面からデバイスを離した

HOVER_ENTER : ホバリング検知距離までスタイラスを画面に近づけた

HOVER_MOVE : ホバー中にスタイラスを移動・またはボタン状態が変化した

HOVER_EXIT : ホバリング検知距離外に出た・または画面にタッチすることでホバリング状態でなくなった

 

 メインメニュー ⇨ 設定 ⇨ ペン先表示

ペン先の表示位置を設定します。スタイラスならばタッチ座標そのまま、指ならば右利き左利きを選べば、タッチ座標の斜め上にペン先が移動し、そこからペンストローク描画するようになります。

 

 メインメニュー ⇨ 設定 ⇨ 消しゴムボタン

消しゴムに利用するボタンを設定します。GALAXY NoteシリーズではスタイラスのボタンにS-Penジェスチャーが設定されてしまっていて、押したまま画面に触れると変な機能が起動してウザいのでそれを回避するための措置です。特定アプリではジェスチャ禁止に出来るようにして欲しいものだと切実に思います。最近サムスンは自己主張が強すぎです。

 

 メインメニュー ⇨ 設定 ⇨ ペンカーソル

ペンカーソルのON/OFFを設定します。

 

 

 メインメニュー ⇨ 設定 ⇨ ペン遅延カーソル

1データ分遅延したペンカーソルのON/OFFを設定します。

 

 メインメニュー ⇨ 設定 ⇨ 消しゴムカーソル

 

消しゴムを選択しているときの消しゴムカーソルのON/OFFを設定します。

 

 

 メインメニュー ⇨ 設定 ⇨ 予測強度

現在送られて来ている座標データから、これから移動するであろう座標位置を予測して、擬似的に遅延を少なくする機能の強度を設定します。遅延ガイドを利用して遅延を計測する際には当然ですが、予測なしにしておいてください。

 

 ヘルプ

キー操作や、このブログで説明したような内容を要約したテキストを表示します。

 

 

以上です。お疲れ様でした!