イラスト画像を1枚読み込むと、その線と色の場所に星が並び、キャラクターの形に開く花火になる仕組みを Houdini で作りました。
この記事では、下のペンギンのイラストを例に、作り方を順番に紹介します。
環境
- Houdini 22.0(Apprentice)/ Windows 11
- 使った主な機能: Attribute Wrangle(VEX)、POP Network、File Cache、Karma(レンダー)、COP(グロー)
全体の流れ
イラスト画像
│ ① VEX で全ピクセルを読み、線と色の所に星を置く(点に元の絵の色を持たせる)
▼
星の位置(ペンギンで 559 個)
│ ② 間引き・ずらし・明るさ・燃える時間のばらつき
│ ③ 開く位置に集め、「絵の中の位置 × 大きさ」の初速を付ける
▼
POP で飛ばす
│ ④ 速さに比例する空気抵抗 → 絵の形のまま開いて止まる → 抵抗を弱めて重力で垂れる
│ 光の尾は POP Replicate
▼
File Cache で焼く → 色と明るさ(元の絵の色)→ Karma でレンダー → COP でグロー
1. 画像から星の位置と色を取る
Attribute Wrangle(Run Over: Detail、入力なし)で、画像を1ピクセルずつ読みます。
画像の色は VEX の colormap() で取れます。
vector c = colormap(画像のパス, u, v); // u, v は 0〜1。左下が (0, 0)
判断のしかた
読んだ色から「明るさ」と「鮮やかさ」を計算して、ピクセルを分けます。
| 条件 | 判断 |
|---|---|
| 四すみの色(背景)に近い | 背景 → 何もしない |
| 明るさ < 0.2 | 黒い線 → ふちだけ使う |
| 鮮やかさ > 0.3、明るさ 0.15〜0.75 | 色の付いた所(ほっぺ・帽子・くちばしなど)→ まばらに塗る |
| それ以外 | 体の色(白・クリーム色)→ 何もしない |
ポイントは3つです。
- 背景の色は、画像の四すみの色の平均にしました。画像ごとに背景色が違っても自動で合わせられます。
- 黒い所は「ふち」だけ使います。まわり2ピクセルに黒くない所があるときだけ採用するので、細い線はそのまま、黒く塗られた所は輪郭だけになります。
- 「すでに置いた点から一定距離以内なら置かない」ことで、線が数ピクセルの太さでも、星が一定間隔の1列に並びます。
読み取った点を、元の画像に重ねるとこうなります。点の色が、そのまま花火の色になります。
コード
画像のパスは chs("image")、キャラクターの番号は chi("who") で受け取ります。VEXpression の右の Create spare parameters ボタンを押すと、パラメータ欄が自動でできます。
// どんなキャラクター画像でも:線のふちと色の付いた所に点を並べ、元の絵の色を点に持たせる
// Cd = その点の元の色(花火の色に使う)
// line = 1 なら線(輪郭など)、0 なら色の付いた所の塗り
string img = chs("image"); // 参考画像のファイル
float step = 0.042; // 線の点の間隔
float fillgap = 0.085; // 塗りの点の間隔(線よりまばら)
int W, H;
teximport(img, "texture:xres", W);
teximport(img, "texture:yres", H);
vector px(string img; int x; int y; int W; int H) {
return colormap(img, (clamp(x, 0, W - 1) + 0.5)/W, 1 - (clamp(y, 0, H - 1) + 0.5)/H);
}
float lum(vector c) { return 0.3*c.r + 0.6*c.g + 0.1*c.b; }
float sat(vector c) { float mx = max(c.r, max(c.g, c.b)), mn = min(c.r, min(c.g, c.b)); return (mx - mn) / max(mx, 0.001); }
// ① 背景の色=四すみの色の平均
vector bg = (px(img, 2, 2, W, H) + px(img, W - 3, 2, W, H) + px(img, 2, H - 3, W, H) + px(img, W - 3, H - 3, W, H)) / 4;
// ② 絵のある範囲(背景でないピクセルの外枠)→ 絵の高さが 2.5 になるように合わせる
int x0 = W, x1 = 0, y0 = H, y1 = 0;
for (int y = 0; y < H; y++) for (int x = 0; x < W; x++) {
if (distance(px(img, x, y, W, H), bg) < 0.12) continue;
x0 = min(x0, x); x1 = max(x1, x); y0 = min(y0, y); y1 = max(y1, y);
}
float S = max((y1 - y0) / 2.5, (x1 - x0) / 2.6); // 1 単位 = S ピクセル
vector2 C = set((x0 + x1) / 2.0, (y0 + y1) / 2.0); // 絵の真ん中
vector kept[];
for (int pass = 0; pass < 2; pass++) // 1回目は線、2回目は塗り(線を優先して置く)
for (int y = 1; y < H - 1; y++) {
for (int x = 1; x < W - 1; x++) {
vector c = px(img, x, y, W, H);
int isbg = distance(c, bg) < 0.12;
int isdark = lum(c) < 0.2;
int iscol = !isbg && !isdark && sat(c) > 0.3 && lum(c) > 0.15 && lum(c) < 0.75;
if (isbg) continue;
if ((pass == 0) != isdark) continue;
// 線は「暗い所のふち」だけ(黒く塗られた所も、ふちだけになる)
int edge = 0;
if (isdark) {
for (int dy = -2; dy <= 2; dy++) for (int dx = -2; dx <= 2; dx++)
if (lum(px(img, x + dx, y + dy, W, H)) >= 0.2) edge = 1;
if (!edge) continue;
} else if (!iscol) continue;
// 点の色:線なら、すぐ近くの色の付いた所の色(無ければ 0 = 輪郭)
vector col = 0;
if (isdark) {
float best = 1e9;
for (int dy = -4; dy <= 4; dy++) for (int dx = -4; dx <= 4; dx++) {
vector n = px(img, x + dx, y + dy, W, H);
if (distance(n, bg) < 0.12 || lum(n) < 0.2 || sat(n) <= 0.3 || lum(n) >= 0.75) continue;
float d2 = dx*dx + dy*dy;
if (d2 < best) { best = d2; col = n; }
}
} else col = c;
// 近くにもう点があれば置かない(太い線でも、点は一定の間隔で1列になる)
float gap = isdark ? step : fillgap;
vector q = set((x - C.x)/S, (C.y - y)/S, 0);
int near = 0;
foreach (vector k; kept) if (distance(k, q) < gap) { near = 1; break; }
if (near) continue;
push(kept, q);
int p = addpoint(0, q);
setpointattrib(0, "Cd", p, col);
setpointattrib(0, "line", p, isdark);
setpointattrib(0, "who", p, chi("who")); // キャラクターの番号
}
}
画像は 300〜400px くらいに縮小してから使う
「黒い線は、まわり2ピクセルに黒くない所があるときだけ採用」しているので、大きな画像だと、太い線の内側が捨てられて、両側のふちに点が付きます(線が二重になる)。
左が元の大きさ(1254px)、右が 360px に縮小したものです。左は輪郭が二重になっています。
2. 形を崩さずに開く ―「速さに比例する空気抵抗」
型物花火(形に開く花火)で一番大事なのは、開いても形が崩れないことです。
星を開く位置に集め、初速を「絵の中の位置 d × 開ききった大きさ Rf × 係数 k」にします。
v@v = d * Rf * k;
そのうえで、空気抵抗を速さに比例させます(POP Wrangle)。
v@v *= exp(-k * @TimeInc);
速さに比例する抵抗 dv/dt = -k v だと、星が止まるまでに進む距離は v0 / k です。
初速を d * Rf * k にしておくと、止まる位置はちょうど d * Rf になります。どの星も同じ割合で減速するので、絵の形のまま大きく開きます。
ふつうの丸い花火で使う「速さの2乗に比例する抵抗」にすると、速い星(外側)ほど強く減速するので、形が崩れます。並べて比べると、違いがはっきり分かります(左が2乗、右が速さに比例)。
※ 左は抵抗の大きさを合わせていないので、全体の大きさも違います。形の崩れ方を見てください。
3. 本物っぽくするための「ばらつき」
形がきれいすぎると、花火というより電光掲示板やドローンショーに見えます。4つのばらつきを入れました。
| ばらつき | やり方 | 値 |
|---|---|---|
| 並び | 星を2割間引き、残りを ±2.2% ずらす |
keep 0.8 / jit 0.022
|
| 明るさ | 星ごとに 0.25〜1.8倍(暗めが多い) | bright |
| 消えるタイミング | 燃える時間を 5.0秒 ±20% | burn |
| 重力で垂れる | 開いて 1.2秒から抵抗を弱める |
k 1.6 → 0.3 |
左がばらつきなし、右がばらつきありです。
// 星を作る Wrangle(Points)より抜粋
float keep = 0.8, jit = 0.022;
if (rand(@ptnum*7.31 + 0.5) > keep) { removepoint(0, @ptnum); return; }
vector d = @P + jit * set(rand(@ptnum*2.17) - 0.5, rand(@ptnum*3.71) - 0.5, 0) * 2;
v@v = d * Rf * k;
...
f@burn = 5.0 * (1 + 2*0.2*(rand(@ptnum*5.3) - 0.5));
f@bright = fit01(pow(rand(@ptnum*4.73), 1.5), 0.25, 1.8);
// POP Wrangle より抜粋:開ききったら抵抗を弱め、重力で垂れる
float k = 1.6;
float kl = 0.3; // 後半の空気抵抗
k = lerp(k, kl, smooth(1.2, 3.0, @age));
v@v *= exp(-k * @TimeInc);
抵抗が小さくなると、重力で落ちる速さの上限(重力 ÷ k)が約 6m/s から約 33m/s に上がり、星がしだれるように落ちていきます。
最初の 1.2秒は強い抵抗のままなので、開く形は変わりません。
明るさのばらつきは、最初「明るい方にだけ」ばらつかせたら、静止画ではほとんど差が見えませんでした。星の芯はもともと画像の上限(白)に張り付いているので、それ以上明るくしても変わらないためです。暗い星を混ぜて、やっと差が出ました。
4. 色 ― 明るすぎると白く飛ぶ
星の色は、元の絵の色を一番明るい色に引き伸ばして、さらに鮮やかにしたものです。色のない黒い線は金色にします。
vector oc = v@Cd;
if (max(oc) < 0.01) oc = {1.0, 0.70, 0.35}; // 線だけの所=輪郭は金
else { oc = oc / max(oc); float l = 0.3*oc.r + 0.6*oc.g + 0.1*oc.b; oc = clamp(lerp(set(l, l, l), oc, 1.8), 0, 1); }
v@basecol = oc;
花火は光るので、色に「明るさ」を掛けます。このとき明るさを上げすぎると、色が白く飛びます。
たとえばピンク (1, 0.2, 0.55) に 6 を掛けると (6, 1.2, 3.3) になり、R・G・B が全部 1 を超えるので、画像では (1, 1, 1) = 白に切られます。
(左から、元の色 / 2.2倍 / 6倍。6倍はただの白になる)
星の明るさは 2.2 程度に抑えて色を残し、にじみは COP の Glow で足しました。
5. POP ネットワーク
source_stars(All Points)┐
source_rise (Points) ┴→ merge → POP Group(星だけ stars)┐
POP Replicate(入力なし・Group stars)────────────┴→ merge → physics(POP Wrangle)→ popsolver
popobject → popsolver → Gravity Force → output
-
光の尾は POP Replicate で星から出します。Inherit Attributes を
v part burn bright basecolにすると、尾も星と同じ色・明るさになります。 - POP Replicate は入力に何もつながないのがポイントです。つなぐと上流のソースが2回動き、星が2倍になります。
- POP Wrangle では「
burnを受け継いだ子=星の尾」「受け継がない子=昇りの火の粉」と見分けて、寿命や抵抗を変えています。
6. 応用:何体も順番に打ち上げる
キャラクターごとに Wrangle(上のコード)を用意して who を 0, 1, 2… と付け、開くフレーム・横の位置・大きさを who 順の配列(打ち上げ表)にします。
int FB[] = array(61, 85, 109, 133); // 開くフレーム
float XS[] = array(-405, -135, 135, 405); // 横の位置(m)
float RS[] = array(90, 90, 90, 90); // 開ききった大きさ(m)
if (abs(@Frame - FB[i@who]) > 0.5) { removepoint(0, @ptnum); return; } // そのフレームに開く星だけ出す
vector B = set(XS[i@who], 260, 0); // 開く位置
float Rf = RS[i@who];
星を作る Wrangle は「そのフレームに開くキャラの星だけ」を出し、ほかのフレームは 0 個になります。
そのため POP Source は Emission Type: All Points / Impulse Activation: 1(毎フレーム) にするだけで、表の時刻どおりに星が出ます。
別に作った花火大会のシーンに組み込むときは、焼いたキャッシュを Time Shift(Frame $F - ずらすフレーム数)でずらし、始まる前は Switch で空のジオメトリに切り替えました(キャッシュの無いフレームを読ませないため)。
まわりの花火に埋もれないよう、キャラが開いている間はまわりの玉を減らしています。
ハマった所
-
画像のパス欄が空・ファイル名違いでも、エラーは出ずに点が 0 個になる(
teximportが失敗して画像の大きさが 0 になるため) - 大きな画像だと線が二重になる → 300〜400px に縮小してから読む(上の比較画像)
- 複数キャラで Fuse SOP を使うと、別のキャラの点どうしがくっつく(全員同じ中心座標で作っているため)
- Switch SOP は「何番目につないだか」で出す入力が決まる。見た目では分かりにくいので、つないだ後に中ボタンで点の数を確かめる
- 式が入ったパラメータ(緑の欄)は、数字を打っても式の値に戻る。右クリック → Delete Channels で式を消してから入れる
まとめ
- 画像は VEX の
colormap()で1ピクセルずつ読める。色の数字だけで「線・色の所・背景」を判断して星を置くと、どんなイラストでも形になる - 空気抵抗を速さに比例させると、型物花火は形を保ったまま開く(2乗に比例だと崩れる)
- きれいすぎる形には、間引き・明るさ・消えるタイミング・重力のばらつきを足すと、花火らしくなる
- 色を見せたいときは、明るさを抑える(1 を超えると白く飛ぶ)
付録:全部のコードとノード設定
記事のペンギン花火(1体)を、一から組むための全部です。
※ 記事の動画は煙も入っていますが、付録では煙(Pyro)を省いています。煙が無くても、花火の形と動きは同じです。
付録を開く(クリック)
前提
- FPS 30、フレーム 1〜300(10秒)。Global Animation Options で設定
- 単位は 1 = 1m。花火は高さ 260m で、フレーム 61(2.0秒)に開く
- 画像は 300〜400px に縮小したもの(記事では 360×360px)を使う
全体のノード
/obj/firework(Geometry)
face_lines(Detail)→ shell_stars(Points) … 開く瞬間の星
rise_head(Detail・入力なし) … 昇る玉
firework_sim(POP Network) … 下の「POP の中」
sim_out(DOP Import)→ cache_sim(File Cache)→ look ┐
burst_flash(Detail・入力なし)┴→ merge_render → OUT_firework
/obj/sky(Geometry): sky_grid → sky_color → OUT_sky
/stage: import_firework / import_sky → merge_geo → mtl → assign → camera1 → rendersettings → render
/img/comp: read_render → glow_tight → glow_wide → write_png
/obj/firework の中
face_lines(Attribute Wrangle / Run Over: Detail / 入力なし)
記事の「1. 画像から星の位置と色を取る」のコードそのままです。貼ったあと Create spare parameters を押し、Image に画像のパス、Who は 0 のまま。
shell_stars(Attribute Wrangle / Run Over: Points / 入力 face_lines)
// 絵の点を開く位置に集め、「絵の中の位置に比例した速さ」で飛ばす
vector B = {0, 260, 0}; // 開く位置(高さ 260m)
float Rf = 110; // 開ききった大きさ(m)
float k = 1.6; // 空気抵抗(physics と同じ値)
// ばらつき:星を2割間引き、残った星の位置を少しずらす
float keep = 0.8, jit = 0.022;
if (rand(@ptnum*7.31 + 0.5) > keep) { removepoint(0, @ptnum); return; }
vector d = @P + jit * set(rand(@ptnum*2.17) - 0.5, rand(@ptnum*3.71) - 0.5, 0) * 2;
v@v = d * Rf * k; // 速さ = 位置 × 大きさ × k(止まる位置がちょうど d × Rf)
v@v += 2.0*(vector(rand(@ptnum*1.7)) - 0.5);
v@v.z += 3.0*(rand(@ptnum*3.1) - 0.5); // 奥行きにもほんの少し
@P = B;
i@kind = 1; // 1 = 星
f@burn = 5.0 * (1 + 2*0.2*(rand(@ptnum*5.3) - 0.5)); // 燃える時間 5.0秒 ±20%
f@life = 20;
// 元の絵の色 → 花火の色(線だけの所=輪郭は金。色は鮮やかにする)
vector oc = v@Cd;
if (max(oc) < 0.01) oc = {1.0, 0.70, 0.35};
else { oc = oc / max(oc); float l = 0.3*oc.r + 0.6*oc.g + 0.1*oc.b; oc = clamp(lerp(set(l, l, l), oc, 1.8), 0, 1); }
v@basecol = oc;
f@bright = fit01(pow(rand(@ptnum*4.73), 1.5), 0.25, 1.8); // 星ごとの明るさ 0.25〜1.8倍
rise_head(Attribute Wrangle / Run Over: Detail / 入力なし)
// 昇っている玉の頭(開く 2秒前から、フレーム 61 まで)
float T = (@Frame - 1)/30.0, tb = 2.0; // 開く瞬間 2.0秒 = フレーム61
if (T >= tb) return;
float u = tb - T;
float y = 260 - 40*pow(u, 1.6);
int p = addpoint(0, set(1.5*sin(T*2.1), y, 0));
setpointattrib(0, "v", p, set(0, 40*1.6*pow(u, 0.6), 0));
setpointattrib(0, "kind", p, 3); // 3 = 昇る玉
firework_sim(POP Network / 入力なし)の中
| ノード | 設定 |
|---|---|
source_stars(POP Source。最初からある source_first_input を改名) |
Source → Emission Type All Points / Geometry Source Use Parameter Values / SOP /obj/firework/shell_stars / Birth → Impulse Activation 式 $SF == 61 / Attributes → Initial Velocity Use inherited velocity / Inherit Attributes *(初期値のまま) |
source_rise(POP Source) |
Source → Emission Type Points / Geometry Source Use Parameter Values / SOP /obj/firework/rise_head / Birth → Impulse Activation 0 / Const. Activation 式 $SF < 61 / Const. Birth Rate 600 / Interpolate Source Back / Interpolation Method Use Point Velocity / Attributes → Initial Velocity Use inherited velocity
|
merge_sources(最初からある Merge を改名) |
入力1 source_stars、入力2 source_rise
|
group_stars(POP Group) |
入力 merge_sources / Group Name stars / Rule → Enable オン / VEXpression ingroup = i@kind == 1;
|
star_trails(POP Replicate) |
入力なし / Group stars / Birth → Impulse Activation 0 / Const. Activation 1 / Const. Birth Rate 160 / Shape → Shape Point / Attributes → Inherit Attributes v burn bright basecol / Initial Velocity Use inherited velocity
|
merge_all(Merge) |
入力1 group_stars、入力2 star_trails
|
physics(POP Wrangle) |
入力 merge_all、出力を popsolver の3番目の入力へ。コードは下 |
| Gravity Force | popsolver と出力の間(初期値のまま) |
// 星:速さに比例する空気抵抗(形を崩さない)→ 開ききったら抵抗を弱め、重力で垂れる
float dt = @TimeInc;
if (i@kind == 1) {
float k = 1.6; // shell_stars と同じ値
k = lerp(k, 0.3, smooth(1.2, 3.0, @age));
v@v *= exp(-k*dt);
if (@age > f@burn) @dead = 1;
} else {
if (i@init == 0) {
i@init = 1;
if (f@burn > 0) { // burn を受け継いだ子=星の光の尾
i@kind = 4;
@P -= v@v * dt * rand(@id*1.9);
v@v = v@v*0.3 + 0.6*(vector(rand(@id*3.1)) - 0.5);
f@life = 0.45 + 0.35*rand(@id*7.7);
} else { // 受け継がない子=昇りの火の粉
v@v = v@v*0.08 + 4.0*(vector(rand(@id*3.1)) - 0.5);
f@life = 0.35 + 0.5*rand(@id*7.7);
}
}
float sp = length(v@v);
v@v /= 1 + 0.6*sp*dt; // 火の粉は速さの2乗の抵抗ですぐ止まる
}
焼く
| ノード | 設定 |
|---|---|
sim_out(DOP Import) |
入力なし / DOP Network /obj/firework/firework_sim / Objects popobject
|
cache_sim(File Cache) |
入力 sim_out / Start/End 1 300 → Save to Disk → Load from Disk がオンになる |
look(Attribute Wrangle / Run Over: Points / 入力 cache_sim)
// 色と明るさ:星と尾は元の絵の色、昇る火の粉はオレンジ
vector c = 0; float I = 0; float ps = 0.1;
if (i@kind == 1 || i@kind == 4) {
float nb = (i@kind == 1) ? @age/f@burn : 0.5;
I = (i@kind == 1) ? 2.2 : 1.0*(1 - @age/f@life); // 明るすぎると色が白く飛ぶ
I *= smooth(0, 0.03, nb) * (1 - smooth(0.9, 1.0, nb));
float fl = 0.6 + 0.4*sin(@age*50 + @id); // 燃え尽き前のちらつき
I *= lerp(1.0, fl, smooth(0.8, 0.95, nb));
I *= f@bright;
c = v@basecol; ps = (i@kind == 1) ? 0.55 : 0.30;
ps *= sqrt(f@bright);
} else {
float na = @age/f@life;
c = lerp({1.0, 0.62, 0.25}, {0.55, 0.1, 0.02}, na); I = 2.5*(1 - na); ps = 0.14;
}
v@Cd = c*I; f@Alpha = 1; f@pscale = ps;
burst_flash(Attribute Wrangle / Run Over: Detail / 入力なし)
// 昇る玉の頭と、開いた瞬間の閃光
float T = (@Frame - 1)/30.0, tb = 2.0;
if (T < tb) {
float u = tb - T;
int p = addpoint(0, set(1.5*sin(T*2.1), 260 - 40*pow(u, 1.6), 0));
setpointattrib(0, "v", p, set(0, 40*1.6*pow(u, 0.6), 0));
setpointattrib(0, "Cd", p, {1.0, 0.7, 0.35}*4); setpointattrib(0, "pscale", p, 0.5); setpointattrib(0, "Alpha", p, 1.0);
} else if (T < tb + 0.2) {
float s = T - tb;
int p = addpoint(0, {0, 260, 0});
setpointattrib(0, "v", p, {0, 0, 0});
setpointattrib(0, "Cd", p, {1.0, 0.85, 0.6}*12*exp(-s/0.05)); setpointattrib(0, "pscale", p, 3.0 + 15*s); setpointattrib(0, "Alpha", p, 1.0);
}
merge_render(Merge)に look と burst_flash → OUT_firework(Null)に表示・レンダーフラグ。
/obj/sky(夜空の板)
Grid(sky_grid): Orientation XY Plane / Size 5000 3000 / Rows 200 / Columns 300 → Attribute Wrangle(sky_color、Points)→ Null(OUT_sky)
@P += set(0, 600, -1500);
vector cam = {0, 5, 650}; // カメラの位置(下の camera1 と同じ)
vector d = normalize(@P - cam);
float el = degrees(asin(d.y));
v@Cd = lerp({0.012, 0.008, 0.007}, {0.001, 0.0014, 0.003}, smooth(0, 20, el));
f@Alpha = 1;
/stage(Solaris でレンダー)
| ノード | 設定 |
|---|---|
import_firework(SOP Import) |
SOP Path /obj/firework/OUT_firework
|
import_sky(SOP Import) |
SOP Path /obj/sky/OUT_sky
|
merge_geo(Merge) |
入力1 import_firework、入力2 import_sky
|
mtl(Material Library) |
Tab Menu → Tab Menu Mask の末尾に mtlx* を足す。中に MtlX Surface Unlit(firework_unlit)と MtlX Geometry Property Value(Signature Color / Geomprop displayColor)→ Unlit の Emission Color へ。Unlit の Material フラグをオン |
assign(Assign Material) |
Primitives /import_firework/* /import_sky/* / Material Path /materials/firework_unlit
|
camera1(Camera) |
Translate 0 5 650 / Rotate 20 0 0 / Focal Length 40 / Horizontal Aperture 35
|
rendersettings(Karma Render Settings) |
Output Picture $HIP/render/fw.$F4.exr / Primary Samples 48 / Velocity Blur Velocity Blur
|
render(USD Render ROP) |
Valid Frame Range Render Specific Frame Range / Start/End/Inc 1 300 1 → Render to Disk |
/img/comp(COP でグロー)
| ノード | 設定 |
|---|---|
read_render(File) |
File Name $HIP/render/fw.$F4.exr / Number of AOVs 1 / AOV C
|
glow_tight(Glow) |
Glow Threshold 0.6 / Brightness 1.0 / Size 0.006
|
glow_wide(Glow) |
Glow Threshold 0.4 / Brightness 0.8 / Size 0.04
|
write_png(ROP Image) |
Output File $HIP/render/comp/fw.$F4.png / Valid Frame Range Render Frame Range / 1〜300
|
レンダーの後に read_render の Reload Image を押してから write_png を書き出す(File COP は前に読んだ画像を覚えていることがある)。







