หน้าแรก · Lab · CG multipass และ relight

CG7 เงาและ contact AO

วัดเงาจริงใน plate แล้วให้เงาของหุ่นยนต์มีสีและความเข้มเท่ากัน

CG multipass และ relight · ~8 นาที · ฟรี

1 อธิบาย

เงาคือ plate ตรงที่แสงแดดถูกบัง สิ่งที่เหลืออยู่คือแสงจากท้องฟ้า เงาจริงจึงมีสี (ในฉากนี้ออกฟ้า) ไม่ใช่สีดำ เงาบนทรายใน plate นี้เป็น 0.39 / 0.44 / 0.52 (R / G / B) ของทรายที่โดนแดด ความเข้มและสีของเงาวัดได้จากเงาที่มีอยู่แล้วใน plate

คลิกในเงาของก้อนหิน แล้วคลิกทรายที่โดนแดดข้าง ๆ อ่าน “plate เงา ÷ แดด” ทีละ channel จากนั้นปรับ “ความสว่างในเงา” และ “สีของเงา” จนเงาของเราตรงกับ plate แล้วเติม contact AO ดูภาพซูมเท้ากับ readout “เงาเต็ม (umbra)” และ “บริเวณเท้า (contact)”

plate × (1 − m · (1 − shadow colour)) × AO

2 ลงมือลอง

โจทย์: ทำเงาของหุ่นให้เหมือนเงาใน plate: เงาเต็ม (umbra) ต่างจาก Blender ไม่เกิน 6% ทุก channel และ contact AO ทำให้บริเวณเท้าใกล้ render ของ Blender ขึ้น

เงาเริ่มเป็นสีดำ (ความสว่าง 0) และไม่มี AO วัดเงาบนทรายแบบเดียวกับทรายใต้หุ่นยนต์ เงาที่ชิดก้อนหินเห็นท้องฟ้าน้อยกว่า จึงเข้มกว่าเงากลางทราย เทียบทีละ channel ไม่ใช่แค่ความสว่างรวม และให้ AO อยู่แค่ใกล้เท้า

SkyVFX Lab · CG7interactive · 1001

3 เจาะลึก

เงาคือ plate ที่ไม่มีแดด

บนทรายกลางแจ้งมีแสงสองแหล่ง แดดที่มาจากทิศเดียว กับท้องฟ้าที่ส่องมาจากรอบด้าน เมื่อหุ่นยนต์บังแดด ทรายตรงนั้นยังได้แสงท้องฟ้าอยู่ เงาจึงมืดลงและออกฟ้า

ด้วยเหตุนี้เงาจึงมืดกว่าค่าดำของบริเวณนั้นไม่ได้ และมีสีของแสงท้องฟ้าเสมอ เงาสีดำหรือสีเทาเป็นกลางจะดูผิดทันทีเมื่ออยู่ข้างเงาจริงใน plate

เทียบเงา CG กับเงาหินที่อยู่ใกล้ที่สุดใน plate เสมอ

วัดจาก plate ทีละ channel

เลือกเงาจริงบนทรายแบบเดียวกัน แล้ววัดทรายที่โดนแดดข้าง ๆ เอามาหารกันทีละ channel อัตราส่วนนี้บอกทั้งความเข้มและสีของเงา ใน plate ของเราได้ราว 0.39 / 0.44 / 0.52 (R / G / B) แต่ละ channel ไม่เท่ากัน และเงาออกฟ้ากว่าทรายที่โดนแดด

เอาอัตราส่วนนั้นไป multiply plate ภายใน shadow matte ทรายใต้หุ่นยนต์ก็จะกลายเป็นทรายในเงาแบบเดียวกับเงาหิน ใช้การคูณเท่านั้น ไม่ใช้ offset หรือ lift ติดลบ ซึ่งกดส่วนมืดจนแบนแทนการลดตามสัดส่วน

  1. 1คลิกเงาหิน
  2. 2คลิกทรายที่โดนแดดข้าง ๆ
  3. 3หารทีละ channel
  4. 4Multiply ใน shadow matte

สองชั้น: เงากว้างกับ contact AO

ความนุ่มของเงาขึ้นกับขนาดของแหล่งแสงและระยะจากวัตถุถึงพื้น ยิ่งใกล้จุดสัมผัส เงายิ่งคมและเข้ม

จึงซ้อนสองชั้น ชั้นแรกเป็นเงาแดดกว้างและนุ่ม ชั้นที่สองเป็น contact AO ที่เข้มกว่า อยู่แค่ใต้เท้าตรงที่หุ่นยนต์บังท้องฟ้าด้วย ถ้าไม่มีเงาเข้มตรงจุดสัมผัสใต้เท้า หุ่นยนต์จะดูเหมือนลอยอยู่เหนือทราย

ชั้นอยู่ตรงไหนบังอะไร
เงาแดดทุกที่ที่หุ่นยนต์บังแดดแดด เหลือแสงท้องฟ้า ใช้อัตราส่วนจาก plate
Contact AOแค่ใกล้เท้าท้องฟ้าด้วย จึงเข้มกว่าและแคบกว่า

