CloverPaint雑記

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

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を設定します。

 

 

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

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

 

 ヘルプ

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

 

 

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