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

FE3 แสงตกกระทบจากไฟ (interactive light)

คูณแสงกับ plate ก่อน แล้วค่อย plus อย่าบวกแสงลงไปตรง ๆ

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

1 อธิบาย

แสงไฟที่ตกบนพื้นและหุ่นยนต์ไม่ใช่การบวกสีส้มลงไปเฉย ๆ พื้นผิวจริงสะท้อนแสงตามความสว่างของตัวเอง interactive light จึงเอาแสงไปคูณกับ plate ก่อน แล้วค่อย plus ผลคูณนั้นกลับลงไป ส่วนมืดยังมืด และ texture ยังอยู่ ใน light pass ทรายข้างกองไฟได้แสงราว 0.64 หรือราว 5.0 เท่าของทรายตรงนั้นใน plate

สลับโหมดแสงปลอมทีละแบบ ปรับระยะแสงกับความแรง แล้วลาก wipe เทียบกับ light pass ที่เรนเดอร์จาก Blender ดูค่า error, แสงที่ไปตกบนเขาไกลและท้องฟ้า และดำที่สุด 1% ว่าสว่างขึ้นเท่าไร กด ▶ เล่น เพื่อดูว่าแสงกะพริบไปพร้อมเปลวไฟ

relight: plate + plate × light · light ∝ 1 / (1 + (r/reach)²) × depth gate

2 ลงมือลอง

โจทย์: ทำแสงไฟปลอมบนพื้นและหุ่นยนต์ให้ตรงกับ light pass แสงต้องเกาะตามพื้นผิว ไม่ยกดำ และไม่ไปตกบนเนินเขาไกล

ถ้าดำที่สุด 1% สว่างขึ้นมาก หรือเขาไกลกับท้องฟ้ามีแสงเพิ่ม แปลว่าสูตรยังไม่ถูก พอสองค่านั้นนิ่งแล้ว ค่อยปรับระยะแสงกับความแรง โดยลาก wipe ดูทรายข้างกองไฟและด้านที่หันหาไฟของหุ่นยนต์

SkyVFX Lab · FE3interactive · 1001

3 เจาะลึก

ทำไม plus แสงตรง ๆ ถึงผิด

plus glow สีส้มลงบน plate คือการบวกแสงโดยไม่สนว่าผิวตรงนั้นสว่างแค่ไหน ไม่ว่าจะเป็นทรายสว่างหรือเงามืด เงาจึงกลายเป็นเทา และท้องฟ้าไกลออกไปก็ได้แสงไฟไปด้วย ทั้งที่ไฟส่องไปไม่ถึง

พื้นผิวจริงสะท้อนแสงเป็นสัดส่วนกับความสว่างของตัวเอง ใน light pass ทรายข้างกองไฟได้แสงราว 0.64 และทั้งตัวหุ่นยนต์เฉลี่ยราว 0.09 แสงปลอมต้องได้ใกล้ ๆ นี้โดยไม่แตะส่วนอื่น

สูตรดำเนินไกลและท้องฟ้าดูเป็น
ไม่มีไม่เปลี่ยนไม่เปลี่ยนไม่มีแสงไฟเลย
plus glow วงกลมถูกยกเป็นเทาได้แสงไปด้วยฟิลเตอร์สีส้มทับภาพ
radial × plateยังมืดยังติดแสงตรงที่อยู่ใน radial บนจอแสงบนพื้นผิว แต่ไปไกลเกิน
radial × plate × depthยังมืดไม่ได้แสงแสงจากไฟจริง

สร้าง receptivity แล้วคูณ

เริ่มจาก plate → Saturation 0 → Grade gain จะได้ภาพขาวดำที่บอกว่าแต่ละจุดรับแสงได้แค่ไหน แล้วเอาแสงจากไฟ (alpha ของไฟที่ blur ใหญ่ หรือ Radial) คูณเข้าไป ขนาด blur คือระยะที่แสงไปถึง ส่วน gain ก่อนคูณคือความแรง

