HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- XashNT: блог разработчика (https://hlfx.ru/forum/showthread.php?threadid=5297)
Отправлено XaeroX 29-10-2020 в 15:55:
Цитата:
Дядя Миша писал:
Обратите внимание, что внутренности домов видны, а наружная часть - нет. Это не баг отрисовки.
Выглядит как будто куллинг инвертирован. 
__________________
Отправлено Дядя Миша 31-10-2020 в 08:55:
На кордоне - десять тысяч кусочков моделей. Я в этой карте собрал около трёх тысяч.
Вот еще какая мысль мне в голову пришла, кстати Ксер и тебе тоже советую поэкспериментировать. BSP при построении, проверяет размер ноды на максимально допустимый. И если он превышает 1024 юнита, то делает дополнительный разруб. Но как она его делает?! Просто берёт плоскость с этим отступом в 1024 юнита. А что если эту часть дерева строить по классическому AABB-разбиению? Тогда у нас уровень до определённых размеров будет делиться точно поровну. В моём понимании это хорошо способствует пространственной балансировке дерева и выравнивает время доступа к нему.
C++ Source Code:
1 | int SelectPartition( tree_t *tree, node_t *node, bface_t *list ) |
3 | if( tree->blocksize > 0 ) |
5 | dvec3 halfSize = dvec3( node->bounds[1] - node->bounds[0] ) * 0.5; |
9 | if( halfSize.x > tree->blocksize || halfSize.y > tree->blocksize || halfSize.z > tree->blocksize ) |
13 | if( halfSize.x >= halfSize.y && halfSize.x >= halfSize.z ) |
15 | else if( halfSize.y >= halfSize.x && halfSize.y >= halfSize.z ) |
19 | normal = dvec3( 0.0 ); |
21 | dist = ( node->bounds[1][axis] + node->bounds[0][axis] ) * 0.5; |
23 | return FindHashPlane( dplane( normal, dist )); |
26 | // if it is crossing a 1k block boundary, force a split |
27 | for( int i = 0; i < tree->blockdimensions; i++ ) |
29 | if( halfSize[i] > tree->blocksize ) |
30 | dist = tree->blocksize * ( floor( ( node->bounds[0][i] + halfSize[i] ) / tree->blocksize ) + 1.0 ); |
31 | else dist = tree->blocksize * ( floor( node->bounds[0][i] / tree->blocksize ) + 1.0 ); |
33 | if( dist > ( node->bounds[0][i] + 1.0 ) && dist < ( node->bounds[1][i] - 1.0 )) |
35 | normal = dvec3( 0.0 ); |
37 | return FindHashPlane( dplane( normal, dist )); |
44 | return SelectPartitionVL( node, list ); |
45 | return SelectPartitionQ3( node, list ); |
У меня сейчас просто сурфейсы линейно тестируются на попадание во фрустум, но я верну дерево и сравню оба варианта на производительность.
Добавлено 31-10-2020 в 11:53:
Кстати в том же XRay есть "разбиение" пространства на отдельные куски. Разбиение фейковое, поскольку террайн и так уже тесселирован, оно просто группирует куски по пространственным квадратам, не делаю никаких дополнительных разрезов. Именно поэтому на скриншотах вы видите дыры с неровными краями.
Добавлено 31-10-2020 в 11:55:
А потом эти куски попадают в соответствующие ячейки octree. Т.е. octree ессно ничего не режет, его вообще нет в компиляторе. Но зато в этом дереве находится всё сразу - и статическая геометрия и динамическая. Дерево достраивается по мере заполнения уровня мобами. Мне лично этот момент не нравится, т.к. октри довольно жрущее по памяти и может во время игры давать вот те самые лаги и фризы. Но это пока что предположение.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено KorteZZ 03-11-2020 в 07:48:
А что насчет лимитов всяких? Не получится ли так, что если чел захочет сделать опенворлд, он уткнется тупо в лимиты чего-нибудь и у него получится в лучшем случае просто пустой мир?
__________________
Killing Floor: Horzine Outbreak
Отправлено Aynekko 03-11-2020 в 08:06:
У меня такой же вопрос. В ксаше я обратил внимание, что если поставить 30 солдат модельками как env_static, фпс не проседает, а если 30 реальных - то сильно падает. Это из-за их кода или бсп-дерева? Не совсем понимаю, как это работает.
__________________
Мой мод на Xash
Отправлено Дядя Миша 03-11-2020 в 10:41:
KorteZZ лимитов в новом ксаше особо нету. Лимиты только в аппаратном обеспечении.
Цитата:
Aynekko писал:
Это из-за их кода или бсп-дерева?
поиск по большому дереву, да. Писал об этом.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено thambs 03-11-2020 в 10:53:
Дядя Миша
Есть планы по выносу AI в отдельный поток?
__________________
http://www.moddb.com/mods/monorail-quest
Отправлено Дядя Миша 03-11-2020 в 13:04:
Есть планы по оптимизации, а не по выносу.
Добавлено 03-11-2020 в 16:04:
Мне сейчас надо определиться с типом коллизии, вот оно что.
Представлять каждый треугольник в виде плоскости со скосами, довольно эффективно в плане скорости работы, но занимает чудовищно много места.
На какой-нибудь ЧАЭС легко может быть 10-15 миллионов плоскостей.
А ведь она по современным меркам довольно таки лоу-поли.
Впрочем там вылезает еще одна проблемка. У видеокарт оказывается, существует лимит на максимальный размер VBO - обычно миллион вертексов.
Самое поганое, что и на индексы точно такой же лимит - 1 миллион.
Это немного нелогично, к тому же превышение лимита далеко не всегда приводит к каким-то последствиям, на моих карточках.
Так что придётся еще и геометрию разбивать на небольшие батчи.
Наверное сделаю куски по 65 киловертексов с локальными оффсетами, чёб индексы хранить в 16-битном диапазоне.
Но повторюсь, главная задача, это определиться с коллизией. Коллизия будет по треугольникам, но надо решить с какими фигурами. Можно сделать просто triangle vs bbox. Можно как в третьем дууме - набирать произвольные простенькие фигуры из конечного числа вертексов - обычно 32-64. В том же физиксе лимит на активное тело - 256 вертексов, но как правило это даже избыточно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено kotar.sys 05-11-2020 в 06:48:
А в сталкере разве нет упрощенной модели геометрии для коллизии? Может строить/подгружать из 3д пакета её в компиляторе моделей, как это делает сорс?
__________________
Ржака
Отправлено Дядя Миша 05-11-2020 в 12:04:
Цитата:
kotar.sys писал:
А в сталкере разве нет упрощенной модели геометрии для коллизии?
Есть, да. Но там как. Вот допустим ёлки стоят на поляне. Понятное, дело, ёлка одна, просто рисуется много раз. А вот в коллизии, все эти ёлки продублированы, ну и не только они, конечно.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено kotar.sys 05-11-2020 в 12:16:
Так почему бы не использовать сталкеровские методы обработки коллизии для сталкеровских моделей? Они тоже медленные?
__________________
Ржака
Отправлено Дядя Миша 05-11-2020 в 15:35:
Да нет никаких "сталкеровских" методов.
Загрузил недостающие части ландшафта. Обратите внимание на поликаунт.





На машинках почему-то текстуры съехали, на всех. Но я пока не разбирался.
Ну вот, прекрасная сцена для тестирования и оптимизации отрисовки и коллизии. Ну и для оптимального хранения данных тоже. Разумеется, я потом буду тестировать и другие сцены, вероятно и из эксодуса, надо получить вменяемую производительность.
Но тут конечно без вариантов - точного ответа нет. Только тестировать и сравнивать. Лоды проверю, размеры батчей, оптимальные размеры VBO, помощь дерева в отрисовке, и так далее.
Это вот как раз такой тип сцены, что нихрена не спрячешь и не укроешь, всё как на ладони.
Добавлено 05-11-2020 в 18:35:
По сути с этой сценой даже мой компилятор не справляется - ему не хватает памяти, выручает только ключ /3Gb в boot.ini
Предвидя советы "ну почему бы не сделать как в сталкере", напоминаю, что новый движок должен уметь как активно использовать полностью брашевые карты, так и полностью полигональные. Т.е. задачка несколько сложнее, чем представляется на первый взгляд.
Нет, не в оптимизации, конечно дело. А в выборе наилучших методов.
А чтобы что-то выбрать, надо многое протестить. Это время.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 05-11-2020 в 16:29:
Цитата:
Дядя Миша писал:
Обратите внимание на поликаунт.
Два-три миллиона, в зависимости от того, какая часть уровня в кадре. Вот пейсатели форков X-Ray кипятком обоссутся, если у тебя получится показать Кордон со всеми деталями на полной динамике с фпс выше, чем выдают их форки на твоей видекарте
Отправлено Cybermax 05-11-2020 в 18:08:
Мне уже больше нравится то что на скриншутах, чем в оригинале. Интересно что будет с эксодусом, учитывая что не играл в Метро.
Отправлено Дядя Миша 05-11-2020 в 20:50:
Цитата:
Ku2zoff писал:
Вот пейсатели форков X-Ray кипятком обоссутся, если у тебя получится показать Кордон со всеми деталями на полной динамике с фпс выше, чем выдают их форки на твоей видекарте
X-Ray очень хорошо оптимизирован. Но можно еще лучше, т.к. он точился под преведущее поколение карточек.
Цитата:
Cybermax писал:
Мне уже больше нравится то что на скриншутах, чем в оригинале
без лайтмап-то? 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ncuxonaT 06-11-2020 в 01:04:
Почему коллизия по треугольникам? Ты хочешь строить какую-то единую структуру для всей карты со всеми елками?