Длина блока доступа GlTF2 - PullRequest
       5

Длина блока доступа GlTF2

0 голосов
/ 21 сентября 2018

В настоящее время я пытаюсь экспортировать трехмерную геометрию в GlTF, и я сталкиваюсь с ошибкой, которую не понимаю.В файле, описывающем простой серый куб, я получаю это на аксессоре нормали:

[glTF Validator] Accessor element at index 2 is not of unit length: 0.
[glTF Validator] Accessor element at index 5 is not of unit length: 0.
[glTF Validator] Accessor element at index 8 is not of unit length: 0.
[glTF Validator] Accessor element at index 11 is not of unit length: 0.
[glTF Validator] Accessor element at index 14 is not of unit length: 0.
[glTF Validator] Accessor element at index 17 is not of unit length: 0.
[glTF Validator] Accessor element at index 20 is not of unit length: 0.
[glTF Validator] Accessor element at index 23 is not of unit length: 0.

Вот json:

{
  "accessors": [
    {
      "bufferView": 0,
      "byteOffset": 0,
      "componentType": 5123,
      "normalized": false,
      "count": 36,
      "type": "SCALAR",
      "name": "31546_indices"
    },
    {
      "bufferView": 1,
      "byteOffset": 0,
      "componentType": 5126,
      "normalized": false,
      "count": 8,
      "type": "VEC3",
      "max": [
        32.808,
        32.808,
        32.808
      ],
      "min": [
        0.0,
        0.0,
        0.0
      ],
      "name": "31546_vertices"
    },
    {
      "bufferView": 2,
      "byteOffset": 0,
      "componentType": 5126,
      "normalized": false,
      "count": 8,
      "type": "VEC3",
      "name": "31546_normals"
    },
    {
      "bufferView": 3,
      "byteOffset": 0,
      "componentType": 5126,
      "normalized": false,
      "count": 8,
      "type": "VEC3",
      "name": "31546_color"
    }
  ],
  "asset": {
    "version": "2.0"
  },
  "buffers": [
    {
      "uri": "31546.bin",
      "byteLength": 360,
      "name": "31546"
    }
  ],
  "bufferViews": [
    {
      "buffer": 0,
      "byteOffset": 0,
      "byteLength": 72,
      "name": "31546_indices"
    },
    {
      "buffer": 0,
      "byteOffset": 72,
      "byteLength": 96,
      "name": "31546_vertices"
    },
    {
      "buffer": 0,
      "byteOffset": 168,
      "byteLength": 96,
      "name": "31546_normals"
    },
    {
      "buffer": 0,
      "byteOffset": 264,
      "byteLength": 96,
      "name": "31546_color"
    }
  ],
  "meshes": [
    {
      "primitives": [
        {
          "attributes": {
            "POSITION": 1,
            "NORMAL": 2,
            "COLOR_0": 3
          },
          "indices": 0,
          "mode": 4
        }
      ],
      "name": "31546"
    }
  ],
  "nodes": [
    {
      "mesh": 0
    }
  ],
  "scene": 0,
  "scenes": [
    {
      "nodes": [
        0
      ],
      "name": "RNT_Viewport"
    }
  ]
}

Я не понимаю, о чем говорит Валидаторо средствах доступа выше 3, поскольку имеется только 4 средства доступа ... Чтобы получить это, я использовал плагин GlTF для визуального кода.Для онлайн-валидатора Khronos JSON выглядит правильно (https://github.khronos.org/glTF-Validator/),, поэтому на данный момент я не знаю, в чем моя ошибка ...

Заранее спасибо за понимание :)

1 Ответ

0 голосов
/ 21 сентября 2018

Здесь жалуются на двоичные данные в файле 31546.bin, на который ссылается ваш JSON.Если вы щелкнете одно из сообщений в окне проблем документа, оно должно сфокусировать курсор на рассматриваемом аксессоре (и я пойду на конечность и предположу, что это будет аксессор в индексе 2 с именем 31546_normals, каквыглядит как единственный, который должен быть нормализован в этой модели).

Фактические значения индекса, сообщаемые в этих сообщениях, являются индексами данных, содержащихся в этом методе доступа.В VSCode, когда выбран правильный метод доступа, нажмите ALT + d , чтобы декодировать двоичные данные в текстовый буфер и рассматривать его как текст.

Моя догадка както, что здесь произошло, это то, что в вашей модели есть нормальные векторы нулевой длины.Это не является большой проблемой, если векторы нулевой длины применяются к вырожденным треугольникам, но такого рода вещи в лучшем случае являются пустой тратой пространства в файле bin, который можно удалить, поэтому валидатор помечает его предупреждением.

Если вы редактируете эту модель в каком-либо другом инструменте, таком как Blender или Maya, у вас может быть возможность найти и удалить вырожденные треугольники, а также пересчитать нормальные векторы.Это может избавить вас от нормалей нулевой длины.

...