DDDENISSS писал(а):1) В какой структуре хранится планета? Я так понимаю просто карта высот?
2) Для физики ты используешь MeshCollider, а раньше, я так понял, использовал свою физику? Что заставило перейти на MeshCollider? Ведь он требует много памяти и на его создание уходит время.
Было бы лучше всего написать свою простую физику на GPU, чтобы можно было бы хранить данные только на GPU.
3) Какой буфер ты используешь для генерации меша? Я так понял Append ComputeBuffer для этого дела?
4) Как отработать случай, когда размера буфера не хватило? На сколько я помню в DX в этом случае неопределенное поведение.
5) После заполнения буфера, ты его перегоняешь в меш или рисуешь с помощью DrawProcedural \ DrawProceduralIndirect.
У меня слегка подобный проект
https://youtu.be/yLSh94S8FH8?list=PLCBv ... FRGGDIwvJVНо он пока использует только DX9.
1) Структура очень проста - параметры для генерации, основные параметры планеты (Радиус, наличие атмосферы и тп). В купе это всё влазит в .json файл, приемлемого размера даже для передачи по сети.
2) Свою физику я не использовал. Только не давно начал экспериментировать с MeshCollider. Да, просаживает он при создании сильно.
3) Дело в том, что на данном этапе используются стандартные буфферы. Загоняются данные - результат считается в буффер - очистка не нужных буфферов - рисование. Буффер необходимый для рисования лежит в памяти. В шейдере просто двигаю вершины. Очень заинтересован в использовании DrawProcedural, но я просто не понимаю как с ним работать... Это отдельный вопрос.
4) Размер буффера для квада - константа равная размеру квада в вершинах по стороне в квадрате.
5) ComputeShader срабатывает 1 раз. При определённых условиях. Дальше всё как в п.3.
Я уверен, вполне себе можно запускать Kernel из ComputeShader, так, что бы не было "простоя" рендера.
На данном этапе это решено ожиданием после запуска в 8 кадров (регулируется). Даёт не плохой результат. Но чёрт побери - велосипедище.