การใช้การประมาณแสงกับโมเดลของฉาก

Lighting Estimation API จะวิเคราะห์รูปภาพโดยใช้รูปแบบที่แยกออกมาเป็นภาพ และให้ข้อมูลโดยละเอียดเกี่ยวกับการจัดแสงในฉากนั้นๆ จากนั้นคุณสามารถใช้ข้อมูลนี้เมื่อแสดงภาพวัตถุเสมือนจริงเพื่อจัดแสงให้แสงใต้สภาวะแวดล้อมเดียวกันกับวัตถุ ทําให้วัตถุเหล่านี้ดูสมจริงขึ้นและเพิ่มประสบการณ์ที่สมจริงให้แก่ผู้ใช้

แนวทางและแนวคิดในการจัดแสง

มนุษย์รู้สัญญาณเล็กๆ น้อยๆ ไม่รู้ตัวว่าวัตถุหรือสิ่งมีชีวิตอยู่ในแสงสว่างในสภาพแวดล้อมอย่างไร เมื่อวัตถุเสมือนไม่มีเงาหรือวัสดุแวววาวไม่ครอบคลุมพื้นที่โดยรอบ ผู้ใช้สัมผัสได้ว่าวัตถุนั้นไม่เหมาะกับฉากใดเป็นพิเศษ แม้ว่าจะอธิบายไม่ได้ก็ตาม ด้วยเหตุนี้ การแสดงภาพวัตถุ AR ให้สอดคล้องกับแสงในฉากจึงเป็นสิ่งสําคัญสําหรับประสบการณ์ที่สมจริงและสมจริงยิ่งขึ้น

การประมาณแสงจะช่วยทํางานส่วนใหญ่ให้คุณโดยให้ข้อมูลแบบละเอียดที่คุณเลียนแบบลักษณะแสงต่างๆ ได้เมื่อแสดงภาพวัตถุเสมือนจริง จุดเหล่านี้ได้แก่ เงา แสงแวดล้อม เฉดสี ไฮไลต์เฉพาะ และการสะท้อน

เราอธิบายลักษณะภาพต่อไปนี้ได้

  • แสงแวดล้อม แสงแวดล้อมเป็นแสงแบบกระจายโดยรวมที่เดินทางมาจากสภาพแวดล้อมรอบๆ และส่องสว่างให้ทุกอย่าง

  • เงา เงามักจะเป็นทิศทางและบอกผู้ชมว่าแหล่งที่มาของแสง มาจากที่ใด

  • การเฉดสี เฉดสีคือความเข้มของแสงในพื้นที่ต่างๆ ของรูปภาพที่ระบุ ตัวอย่างเช่น ส่วนต่างๆ ของวัตถุเดียวกันอาจมีระดับเฉดสีแตกต่างกันในฉากเดียวกันโดยขึ้นอยู่กับมุมที่สัมพันธ์กับผู้ชม และความใกล้เคียงของแหล่งกําเนิดแสง

  • ไฮไลต์ที่โดดเด่น นี่คือพื้นผิวที่มันวาวสะท้อนแสงโดยตรง ไฮไลต์ในวัตถุที่เปลี่ยนไปเมื่อเทียบกับตําแหน่งของผู้ชมในฉาก

  • การทบทวน แสงที่เด้งขึ้นมาบนพื้นผิวต่างๆ ขึ้นอยู่กับว่าพื้นผิวของสถานที่นั้นมีคุณสมบัติเฉพาะหรือไม่ (แสงสะท้อนมาก) หรือกระจายแสง (ไม่สะท้อนแสง) เช่น ลูกบอลโลหะจะมีรูปทรงที่เจาะจงมากและสะท้อนถึงสภาพแวดล้อม ในขณะที่ลูกบอลสีอื่นจะเป็นสีเทาเข้มแบบกระจายตัว วัตถุในชีวิตจริงส่วนใหญ่มีส่วนประกอบผสมกันเหล่านี้ เช่น ลูกโบว์ลิ่งที่นอนไม่หลับหรือบัตรเครดิตมือสอง

    พื้นผิวสะท้อนแสงยังเลือกสีจากสภาพแวดล้อมโดยรอบด้วย สีของวัตถุอาจได้รับผลกระทบโดยตรงจากการใช้สีของสภาพแวดล้อม เช่น ลูกบอลสีขาวในห้องสีน้ําเงินจะเป็นสีเทา

ใช้โหมดการประมาณแสงเพื่อเพิ่มความสมจริง

