アルファで文字を表す。
太い文字をグレーで描きます。色の画像と、不透明度だけのアルファ画像をSVGのSourceGraphicとSourceAlphaで取り出せます。縁をつくる形にはアルファを使います。
形 = SourceAlpha
試してみよう: 「形」で短く太い言葉を選びます。Oの閉じた穴とCの開いた形を比べ、外側も内側も効果が保たれるか見ましょう。
グレーで形をつくる。
その中を光に通らせる。
明るさごとに、新しい色を。
変換表で各ピクセルの明るさを新しい色にします。
形 + 陰影 + 変換表 → 素材考え方 / 形と色を分ける
まずグレーで光を完成させると金属表現を調整しやすくなります。文字が輪郭、内側の縁が丸み、動くグラデーションが反射をつくり、変換表で同じ光に新しいパレットを与えます。
SVG標準のフィルターだけを使い、WebGLや画像テクスチャは不要です。システムのサンセリフ書体で文字を編集できます。準備なしで試せて、サンプルの編集にはSVGとJavaScriptの基礎が役立ちます。
太い文字をグレーで描きます。色の画像と、不透明度だけのアルファ画像をSVGのSourceGraphicとSourceAlphaで取り出せます。縁をつくる形にはアルファを使います。
試してみよう: 「形」で短く太い言葉を選びます。Oの閉じた穴とCの開いた形を比べ、外側も内側も効果が保たれるか見ましょう。
SourceAlphaをぼかし、鮮明な元のアルファから引きます。正の値が形の内側の帯になり、文字の穴にも縁ができます。黒い帯をグレーの塗りに乗算して陰影をつくります。
arithmetic合成でk2=1、k3=−1を使い、最初の入力を鮮明なアルファにします。結果は許容範囲に収まります。ぼかしを広げると縁も広がり、画像処理で面取りの印象をつくります。
試してみよう: 「縁」で内側の縁を1から20へ増やします。細い線ほど強く影響されることを観察しましょう。
単色を線形グラデーションに替え、最初と最後を同じ明るさにしてspreadMethodをrepeatにします。gradientTransformを1周期動かすと同じ画像に戻り、縁は固定したまま光が通ります。
アニメーションではグラデーションの変換だけを更新します。素材と形は固定です。スライダー、ドラッグ、矢印キーで同じ位相を調整します。
試してみよう: 「光の移動」で短い周期と長い周期を比べます。同じ速度なら短い周期ほど文字に多くの帯が見えます。
グレーのピクセルはRGBが同じ値です。feComponentTransferで各成分を別々に変換し、type="table"で等間隔の値を補間します。5色がグレー0・25・50・75・100%の色を決めます。
color-interpolation-filters="sRGB"を使うとカラーピッカーの値と一致します。アルファは変えず輪郭を保ちます。色の帯と数値表は実際のフィルターの値を示します。
試してみよう: 「色」と色タブで潮の金色をミントの光に替え、50%の色を編集します。変換だけが変わり、グレーの光は同じです。
小さなガウスぼかしで素材を柔らかくし、feTurbulenceの再現できるノイズを無彩色にします。形で切り抜いてグレーに少し混ぜてから色を変換し、粒子と光を同じ色の規則に従わせます。
反射が動いてもノイズのシードは固定なので、粒子を増やしてもちらつきません。ぼかしすぎると細い穴が閉じたり輪郭が柔らかくなります。小さな書き出しも確認しましょう。
試してみよう: 光を止めて粒子0%と25%を比べ、読みやすい量へ減らします。柔らかさ0と3も比べましょう。
SVGには文字、グラデーション、フィルターをまとめて保存します。再生中ならループする光、停止中ならその瞬間を保存します。システム書体はOSで形が変わるため、輪郭を固定したいときはベクター編集ソフトでパス化してください。
画面保存は現在の素材とクリーム背景を1600 × 1000のPNGにします。単独HTMLには操作をすべて収録。動きを減らす設定では停止で始まり、非表示や画面外では更新を止めます。
試してみよう: 動くSVGと停止したPNGを保存します。前者は再利用できるつくり方、後者は選んだ一瞬を残します。
実践 / ひとつの光、ふたつの表情
強いハイライトで停止し、言葉、周期、縁、位相を固定します。冷たい青から始め、変換表の5色だけを替えて暖かい作品にします。
2つの画像を比べましょう。形と光が一致し、色が異なる表情を生むはずです。
文字に戻る ↑サンプルにはSVGの組み立て、素材の設定、パレットの表、スタイルを収録しています。HTMLをブラウザーで開くだけで、サーバー、外部フォント、インストールは不要です。
<feComponentTransfer color-interpolation-filters="sRGB">
<feFuncR type="table" tableValues="0.027 0.090 0.325 1.000 1.000" />
<feFuncG type="table" tableValues="0.027 0.235 0.737 0.741 0.953" />
<feFuncB type="table" tableValues="0.098 0.569 0.914 0.349 0.882" />
<feFuncA type="identity" />
</feComponentTransfer>個別のソース: SVG素材の組み立て · 操作と書き出し.