HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть I
Страницы (240): « Первая ... « 118 119 120 121 [122] 123 124 125 126 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
ncuxonaT писал:
Почему коллизия по треугольникам?

Ну во первых, я пока что не пришёл к однозначному выводу. Просто такая коллизия должна переиспользовать уже существующие вертексы, что положительно скажется на финальном размере карты. А коллизия по плоскостям генерит слишком много этих самых плоскостей, несколько миллионов. Оно и в параное так было, посмотри размеры клипмапы для ЧАЭС.

Добавлено 06-11-2020 в 09:41:

Цитата:
ncuxonaT писал:
Ты хочешь строить какую-то единую структуру для всей карты со всеми елками?

Зависит от сложности симуляции. Для простой халфовской физики, можно хранить все объекты в локальном пространстве. Но для симуляции твёрдых тел, подобный подход уже не слишком удобен, хотя и тоже возможен.
Я вообще не хочу с физикой особенно заморачиваться, как выяснилось, она мало кому нужна. Единственное что народ котирует - это разрушение. Тотальная деструкция.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 198415

Старое сообщение 06-11-2020 06:41
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
Единственное что народ котирует - это разрушение.

И рог нолл. Старый добрый олдскульный рог нолл.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 198417

Старое сообщение 06-11-2020 06:49
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Еще одну забавную вещь обнаружил. Фрустум использует коллижен три для определения пересечений видимости и отсечения невидимых, нет не полигонов, скорее всего целых моделей, аппроксимированных до ббокса.
Вместо запроса OQ. Впрочем такой подход, предполагает геометрию, оптимизированную особым образом и не слишком вяжется с брашевыми уровнями. Тут скорее надо чтобы уровень был разбит на достаточно большие куски.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 198444

Старое сообщение 08-11-2020 07:23
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Дома Noesis окончательно сломался, вылетает при запуске, ничо не помогает.
Но на работе воркает, я его запустил и проанализировал кусочки террайна от сталкеровской карты. И вот что выяснилось - сплиттер вообще не анализирует геометрию на предмет пространственной принадлежности.
Он скорее смотрит, чтобы у вертексов не было соседей. Т.е. эти куски, на которые разбит ландшафт могут проходить через всю карту.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 198528

Старое сообщение 13-11-2020 07:12
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Решил опробывать BVH-деревья для трассировки. Я хронически путаюсь с терминологии, поэтому до сих пор забываю, AAAB это подмножество BVH или наоборот. Ну да ладно. Вообщем деревья строго аксиальные.

Сталкер не имеет собственной подсистемы коллизии и юзает стороннюю, точнее связку ODE + OPCODE. Вот здесь конечно нейминг вводит в лютое заблуждение. Потому что OPCODE воспринимается как целое слово - операционный код для процессора\виртуальной машины. Хотя на деле это аббревиатурко от OPtimized COllision DEtection. Была такая библиотека, в начале нулевых. А еще до нее была библиотека RAPID, которую OPCODE, со слов автора превосходила в большинстве случаев минимум в 2 раза.

Ну и вот значит сталкер её использует для коллизии. Точнее первоначально её использует сам ODE для симуляции твёрдых тел. А сталкер использует именно как коллизию, в двух кейсах, понятно - точечная трасса и трасса ббоксом для всяких игровых ситуаций. Точечная трасса, луч, так же используется для лайтмаппера. А я, напомню, заюзал вальвовское KD-tree, переписав его на FPU. И в целом был доволен до поры, так сказать. до времени. Но выяснилась неприятная вещь. Оно адски долго строится, если полигонов много. На сталкеровских картах это может занимать несколько минут. Второй момент, как вы уже наверное, догадались, был связан с тем, что я хотел уйти от коллизии по плоскостям и мне для этого понадобилась новая структура организации данных.
Ну в данном случае OPCODE был просто первый, кто под руку подвернулся. Там в принципе хорошая кастомизация по выбору секущей, можно поэкспериментировать. Сам OPCODE предлагает кроме построения дерева еще и саму коллизию, но сталкер использует собственные методы, ну впрочем как и я. Итак, я заимплементировал это дерево самостоятельно, чёб не тащить целую либу ради такой ерунды и провёл предварительные тесты. Для тестов использовал карту shaderlab_terrain, там гигантская моделька гор, хоть и довольно низкополигональная. Результаты:

Вальвовское KD-tree

