В настоящее время я пытаюсь импортировать очень большую модель в XNA/Monogame, стальную конструкционную модель с 80 000 000 вершин. Двигатель написан для оптимизации этой модели для визуализации, при этом OcTree и View Frustum отбраковывают работу на уровне ModelMesh.
Недавно я узнал, что операция base.Process по умолчанию в Процессоре модели объединяет вершинные и индексные буферы всего ModelMesh в Модели, за ответ в этом сообщении:
Путаница относительно вершинного буфера модели и индексатора
Это создает проблему, поскольку эта модель превышает максимальный размер VertexBuffer 67108863. В результате, Content Processor даже не позволяет мне создать файл xnb.
В идеале я бы разделил Vertex и Index Buffers на несколько меньших буферов в Content Processor, но сами буферы генерируются в базе данных Model Processor base.Process и, как представляется, впоследствии не редактируются.
Есть ли какой-либо механизм, который я могу использовать для разделения XNA Model Vertex и Index Buffers?
Я решил решить эту проблему. Модели XNA просто не поддерживают множество вершинных и индексных буферов, поэтому решение заключалось в написании крупноформатного пользовательского Content Processor, который возвращает массив объектов ModelContent, а не только один.
Это можно назвать достаточно легко:
Model[] myModel = Content.Load<Model[]>("myModelFile");
... и хотя это потребовало ряда изменений в моих процедурах выбора и рисования треугольников, оказалось, что это относительно простое решение для реализации.