Menggunakan Estimasi Pencahayaan dengan model Sceneform

Lighting Estimation API menganalisis gambar tertentu untuk isyarat visual terpisah dan memberikan informasi mendetail tentang pencahayaan dalam adegan tertentu. Kemudian, Anda dapat menggunakan informasi ini saat merender objek virtual untuk menerangi objek tersebut dalam kondisi yang sama dengan scene yang ditempatkan, sehingga objek ini terasa lebih realistis dan meningkatkan pengalaman yang imersif bagi pengguna.

Tanda dan konsep pencahayaan

Manusia secara tidak sadar merasakan isyarat yang halus tentang bagaimana benda atau benda hidup diterangi di lingkungan mereka. Saat objek virtual kehilangan bayangan atau memiliki material mengkilap yang tidak memantulkan ruang di sekitarnya, pengguna dapat merasakan objek tersebut tidak cukup masuk ke dalam scene tertentu meskipun tidak dapat menjelaskan alasannya. Oleh karena itu, merender objek AR agar sesuai dengan pencahayaan dalam scene sangat penting untuk pengalaman yang imersif dan lebih realistis.

Perkiraan Pencahayaan melakukan sebagian besar pekerjaan untuk Anda dengan menyediakan data mendetail yang memungkinkan Anda meniru berbagai petunjuk pencahayaan saat merender objek virtual. Tanda tersebut adalah bayangan, cahaya sekitar, bayangan, sorotan sorotan, dan refleksi.

Kami dapat menjelaskan isyarat visual tersebut seperti ini:

  • Cahaya sekitar. Cahaya sekitar adalah cahaya difusi yang masuk dari lingkungan sekitar secara keseluruhan, yang menerangi semuanya.

  • Bayangan. Bayangan sering bersifat terarah dan memberi tahu penonton dari mana sumber cahaya berasal.

  • Shading. Bayangan adalah intensitas cahaya di berbagai area pada gambar tertentu. Misalnya, berbagai bagian objek yang sama dapat memiliki tingkat bayangan yang berbeda dalam scene yang sama bergantung pada sudut yang relatif terhadap penampilan, dan kedekatannya dengan sumber cahaya.

  • Sorotan tertentu. Inilah bagian permukaan yang berkilau yang memantulkan sumber cahaya secara langsung. Sorotan pada perubahan objek relatif terhadap posisi penampil dalam adegan.

  • Refleksi. Cahaya memantul dari permukaan secara berbeda bergantung pada apakah permukaan tersebut memiliki properti spekuler (yaitu, sangat pantul) atau difusi (bukan reflektif). Misalnya, bola metalik akan sangat spesifik dan mencerminkan lingkungannya, sedangkan bola lain dicat abu-abu matte kusam akan menyebar. Sebagian besar objek dunia nyata memiliki kombinasi properti ini -- anggaplah bola boling yang rusak atau kartu kredit yang digunakan dengan baik.

    Permukaan reflektif juga mengambil warna dari lingkungan sekitar. Pewarnaan objek dapat dipengaruhi langsung oleh pewarnaan lingkungannya. Misalnya, bola putih di ruangan biru akan berwarna kebiruan.

Menggunakan mode Perkiraan Pencahayaan untuk meningkatkan realisme

Config.LightEstimationMode API memiliki mode yang memperkirakan pencahayaan di lingkungan dengan tingkat granularitas dan realisme yang berbeda.

  • Mode HDR lingkungan (ENVIRONMENTAL_HDR). Mode ini terdiri dari API yang memungkinkan estimasi pencahayaan yang realistis untuk pencahayaan terarah, bayangan, sorotan spekuler, dan refleksi.

  • Mode Intensitas Lingkungan (AMBIENT_INTENSITY). Mode ini menentukan intensitas piksel rata-rata dan warna pencahayaan untuk gambar yang ditentukan. Ini adalah setelan sementara yang dirancang untuk kasus penggunaan di mana pencahayaan yang tepat tidak terlalu penting, seperti objek yang memiliki pencahayaan terang.

  • DISABLED. Menonaktifkan Config.LightEstimationMode jika pencahayaan cocok dengan lingkungan yang diberikan tidak relevan untuk scene atau objek.

Menggunakan mode ENVIRONMENTAL_HDR

Mode ENVIRONMENTAL_HDR menggunakan machine learning untuk menganalisis gambar kamera input dan menstimulasi pencahayaan lingkungan untuk merender objek virtual.

Mode ini menggabungkan pencahayaan terarah, harmonik bulat sekitar, dan kubus peta HDR untuk membuat objek virtual terasa seperti menjadi bagian fisik dari situasi tertentu:

  • Pencahayaan terarah menganalisis sumber cahaya tampak untuk gambar tertentu. Pencahayaan semacam ini menambahkan sorotan spekuler yang diposisikan secara wajar, dan menampilkan bayangan ke arah yang konsisten dengan objek nyata lainnya.

  • Harsonik sferikal sekitar mendapatkan representasi realistis dari keseluruhan cahaya sekitar yang masuk dari semua arah dalam sebuah scene. Selama rendering, informasi ini digunakan untuk menambahkan tanda halus yang menampilkan definisi objek virtual.

  • Kubus peta HDR merekam pencahayaan lingkungan di sekitar objek virtual. Selama rendering, cubemap ini menghasilkan refleksi untuk materi berkilau sedang hingga tinggi.

Gambar berikut menunjukkan contoh objek virtual yang ditempatkan di scene dengan ENVIRONMENTAL_HDR diaktifkan.

Mengonfigurasi mode ENVIRONMENTAL_HDR untuk scene Sceneform

Untuk menggunakan ENVIRONMENTAL_HDR dengan scene Sceneform, perluas class ARFragment, dan ganti konfigurasi sebagai berikut:

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

Untuk melihat contoh cara kerjanya, lihat contoh Tata Surya. (Contoh ini mengimplementasikan ENVIRONMENTAL_HDR tanpa menggunakan ARFragment.)

Menggunakan mode AMBIENT_INTENSITY

Mode AMBIENT_INTENSITY menentukan intensitas piksel rata-rata dan skalar koreksi warna untuk gambar tertentu. Ini adalah setelan sementara yang dirancang untuk kasus penggunaan di mana pencahayaan yang tepat tidak terlalu penting, seperti objek yang memiliki pencahayaan.

  • Intensitas piksel menangkap intensitas piksel rata-rata pencahayaan dalam adegan, untuk diterapkan ke seluruh objek virtual.

  • Skalar koreksi warna mendeteksi keseimbangan putih untuk setiap frame, dan memungkinkan Anda mewarnai objek virtual agar terintegrasi dengan lebih lancar ke dalam pewarnaan keseluruhan scene.

Mengonfigurasi mode AMBIENT_INTENSITY untuk scene Sceneform

Untuk menggunakan AMBIENT_INTENSITY dengan scene Sceneform, perluas class ARfragment, dan ganti konfigurasi sebagai berikut:

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