「炎」を表現する

揺らめく火舌、白熱から赤へ沈む温度、立ちのぼる火の粉。情熱・熱気・生命力を、写真に頼らず動きで伝える表現テクニック。

炎の生成アート(揺らめく火舌と火の粉)

このページについて

  • 「炎の表現」とは:揺らめき・温度勾配・火の粉で“熱”を感じさせる表現。明るく白い根元から橙・赤へ、上にいくほど細く千切れて煙へ消える——この温度の流れと上昇する乱流が「炎らしさ」の核。
  • こんな時に使う:イベント/ライブのLP・炭火/焼き料理・情熱系ブランド・キャンペーン・ゲーム/エンタメ・冬の暖(暖房/焚き火)。
  • 関連タグ🌺 温かみ🍴 飲食店・料理❄️ 清涼感(対極)
  • AIへの伝え方のコツ:「炎っぽく」では曖昧。「白熱→橙→赤→煙の温度勾配」「上昇+横揺れ+拡散の3軸」「火の粉を加算合成で舞わせる」のように、温度・動き・合成方法を数値と語で指示する。

表現の引き出し

🎨 揺らめく炎のゆらぎ

📝 表現の語彙

日本語: 炎、揺らめく火、火舌、火の粉、燃え上がる、熱気
英語: flame, flickering fire, flame tongues, embers, sparks, heat haze
抽象キーワード: passion, energy, warmth, vitality, intensity

💬 AIへの指示テンプレ

「ほぼ黒の背景に、下から立ち上る炎を生成アニメで表現してください。多数の粒子を画面下から上へ走らせ、加算合成(additive / blendMode ADD)で重なるほど明るく光らせます。色は粒子の寿命で温度勾配に:生まれた瞬間=白熱(#fff4d4)→橙(#ff8a20)→赤(#e83a1a)→暗赤→煙(消える)。重要:①根元は太く明るく、上昇するほど細く千切れて消える ②横揺れ(lick)はノイズで上にいくほど大きく ③ノイズで“房(tongue)”に塊化させ、明るい火柱と暗い隙間を作る ④火の粉を数十粒、本体より高く舞わせ点滅させる ⑤等速(linear)を避け、素数的に異なる周期で揺らして“止まって見える瞬間”を作らない。高さ180px・prefers-reduced-motion対応。」

🎯 似合うシーン

ライブ/イベントLP・炭火/焼き料理・情熱系ブランド・ゲーム/エンタメ・冬季キャンペーン・ヒーロー背景

🔧 実装手法

p5.jsの粒子+上昇フローフィールド。寿命で温度勾配(白熱→橙→赤→煙)、加算合成で発光、ノイズで房に塊化+横揺れ(上ほど大きく)、火の粉は別粒子で点滅。微フェードの暗ヴェールで尾を残し、ノイズの時間発展で連続フリッカー(reduced-motionで静止)。

📄 コード例を見る
javascript
// Emberveil — 立ち上る炎の火舌を粒子+上昇フローフィールドで描く(p5.js)
// ① 温度勾配:粒子の寿命 t(0→1) を 白熱→橙→赤→暗赤→煙 へマップ
const STOPS = [
  [0.00, 255,244,212], [0.16, 255,206,84], [0.36, 255,140,32],
  [0.58, 232,58,26],   [0.78, 120,22,12],  [1.00, 30,24,22],
];
function temp(t){ /* STOPS を線形補間して [r,g,b] を返す */ }

// ② 房化:spawn位置をノイズで「明るい火柱」に寄せ、暗い隙間を作る
function spawnX(){
  let best = random(width), bestD = -1;
  for (let k=0;k<3;k++){ const c = random(width);
    const d = noise(c*0.010, tz*0.6); if (d>bestD){ bestD=d; best=c; } }
  return best;
}

function stepFire(){
  // ③ 微フェードの暗ヴェールで尾を残す(前フレームをわずかに減衰)
  blendMode(BLEND); noStroke();
  const b = color(params.bg); b.setAlpha(params.fade); fill(b); rect(0,0,width,height);
  blendMode(ADD); // ④ 加算合成:重なるほど明るく発光する
  for (const p of P){
    const n = noise(p.x*params.noiseScale, p.y*params.noiseScale, tz) - 0.5;
    const heightNorm = 1 - (p.y/height);
    const vx = n*params.sway*(1.0 + heightNorm*1.6); // 横揺れ(lick)は上ほど大きく
    const vy = -p.spd*(0.9 + 0.3*(1-heightNorm));
    const px=p.x, py=p.y; p.x+=vx; p.y+=vy; p.age++;
    const t = p.age/p.max, col = temp(t);
    const a = (t<0.15? t/0.15 : 1) * Math.pow(1-t,1.5) * 172; // 根元で明るく、上で消える
    const w = p.w*(1.0 - 0.6*t);                              // 上ほど細く千切れる
    stroke(col[0],col[1],col[2], a*0.45); strokeWeight(w*2.4); line(px,py,p.x,p.y); // 滲み
    stroke(col[0],col[1],col[2], a);      strokeWeight(w);     line(px,py,p.x,p.y); // 芯
    if (p.age>=p.max || p.y<-4) Object.assign(p, newP());
  }
  // ⑤ 火の粉(E)は本体より高く舞い、素数的に異なる位相で点滅
  tz += params.drift; // ノイズの時間発展=炎が呼吸し続ける
}
// reduced-motion なら数十フレーム展開して noLoop() で静止。
// iframe で埋め込み: <iframe src="/demos/ember/index.html" height="180" sandbox="allow-scripts">

※ 表現カードは1枚から公開しています。後日「熾火・残り火」「松明」なども同じフローで追加予定です。

よくある質問

炎はCSS/SVGでは作れないの?

簡易な揺らぎはCSS/SVGでも可能ですが、火舌の房(塊)への集まり・温度勾配・舞う火の粉までを自然に出すには、多数の粒子を加算合成で重ねる粒子シミュレーションが向きます。本ページのデモはp5.js(canvas)で実装しています。p5本体はpublic/配信のためJSバンドル(サイト容量)には含まれません。

炎のアニメーションは重くなりませんか?

デモはloading="lazy"のiframeで初期表示に影響しません。背景として常用する場合は粒子数を絞る、モバイルでは停止する、画面外では止める(Intersection Observer)などで実用範囲に収まります。prefers-reduced-motionでは数十フレーム展開した静止画として表示します。

色を自分のブランドに寄せられますか?

温度勾配(STOPS)の各ストップを差し替えれば、青い炎や紫の炎も作れます。ただし「熱」の説得力は、根元が最も明るく白い(白熱)という物理を保つことが鍵です。色相を変えても、寿命に沿って明→暗(発光→煙)へ落ちる流れは維持してください。

「清涼感」とどう違う?

清涼感は寒色・水・横に広がる光(コースティクス)が核、炎は暖色・縦の上昇・乱流が核です。両方をサイトに持つと寒暖の対比で表現の幅が出ます。情熱・熱気を出したいなら炎、涼しさ・透明感を出したいなら清涼感を選びます。