Bagikan melalui


Penimpaan status hierarkis

Dalam banyak kasus, perlu mengubah tampilan bagian model secara dinamis, misalnya menyembunyikan sub grafik atau mengalihkan bagian ke penyajian transparan. Mengubah materi setiap bagian yang terlibat tidak praktis karena perlu melakukan iterasi pada seluruh grafik adegan, dan mengelola kloning dan penugasan material pada setiap simpul.

Untuk mencapai kasus penggunaan ini dengan overhead sesedikit mungkin, gunakan HierarchicalStateOverrideComponent. Komponen ini mengimplementasikan pembaruan status hierarkis pada cabang arbitret dari grafik scene. Itu berarti, status dapat didefinisikan pada tingkat apa pun dalam grafik adegan dan mengelabui hierarki hingga ditimpa oleh status baru, atau diterapkan ke objek daun.

Sebagai contoh, pertimbangkan model mobil dan Anda ingin mengalihkan seluruh mobil agar transparan, kecuali bagian mesin bagian dalam. Kasus penggunaan ini hanya melibatkan dua contoh komponen:

  • Komponen pertama ditetapkan ke simpul akar model dan mengaktifkan penyajian transparan untuk seluruh mobil.
  • Komponen kedua ditetapkan ke simpul akar mesin dan menimpa status lagi dengan secara eksplisit menonaktifkan mode tembus pandang.

Catatan

Cloud titik tidak mengekspos grafik adegan penuh (lihat perbedaan jenis jala), jadi menetapkan penimpaan hierarkis ke entitas akar model cloud titik akan menerapkan status ke cloud titik penuh. Selain itu, beberapa fitur penimpaan status tidak didukung untuk cloud titik, seperti yang disebutkan di bagian masing-masing.

Fitur

Kumpulan status tetap yang dapat ditimpa adalah:

  • Hidden: Masing-masing jala dalam grafik scene disembunyikan atau ditampilkan.

  • Tint color: Objek yang dirender dapat diwarnai dengan warna rona individual dan bobot rona. Gambar di bawah menunjukkan rona warna pelek roda.

    Rona warna digunakan untuk mengubah objek menjadi hijau

  • See-through: Geometri dirender semi transparan, misalnya untuk mengungkapkan bagian dalam objek. Gambar berikut menunjukkan seluruh mobil dirender dalam mode tembus pandang, kecuali kaliper rem merah:

    Mode tembus pandang yang digunakan untuk membuat objek yang dipilih transparan

    Penting

    Efek tembus pandang hanya berfungsi saat mode penyajian TileBasedComposition digunakan.

    Catatan

    Efek tembus cahaya diabaikan untuk cloud titik.

  • Shell: Geometri dirender sebagai shell transparan dan terdampak. Mode ini memungkinkan memudarkan bagian adegan yang tidak penting sambil tetap mempertahankan rasa bentuk dan posisi relatif. Untuk mengubah tampilan penyajian shell, gunakan status ShellRenderingSettings. Lihat gambar berikut untuk model mobil yang sepenuhnya dirender shell, kecuali untuk pegas biru:

    Mode shell digunakan untuk memudarkan objek tertentu

    Penting

    Efek shell hanya berfungsi saat mode penyajian TileBasedComposition digunakan.

    Catatan

    Efek shell diabaikan untuk cloud titik.

  • Selected: Geometri dirender dengan garis besar pilihan.

    Opsi garis luar digunakan untuk menyoroti bagian yang dipilih

    Catatan

    Penyajian kerangka pilihan diabaikan untuk cloud titik.

  • DisableCollision: Geometri dikecualikan dari kueri spasial. Bendera Hidden tidak mempengaruhi bendera status persimpangan, sehingga kedua bendera ini sering diatur bersamaan.

  • TransparencyWritesDepth: Mengaktifkan penulisan kedalaman untuk See-through transparansi material dan di pohon adegan entitas komponen. Dengan menggunakan bendera ini, See-through transparansi dapat memiliki penulisan kedalaman baik diaktifkan atau dinonaktifkan dalam subtree, bahkan jika TransparencyWritesDepth dipaksakan secara global. Untuk transparansi material, bendera berperilaku inklusif, yang berarti jika TransparencyWritesDepth diaktifkan dengan penimpaan, dipaksa secara global, atau melalui bendera bahan, penulisan kedalaman diaktifkan untuk objek yang dirender dengan materi ini.

  • UseCutPlaneFilterMask: Gunakan masker bit filter individual untuk mengontrol pemilihan bidang potong. Bendera ini menentukan apakah masing-masing masker filter harus digunakan atau diwarisi dari induknya. Masker bit filter itu sendiri diatur melalui properti CutPlaneFilterMask. Untuk mengetahui informasi terperinci tentang cara kerja pemfilteran, lihat Paragraf bidang potong selektif. Lihat contoh berikut yang mana hanya ban dan pelek yang dipotong sementara sisa scene tetap tidak terpengaruh. Bidang potong selektif

  • UseOverrideMaterial: Jika diaktifkan, bahan yang disimpan di OverrideMaterial digunakan untuk merender geometri dengan bahan tersebut. Ini adalah cara yang efisien untuk beralih penyajian bagian model yang lebih besar ke bahan khusus tanpa benar-benar mengalihkan bahan bagian individual. Bahan warna dapat mengambil alih bahan PBR dan sebaliknya. Namun, harus dijamin bahwa model menyediakan aliran verteks wajib, misalnya, vertex normal jika bahan yang ditimpa adalah bahan PBR. Selain itu, mengganti tombol tersebut pada transparansi, hanya berfungsi dengan andal dalam mode penyajian TileBasedComposition.

    Catatan

    Materi penimpaan diabaikan untuk cloud titik.

