TracerStar — 写真トレースと境界認識ブラシのSwiftUI描画アプリ

Mobile

概要

TracerStarは、写真を読み込んでその上から直接トレースできるiOSアプリのプロトタイプ/サンプルです。特徴は「境界を認識するブラシ」と「領域ロックされた塗り(リージョンロック)」、および複数レイヤーに分けてストロークを重ねられるレンダリング方式で、描画のはみ出しを抑えつつ精細な線・塗りを実現します。内部の描画ロジックはカスタムのCoreGraphicsエンジンで実装されており、子供向けに操作を簡素化した別エンジンも同梱されています。SwiftUIベースのUIと、CoreGraphicsによるピクセル操作やマスク処理を組み合わせた構成です。

GitHub

リポジトリの統計情報

  • スター数: 1
  • フォーク数: 0
  • ウォッチャー数: 1
  • コミット数: 2
  • ファイル数: 5
  • メインの言語: Swift

主な特徴

  • 写真を読み込んでその上にレイヤ化されたストロークでトレース可能
  • 境界検出を活用するブラシでエッジを越えない描画(マスキング)
  • 領域ロック塗りで境界を越えない塗りつぶしを実現
  • 子供向けに操作を簡略化した軽量エンジンを別に搭載

技術的なポイント

TracerStarのコアは「カスタムCoreGraphicsエンジン」による描画パイプラインです。一般的に考えられる実装アプローチは次の通りです。

  • レイヤリングと合成:ストロークは複数の描画レイヤ(オフスクリーンのCGBitmapContextやUIImageとして保持)に描かれ、最終合成時に重ね合わせることで編集や表示順の管理を行います。これにより個別のストロークや領域に対する消去/再描画が容易になります。

  • 境界認識ブラシ:写真上の「境界」を尊重するには、ピクセルベースのエッジ検出(輝度や色差を利用したしきい値判定)や、既存レイヤのアルファを用いたマスク処理が考えられます。ブラシの描画はまずマスク領域を生成し、そのマスクを利用して実際のストロークを合成することで、エッジを越えない描画を実現します。

  • 領域ロック塗り(リージョンロック):境界で囲まれた領域への塗りは、境界を越えない塗りつぶしアルゴリズム(改良型のフラッドフィル/スキャンライン法)や、境界をマスクとして事前にラスタライズしておく手法で実現できます。境界の不連続やアンチエイリアスに対しては、許容色差や距離で拡張したしきい値を使い、「にじみ」を抑えつつ自然な塗りを行います。

  • マスクとコンポジット:CoreGraphicsの合成モード(blend modes)やクリッピングパスを活用し、既存の画像やストロークをマスクとして利用することで「はみ出さない」合成を行います。オフスクリーンでアルファ合成を行い、メインCanvasには合成済みイメージだけを描画するのが典型的です。

  • 入力処理とパフォーマンス:タッチ入力やApple Pencilを想定したスムーズなストローク描画には、入力点の補間(Catmull-RomやBezier近似)、筆圧に応じたブラシサイズ変更、ダブルバッファリングでのオフスクリーンレンダリングが重要です。CoreGraphicsでピクセル操作を行う際は、CGBitmapContextの直接操作やキャッシュ、必要に応じて低レベル最適化(vImageやMetalへの移行検討)で遅延を抑えます。

  • 子供向けエンジン:よりシンプルな体験を提供するため、ブラシの種類や操作を限定し、リアルタイム判定やエフェクトを省いた軽量パスを用意している点が設計上の特徴です。学習用途や低スペックデバイス向けのフォールバックとして有効です。

これらの要素をSwiftUIのビュー階層と組み合わせることで、モダンな宣言型UIとピクセル単位の細かなレンダリング制御を両立させています。今後の改善点としては、マルチレイヤ編集のUndo/Redo、ブラシプリセット管理、MetalによるGPUアクセラレーション、より高度なエッジ検出(Canny等)の導入などが考えられます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • README.md: file
  • TracerStar.xcodeproj: dir
  • TracerStar: dir
  • TracerStarTests: dir
  • TracerStarUITests: dir

まとめ

SwiftUIとCoreGraphicsを組み合わせた、境界認識描画にフォーカスしたトレースアプリのプロトタイプです。

リポジトリ情報:

READMEの抜粋:

TraceStar

TraceStar is an iOS SwiftUI app that lets users import photos and trace directly over them using boundary-aware brushes, region-locked fills, and layered stroke rendering powered by a custom CoreGraphics engine.

What it does

  • Import a photo and trace on top with layered strokes
  • Fill regions without bleeding across boundaries (region-locked fill)
  • Mask/contain brush strokes so drawing respects edges
  • Includes a separate child-friendly engine for simpler interaction

Tech …