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.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: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:Penting
Efek shell hanya berfungsi saat mode penyajian TileBasedComposition digunakan.
Catatan
Efek shell diabaikan untuk cloud titik.
Selected
: Geometri dirender dengan garis besar pilihan.Catatan
Penyajian kerangka pilihan diabaikan untuk cloud titik.
DisableCollision
: Geometri dikecualikan dari kueri spasial. BenderaHidden
tidak mempengaruhi bendera status persimpangan, sehingga kedua bendera ini sering diatur bersamaan.TransparencyWritesDepth
: Mengaktifkan penulisan kedalaman untukSee-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 jikaTransparencyWritesDepth
dipaksakan secara global. Untuk transparansi material, bendera berperilaku inklusif, yang berarti jikaTransparencyWritesDepth
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 propertiCutPlaneFilterMask
. 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.UseOverrideMaterial
: Jika diaktifkan, bahan yang disimpan diOverrideMaterial
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 iniForceOff
- status dinonaktifkan untuk semua jala pada dan di bawah simpul iniInheritFromParent
- 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 .