ใช้ gain ไม่ใช่ offset หรือ lift เพราะ gain รักษาการตอบสนองของวัสดุ ดำ 0.1 คูณ 2 ได้ 0.2 ส่วนที่สว่างหรือมันวาวขึ้นมาก ถ้าเติมแสงแล้วเงาเทา ให้เพิ่ม contrast ของ plate (กดหมอกที่ยกดำ) ก่อนคูณ

อย่าคูณแสงใหม่ลงบน plate ที่โดน key light แรงอยู่แล้วโดยไม่ตรวจ ส่วนที่สว่างจะตอบสนองเกินจริง ถ้าทำได้ให้ทำวัตถุให้แบนก่อน แล้วค่อยบวกแสงแต่ละดวงเข้าไป

  1. 1Plate
  2. 2Saturation 0
  3. 3Grade gain
  4. 4× แสงจากไฟ
  5. 5Plus ลง comp

แสงจางตามระยะ ไม่ใช่ตามจอ

แสงไฟเป็นไปตามกฎกำลังสองผกผัน ผิวที่อยู่ใกล้ไฟได้แสงมาก ผิวไกลแทบไม่ได้ อย่า blur ไฟแล้วโยนทับทั้งเฟรม

Radial วัดระยะบนจอ ไม่รู้ความลึก เนินเขาไกลที่อยู่หลังไฟพอดีในจอจึงติดแสงไปด้วย กองไฟในฉากนี้อยู่ห่างกล้องราว 7.9 เมตร depth gate ใช้ช่อง depth เก็บแสงไว้เฉพาะสิ่งที่มีความลึกใกล้กับไฟ ถ้ามี light pass จาก 3D ก็ใช้แทนได้

ดูเนินไกลกับท้องฟ้าก่อนปรับอย่างอื่น ถ้าสว่างขึ้นตอนเปิดแสง แปลว่ายังไม่ได้กันด้วยระยะ

กะพริบพร้อมเปลว และอยู่ใต้ holdout

แสงตกกระทบต้องเริ่ม หยุด และกะพริบไปกับไฟ คลาดกันไม่เกินราว 2 เฟรม และแสงที่สว่างสุดต้องตรงกับเฟรมที่ไฟสว่างสุด แสงนิ่งใต้เปลวที่กะพริบดูออกทันที

ลำดับใน comp คือตัวไฟก่อน ตามด้วยแสงตกกระทบ แล้วจึงควัน ทุกการบวกแสง ทั้ง glow และ emissive ต้องอยู่ใต้ holdout ของสิ่งที่อยู่ด้านหน้า ถ้า plus หลัง holdout แสงจะไปติดบนสิ่งที่ควรบังไฟ

ถ้าแสงควรตกบนสิ่งที่อยู่ด้านหน้าจริง ให้ทำ interactive light แยกให้มัน ไม่ใช่ปล่อยให้ glow ไปติดเอง

  1. 1ตัวไฟ
  2. 2แสงตกกระทบ
  3. 3ควัน

4 ในงานจริง

