Menawarkan BatchRenderer Sitemap
Membuat batch

Mendaftar jala dan bahan

MeshGrafik utama primitif Unity. Mesh membuat sebagian besar dunia 3D Anda. Unity mendukung mesh poligon triangulat atau Quadrangulasi. Nurbs, Nurms, permukaan Subdiv harus dikonversi ke poligon. More info
Lihat di Glossary
dan MaterialAset yang menentukan bagaimana permukaan harus diberikan. More info
Lihat di Glossary
dikelola C# objek dalam Unity yang berarti Anda tidak dapat menggunakannya dari kode C#. Ini berarti bahwa untuk menggunakannya dalam perintah BRG menggambar, Anda harus berlatih dengan BRG.

Untuk mendaftarkan benda Mesh dan Material, gunakan BatchRendererGroup.RegisterMesh dan Datasheet masing-masing. Fungsi-fungsi ini mengembalikan BatchMeshID dan BatchMaterialID, masing-masing, yang merupakan struktur data polos yang mengandung pegangan yang tidak kompatibel Burst. Mereka sangat mengetik untuk membantu mencegah kesalahan dari secara tidak sengaja menggunakan jenis pegangan yang salah.

Anda dapat mendaftarkan benda Mesh dan Material kapan saja, termasuk waktu berjalan. Satu-satunya persyaratan adalah:

  • Anda perlu mendaftarkan benda Mesh dan Bahan sebelum BatchRendererGroup dapat menggunakannya untuk membuat.
  • Bahan harus mendukung DOTS Instancing.

Anda juga dapat melepaskan benda Mesh dan Bahan jika Anda tidak lagi membutuhkannya. Ini diperlukan jika Anda ingin membongkar benda Mesh atau Bahan apa pun. BatchRendererGroup.Dispose secara otomatis membuka seluruh aset terdaftar.

Note: Anda tidak dapat serialisasi BatchMeshID atau BatchMaterialID. Mereka hanya berlaku dengan BatchRendererGroup Anda mendaftarkan mereka dengan dan menjadi tidak valid jika Anda tidak menakutkan mereka, atau jika BatchRenderGroup tidak lagi ada. Login ID juga menjadi tidak valid jika sesuatu yang memaksa Unity untuk membongkar benda Mesh atau Material, yang terjadi ketika Unity membongkar SceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary
bahwa benda Mesh atau Material adalah bagian dari.

Mungkin untuk mendaftarkan objek Mesh atau Material yang sama beberapa kali. Ini berguna dalam situasi di mana Anda ingin mendaftarkan Mesh atau Bahan tanpa harus tahu mana Mesh dan Bahan telah terdaftar. Dalam situasi ini, BatchRenderer menjaga jumlah internal pendaftaran dengan cara berikut:

  • Setiap kali Anda mendaftarkan objek Mesh atau Material, BatchRendererGroup meningkatkan jumlah referensinya oleh 1.
  • Setiap kali Anda melepaskan benda Mesh atau Bahan, BatchRendererGroup mengurangi jumlah referensinya sebesar 1. Jika ini menyebabkan jumlah referensi mencapai 0, BatchRendererGroup unregisters Mesh atau Material. Jika Anda ingin menggunakan Mesh atau Bahan di masa depan menggambar perintah, Anda harus mendaftar lagi.
  • A RegisterMesh atau RegisterMaterial panggilan dengan Mesh terdaftar yang sudah terdaftar atau Material mengembalikan BatchMeshID yang sama atau BatchMaterialID sebagai panggilan sebelumnya. Namun, jika BatchRendererGroup benar-benar tidak terdaftar Mesh atau Bahan, mendaftar lagi bisa mengembalikan ID yang berbeda.

Note: Pemeriksaan BRG untuk modifikasi pada benda Mesh atau Bahan setelah metode callback OnPerformCulling pertama dalam bingkai. Ini berarti bahwa Unity mengambil setiap modifikasi yang terjadi sebelum itu masuk ke akun. Ini termasuk perubahan yang Anda buat di callback pertama itu sendiri, tetapi tidak berubah yang terjadi dalam pekerjaan apa pun yang dijadwalkan oleh callback. Modifikasi Mesh atau benda Material setelah itu menyebabkan perilaku yang tidak ditentukan.

Lihat sampel kode berikut untuk contoh cara mendaftarkan jala dan bahan dengan objek BatchRenderer. Sampel kode ini membangun pada satu di Menawarkan BatchRenderer Sitemap.

using System;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Jobs;
using UnityEngine;
using UnityEngine.Rendering;

public class SimpleBRGExample : MonoBehaviour
{
    public Mesh mesh;
    public Material material;

    private BatchRendererGroup m_BRG;

    private BatchMeshID m_MeshID;
    private BatchMaterialID m_MaterialID;

    private void Start()
    {
        m_BRG = new BatchRendererGroup(this.OnPerformCulling, IntPtr.Zero);
        m_MeshID = m_BRG.RegisterMesh(mesh);
        m_MaterialID = m_BRG.RegisterMaterial(material);
    }

    private void OnDisable()
    {
        m_BRG.Dispose();
    }

    public unsafe JobHandle OnPerformCulling(
        BatchRendererGroup rendererGroup,
        BatchCullingContext cullingContext,
        BatchCullingOutput cullingOutput,
        IntPtr userContext)
    {
        // This simple example doesn't use jobs, so it can return an empty JobHandle.
        // Performance-sensitive applications should use Burst jobs to implement
        // culling and draw command output. In this case, this function would return a
        // handle that completes when the Burst jobs finish.
        return new JobHandle();
    }
}

Sebelum Anda membuat perintah menggambar yang menggunakan Mesh dan Bahan yang terdaftar, Anda perlu menyediakan data, seperti mengubah matriks, untuk digunakan untuk instance perintah menggambar. Untuk menyediakan data untuk digunakan setiap instance, BatchRendererGroup menggunakan konsep yang disebut batch. Untuk informasi lebih lanjut, lihat topik berikutnya, Membuat batch.

Menawarkan BatchRenderer Sitemap
Membuat batch