16 янв. 2012 г.

Оптимизация мэша, вершинный кэш

При экспорте 3d моделей из редактора трехмерной графики или при чтении из таких форматов как 3ds, collada, fbx, ..., зачастую их данные содержат дублирующиеся вершины.
    Поэтому лучше при экспорте выполнять проверку на наличие таких вершин и сохранять только уникальные данные пропуская вертексы, у которых все вершинные атрибуты совпадают.
Если вершины мэша содержат только координаты, то оптимизация выглядела бы так:
Но как правило, каждая вершина, имеет несколько вершинных атрибутов (нормаль, тангенс/битангенс, текстурные координаты, цвет), поэтому она будет считаться уникальной только если совпадают все атрибуты.
    Алгоритм удаления дублирующихся вершин достаточно прост: каждую вершину в сетке модели необходимо проверить на уникальность, сравнивая все ее атрибуты с атрибутами других вершин, если они совпадают, то сравниваемая вершина пропускается, но при этом добавляется индекс уже имеющейся в новом наборе.