U
tab 04Thế giới & Vòng lặp game7 bài — chạm để mở
04 / 07 · 10 phút
Thế giới & Vòng lặp game

Giữ cảnh chạy nhanh

dự án của bạn tới lúc này

Assets/

Scenes/

Arena.unity

TerrainLOD Groups

Scripts/

PropScatter.cs

Prefabs/

module kit (6 pieces)

thiết lập dự án

GPU instancingocclusion bakelayerCullDistances

đã có sẵnbài này thêm

Sân đấu từng chạy hàng trăm khung hình mỗi giây khi nó chỉ có mười một vật thể trên nền xám. Có thêm vài trăm cái cây quanh nó thì không được vậy nữa — trừ khi bạn làm bốn việc trong bài này.

Một cảnh chạy 12 FPS thì không phải cảnh, đó là ảnh chụp màn hình. Bốn kỹ thuật sau lấp gần hết khoảng cách từ 12 lên 60.

sơ đồ động

Vật ở xa dùng lưới đơn giản hơn. Người chơi không nhận ra lúc đổi.

1. Đo trước khi sửa bất cứ thứ gì

  1. 1

    Mở Window▸Analysis▸Profiler và xem hàng CPU và Rendering.

  2. 2

    Ở bảng Stats của Game view, xem Batches và Tris — trong lúc điều khiển Knight đi lại, không phải lúc đứng yên.

  3. 3

    Nếu thời gian CPU cao → quá nhiều draw call hoặc script nặng. Nếu GPU cao → quá nhiều điểm ảnh, vẽ chồng hoặc shader nặng.

2. Nhóm LOD

  1. 1

    Chọn một vật thể, Add Component → LOD Group.

  2. 2

    Kéo mesh nhiều tam giác vào LOD 0, mesh trung bình vào LOD 1, mesh thô vào LOD 2.

  3. 3

    Đặt vùng Culled để vật biến mất hẳn khi nó chỉ còn vài điểm ảnh.

  4. 4

    Cây, nhà và đá tảng hưởng lợi nhất. Sỏi nhỏ thì không đáng công.

3. Giảm số lệnh vẽ

  • Static Batching: tick Static cho mọi vật không di chuyển. Unity gộp chúng thành lưới chung lúc build.

  • GPU Instancing: tick Enable GPU Instancing trên material của thứ lặp lại hàng trăm lần. 500 hòn đá giống nhau thành một draw call.

  • Ít material hơn thì ít batch hơn. Hai vật cùng material thì gộp được; cùng vật mà khác material thì không.

  • Gộp texture vào atlas: một ảnh 2048 chứa mười hai vật tốt hơn mười hai ảnh 512.

4. Loại bỏ vật bị che

  1. 1

    Cắt theo tầm nhìn (không vẽ thứ ngoài màn hình) là tự động. Cắt theo che khuất (không vẽ thứ nấp sau tường) thì không.

  2. 2

    Đánh dấu tường và nhà là Occluder Static, rồi Window▸Rendering▸Occlusion Culling▸Bake.

  3. 3

    Đáng làm với nội thất và thành phố dày đặc. Vô ích với đồng trống nhìn thấy hết.

5. Rút ngắn tầm nhìn của camera

the cheapest optimisation in Unity
// Far mặc định là 1000. Đa số màn chơi chỉ cần 150.
Camera.main.farClipPlane = 150f;

//dùng sương mù che chỗ cắt
RenderSettings.fog = true;
RenderSettings.fogMode = FogMode.Linear;
RenderSettings.fogStartDistance = 90f;
RenderSettings.fogEndDistance = 145f;

Khoảng cắt riêng theo layer

C# script
void Start()
{
    float[] distances = new float[32];      // mỗi layer một giá trị
    for (int i = 0; i < 32; i++) distances[i] = 150f;

    distances[LayerMask.NameToLayer("SmallProps")] = 35f;   // sỏi biến mất sớm
    distances[LayerMask.NameToLayer("Grass")] = 25f;

    Camera.main.layerCullDistances = distances;
}