ทำใน Nuke

  1. Saturation (0) บน plate → Grade (gain) ได้ภาพ receptivity ขาวดำ
  2. แสง: Radial หรือ alpha ของไฟ → Blur ขนาดใหญ่ → Grade ให้สีและความแรง
  3. Shuffle ช่อง depth ออกมาเป็น mask แล้ว remap ให้เป็น gate ที่เป็น 1 ที่ระยะของไฟ และลดเป็น 0 เมื่อห่างจากระยะนั้น (เช่น Expression ที่ทำช่วงรอบระยะของไฟ หรือ Grade ที่เปิด white clamp สำหรับทางลาดใกล้ไปไกลแบบง่าย)
  4. Merge (multiply) แสง × receptivity × gate
  5. Merge (plus) ลง comp ใต้ holdout ของสิ่งที่อยู่ด้านหน้า ตั้ง output เป็น rgb
  6. ให้ gain ของแสงเดินตามความสว่างของเปลว เช่นใช้ CurveTool วัดค่าเฉลี่ยของไฟแล้ว link เข้า Grade

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

  • ✗ plus glow สีส้มก้อนใหญ่ทับทั้งภาพ✓ คูณแสงกับ plate ที่ลด saturation ก่อน แล้วค่อย plus ผลคูณ
  • ✗ ไม่สนระยะ เนินไกลที่อยู่หลังไฟในจอติดแสงไปด้วย✓ ใส่ depth gate หรือใช้ light pass จาก 3D
  • ✗ แสงนิ่งใต้เปลวที่กะพริบ หรือแสงตามเปลวช้าหลายเฟรม✓ ผูกความแรงแสงกับความสว่างของเปลว คลาดไม่เกินราว 2 เฟรม
  • ✗ คูณแสงใหม่บน plate ที่สว่างแรงอยู่แล้วโดยไม่ตรวจ✓ ดูส่วนสว่างว่าตอบสนองเกินไหม ถ้าทำได้ให้ทำวัตถุให้แบนก่อนบวกแสง
  • ✗ แสงไปติดบนสิ่งที่อยู่ด้านหน้าซึ่งควรบังไฟ✓ ย้ายการ plus แสงไปไว้ใต้ holdout ของสิ่งที่อยู่ด้านหน้า

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

  • pixel ที่มืดที่สุดของ plate ขึ้นตามสัดส่วน ไม่ได้ถูกบวกเป็นค่าคงที่ และดำไม่เทา
  • เนินไกลและท้องฟ้าไม่สว่างขึ้นเมื่อเปิดแสง
  • แสงเริ่ม หยุด และกะพริบพร้อมไฟ คลาดไม่เกินราว 2 เฟรม
  • แสงสว่างสุดในเฟรมที่ไฟสว่างสุด
  • สิ่งที่อยู่ด้านหน้าซึ่งบังไฟไม่ได้แสงเพิ่ม
  • ยก gain ของ viewer แล้วส่วนสว่างไม่ตอบสนองเกินจริง

5 เช็กตัวเอง

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

ทำไมต้องคูณแสงกับ plate ก่อน plus

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

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

คำถามเพิ่ม

1. ใช้ radial × plate แล้ว เนินไกลที่อยู่หลังกองไฟในจอสว่างขึ้น แก้อย่างไร

2. เปลวไฟกะพริบ แต่แสงบนพื้นสว่างสุดช้ากว่าเปลวหลายเฟรม ควรทำอย่างไร

ตัวเลขมาจากไหน: light pass อ้างอิงเป็นเรนเดอร์ Cycles ของฉากทะเลทรายและหุ่นยนต์ของเราเอง ปิดดวงอาทิตย์และท้องฟ้า เหลือ point light ดวงเดียวที่กลางเปลวไฟ สีประมาณ blackbody ราว 1,900 K (เป็นค่าที่เราเลือก) และตั้งให้สว่างแรง ส่วนแสงปลอมเป็นแบบสอนหลักการ: radial falloff × ความสว่างของ plate × depth gate เกณฑ์ผ่านคำนวณสดจากภาพชุดเดียวกัน โดยอยู่กึ่งกลางระหว่าง error ที่ดีที่สุดของ radial × plate กับของสูตรเต็ม จึงผ่านได้แม้ยังตรงไม่เป๊ะ element ทุกชิ้นเป็นของเราเอง: จำลองด้วย Mantaflow ใน Blender 5.2 แล้วเรนเดอร์ Cycles ด้วยกล้องเดียวกับ plate (EmberGen สั่ง export แบบไม่เปิดหน้าจอไม่ได้บนเครื่องนี้) ไม่ใช้ stock element