Dreams Gate and mods based on Vereshagin Engine like Stargate mod
You are not logged in.
Не хотел в этой версии делать, но все же решился:
первый ragdoll на joint/ball, лимиты углов еще не задавал по этому свободно крутятся по всем осям суставы.
Offline
Лимиты для углов
Offline
Дааа... весёлая вещь - программирование! Символами сказать компьютеру сделать ТАКОЕ при том в пространстве!!!
Mak tal shree!
Offline
Ошибки есть )) с ними еще поработать нужно будет )))
Offline
Offline
Скорее, пре-альфа, потому что нам еще прийдется нагрузить и приспособить эту голую физику под модели и различные операции с ними.
По прежнему интересует проблемма оружия в руках т.е. будем ли мы иметь хотя бы тот список орудий, что я просил?
Offline
Скорее, пре-альфа, потому что нам еще прийдется нагрузить и приспособить эту голую физику под модели и различные операции с ними.
От физики зависит наверное 90% игры.
Это все проверки объектов и их взаимодействие (как перестрелка, взять оружие, взять ящик, поговорить с соседним игроком, управлять машиной, кораблем и тд).
Самое сложное в разработке было разбиение пространства на сектора, необходимое как для физики, так и для сервера, игроков, кораблей и физических объектов. И создание базы данных для сохранения позиций объектов в этих секторах.
Перепробовал кучу методов таких как Octree / kD-tree / BVH / R-tree / R*tree / AxisSort / AVL-tree и массу других. Но не один из них не подходил, когда объектов за 10 млн, у каждого метода появлялись свои дефекты и выявлялись свои ограничения. А основная проблема была во всех нерешенной, как узнать номер сектора, как его найти, сколько всего секторов может быть.
В итоге мною был создан гибрид из методов AxisSort / AVL / BVH / kD-tree / octree. От каждого метода были взяты интересные особенности, и создан на их основе новый метод который позволил разбить наше неограниченное пространство, на сектора с размерами от [-1..1] метра до [-9223372036854775808 до +9223372036854775807] метров.
В итоге на поиски соседей у объектов тратится минимум 25 шагов максимум 180. что позволяет найти в любой части вселенной объекты в нужной точке за минимум операций.
При этом естественно физика работает медленней чем ее аппаратные аналоги и любые аналоги которые работают на плоскости.
На это ушло почти пол года непрерывной работы и поиска решения. Но результат был достигнут. Конечно еще не все готово, есть сложности с проверкой луча произвольной длинны. Так как луч может пересечь десятки секторов. И проверять каждый сектор на пересечение неразумно.
Физика за последний месяц была переписана под использование данного метода разбиения пространства. И это не предел по оптимизации. Вполне ее можно еще в 2 раза ускорить. Но даже сейчас можно смело ставить хоть 500 млн объектов и стрелять по ним. Если число коллизий меньше 20 тыс то все работает в пределах 40 fps на моем компьютере. Но если перенести на аппаратную реализацию коллизии то можно будет достичь большего числа коллизий что позволит значительно ускорить физику. Но это все планы на будущее.
Offline
от 1 метра до расстояния, которое свет проходит за 975 лет - это конечно круто...
Интересно как это будет работать на моем компьютере - он же медленнее... А ведь часть какую-то и ему обрабатывать прийдется. Надеюсь, что 25 кадров/секунда хоть обеспечит.
Offline
от 1 метра до расстояния, которое свет проходит за 975 лет - это конечно круто....
Это лишь размер одного сектора,
количество секторов на 1 уровень дерева будет равно произведению числа секторов по каждой оси -> 1844674587454754874073 * 1844674587454754874073 * 1844674587454754874073.
Это верхние сектора пространства (глубина дерева [1..150]).
Нижние (глубина [1..30]) это разбиение этого сектора на сектора меньшего размера, метод разбиения зависит от числа объектов в секторе, их статуса и скорости.
Так как объекты которые часто двигаются не должны перегружать дерево постоянной вставкой и удалением. За 1 кадр объект придется минимум 300 раз вставить и извлечь из дерева. Для них как раз и используются разные методы чтобы снизить нагрузку и не потерять в простоте поиска.
Не сложно посчитать какую площадь теоретически может покрыть движок, и в каких пределах он способен быстро находить соседние объекты.
Добавление и удаление элемента требует O(log(N)) операций, N - количество вершин.
Offline
Будет ли в демо возможность вставлять свои обьекты? Для тестирования внешнего вида эффектов скриптов
правки баланса итд. Рома дай знать если понадобится доработать юнит для демо, ведь какой нибудь будет,
чтоб турели присутствовали кокпит люк итд открывался.
Will be as the great Nehochuha
Offline
Вставлять можно без каких либо проблем. Демку доделаю чтобы было по больше времени и займемся доводкой кораблей. Еще для кораблей нужно будет создать физические формы разрушений и соприкосновений, объясню подробней как демка будет, чтобы видно было.
Offline
Тут напомню еще один момент - корабли внутри должны быть не пусты - хоть на палубы их разделить бы, да текстурки внутренние добавить а то авось кто-то надумает залететь в ангар, да по самому кораблю до капитанского мостика прогуляться, жилые комнаты посмотреть, в гальюн заглянуть по потребности...
Offline
Внутренние помещения придется совершенно отдельно делать, создавать их гораздо проще чем саму модель и сможет это даже новичек в 3Д, исключение разве что такие суда как у рейфов. Вижу только один выход, игроки хотят к примеру хаттак в игре, значит пусть делают модели хотяб пустых помещений. Честно говоря не в курсе как Роман реализовывает отображение внутренностей, знаю только что не рационально отображать то что не видно, а если представить сколько внутри крупного корабля помещений элементов логично предположить что подгружать их лучше по мере необходимости при входе внутрь. Это лишь предположение, но если так то достаточно одной моделью с корпусом делать только входной шлюз и взлетные палубы.
С моделями разрушений предвижу проблемы, по крайней мере то что я видел в других играх, иногда модель во время взрыва просто подменяется покореженной и с другими текстурами или моделью обломков, иногда делается из нескольких частей с не ровными краями и при разрушении разваливается на них с заменой текстур на горелые темные. Но всегда это полностью новые отдельные модели, рваные мятые итд, проблема в том что делать их вовсе не проще и не быстрей а иногда даже сложней чем нормальные. По крайней мере мне всегда плохо удавалось имитировать покореженность и не ровность, плюс почти всегда нужны специально нарисованные для этих обьектов текстуры.
Will be as the great Nehochuha
Offline
amatory/Sarmath
Mы все летим на самолете
мы едем в поезде в авто
а вот земля она тоскует
по нежному теплу ступней
Offline
Понимаете, профессор моделирования, тут проблемма как раз во взрывах и есть. Допустим, у корабля направленным взрывом порвало внешнюю обшивку и оголились некоторые отсеки, но остальная часть корабля не повреждена... Там кусок палубы виден сквозь рваную рану... Переборки отсеков закрыло, люди и предметы вылетают наружу... Вот как вы это изобразите?
- Да и недаром я упомянул иллюминаторы - авось кто-то додумается извне заглянуть в них - чтобы посмотреть внутренние помещения...а там как раз свет кто-то включил, да еще и мультик смотрит по компу...
Троллю, но такое реально. Думаю, что пространство внутри надо хоть как-то отрисовать - хоть без мелочей а там при приближении добавятся и мелочи. Кстати, можно подменить и часть модели - именно покореженную часть и именно в том месте где повредили а остальное оставить. Возможно, если модель уникально-единична, то изменить ее контуры на ходу - програмно...
Знаю, тут работы и работы... Да - начинается всё с облака а заканчивается как раз описанными выше реалиями. Можно модель сделать частично разрушаемой - типа что-то заменяется покореженым а что-то(каркас) остается а потом, если покорежили основательно, то уже превражается во множество осколков, кучу мусора, кучу мелких обьектов созданных случайным образом(програмно-управляемые случайные полигоны) и т.п. У Романа кажись были алгоритмы програмного создания воксельных моделей...
Можно также использовать облако для камуфляжа - сначала появляется облако а потом, пока оно не рассеялось, подменяется часть модели и облако рассеивается. Итог - мы видим повреждения. Можно даже так отрисовать кусок отсека. А зашли или приблизились, то подгрузить и мелочи. Абордаж корабля же необязательно будет идти через шлюзы - можно же в качестве шлюза использовать любой герметичный отсек - только обшивку надо знать где "срезать взрывом".
Все это пока лишь мечты и предложения. Потребности и ресурсы покажут какая нам в действительности физика удастся и насколько приближенной к реальности она будет.
Offline
мне кажется,что это совсем не нужно, распад кораблябудет забирать уйму ресурсов. посмотри любую космическую игру, там все просто сделано
amatory/Sarmath
Mы все летим на самолете
мы едем в поезде в авто
а вот земля она тоскует
по нежному теплу ступней
Offline
Вот и я думаю - как проще изобразить попадание снаряда в корабль с его частичным разрушением. Частичным - определенный отсек, палуба...
Абордажники ж не будут громить корабль - им же с него добыча нужна и нужно проникнуть в него через пробитое отверстие. Либо абордажники будут стыковаться и вырезать люк для проникновения...
МКС столкнулась с болтом(размеры болта, скажем, М30*150) идущим с ней встречным курсом. (скорость болта в момент столкновения его с МКС выходит примерно 15 км/с). Что будет с МКС? Что дырка будет, то понятно, но физику процесса, размеры дыры и т.п.
Offline
Изменение текстуры модели в определенных местах - тоже вариант. Тем более, что в некоторых случаях текстуры обьемные. Остальное - накладные эффекты. Можно также наложить обьемную текстуру дырки на модель. Захотел проникнуть - проникнешь и получишь сзади текстуру космоса вокруг корабля - как будто смотришь через иллюминатор с неровными краями. Можно просто закрепить невидимую камеру в точке дыры и она будет все, что за ней показывать. 2 камеры - 2 стороны дыры. Хотя структура модели и не нарушалась.
Offline
Допустим, у корабля направленным взрывом порвало внешнюю обшивку и оголились некоторые отсеки, но остальная часть корабля не повреждена... Там кусок палубы виден сквозь рваную рану...
Или каждый кусочек корабля и его корпуса делать отдельным мэшем, связывать между собой (физика) с определенной силой (при воздействии большей силы связь рвется).
Или делать корпус одним/несколькими мэш/солид объектами и потом c применением CSG рушить обшивку, догружая открывающиеся внутренние сектора, как отдельные наборы мешей.
- Да и недаром я упомянул иллюминаторы - авось кто-то додумается извне заглянуть в них - чтобы посмотреть внутренние помещения...а там как раз свет кто-то включил, да еще и мультик смотрит по компу...
Offline
Извиняюсь, что не сразу на форум запостил. (те кто подписан и так посмотрели).
Offline
те кто подписан и так посмотрели
Интересно, куда же подписан?)
Mak tal shree!
Offline
Собственно ничего особенного, обычная машина ))) Столкновения работают, связи так же работают )))) И управляется машинкой почти как надо )))))
Offline
Offline
Offline