เมื่อเงา CG ทับเงาใน plate

ถ้าคูณเงา CG ลงบนบริเวณที่ใน plate เป็นเงาอยู่แล้ว ตรงนั้นจะมืดซ้ำสองรอบเป็นเงาซ้อน ในความจริงพื้นที่อยู่ในเงาแดดแล้วจะไม่มืดลงอีกเมื่อมีวัตถุอื่นมาบังแดดเพิ่ม

ทางแก้คือทำ shadow clean plate ที่กดส่วนที่โดนแดดลงมาเท่าระดับเงา แล้ว Keymix ผ่าน alpha ของเงา CG ทรายที่โดนแดดจะลดลงมาเท่าระดับเงา ส่วนทรายที่อยู่ในเงาอยู่แล้วแทบคงเดิม

ดัน gamma ของ viewer ขึ้น แล้วดูรอยต่อตรงที่เงา CG กับเงาหินพบกัน

4 ในงานจริง

ทำใน Nuke

  1. Shuffle2 แยก shadow matte และ AO pass ออกจาก EXR ของ CG
  2. ถ้า pass จาก shadow catcher มาแบบ 1 = โดนแสง ให้ Invert ให้เป็น 1 = เงาเต็ม
  3. Blur matte ให้ขอบนุ่ม โดยคมใกล้เท้าและนุ่มขึ้นเมื่อห่างออกไป
  4. ใช้ตัวเลือกสีใน viewer วัดเงาหินกับทรายที่โดนแดดข้าง ๆ แล้วหารทีละ channel
  5. Multiply บน plate ใส่อัตราส่วนทีละ channel และต่อ matte เข้า mask (ใช้ Copy ย้าย matte เข้า alpha ก่อนถ้าต้องการ)
  6. Merge (multiply) AO pass ลงบน plate จำกัดให้อยู่แค่ใกล้เท้า

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

  • ✗ เงาสีดำหรือสีเทา ไม่มีสีท้องฟ้า✓ ใช้อัตราส่วนทีละ channel จากเงาจริง ให้เงาออกสีตามแสงท้องฟ้า
  • ✗ ปล่อย density 100% ตามที่ pass ส่งมา✓ วัดเงาจริงใน plate แล้วตั้ง density ตามนั้น
  • ✗ multiply AO ทับทั้งภาพ✓ จำกัด AO ให้อยู่แค่ใกล้จุดสัมผัสที่เท้า
  • ✗ ทำให้มืดด้วย offset หรือ lift ติดลบ ซึ่งกดส่วนมืดจนแบน (และติดลบได้ถ้าปิด black clamp ของ Grade)✓ ใช้การคูณด้วยค่าระหว่าง 0 ถึง 1 เท่านั้น
  • ✗ วัด density บนหินที่มืดกว่า แทนที่จะเป็นทรายแบบเดียวกัน✓ วัดทั้งเงาและส่วนที่โดนแดดบนพื้นผิวเดียวกับที่เงา CG ตกลง

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

  • อัตราส่วน shadow/lit ของเงา CG ตรงกับเงาจริงบนทรายแบบเดียวกันทุก channel
  • เงามีสีท้องฟ้า และไม่มืดกว่าค่าดำของบริเวณนั้น
  • ไม่มีค่าติดลบในบริเวณเงา
  • AO อยู่แค่ใกล้เท้า ส่วนอื่นของ plate ไม่ถูกแตะ
  • เงาคมที่จุดสัมผัสและนุ่มขึ้นเมื่อห่างออกไป
  • ตรงที่ทับเงาใน plate ไม่มืดซ้ำสองรอบ

5 เช็กตัวเอง

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

เงาแดดบนทรายใน plate จริง ๆ คืออะไร

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

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

คำถามเพิ่ม

1. จะวัดความเข้มและสีของเงา ควรคลิกที่ไหนใน plate

2. contact AO ควรใส่อย่างไร

ตัวเลขมาจากไหน: ภาพทั้งหมด render ด้วย Blender 5.2 Cycles จากฉากทะเลทรายและหุ่นยนต์ของเราเอง (tools/assets/passes_cg.py) แล้วคำนวณในเบราว์เซอร์ pass เงามาจาก shadow catcher ของ Blender: ส่องแดดอย่างเดียว (matte เงา) และ AO pass ของพื้นที่มีกับไม่มีหุ่น (contact AO) ภาพอ้างอิงคือ shadow catcher ที่มีทั้งแดดและท้องฟ้าของ plate เป้าคืออัตราส่วนในเงาเต็มเทียบกับ Blender บวก AO ที่ช่วยบริเวณเท้า ค่าต่างของเงาทั้งก้อนแสดงไว้แต่ไม่ใช่เป้า เพราะ noise ของ render มีผลมาก สูตรเงาในนี้เป็นแบบสอนหลักการของการตั้ง Grade/Multiply ที่ใช้กันทั่วไป