Config.LightEstimationMode API มีโหมดที่ประมาณแสงในสภาพแวดล้อมด้วยระดับความละเอียดและความสมจริงที่แตกต่างกัน

  • โหมด HDR ตามสภาพแวดล้อม (ENVIRONMENTAL_HDR) โหมดนี้ประกอบด้วย API ที่ให้การประเมินแสงที่สมจริงสําหรับการจัดแสง เงา ไฮไลต์ที่เฉพาะเจาะจง และการสะท้อนแสงตามทิศทาง

  • โหมดความเข้มข้นของแอมเบียนท์ (AMBIENT_INTENSITY) โหมดนี้จะกําหนดความหนาแน่นของพิกเซลโดยเฉลี่ยและสีของแสงสําหรับรูปภาพหนึ่งๆ การตั้งค่าคร่าวๆ ที่ออกแบบมาเพื่อกรณีการใช้งานที่แสงสว่างไม่สําคัญ เช่น วัตถุที่มีแสงสว่างแบบอบ

  • DISABLED ปิดใช้ Config.LightEstimationMode หากการจัดแสงให้เข้ากับสภาพแวดล้อม ที่ไม่เกี่ยวข้องกับฉากหรือวัตถุ

กําลังใช้โหมด ENVIRONMENTAL_HDR

โหมด ENVIRONMENTAL_HDR ใช้แมชชีนเลิร์นนิงเพื่อวิเคราะห์รูปภาพของกล้องอินพุตและสังเคราะห์แสงแวดล้อมสําหรับแสดงภาพวัตถุเสมือนจริง

โหมดนี้จะรวมการจัดแสงแบบทิศทาง แอมเบียนท์ทรงกลมโดยรอบ และคิวอาร์โค้ดแบบ HDR เพื่อทําให้วัตถุเสมือนจริงรู้สึกเหมือนเป็นส่วนหนึ่งของฉาก

  • การจัดแสงแบบปรับทิศทางจะวิเคราะห์แหล่งกําเนิดแสงที่ปรากฏชัดเจนสําหรับรูปภาพหนึ่งๆ การจัดแสงประเภทนี้จะเพิ่มไฮไลต์ที่มีลักษณะเป็นตําแหน่งในตําแหน่งที่เหมาะสมและมีเงาเป็นทิศทางซึ่งสอดคล้องกับวัตถุจริงอื่นๆ ที่มองเห็นได้

  • ฮาร์โมนิกแบบแอมเบียนท์ทรงกลมจะแทนแสงแวดล้อม แบบสมจริงจากทุกทิศทางในฉาก ในระหว่างการแสดงภาพนี้ เราจะใช้ข้อมูลนี้เพื่อเพิ่มรายละเอียดเล็กๆ น้อยๆ ที่บอกคําจํากัดความของวัตถุเสมือน

  • Cube Map ของ HDR จะบันทึกแสงแวดล้อมรอบวัตถุเสมือนจริง ในระหว่างแสดงผลนี้ Cubemap จะสะท้อนถึงเนื้อหาความมันวาวปานกลางถึงสูง

รูปภาพต่อไปนี้แสดงตัวอย่างของออบเจ็กต์เสมือนที่วางอยู่ในฉากที่เปิดใช้ ENVIRONMENTAL_HDR

กําหนดค่าโหมด ENVIRONMENTAL_HDR สําหรับฉากในโหมด

หากต้องการใช้ ENVIRONMENTAL_HDR กับโหมด Sceneform ให้ขยายคลาส ARFragment และลบล้างการกําหนดค่าดังนี้

@Override
protected Config getSessionConfiguration(Session session) {
  Config config = new Config(session);
  config.setLightEstimationMode(Config.LightEstimationMode.ENVIRONMENTAL_HDR);
  return config;
}

หากต้องการดูตัวอย่างวิธีการทํางาน โปรดดูตัวอย่างระบบสุริยะ (ตัวอย่างนี้นํา ENVIRONMENTAL_HDR ไปใช้โดยไม่มี ARFragment)

กําลังใช้โหมด AMBIENT_INTENSITY

โหมด AMBIENT_INTENSITY กําหนดความหนาแน่นของพิกเซลเฉลี่ยและการปรับสเกลสีที่ปรับแก้สําหรับรูปภาพหนึ่งๆ เป็นการตั้งค่าแบบคร่าวๆ ที่ออกแบบมาเพื่อกรณีการใช้งานที่แสงสว่างไม่สําคัญ เช่น วัตถุที่มีแสงสว่างแบบอบแห้ง

  • ความเข้มข้นของพิกเซลจะบันทึกความเข้มพิกเซลโดยเฉลี่ยของแสงในฉากเพื่อนําไปใช้กับออบเจ็กต์เสมือนทั้งชิ้น

  • สเกลสเกลของการแก้ไขสีจะตรวจหาความสมดุลสีขาวสําหรับแต่ละเฟรมและช่วยให้คุณแก้สีวัตถุเสมือนเพื่อให้สีต่างๆ ผสานเข้ากับสีของฉากได้อย่างราบรื่นยิ่งขึ้น

กําหนดค่าโหมด AMBIENT_INTENSITY สําหรับฉากในโหมด

หากต้องการใช้ AMBIENT_INTENSITY กับโหมด Sceneform ให้ขยายคลาส ARfragment และลบล้างการกําหนดค่าดังนี้

@Override
protected Config getSessionConfiguration(Session session) {
  Config config = new Config(session);
  config.setLightEstimationMode(Config.LightEstimationMode.AMBIENT_INTENSITY);
  return config;
}