หน้าแรก · Lab · FX elements: ไฟ ควัน ระเบิด

FE1 ไฟคือแสง

plus ไฟลง plate รักษาแกนที่เกิน 1 และเช็กค่าดำของ element

FX elements: ไฟ ควัน ระเบิด · ~7 นาที · ฟรี

1 อธิบาย

ไฟไม่ได้บังอะไร มันปล่อยแสงออกมา บน plate จึงต้องบวกเข้าไปด้วย Merge แบบ plus และ alpha ของไฟเป็น 0 หรือเกือบ 0 ซึ่ง over ที่ alpha เป็น 0 ก็คือ plus พอดี กองไฟของเราเป็น float แกนไฟสูงราว 25.0 (4.6 stops เหนือ 1) ส่วนไฟล์ display-referred คือไฟเดียวกันที่แปลงเป็น sRGB 8-bit แล้ว 77% ของพิกเซลไฟถูกตัดแบนที่ 1

ลองสลับไฟล์ element เปลี่ยนโหมด merge ดึง black point และลด exposure ดูกราฟเส้นใต้ภาพเทียบกับเส้น 1.0 และดูค่าที่ element เพิ่มเข้ามาตรงที่ควรว่าง ไฟล์ทั้งสองวางอยู่บนดำที่ยกไว้ราว 0.0091 เท่ากัน

plus: A + B · 1 stop = ×2

2 ลงมือลอง

โจทย์: ทำให้ไฟนั่งอยู่ใน plate จริง ๆ ใช้แสงจริง (ไฟล์ float) รวมลงแบบแสง และพื้นที่ว่างของ element ต้องไม่เพิ่มอะไรเข้ามา

ดูค่าที่ element เพิ่มในพื้นดำรอบไฟ (ลอง gain ×8 ที่ Viewer) แล้วลด exposure ดูว่าไฟล์ไหนแกนยังมีรูปทรง ทดลองเสร็จแล้วให้ exposure อยู่ในช่วง ±1 stop จากจุดเริ่ม

SkyVFX Lab · FE1interactive · 1001

3 เจาะลึก

แสงบวก วัตถุบัง

element ที่ปล่อยแสง เช่นไฟหรือประกายไฟ ไม่ได้บังพื้นหลัง มันแค่เพิ่มแสง จึงรวมด้วย plus ส่วนสิ่งที่เป็นวัตถุ เช่นควันหรือฝุ่น บังแสงได้จริง จึงใช้ over กับ alpha ของมันเอง

over คือ A + B·(1 − a) ถ้า alpha ของไฟเป็น 0 สูตรจะเหลือ A + B ซึ่งก็คือ plus ไฟที่ alpha เกือบ 0 จึงได้ผลแทบเท่ากันไม่ว่าจะใช้โหมดไหนในสองโหมดนี้

elementMergealpha
ไฟ ประกายไฟplus0 หรือเกือบ 0
ควัน ฝุ่นoveralpha จริงของมัน

ทำไม screen ใช้กับไฟ HDR ไม่ได้

บท C6 และ CF4 อธิบายไว้แล้วว่าเมื่อค่าเกิน 1 screen ของ Nuke คืน max(A, B) แสงของไฟจึงไม่ได้ถูกบวกลงบน plate

แกนไฟส่วนใหญ่อยู่เหนือ 1 ซึ่งเป็นช่วงที่ screen ทิ้งแสงไปพอดี ถ้าไฟจ้าเกิน ให้ลด exposure ของ element ไม่ใช่เปลี่ยนโหมด merge

ไฟจ้าเกินแก้ที่ exposure ไม่ใช่ที่ screen

แกนไฟเหนือ 1 คือข้อมูล

ในไฟล์ float แกนไฟขึ้นไปถึงราว 25.0 หรือราว 4.6 stop เหนือ 1 และพิกเซลไฟราว 77% อยู่เหนือ 1 ไฟล์ display-referred แบนส่วนนี้ทั้งหมดไว้ที่ 1

exposure นับเป็น stop หนึ่ง stop คือแสงเพิ่มเป็นสองเท่าหรือลดลงครึ่งหนึ่ง พอลด exposure ไฟล์ float ยังเห็นรูปทรงในแกน แต่ไฟล์ที่ clip แล้วกลายเป็นแผ่นส้มแบน ๆ glow ที่สร้างจากแกนแบนก็จะแบนตามไปด้วย ถ้ามีแค่ไฟที่ clip แล้ว ขั้นด้านล่างช่วยเติม texture กลับเข้าไปในแกนได้บ้าง

  1. 1Luma key ส่วนที่ clip
  2. 2ไฟเดียวกัน กลับด้าน + เลื่อนเวลา
  3. 3Multiply เข้าไป
  4. 4Plus เฉพาะใน key
  5. 5ลด exposure

ดำของ element ต้องเป็น 0

plus บวกทุกพิกเซล รวมถึงพื้นดำรอบไฟ ในบทนี้ไฟล์ทั้งสองวางอยู่บนดำที่ยกไว้ราว 0.0091 แบบ linear (ไฟล์ float ด้วย เราตั้งใจใส่) พอ plus ลงไป ทั้งการ์ดของ element จะกลายเป็นม่านเทาบน plate

แก้โดย sample ค่าดำในพื้นที่ว่างแล้วลบออก element แบบ log ที่ premultiply แล้วก็มีปัญหาคล้ายกัน คือพื้นที่ alpha 0 อ่านได้ค่าเล็ก ๆ ที่ไม่ใช่ 0 แล้วเลื่อนทั้งเฟรม แก้ด้วย rgb − k·(1 − a) โดย sample k ทีละช็อต

