CloverPaint雑記

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

ストローク遅延レンダ

久々のアップデートです。

 

現在レイヤー関連の大幅な機能追加作業を行っていますが、仕様が大きく時間がかかっています。ビルド環境が変更されていてバグ修正部分だけを公開するのも難しく、ストロークやイメージ処理のエンジンの深いところから変わっていて非常に不安定なので公開したくてもできなかったというのが実情です。

最近ようやくエンジンを変えた事で発生していた不安定さが解消されてきたので、レイヤー関連の処理を切り離し、公開できる部分をまとめて今回のアップデート内容としました。

 

というわけでメジャーアップデートではなくバグ修正と細かい機能追加なのですが、主な変更点を備忘録として以下にまとめておきます。

 

 

ストローク遅延レンダの実装

ブラシをキャンバスのイメージデータに描き込む前に、ダミーとしてスプライトを表示しておく機能です。

ペイントソフトの多くは基本的に、ペンストロークに沿ってブラシ形状のデータを書き込むことで画像を描いていくわけですが、太いブラシや複雑な計算が必要な混合ブラシ等ではどうしても書き込みに遅延が発生します。そこで実際の書き込みの前段階、ブラシ形状をどこに書き込むかのデータだけを先に計算してそこにダミーのスプライトを表示しておくことで、見た目の遅延を少なくしようという考え方です。

 

表示できるのは単色の単純なスプライトを回転させる程度のものなので、テクスチャを貼っていたり混合など複雑なブラシでは一時的に全く違ったイメージが表示されることになりますが、あたりがつくので心理的には無いより良いと思われます。

 

ストローク遅延レンダは、以下のオプションでその機能を調整できます。

 

・ スプライト表示

ストローク遅延レンダ機能自体のON/OFFスイッチです

 

・ スプライト色の固定/スプライト表示色

スプライト色の固定をOFFにすると、現在のブラシ色でスプライトを表示します。ONにした場合はスプライト表示色で設定した色が常にスプライトの色として使用されます。

 

 ・ 暫定ストローク

ストローク遅延レンダは、キャンバスイメージへの描き込みがまだ終わっていない部分をスプライトで表示するものですが、これをONにするとスプライン補間などで必要なデータが揃っていないために確定していないストローク部分もスプライトで表示するようになります

 

ストローク予測

これまでのストロークポイントの動きから、その先のポイントを予測してスプライトを表示します。(この機能はCloverSC寄付版を購入・インストールしている場合のみ有効になります)

これまでワンショットUndoとして実装していた機能は予測したポイント部分のストロークもキャンバスイメージへの描き込みで実現していましたが、余分なストロークを毎回描いては消す処理が発生して極端に重くなるため、かなり細くて軽いブラシでしか満足な動作が得られませんでした。

そのため今回ストローク遅延レンダ実装と同時に過去の機能を削除し、こちらのストローク遅延レンダによるダミースプライト表示によるストローク予測表示に変更しました。

ただし、個々のブラシのパラメータは有効なので、ブラシ側のワンショットUndoに関する設定をしておかなければこちらのスイッチは無効です。こちらはワンショットUndoをまとめてON/OFFするマスタースイッチだと考えてください。

 

ストローク遅延カーソル

現在キャンバスイメージに実際に描画されているストロークの最新部分と、ダミーのスプライトによるストロークの境界部分にカーソルを表示する機能のON/OFFスイッチです。

 

ストローク遅延レンダ進行バー

ストローク遅延レンダーが動いてる間、その進行度合いを示すバーのON/OFFスイッチです。

 

・ マルチ・ストローク遅延

前回のストロークレンダリングが終わってない状態で、次のストロークを描ける機能のON/OFFスイッチです。

 

ストローク遅延レンダーが動いている間、レイヤー操作等ストロークの描画に影響を与える機能は一時的に使えなくなります。レンダリングが終わるまでお待ち下さい。

 

 

大きな画像を表示した時のパフォーマンスを改善

Clover Paintは半透明ピクセルを含むアイコンの編集や、モバイル端末でのラフスケッチなどの用途を想定してデザインされています。「4000pixelを超えるような大きな画像を全画面表示しながら複数レイヤーで着色する」といった用途は当初想定してない利用シーンなのですが、多数のレイヤーでメモリ効率良く動作するよう考えて設計したために、そのように利用するユーザーが一定数存在するようです。

 

そのため当初50%に設定していた縮小制限を画像サイズに合わせて緩和する措置を入れるなどして対応していましたが、表示する画像が大きくなると描画処理が重くなりフレームレートが下がってカクカクする(特にナビ表示など画面全体が入るウインドウを複数表示した場合に顕著)という問題が発生していました。

 

今回キャンバスの表示データ構成と描画エンジンを修正することでこの問題を解決したため、大きな画像で重くなる現象はなくなりました。同時にこれまで50%が下限だった縮小制限のオプションを10%に緩和しました。

 

 

その他修正点

細かい部分ではレイヤーのクリップオプション項目が増えています。

修正されたバグも多いのですが、エンジンを変えたために見た目機能は変わらなくても様々な部分で修正が入っています。そのため新たにバグが発生している部分もあるかもしれません。その場合はお知らせください