C++ Source Code:
1
tree size: 1.12 Mb
2
KDTree::Build: 2.152100 secs
3
CullLights:
4
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.00 secs)
5
0 lights culled
6
DirectLighting:
7
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (1.98 secs)
8
269960 total traces casted, 16641 luxels illuminated
9
total lightmap pages 1
10
CreateLightmapPages: 0.014445 secs
11
writing maps\shaderlab_terrain.bsp
12
active memory 0 bytes, peak memory 10.08 Mb
13
active strings 52
14
4 seconds elapsed


AABB-tree из OPCODE
C++ Source Code:
1
tree size: 576.28 Kb
2
BVHTree::Build: 0.053519 secs
3
CullLights:
4
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.00 secs)
5
0 lights culled
6
DirectLighting:
7
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (1.89 secs)
8
269960 total traces casted, 16641 luxels illuminated
9
total lightmap pages 1
10
CreateLightmapPages: 0.014780 secs
11
writing maps\shaderlab_terrain.bsp
12
active memory 0 bytes, peak memory 10.08 Mb
13
active strings 52
14
2 seconds elapsed

Как минимум один плюс тут есть - AABB-tree строится в сотни раз быстрее, чем KD-tree. Это обстоятельство, кстати позволяет самому сталкеру не хранить дерево на диске, а строить его каждый раз при загрузке уровня, т.к. это очень быстро. Как видно из статистики - профит во всём.
AABB-tree меньше весит, чем KD-tree, в десятки раз быстрее строится и чуть-чуть быстрее работает. Ну это пока навскидку. Буду проводить серию тестов.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 198532

Старое сообщение 13-11-2020 15:48
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



Цитата:
не хранить дерево на диске, а строить его каждый раз при загрузке уровня

Построение налету быстрее загрузки с диска?

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 198533

Старое сообщение 13-11-2020 16:01
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
thambs писал:
Построение налету быстрее загрузки с диска?

Там не так. Скажем треугольники коллизии весят 20 мегабайт, и дерево примерно столько же. Но дерево строить 2-3 секунды. Вот и экономят место.

Добавлено 13-11-2020 в 20:54:

Ну чтож, как я и говорил - не всё так однозначно. Вот к примеру более тяжёлая карта для тестов.
Valve KD-tree
C++ Source Code:
1
KDTree::Build: 2.661017 secs
2
CullLights:
3
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.02 secs)
4
83840 lights culled
5
DirectLighting:
6
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (7.07 secs)
7
6015939 total traces casted, 107628 luxels illuminated
8
total lightmap pages 4
9
CreateLightmapPages: 0.131742 secs
10
writing maps\gwdm2_.bsp
11
active memory 0 bytes, peak memory 10.08 Mb
12
active strings 199
13
10 seconds elapsed

OPCODE AABB-tree
C++ Source Code:
1
tree size: 1.06 Mb
2
BVHTree::Build: 0.105040 secs
3
CullLights:
4
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.02 secs)
5
83758 lights culled
6
DirectLighting:
7
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (207.33 secs)
8
6080349 total traces casted, 108040 luxels illuminated
9
total lightmap pages 4
10
CreateLightmapPages: 0.130558 secs
11
writing maps\gwdm2_.bsp
12
active memory 0 bytes, peak memory 10.08 Mb
13
active strings 199
14
3 minutes, 27 seconds elapsed

OPCODE SSE AABB-tree
C++ Source Code:
1
tree size: 1.06 Mb
2
BVHTree::Build: 0.104811 secs
3
CullLights:
4
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.02 secs)
5
84818 lights culled
6
DirectLighting:
7
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (85.37 secs)
8
6077427 total traces casted, 108036 luxels illuminated
9
total lightmap pages 4
10
CreateLightmapPages: 0.135933 secs
11
writing maps\gwdm2_.bsp
12
active memory 0 bytes, peak memory 10.08 Mb
13
active strings 199
14
1 minute, 25 seconds elapsed

Здесь вальвовское дерево в десятки раз быстрее. Хотя строится по прежнему дольше.

Добавлено 13-11-2020 в 23:03:

проверил еще кучу карт. KD-tree быстрее всегда. Кроме исключений когда построка дерева сопоставима по времени с рассчётом освещения.
учитывая что разрыв реально до 30 раз + 2д хэширование крайне неудачное в сталкере (там наоборот aabb-tree идеально подходит), я поверю что свет в сталкере считался неделями.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 198534

Старое сообщение 13-11-2020 20:03
-
ncuxonaT
каков стол, таков и стул

Группа: Опытный
Дата регистрации: Oct 2009
Проживает: город/село/деревня
Сообщений: 1626
Возраст: 33

Рейтинг



Так как ты дерево-то строишь?

Сообщить модератору | | IP: Записан
Сообщение: 198536

