Как использовать сетки с более чем 64k вершин в Unity 2018.1 - PullRequest
0 голосов
/ 20 мая 2018

Я слышал, что Unity теперь поддерживает 32-битный индексный буфер.Но когда я пробую Unity 2018.1, я не могу заставить его работать.

Я построил сетки в коде так:

    int nVertices = nx * ny;
    Vector3[] vertices = new Vector3[nVertices];
    Color[] colors = new Color[nVertices];
    for(int i = 0; i < nx; i++) {
        float x = i * w / (nx - 1);
        for (int j = 0; j < ny; j++) {
            float y = j * h / (ny - 1);
            int vindex = i * ny + j;
            vertices[vindex] = new Vector3(x, y, 0);
            float colorx = Mathf.Sin(x) / 2 + 0.5f;
            float colory = Mathf.Cos(y) / 2 + 0.5f;
            colors[vindex] = new Color(0, 0, 0, colorx * colory);
        }
    }
    List<int> triangles = new List<int>();
    for (int i = 1; i < nx; i++) {
        for (int j = 1; j < ny; j++) {
            int vindex1 = (i - 1) * ny + (j - 1);
            int vindex2 = (i - 1) * ny + j;
            int vindex3 = i * ny + (j - 1);
            int vindex4 = i * ny + j;
            triangles.Add(vindex1);
            triangles.Add(vindex2);
            triangles.Add(vindex3);
            triangles.Add(vindex4);
            triangles.Add(vindex3);
            triangles.Add(vindex2);
        }
    }
    Mesh mesh = new Mesh();
    mesh.SetVertices(vertices.ToList<Vector3>());
    mesh.SetIndices(triangles.ToArray(), MeshTopology.Triangles, 0);
    mesh.SetColors(colors.ToList<Color>());

Мой шейдер рисует радугу в соответствии с альфа-значением цвета вершины. *Сетка 1006 *

256 x 256 в порядке, но сетка 512 x 512 показывает только 1/4 ее площади и много неправильных треугольников.

enter image description here

enter image description here

1 Ответ

0 голосов
/ 20 мая 2018

Сетчатые буферы по умолчанию 16-битные.См. Mesh-indexFormat :

Буфер индекса может быть 16-битным (поддерживает до 65535 вершин в сетке) или 32-битным (поддерживает до 4 миллиардов вершин).Формат индекса по умолчанию - 16 бит, так как для этого требуется меньше памяти и полосы пропускания.

Не обращая особого внимания на остальную часть кода, отмечу, что вы не установили 32-битный буфер.Попробуйте:

mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...