Bagikan melalui


Jala

Jala adalah sumber daya bersama yang tidak dapat diubah yang hanya dapat dibuat melalui konversi model. Jala digunakan untuk penyajian tetapi juga untuk memberikan representasi fisika untuk kueri transmisi sinar. Untuk menempatkan mesh di ruang 3D, tambahkan MeshComponent ke Entitas.

Jenis jala

Ada dua jenis sumber daya jala yang berbeda di ARR: Jala segitiga dan awan titik. Kedua jenis diwakili oleh kelas MeshAPI yang sama. Kecuali untuk perbedaan kecil dalam perilaku untuk jenis jala yang berbeda, fungsionalitas API yang diekspos identik.

Layanan konversi secara otomatis menentukan jenis jala yang sesuai berdasarkan ekstensi file sumber. Misalnya, file FBX selalu dikonversi sebagai jala segitiga, sedangkan PLY diperlakukan sebagai cloud titik. Untuk daftar lengkap format file yang didukung, lihat daftar format file sumber.

Ada dua perbedaan signifikan yang menghadap pengguna antara konversi jala titik cloud dan segitiga:

  • Jala cloud titik tidak mengekspos bahan apa pun. Tampilan visual titik hanya didefinisikan oleh warna per titiknya,
  • point cloud tidak mengekspos grafik adegan. Sebagai gantinya, semua titik dilampirkan ke entitas simpul akar.

Properti sumber daya

Properti kelas Mesh adalah:

  • Material: Array material. Setiap material digunakan oleh subjala yang berbeda. Beberapa entri dalam array dapat mereferensikan material yang sama. Entri dalam array ini tidak dapat diubah pada runtime, namun properti material dapat. Untuk cloud titik, array ini kosong.

  • Batas: Kotak batas sejajar sumbu spasi lokal (AABB) dari simpul jala.

MeshComponent

Kelas MeshComponent ini digunakan untuk menempatkan instans sumber daya jala. Setiap MeshComponent mereferensikan satu jala. Ini dapat menimpa material mana yang digunakan untuk merender setiap subjala.

Properti MeshComponent

  • Jala: Sumber daya jala yang digunakan oleh komponen ini.

  • Material: Array bahan yang ditentukan pada komponen jala itu sendiri. Array akan selalu memiliki panjang yang sama dengan array Material pada sumber daya jala. Material yang tidak akan ditimpa dari default mesh, diatur ke null dalam array ini.

  • UsedMaterials: Array material yang benar-benar digunakan untuk setiap subjala. Akan identik dengan data dalam array Material, untuk nilai bukan nol. Jika tidak, itu berisi nilai dari array Material dalam instans mesh. Array ini bersifat baca-saja.

Berbagi jala

Sumber daya Mesh dapat dibagikan di beberapa instans komponen mesh. Selanjutnya, sumber daya Mesh yang ditugaskan pada komponen mesh dapat diubah secara terprogram kapan saja. Kode di bawah ini menunjukkan cara mengkloning mesh:

Entity CloneEntityWithModel(RenderingConnection api, Entity sourceEntity)
{
    MeshComponent meshComp = sourceEntity.FindComponentOfType<MeshComponent>();
    if (meshComp != null)
    {
        Entity newEntity = api.CreateEntity();
        MeshComponent newMeshComp = api.CreateComponent(ObjectType.MeshComponent, newEntity) as MeshComponent;
        newMeshComp.Mesh = meshComp.Mesh; // share the mesh
        return newEntity;
    }
    return null;
}
ApiHandle<Entity> CloneEntityWithModel(ApiHandle<RenderingConnection> api, ApiHandle<Entity> sourceEntity)
{
    if (ApiHandle<MeshComponent> meshComp = sourceEntity->FindComponentOfType<MeshComponent>())
    {
        ApiHandle<Entity> newEntity = *api->CreateEntity();
        ApiHandle<MeshComponent> newMeshComp = api->CreateComponent(ObjectType::MeshComponent, newEntity)->as<RemoteRendering::MeshComponent>();
        newMeshComp->SetMesh(meshComp->GetMesh()); // share the mesh
        return newEntity;
    }
    return nullptr;
}

Dokumentasi API

Langkah berikutnya