DX9 потребляет основную часть времени программы, потому что логика этой фантастики работает на разных ядрах, а
графика на одном и это лимитирует FPS. Если рассмотреть подробнее окажется что например, логика
на каждый FPS работает по 8-20 милисекунд по каждому ядре где нет графики, а ядро где графика ведет
рассчеты 68 милисекунд - отсюда низкий FPS при достаточно большом числе 3D моделей.
Дальше оказывается, что сам рендеринг (1) занимает всего 1-6 милисекунд в зависимости от нагруженности 3D объектов на экране, основная же часть времени уходит на обновление позиций 3D моделей в памяти видеокарты (2) (40 милисекунд) и еще (3) +30% времени на проверку столкновений внутри сцены силами DirectX. В DX11 эти 40 милисекунд команд программы на видеокарту о позициях моделей можно разделить допутстим на 8 ядер и теоритически поднять FPS в 8 раз, попытка сделать это в DX9 приводит к ошибкам, (загрузка данных на видеокарту в несколько потоков судя по всему происходит в одни и те же адреса памяти, если бы DX9 выделял каждой попытки записи данных на видео карту свой диапазон адресов памяти вероятно он мог бы быть многопоточным, возникает субъективное ощущение что подобная доработка DX9 до многопоточности если там нет других препятствий заняла бы совсем немного времени, но это лицензионный продукт, и даже если кто-то сможет сделать нечто подобное то не факт что на вмешательство в код был бы получено разрешение право-обладателей) поэтому единственное как можно разгрузить поток обработки графики это убрать из него проверку столкновений переведя ее на самостоятельный код обработки не имеющий отношение к 3D движку.
(Загрузка на видео-карту + Рендеринг + Проверка столкновений) из этого 1 потока исключается проверка столкновений, это превращает например 68 милискунд в 42 (расстановка моделей + рендеринг) повышая FPS.
Проверка же столкновений переносится на CL технологию, программа обращается не к DirectX для проверки пересечения моделей а к CL. DX9 загружает видео-карту с ~1000-й универсальных юнитов на 50%, остальное вполне может быть задействовано для проверки пересечений. Задачи идут на видео-карту мимо DirectX не мешая его работе и производятся с другого ядра, в результате DX9 не занимается проверкой пересечений и работает немного более быстро занимаясь только рендерингом и обновлением позиций моделей в памяти видео-карты перед рендерингом.
Для каждой 3D модели в фантастической игре создается отдельный список треугольников из которых она состоит и закрепляется за моделью, каждому треугольнику (3 точки координат x3 вершины = 9 чисел на треугольник в списке) прописывается еще одно число обозначающее к какой части корпуса корабля он относится. Когда программа проверяет что 2 объекта очень близко друг к другу, на основе сфер вокруг них (по радиусу), то каждый объкт, будь то астероид или корабль отмечается с каким другим объектом он имеет высокий риск столкнутся и запускается в отдельном потоке загрузка на видеокарту через CL и драйвер видеокарты, мимо DirectX, 2 списка треугольников в виде их координат, к каждому треугольнику применятся поправка позиций его точек согласно место-положению и ротации объекта, после чего каждый треугольник каждой 3D модели проверяется по формулам пересечения плоскости с каждым треугольником другого объекта, если хотя бы 1 треугольник из одного списка пересечется с хотя бы 1 трегольником из другого списка то возникает точное столкновение объектов и номер частей корпуса куда пришлись столкновения (каждый треугольник размечен) т.к. эта задача делится на порции и отправляется на множество юнитов видеокарты то происходит все быстро не мешая FPS и разгружая ядро для вычисления графики. Система 2х списков треугольников загружаемых на видео карту для проверки их пересечений позволяет идеальную навигацию, когда истребитель в данной фантастике теоритически (еще нужен AI) способен точно пролететь мимо другого не зацепившись с ним. Теперь получив данные от видео-карты в программу что столкновение было и номер части корпуса где оно произошло можно создать модель поверждений, заменив эту часть корпуса такой же но повержденной моделью.
Но это можно сделать на видео-картах не ранее 2011-го года выпуска где есть CL1.2 технология. Состыковаться со встроенными графическими ядрами от Intel первых поколений icore пока неполучилось, и работает это лишь с видео картами от AMD и NVidia, вероятно это как-то можно будет потом так же решить.