Hirosaji Tech Blog 🍙

Web開発の記事が多め。絵師支援の記事も少し。

Pythonと地図ポリゴンで、絵の発想力を鍛える

先日の京都芸術大学(KUA)の特別授業にて、面白いワークショップを体験しました。
「不規則な形の"枠"を描いて、その"枠"の中を絵で埋める」というワークショップです。

5秒で理解できるスゴいスライド(画像はKUA公式ツイートより)

"枠"の形から描くものを連想して発想力を鍛える、という斬新な内容でした。

短時間で、かつ何度でも新鮮な気持ちで取り組める、絶妙な設計のワークです。
そして今回、このワークにさらに手軽に取り組めるよう、不規則な"枠"を自動生成するPythonスクリプトを書きました。

この記事では、そのスクリプトの概要と使用例を紹介します。

DEMO

Polygon Generator for Drawing | Google Colab

生成する画像例

生成する画像のサンプルはGoogle Driveに置いてます

なぜ自動生成するか

ワークショップを紹介した寺田てら先生は、
「自分で"枠"を用意し続けるとどうしても形にクセが出るため、繰り返して取り組む場合は、友人などに用意してもらうと良い」
と、意訳するとそのようなことを仰っていました。

先生の言うように、"枠"作りを友人に頼むのも一つの手ですが、"枠"のバリエーションを求めると複数人に頼む必要がでてきます。さすがにそれは心理的ハードルが高い。
そんなわけで、自動生成できるようにしようと考えました。

どう作ったか

不規則な"枠"の自動生成は、意外と前例が見つかりませんでした。
なので、いざ作るとなると、細かい条件やルールをゼロから考える必要がありました。

ただ、今回の実装では少し横着しました。

例えば、都道府県や市区町村の境界線。
イラストの"枠"に応用できると思いませんか。

チーバくんという偉大な前例あり(画像はトラベルWatchより)

そんな着想をもとに今回は、地図のポリゴンデータを加工して、簡易的に"枠"を生成するスクリプトを書きました。

要点の解説

用意したスクリプトには、それほど込み入った処理を含めていません。
詳しくはフルコードを掲載するDEMOをご覧ください。

ざっと要点だけ説明すると、適当な地域のポリゴンデータをランダムで抽出し、そのポリゴンに次の加工を施しました。

  • 簡素化(simplify)
  • 平滑化(smoothing)

この2つの処理によって鋭角なエッジを減らし、使いやすい"枠"を生成できるようにしました。
2つの処理は、GeoPandasを使えばそれぞれ1行で書けます。

# Simplify
simplify_area = sample_area.simplify(tolerance=0.65)

# Smoothing
smooth_area = simplify_area.buffer(1)

引数の数値は、データセットに合わせて調整しましたが、好みに合わせて再調整しても良いと思います。
ポリゴンデータは何を使っても良かったのですが、今回はGeoPandas同梱のデータセットを使いました。

参考リンク

実際に使ってみる

実際に自分でも、"枠"を生成してワークに取り組んでみました。

枠を埋めるポーズを考えるだけでも楽しい

枠を一つの物体として捉えるのも面白い

実際にやってみると、すごく楽しいです。
絵師にとって真っ白なキャンバスから描く題材を考えるのは大変な工程ですが、この不規則な"枠”が絶妙な制約になって、アイデア出しを促進してくれるようでした。

"枠"を埋めるためなら何を描いても良く、画力が問われないハードルの低さも魅力です。
今後、自分でも息抜きやウォーミングアップに使っていこうと思います。

おわりに:絵師を支援するコードを書いてます

今回は、イラストレーターの発想力を鍛えるワークショップの課題を自動化しました。
PyCon JPでの発表を皮切りに、今回のような絵師を支援するためのコードをたまに書いてます。

もし関連するSlackやDiscordなどご存じの方がいたら、Twitterで教えてください🙏