ยก gain ของ viewer แล้ว sample พื้นที่ว่างก่อน plus ทุกครั้ง

grade และดูไฟให้ถูกที่

element ที่ค่าสูงมากควร grade ใน log หรือดูผ่าน view แบบ filmic หรือ ACES ใน view sRGB ธรรมดา ไฟสีส้มจะ clip เป็นสีขาวพร้อมรอยต่อแข็ง ๆ

ไฟจริงไล่จากแกนขาว → เหลือง → ส้ม → แดงเข้ม ลด saturation เฉพาะส่วนที่ร้อนที่สุด อย่าทาส้มจัดทั้งก้อน

  1. 1แกนขาว
  2. 2เหลือง
  3. 3ส้ม
  4. 4แดงเข้ม

4 ในงานจริง

ทำใน Nuke

  1. Read ไฟล์ EXR แบบ scene-linear ถ้ามีแค่ไฟล์ display-referred ให้แปลงเป็น linear ด้วย Colorspace ก่อน (แต่ส่วนที่ clip ไปแล้วเอาคืนไม่ได้)
  2. sample ดำในพื้นที่ว่าง แล้วลบออกด้วย Grade (blackpoint) หรือ Expression rgb − k·(1 − a)
  3. ถ้าการลบดำทำให้มีค่าติดลบ ใช้ Clamp เฉพาะด้านล่าง ห้าม clamp ด้านบน
  4. Exposure (ตั้ง Adjust in เป็น Stops เพราะค่าเริ่มต้นคือ Densities) ปรับความแรงของไฟเป็น stop
  5. Merge (plus) ไฟลงบน plate
  6. ลด gain ของ viewer และดูผ่าน view แบบ filmic หรือ ACES เพื่อเช็กว่าแกนยังมีรูปทรง

พลาดบ่อย → แก้ยังไง

  • ✗ ใช้ screen "จะได้ไม่จ้าเกิน"✓ เหนือ 1 screen คืน max(A, B) ใช้ plus แล้วคุมความแรงด้วย Exposure
  • ✗ grade ไฟเป็นสีส้มจัดทั้งก้อน✓ ให้แกนร้อนและจางสี แล้วไล่ไปเหลือง ส้ม แดงเข้ม
  • ✗ ใช้ไฟ 8-bit แบบ display-referred เป็นแสงหลักของช็อต✓ แกนถูก clip ไปแล้ว ใช้ไฟล์ float หรือเติมรายละเอียดในส่วนที่ clip ก่อน
  • ✗ plus element ที่ดำถูกยกไว้✓ sample ดำในพื้นที่ว่างแล้วลบให้เป็น 0 ก่อน merge
  • ✗ ตัดสินไฟใน view sRGB ธรรมดาอย่างเดียว✓ ดูผ่าน view แบบ filmic หรือ ACES หรือ grade ใน log

เช็กก่อนส่งช็อต

  • ไฟเป็นไฟล์ float แบบ scene-linear
  • รวมลง plate ด้วย plus ไม่ใช่ screen
  • ยก gain แล้ว พื้นที่ว่างของ element ไม่เพิ่มอะไรเลย ไม่มีการ์ดเทา
  • ลด gain ของ viewer แล้ว แกนไฟยังมีรูปทรง ไม่ใช่แผ่นแบน
  • แกนร้อนจางสี ไล่ไปเหลือง ส้ม แดงเข้ม
  • ดูผ่าน view แบบ filmic หรือ ACES แล้วไม่มีรอยต่อแข็ง

5 เช็กตัวเอง

เช็กตัวเอง 1 ข้อ

plus ไฟลง plate แล้วเห็นสี่เหลี่ยมเทาจาง ๆ รอบไฟทั้งการ์ด สาเหตุคืออะไร

สิ่งที่ได้เรียน

🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด

คำถามเพิ่ม

1. ลด exposure ของไฟลง แล้วไฟล์ display-referred กลายเป็นแผ่นส้มแบน ทำไม

2. ลด exposure ไฟลง 2 stops ค่าที่แกน 16 จะเหลือเท่าไร

ตัวเลขมาจากไหน: ภาพคำนวณในเบราว์เซอร์ กองไฟเป็น gas sim เรนเดอร์เป็น EXR แบบ scene-linear ส่วนไฟล์ display-referred คือเรนเดอร์เดียวกันที่เราแปลงเป็น sRGB 8-bit และยกดำไว้ เพื่อแทน element สำเร็จรูปทั่วไป และเราใส่ดำระดับเดียวกันใต้ไฟล์ float ด้วย (แบบสอนหลักการ) กองไฟเป็น sim ขนาดเล็ก ดูใกล้ ๆ จะเห็นเป็นก้อนเหลี่ยม plate ทะเลทรายและหุ่นยนต์เป็นเรนเดอร์ Blender ของเราเอง คณิตของ Merge ตรงกับ Nuke 17 element ทุกชิ้นเป็นของเราเอง: จำลองด้วย Mantaflow ใน Blender 5.2 แล้วเรนเดอร์ Cycles ด้วยกล้องเดียวกับ plate (EmberGen สั่ง export แบบไม่เปิดหน้าจอไม่ได้บนเครื่องนี้) ไม่ใช้ stock element