СерыйМыш
4 млн граней. Както отсекаешь перекрытые?
>Методику оптимизации бессовестно украду на будущее.
Рад буду если хоть кому-то пригодится на практике.
>одна из самых затратных статей для ИИ
Мне казалось, для ИИ эта техника меньше всего подходит -- или мы имеем в виду разные вещи.
ИИ просто должен думать на пониженной частоте - скажем, 10 кадров в секунду, как в Quake 3.
У меня ещё было продолжение этой идеи, насчёт ленивых рейкастов для вижу/не вижу оппонента. Луч бьётся на отрезки, распределяемые по субчанкам. А потом проверку проходит/не проходит выполняет субчанк, батчем для всех отрезков, которые у него накопились. Причём, за тик лишь часть субчанков делает это, таким образом, чтобы по ним всем цикл проходил примерно за секунду. Причём, ещё на этапе разбиения на отрезки, пустые субчанки "только воздух" вообще игнорируются, а хоть один монолитный "только камень" даёт моментальный фейл.
Это должно сильно оптимизировать тьму рейкастов для толпы монстров, опять за счёт уменьшения загрязнения кеша, ценой невеликого усложнения: проверка не мгновенная, а сродни подписке на событие.
Помимо этого возможно объединение монстров в стайки, где один думающий, а остальные - ведомые.
Привет всем:)
Переработал на днях многопоточность в движке и появилась возможность использовать более интересные тестовые генераторы:)
Прям залип на них)
Записал демку в редакторе: https://cloud.mail.ru/public/4Jvk/vCoM74rSJ
MrShoor
> > Скока-скока фейсов?.. 0.o
> Вроде же не много. Вот тупо в блендере накидал высокодетализированных торов:
Для 2012 года и раритетного радеона 9800 это было прилично.
Aslan
> 4 млн граней. Както отсекаешь перекрытые?
Я же написал вроде. При сборке VBO выкидывались все смежные грани.
MrShoor
>> Разреженный куб 64*64*64, примерно 40% заполнение, по 6 граней (фейсов) на
>> куб
> Как не перемножал - ну не выходит у меня 4М и все тут.
Вру. Не 64*64*64
128*128*128=2097152
2097152*40%*6=5033164, примерно 20% из них - смежные, итого 4 млн фейсов/8 млн трианглов. Всё сходится.
Cheb
> объединение монстров в стайки, где один думающий, а остальные - ведомые
Шикарная идея. Очень атмосферненько должно выглядеть, особенно применительно к какому-нибудь демону, вокруг которого бегает стайка бесов. И как только он выслеживает игрока и выходит на нужное расстояние, то натравливает своих подчинённых в ближний бой, а сам лупит дистанционными атаками.
У меня уже готова графическая часть на клиенте, но пока без UI. Используется Unity3D C#.
На GTX770 выдает такие результаты:
Качество скриншота пришлось сильно ужать из-за ограничений загрузки. Размер карты 128х128 блоков, там внутри еще разломы и пещеры.
8,7 млн треугольников, 31.7 млн вершин. Выдает в среднем 70fps.
Текстуры для dev-версии используются майнкрафтовские, потом надо будет нарисовать новые и заменить. Звуков тоже пока нет. Но на данный момент этого достаточно.
Проект был приостановлен почти на 2 года. Но и сейчас не так много времени могу на него тратить, поэтому какие-то ощутимые результаты будут неизвестно когда.
Сейчас начал работать над сервером. Пока только над подключением клиентов и обменом пакетами.
Остальное (физику, генерацию мира, ИИ) буду пилить когда добьюсь стабильности, и будет зависеть от возможностей сервера.
СерыйМыш
> и раритетного радеона 9800 это было прилично.
Ну для такой видеокарточки да (а в скриншоте инфы по железу у тебя нет). Но ведь товарищ Cheb удивляется такому количеству полигонов сегодня. А сегодня 4M фейсов ниочем вообще. Поэтому я не понимаю его удивления.
Я слишком долго общался с fromhell чья фанатичная поддержка openarena (OpenGL 1 форева) и увлечение софтверными растеризаторами типа первого квейка наложили свой отпечаток.
Cheb
> Я слишком долго общался с fromhell чья фанатичная поддержка openarena (OpenGL 1
> форева) и увлечение софтверными растеризаторами типа первого квейка наложили
> свой отпечаток.
Надо было в конце добавить:
И вообще, я уже слишком стар для всего этого дерьма (с)
:D
Programmer777
> Размер карты 128х128 блоков, там внутри еще разломы и пещеры.
> 8,7 млн треугольников, 31.7 млн вершин
СерыйМыш
> 128*128*128=2097152
> 2097152*40%*6=5033164, примерно 20% из них - смежные, итого 4 млн фейсов/8 млн
> трианглов. Всё сходится.
Действительно сходится )
Удалось собрать первый стабильный билд движка с применением технологии il2cpp :)
Практически полностью была переписана консоль, т.к. начальная реализация использовала AOT-компиляцию и выполнение кода, что не допустимо при использовании il2cpp.
Ну и временно перевёл работу с воксель-моделью в основной поток выполнения.
Управление:
ESC - выход
Tab - открытие/закрытие консоли
AWSDQE - перемещение камеры
LShift - ускорение
Space - замедление
ЛКМ - установить блок (по умолчанию - id=1, изменить можно командой setAddBlock id)
ПКМ - удалить блок
CКМ - запуск сферы смерти;D
Команды gen*/start* умеют принимать несколько параметров (id, позиця, т.д.).
У большинства параметров заданы значения по умолчанию.
ID можно задать от 1 до 6 (всего 6 блоков).
Если задать ID == 0, будет сгенерирована структура из случайных блоков.
Рекомендуется в пункте Graphics quality выбрать NoShadowSync.
Там есть вариант с тенями Unity, но он лишь для посмотреть.
Билд (Windows x64) качать отсюда: https://yadi.sk/d/6g8VNfOl3Ro3FP
И всё-таки интересно, какую максимальную производительность возможно выжать из рейкастинга. Рейкастинг интересен тем, что позволяет неограниченное количество изменений в мире без лагов. В майнкрафте трейдоф в сторону статичного мира.
neumond
Вот основа для написания рэйкаста:
Если 4 луча, пущенные через стороны квадрата, параллельного одной из плоскостей OXY, OYZ, OXZ, уперлись в один куб, то
и все лучи между ними также упрутся в тотже куб, не будучи перекрыты каким-либо другим кубом
UP
Кто-нибудь знает пример реализации более-менее реалистичной физики блоков в майнкрафтоподобных играх? Ну, чтобы всякие конструкции под нагрузкой рушились, блоки, висящие в воздухе, падали и т. д.
Panzerschrek[CN]
https://minecraft.curseforge.com/projects/valkyrien-warfare
Тема в архиве.