Старое сообщение 13-11-2020 20:27
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



http://www.codercorner.com/Opcode.zip
там несколько вариантов построения. Но я не ощутил между ними особенной разницы.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 198537

Старое сообщение 13-11-2020 20:34
-
ncuxonaT
каков стол, таков и стул

Группа: Опытный
Дата регистрации: Oct 2009
Проживает: город/село/деревня
Сообщений: 1626
Возраст: 33

Рейтинг



Дядя Миша ну не надо код, расскажи алгоритм словами

Сообщить модератору | | IP: Записан
Сообщение: 198538

Старое сообщение 13-11-2020 20:36
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



ncuxonaT ты не знаешь как строится AABB-tree?
Перебором всех треугольников, входящих в заданный объем, выбирается один из аксиальных углов. Нода разбивается на два узла. Каждая нода хранит ровно один примитив в конце разбиения. Поэтому можно заранее высчитать кол-во нод в дереве. Плохо то, что алгоритм просмотра рекурсивный и не поддается какой-либо оптимизации.

А у KD-tree вальвовского есть два важных момента. Во первых разбиение дерева оценивает даже не кол-во полигонов в узле, а кол-во операций, которые потребуются для трассировки этого узла. Т.е. стоимость сплита в опкодах. А во вторых сама трасса нерекурсивная, она просто перебирает в цикле ноды. Из-за этого производительность такая хорошая.
В любой трассе рекурсия это самое слабое место, самый главный удар по производительности.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 198545

Старое сообщение 14-11-2020 07:26
-
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4415
Возраст: 34

Рейтинг



Стоит ли ждать эдакого на твой обычную дату в декабре?

Сообщить модератору | | IP: Записан
Сообщение: 198547

Старое сообщение 14-11-2020 12:51
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Пока особо хвастаться нечем. По крайней мере по моим меркам.

Добавлено 14-11-2020 в 16:47:

Ну вообщем полная жопа. Сталкеровский рейтрейсер критически не годится для рассчёта лайтмап по своему быстродействию. Неудивительно, что они неделями ждали результата.

Добавлено 14-11-2020 в 16:48:

Посчитал свет на testers_mp_pool. Вальвовский рейтрейсер управился за 19 секунд, а сталкеровский считал 5 минут 9 секунд.

Добавлено 14-11-2020 в 16:50:

Справедливости ради отмечу, что оба рейтрейсера используют идентичный алгоритм пересечения луча с треугольником, который дополнительно оптимизирован путём предрасчётов некоторых значений и которого, разумеется не было в самом сталкере. Так что там вероятно, это время рассчётов было бы еще больше.

Добавлено 14-11-2020 в 17:04:

Вот вы говорите, релиз к привычной дате.
Чем тут хвастаться? фпс ниже плинтуса, коллизию вообще страшно включать. Единственное достижение - лайтмапа всего 7 минут считается.

[ Вложение ]
testers_mp_railroad_0001.jpg

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 198548

Старое сообщение 14-11-2020 14:04
-
ncuxonaT
каков стол, таков и стул

Группа: Опытный
Дата регистрации: Oct 2009
Проживает: город/село/деревня
Сообщений: 1626
Возраст: 33

Рейтинг



Дядя Миша знаю, но хотел узнать детали, например, по какому принципу выбирается, где разбивать ноду.

Цитата:
Дядя Миша писал:
кол-во операций, которые потребуются для трассировки этого узла. Т.е. стоимость сплита в опкодах.

Ничто не мешает делать так же в ААВВ дереве. Обычно это учитывают при расчете SAH.
Непонятно, почему а ААВВ траверс с рекурсией, а у кД нет. В чем разница?
Я знаю только бесстековый траверс, когда каждый узел хранит hit/miss линки, тут же нет рекурсии.
https://i.imgur.com/YC2JEt9.png

Сообщить модератору | | IP: Записан
Сообщение: 198549

Старое сообщение 14-11-2020 14:06
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Я потом вероятно опробую еще какие-нибудь деревья.
Но в данном случае мною двигало любопытство - узнать насколько в сталкере эффективная трассировка лучей.

Цитата:
ncuxonaT писал:
Непонятно, почему а ААВВ траверс с рекурсией

старый алгоритм на самом деле. Вероятно тогда над подобными вещами не заморачивались.

Ты-то сам откуда брал реализацию?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 198550

Старое сообщение 14-11-2020 15:31
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 19:03. Новая тема    Ответить
Страницы (240): « Первая ... « 118 119 120 121 [122] 123 124 125 126 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть I
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024