Tip

Sebagai alternatif untuk menonaktifkan visibilitas dan kueri spasial untuk sub grafik penuh, status enabled objek game dapat dililih. Jika hierarki dinonaktifkan, ini memiliki preferensi atas HierarchicalStateOverrideComponent apa pun.

Penimpaan hierarkis

HierarchicalStateOverrideComponent dapat dilampirkan pada beberapa tingkat hierarki objek. Karena hanya ada satu komponen dari setiap jenis pada entitas, setiap HierarchicalStateOverrideComponent mengelola status untuk tersembunyi, tembus pandang, dipilih, rona warna dan persimpangan.

Oleh karena itu, setiap status dapat diatur ke salah satu dari:

  • ForceOn - status diaktifkan untuk semua jala pada dan di bawah simpul ini
  • ForceOff - status dinonaktifkan untuk semua jala pada dan di bawah simpul ini
  • InheritFromParent - simpul tidak terpengaruh oleh komponen penimpaan ini

Anda dapat mengubah status secara langsung atau melalui fungsi SetState:

HierarchicalStateOverrideComponent component = ...;

// set one state directly
component.HiddenState = HierarchicalEnableState.ForceOn;

// set a state with the SetState function
component.SetState(HierarchicalStates.SeeThrough, HierarchicalEnableState.InheritFromParent);

// set multiple states at once with the SetState function
component.SetState(HierarchicalStates.Hidden | HierarchicalStates.DisableCollision, HierarchicalEnableState.ForceOff);
ApiHandle<HierarchicalStateOverrideComponent> component = ...;

// set one state directly
component->SetHiddenState(HierarchicalEnableState::ForceOn);

// or: set a state with the SetState function
component->SetState(HierarchicalStates::SeeThrough, HierarchicalEnableState::InheritFromParent);

// set multiple states at once with the SetState function
component->SetState(
    (HierarchicalStates)((int32_t)HierarchicalStates::Hidden | (int32_t)HierarchicalStates::DisableCollision), HierarchicalEnableState::ForceOff);

Warna tint

Penimpaan tint color sedikit istimewa karena ada keadaan aktif/nonaktif/warisan dan properti warna rona. Bagian alfa dari warna warna warna menentukan bobot efek tinting: Jika diatur ke 0,0, tidak ada warna warna yang terlihat dan jika diatur ke 1,0 objek dirender dengan warna warna murni. Untuk nilai di antara nilai, warna akhir dicampur dengan warna warna. Warna rona dapat diubah berdasarkan per bingkai untuk mencapai animasi warna.

Pertimbangan performa

Instans HierarchicalStateOverrideComponent sendiri tidak menambahkan banyak overhead runtime. Namun, selalu menjadi praktik yang baik untuk menjaga jumlah komponen aktif tetap rendah. Misalnya, saat menerapkan sistem pemilihan yang menyoroti objek yang dipilih, disarankan untuk menghapus komponen saat sorotan dihapus. Menjaga komponen tetap di sekitar dengan fitur netral dapat dengan cepat bertambah.

Penyajian transparan menempatkan lebih banyak beban kerja pada GPU server daripada penyajian standar. Jika sebagian besar grafik adegan dialihkan ke tembus pandang, dengan banyak lapisan geometri yang terlihat, ini mungkin menjadi penyempitan performa. Hal yang sama berlaku untuk objek dengan kerangka pemilihan dan untuk penyajian shell .

Dokumentasi API

Langkah berikutnya