以下、NotebookLMでレポート作成したものを基にまとめました。
Kritaで描く数式の魔法:SeExprプロシージャル生成入門
こんにちは!デジタルアーティストの皆さん。普段、ブラシを使って一筆ずつ色を置いていく作業に慣れているあなたに、今日は「数式で絵を描く」という新しい魔法をお教えします。
私たちが使うのは、ウォルト・ディズニー・アニメーション・スタジオが開発し、Kritaに搭載されている**SeExpr(エスイーエックスパー)**という技術です。これを使えば、無限の解像度を持つテクスチャを、たった数行のコードで作ることができるようになります。
1. はじめに:プロシージャル生成とは何か?
デジタルイラストには、大きく分けて「ラスタ形式」と「プロシージャル形式」の2種類があります。
普段描いているイラストは「ラスタ形式」です。これは小さなドット(ピクセル)の集まりで、拡大するとぼやけてしまいます。一方、今回学ぶ「プロシージャル形式」は、コンピュータに「この場所にはこの色を塗って」という命令(数式)を計算させる方法です。
特徴 ラスタ形式(写真・ドット絵) プロシージャル形式(数式による生成)
仕組み ピクセルの格子(グリッド) 数学的なアルゴリズム(計算式)
解像度 固定(拡大すると劣化する) 無限(どんなに拡大しても鮮明)
メモリ消費 解像度の二乗に比例して増大 極めて軽量(数KBのスクリプトのみ)
修正 手作業での塗り直しが必要 数値を変えるだけで瞬時に全体が変化
「なぜ今、数式でテクスチャを作るのか?」――それは、メモリを節約しながら、雲や岩、魔法のような複雑な模様を、最高画質で、かつ自由自在に生み出せるからです。
2. Kritaでの準備:最初の1色を塗る
まずは、KritaでSeExprを動かしてみましょう。
- 塗りつぶしレイヤーの作成: レイヤーパネルの「+」ボタンの横にある矢印から「塗りつぶしレイヤー」を選択します。
- SeExprを選択: ジェネレーターのリストから「SeExpr」を選びます。
- コードを書く: ダイアログの 「Options(オプション)」タブ にあるテキストボックスに、以下のコードを入力してください。
変数 $color に色を代入(赤, 緑, 青)
$color = [0.5, 0.5, 1];
最後に変数名を書くことで、その値がキャンバスに出力される
$color
メンターのアドバイス: SeExprでは、色は [赤, 緑, 青] という3つの数字がセットになった「ベクトル」で定義されます。各数値は 0.0(完全な暗闇)から 1.0(最大輝度)の範囲で指定します。例えば 0.5 は「半分くらいの明るさ」を意味します。
ここで大切なルールが1つ。「代入($変数 = ...)」の行の最後には必ずセミコロン(;)を付けてください。 ただし、最終的に結果として出力したい変数の行には、セミコロンを付けません。
画面が淡い青色に染まったら、それがあなたの魔法の第一歩です。次は、この色が「場所」によって変わるようにしてみましょう。
3. 魔法の地図:座標変数 $u と $v の理解
キャンバスのどこに何を描くかを決めるために、SeExprには「地図」が用意されています。それが変数 $u と $v です。
- $u: 横方向の位置(左端が 0.0、右端が 1.0)
- $v: 縦方向の位置(上端が 0.0、下端が 1.0)
これらは「正規化された座標」と呼ばれ、キャンバスの実際のサイズに関係なく常に 0 から 1 の範囲で変化します。
$color = [$u, 0.5, 0.5];
$color = [$u, $v, 0];
直感的な理解:
- $u(横)の変化は、水平方向の色の移り変わりを作ります。
- $v(縦)の変化は、垂直方向の色の移り変わりを作ります。
座標がわかれば、どこに何を置くか自由自在です。次はここに自然界のような「揺らぎ」を加えてみましょう。
4. 有機的な模様の種:noise と fbm の役割
数式で自然な模様を作るには、「ノイズ関数」が欠かせません。SeExprでノイズを扱うときは、まず座標をまとめた変数 $P を定義すると便利です。
$P = [$u, $v, 0]; # 2次元の座標を3次元のベクトルとして定義
fbm($P * 10) # ノイズ関数を呼び出す
主な関数の視覚的特徴は以下の通りです:
- noise($P): 基本的な滑らかな揺らぎ。
- 雲の切れ間のような、穏やかな変化を作ります。
- fbm($P): フラクタル・ブラウン運動。
- 複数の周波数のノイズを重ね合わせることで、岩の表面や複雑な雲のようなディテールを生み出します。
- voronoi($P): ボロノイ(細胞状)パターン。
- ひび割れた地面や細胞、ステンドグラスのような境界線のある模様を作ります。
エキスパート・チップ: SeExprは内部的に 32ビット浮動小数点(High Dynamic Range) で計算されています。非常に精密な色の階調を扱えるため、プロの映画制作の現場でも耐えうる高品質な画像が生成できるのです。
5. パターンを切り分ける:if 文による条件分岐
ノイズはそのままでは「霧」のようにぼんやりしていますが、if 文(条件分岐)を使うとはっきりした形に切り分けることができます。
$P = [$u, $v, 0]; # 座標ベクトルを定義
$n = fbm($P * 10); # 密度10の複雑なノイズを計算
if ($n > 0.5) { # もしノイズの値が0.5より大きければ
$color = [0.2, 0.5, 0.1]; # 陸地(緑)を代入
} else { # それ以外(0.5以下)なら
$color = [0.1, 0.1, 0.8]; # 海(青)を代入
} # 条件分岐の終了
$color # 最終的な色を出力(セミコロンなし)
条件分岐は、ぼんやりした霧に輪郭を与える「ハサミ」のようなものです。これによって、後述するディズニーの事例のような「意志のある造形」が可能になります。
6. 応用実践:ディズニーの「風の精霊」に見るプロシージャルの力
あなたが今学んでいるこの技術は、世界最高峰のアニメーション制作に使われているものと同じツールです。映画『アナと雪の女王2』では、目に見えない風の精霊「ゲイル」や、エルサの魔法の表現にSeExprが活用されました。
ディズニー・アニメーションの活用事例: 「エルサが風嵐の中で戦うシーンでは、物理シミュレーションだけに頼るのではなく、SeExprを用いて布の形状や流れを芸術的に直接制御しました。また、風の精霊ゲイルの表現では、アニメーターの演技(リグ)をスクリプトでサンプリングし、シミュレーションの強度や活動状態をエクスプレッションで動的に変化させることで、キャラクターとしての感情を吹き込んだのです。」
単なる「自動生成」ではなく、今回学んだ if 文や noise の組み合わせによって、アーティストが意図した通りの動きや形を作り出す。これこそがSeExprの真の力です。
7. まとめ:あなただけのプリセットを作ろう
最後に、作った魔法(スクリプト)を保存する方法を確認しましょう。
KritaのSeExprダイアログ上部にある「SeExprプリセットを新規保存」ボタンを押せば、名前を付けて保存できます。「Render Script to Thumbnail」機能を使えば、スクリプトの結果がそのままアイコンになるので、自分だけのテクスチャ・ライブラリを簡単に構築できます。
初心者が覚えるべき3つの黄金律:
- 最後に出力変数を置く: スクリプトの最終行には表示したい変数名(例: $color)を書き、そこにはセミコロンを付けないこと。
-
座標($u, v)を地図にする:
uと$vが 0〜1 の範囲であることを利用して、位置による変化を作ること。 - ノイズを制御して有機的に: noise や fbm をそのまま使うだけでなく、if 文などの論理構造で「意志」を与えること。
おめでとうございます!これであなたも数式の魔法使いの仲間入りです。最初は難しく感じるかもしれませんが、数値を変えるたびに画面が変わる楽しさを忘れないでください。自分だけの魔法を、たくさん見つけていってくださいね!




