Я розробляю власний ігровий двигун для розваги (але не для отримання прибутку). Я маю візуалізацію в одному потоці, а мій графік сцени оновлює (швидкість тощо) в іншій. Коли настає час візуалізації, потік візуалізації додає видимі вузли до нового лінійного буфера та обходить їх.
Більш детально, мій графік сцени є потрійним буфером. Кожен вузол у графі моєї сцени має три копії відносної та абсолютної матриць перетворення (4x4). У будь-який момент часу одна копія записується потоком графіка сцени, одну копію читає рендер, а третя існує для того, щоб читач чи письменник міг перейти до наступного, не чекаючи іншого. Це запобігає запису до чогось під час його візуалізації та відтворення напів оновленого графіка сцени. Я якось також отримав четверту копію кожної матриці, з якою користувач може працювати, щоб не конфліктувати з потоком оновлення. Схоже, це добре, уникаючи постійно синхронізувати.
Однак це безлад.
Це мої кінцеві цілі для системи:
- Оновлення графіків та оновлення сцени залишаються в окремих потоках.
- Мінімізуйте, скільки цих ниток доводиться чекати один на одного.
- Не візуалізуйте сцену, яка була наполовину оновлена потоком оновлення. Це особливо помітно, якщо камера рухається швидко, а іноді вона відображається до або після оновлення.
- Скорочення використання пам'яті. У мене занадто багато матриць на вузол. Я також розглядаю можливість переходу до векторів для положення / обертання / масштабу через збільшення дрейфу з плаваючою точкою з матрицями.
- Можливість обробки десятків тисяч Вузлів. Нинішня система робить це досить добре.
Я також сподіваюся в майбутньому включити Bullet (двигун фізики) та мережу, ні про яку я багато не замислювався.
Які існують якісь підходи для створення кращої графіки сцени?