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)) × AO2 ลงมือลอง
โจทย์: ทำเงาของหุ่นให้เหมือนเงาใน plate: เงาเต็ม (umbra) ต่างจาก Blender ไม่เกิน 6% ทุก channel และ contact AO ทำให้บริเวณเท้าใกล้ render ของ Blender ขึ้น
เงาเริ่มเป็นสีดำ (ความสว่าง 0) และไม่มี AO วัดเงาบนทรายแบบเดียวกับทรายใต้หุ่นยนต์ เงาที่ชิดก้อนหินเห็นท้องฟ้าน้อยกว่า จึงเข้มกว่าเงากลางทราย เทียบทีละ channel ไม่ใช่แค่ความสว่างรวม และให้ AO อยู่แค่ใกล้เท้า
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คลิกเงาหิน
- 2คลิกทรายที่โดนแดดข้าง ๆ
- 3หารทีละ channel
- 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
- Shuffle2 แยก shadow matte และ AO pass ออกจาก EXR ของ CG
- ถ้า pass จาก shadow catcher มาแบบ 1 = โดนแสง ให้ Invert ให้เป็น 1 = เงาเต็ม
- Blur matte ให้ขอบนุ่ม โดยคมใกล้เท้าและนุ่มขึ้นเมื่อห่างออกไป
- ใช้ตัวเลือกสีใน viewer วัดเงาหินกับทรายที่โดนแดดข้าง ๆ แล้วหารทีละ channel
- Multiply บน plate ใส่อัตราส่วนทีละ channel และต่อ matte เข้า mask (ใช้ Copy ย้าย matte เข้า alpha ก่อนถ้าต้องการ)
- 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 เช็กตัวเอง
เงาแดดบนทรายใน 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 ที่ใช้กันทั่วไป