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

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

Рейтинг



В новом ксаше нету 3д-скаев. Я пока не трогал этот вопрос. Но технически сложностей нету.

Добавлено 15-12-2020 в 10:35:

Вообщем я дропнул эти эксперименты с микрософтовским параметризатором. Ужасно мутный и тошнотворный код, никогда еще такого не видел. Обычно я в любом незнакомом коде спустя час изучения уже могу выделить ключевые моменты и понять принцип работы. Здесь это сделать невозможно, потому что на каждой стадии алгоритм проваливается дальше и дальше и даже когда он завершил работу нельзя сказать, что там на выходе уже какой-то корректный результат, потом еще идут пост-процессы, мержинг и замазывание, то есть понять, что даёт наибольший вклад решительно невозможно. Это видимо современный стиль программирования. Может быть оно там на всех этапах выглядит как дерьмо, но в конце эти кусочки объединяются, сглаживаются и конечный результат уже на что-то похож. Но там нет главного алгоритма. Там нельзя сказать, что 90% параметризации осуществляется через какую-то функцию, а некоторые специальные случаи - отдельно. Нихрена подобного. Там минимум пять или шесть вариантов и на каждом этапе оценивается качество построения. Плюс для геодезической изомапы надо рассчитать vertex importance и они не придумали ничего умнее, как сделать это через построение progessive mesh, что само по себе довольно тяжелая операция, но самое интересное - это учесть, что чаще всего в атлас попадают вообще какие-то незамкнутые конструкции с одной границей, для которой считать PM на мой взгляд вообще бессмысленно. Но предполагается что для таких кусочков параметризация будет выполнена типа раньше - на этапе планарной параметризации. Самое смешное, что изомапа тоже может сфейлить и следующий этап - барицентрическая параметризация, но перед этим будет проверка на цилиндр. Я опробовал барицентрическую отдельно - ну это просто несеръезно. Не зря её в Thekla Atlas дропнули.
Кстати LSCM они там сразу выключили по умолчанию. Видимо он не оправдал надежд даже по их меркам.

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

Добавлено 15-12-2020 в 10:38:

И кстати. Я в своё время был очень удивлён насколько пользователи готовы самостоятельно всё исправлять и улучшать, не полагаясь на движок. Они просили лишь вменяемые инструменты контроля, чтобы не пришлось это делать через хитрозакрученную задницу.

Добавлено 15-12-2020 в 13:16:

Ну да ладно. Пора возвращаться к основной задаче, из-за которой я не могу двигаться дальше - сделать поддержку MU-моделей. В Волатиле её кстати нет, из-за чего невозможно сделать ТЛез32. В Сталкере, как мы пару дней назад выяснили в соответствующей теме MU-модели могут освещаться только повертексно. Шареная геометрия + массивы цвета. Я понятия не имею как они при рендеринге объединяются, никогда с подобной задачей просто не сталкивался. И если честно, не хочу и пробывать. Я хочу сохранить цвета вертексов в лайтмапу, а брать их через VTF. Надеюсь, что он у всех потдерживается, начиная с GF6600. Потому что я точно помню, что смотрел его демки именно на этой карточке. Плюсов много - структура повертексного располагает теми же данными, что и попиксельное (т.к. на вертекс обычно приходится меньше данных, чтобы он сам не распух), здесь это неактуально. Не надо городить какие-то дополнительные массивы опять же. Из минусов боюсь только, что VTF будет недостаточно быстрым. Ну это я проверю. Так же предстоит понять, как именно модельки должны превращаться в MU. Не то по запросу юзера, не то автоматически.
Но тут вот какое соображение. В сталкере это автоматически провоцировало повертексное освещение, т.е. экономя на переиспользовании мы лишались лайтмапы. У меня этого не будет, поэтому я думаю, можно сделать автоматически, подсчётом референсов. Если референсов больше одного - это MU.
В лайтмаппере трассу придётся перестроить с учётом новых реалий. Это уже будет сложносоставная трасса из AABB и локальных Kd-tree. Но кстати она должна напорядок быстрее строиться и занимать гораздо меньшы места. А вот удержится ли её производительность на уровне чистого KD-tree тут уж хз. Будем надеяться, что да.
Ну и в шейдер придётся пропустить параметр смещения в лайтмапе от референса (для всей модели или для визгруппы). Опять жы интересный вопрос, как набивать цвета вертексов в лайтмапу. Если линией, то явно не хватит её длины. Значит где-то надо будет сделать перенос. Ну или скажем извлечь корень из числа вертексов и это будет стороной квадрата с люкселями для вертексов. Что-то такое. Впрочем повертексного у меня пока что нету.

Добавлено 15-12-2020 в 13:31:

Любая реализация начинается с концепции. Я бы мог принять за концепцию, что любая MU-модель доступна только для мира, а для саб-моделей они дублируются, но это не слишком прозрачно.
Эти модельки по идее должны глобально шариться между любыми энтитями.
Это будет более разумный подход. К тому же их можно отпроцессить заранее, еще до того, как будет построено дерево для мира.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 15-12-2020 10:31
-
Crystallize
Житель форума

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

Рейтинг



Цитата:
Дядя Миша писал:
Ужасно мутный и тошнотворный код, никогда еще такого не видел. Обычно я в любом незнакомом коде спустя час изучения уже могу выделить ключевые моменты и понять принцип работы. Здесь это сделать невозможно, потому что на каждой стадии алгоритм проваливается дальше и дальше и даже когда он завершил работу нельзя сказать, что там на выходе уже какой-то корректный результат, потом еще идут пост-процессы, мержинг и замазывание, то есть понять, что даёт наибольший вклад решительно невозможно. Это видимо современный стиль программирования. Может быть оно там на всех этапах выглядит как дерьмо, но в конце эти кусочки объединяются, сглаживаются и конечный результат уже на что-то похож. Но там нет главного алгоритма. Там нельзя сказать, что 90% параметризации осуществляется через какую-то функцию, а некоторые специальные случаи - отдельно. Нихрена подобного. Там минимум пять или шесть вариантов и на каждом этапе оценивается качество построения.

Современный стиль? Но ты же говоришь это в 2002-2003 году писалось? Какая же это современность?
А вот на что похоже-так это на то как работают нейросети.

Цитата:
Дядя Миша писал:
Я в своё время был очень удивлён насколько пользователи готовы самостоятельно всё исправлять и улучшать, не полагаясь на движок. Они просили лишь вменяемые инструменты контроля, чтобы не пришлось это делать через хитрозакрученную задницу.

Ты только смотри, что это были за пользователи. Если это было то поколение которое потом первую Паранойю сделало, то данное наблюдение уже устарело.

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

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

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

Рейтинг



Цитата:
Crystallize писал:
Но ты же говоришь это в 2002-2003 году писалось? Какая же это современность?

Начали в 2003-м, да. И сопровождали все 18 лет, там уже номер версии 180 или около того.

__________________
My Projects: download page

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

Цитата:

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

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

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

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

Рейтинг



Я тут озаботился важнейшим вопросом - решил узнать сколько же деревьев в настоящем лесу. И вот данные колеблются от 600 до 4000 на гектар.
А минимальный - полгектара, т.е. 50х50 метров, но это несеръезно конечно.
Возмьмем нормальный лес, ну скажем 100 квадратных километров, это десять тысяч гектар. Таким образом в подобном лесу может расти 40 миллионов деревьев. Вот это настоящий ТЛез32.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 16-12-2020 18:53
-
 Дядя Миша
racing for fish

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

Рейтинг



Внедрил поддержку MU-моделей на две трети. А почему на две - в компилятор, в движок, осталось в лайтмаппер сделать. Вес карт очень резко упал. Теперь он не превышает 90 мегабайт даже на картах из LostAlpha.
Причём судя по всему он даже меньше чем оригинальная геометрия (но правда у меня пока еще нет лодов). Скажем la23_oldroad с копированием геометрии весила 550 мегабайт , а с MU-моделями - всего 78 мегабайт.
Удивительно как маленькие модельки, вставленные на карту много раз так сильно раздувают конечный размер. Бонусом упало потребление памяти для компиляции. Раньше оно могло достигать почти двух гигабайт, т.е. впритык, теперь - непревышает 400-500 мегабайт, что даже меньше чем у p2st.
Правда FPS всё же сильно падает, если смотреть из одного края карты на другой. Так что нужны лоды. А потом - писать конвертор уровней из метро эксодус. И вот ежели новый ксаш прожует тамошние карты, можно сказать, что всё удалось.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 17-12-2020 07:29
-
ncuxonaT
каков стол, таков и стул

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

Рейтинг



Дядя Миша слушай, ты проверь сам, конечно, но похоже, что считать TBN в шейдере - это дохлый номер. Тангенты получаются граненые, и ничего с этим не сделать. Ортогонализация помогает не сильно.

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

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

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

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32202
Нанёс повреждений: 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: Записан
Сообщение: 199344

Старое сообщение 18-12-2020 05:59
-
 Дядя Миша
racing for fish

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

Рейтинг



Очень непростая это штука - лайтмапы для инстанс-моделей.
Во первых рассчитать динмически размер страницы - почти нерешаемая задача, поскольку размер блока для инстанса может превысить размер подсчитаной страницы для статичной геометрии. Обычно это вылезает на картах-коробках, но теоретически может везде вылезти.
Второй момент - лайтмапа не скейлится в зависимости от размеров объекта, она всегда единичного размера. Это можно поправить введя индивидуальный скейл для координат лайтмапы, но я чот слабо себе представляю, можно ли эти координаты прямо вот так вот скейлить, как бы они просто не уехали нахрен. К тому же как спроецировать трёхмерный скейл на двухмерный тоже непонятно. Ну можно взять какое-то среднее число конечно.

Добавлено 19-12-2020 в 14:39:

А и да, самое мерзопакостное. Разбиение KD-tree на локальные суб-деревья роняет производительность трассы как минимум вдвое.
То есть я эти дерева сую в AABB-три и уже по нему передвигаюсь.
на первый взгляд это могло бы наоборот ускорить дело, но не всё так просто.
Мы должны проверить каждое такое локальное субдерево на предмет того, что трасса в него упёрлась. Мы не можем попасть в первое и остановиться. Да и если честно, это не сильно влияет на производительность.

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

__________________
My Projects: download page

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

Цитата:

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

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

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

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

Рейтинг



Ну чтож, сработал мой хитрый план, построил единое дерево для всех инстансов, потребление памяти всё равно меньше, чем при старом подходе, поскольку вертексы не дублируются. Правда в фейс пришлось сохранить их позиции, чтобы не трансформировать при каждом обращении, без этого построение дерева по времени вырастало вдвое. Размер фейса был 64 байта + 36 байт на позиции = 100. Но изначально, неоптимизированный размер фейса в предидущей итерации был вообще 114 байт, так что можно сказать - да, действительно удалось сэкономить. Ну а размер вертексного буффера так и остался маленьким за счёт инстансов. У некоторых карт к примеру из-за дубликатов вес достигал 550 мегабайт, в оптимизированной версии 70-90 мегабайт. Т.е. как минимум здесь потребление упало в несколько раз. Из плюсов - удалось сохранить время постройки дерева на прежнем уровне, а время рассчёта освещения, помоему даже сократилось процентов на 15, но я хз почему, подозреваю, что там что-то неправильно считается. Ну это потом уже разберусь. Главное что оптимальный подход найден. Второй любопытный момент относится к скейлу лайтмапы в зависимости от скейла конечного меша. Если координаты были построены текстурных, то они естественно сохранены в .CSM-модельку и для таких кэшированных мешей скейл геометрии на карте не влияет на разрешение лайтмапы. Ни для дублирования, ни для инстансов. Так что можно сказать, в этом плане отличий не будет.

Скачал сорцы UE4 на предмет изучения. Там lightmass тоже юзает 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: Записан
Сообщение: 199360

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

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

Рейтинг



Опробывал переупаковщик атласов из UE4. Полное разочарование.
В документации зато как красиво. Вообщем первое что становится понятно из кода - эта штука не дружит с отраженными развертками. Она их видит, но сделать не может ничего. Объединяет обратно тоже из рук вон плохо, поскольку разъединение как раз и происходит на зеркальной развертке.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 20-12-2020 16:35
-
 Дядя Миша
racing for fish

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

Рейтинг



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

Оставлю здесь, может кому-то понадобится

C++ Source Code:
UVLength.x = length(  edgeUV2.y * edge1 - edgeUV1.y * edge2 );
UVLength.y = length( -edgeUV2.x * edge1 + edgeUV1.x * edge2 );

edge1, edge2 - это рёбра в трёхмерном пространстве, а edgeUV - в текстурном. UVLength - это worldScale. Потом еще надо поделить сумму worldScale на UvScale, которая сумма текстурного пространства.
Ну а второй момент - как правильно задетектировать отраженную развертку, причём идея настолько тривиальная, что я очень удивился почему мне эта мысль в голову не пришла. Мы просто умножаем signed UV area на аналогичную у соседнего треугольника и смотрим знак. Если обе негативные - будет положительный, если обе позитивные тоже. А если встретилась позитивная и негативная площади, ну значит здесь шов от зеркалки. Элементарно.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 21-12-2020 06:28
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4136

Рейтинг



Цитата:
Дядя Миша писал:
Оставлю здесь, может кому-то понадобится
C++ Source Code:
UVLength.x = length(  edgeUV2.y * edge1 - edgeUV1.y * edge2 );
UVLength.y = length( -edgeUV2.x * edge1 + edgeUV1.x * edge2 );


Оптимизировали умножение матричек?

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

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

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

Рейтинг



Я почти управился с развертками, буду использовать комбинированный подход. В большинстве случаев это будет подготовленная развертка из текстурных координат как в UE. А для планарных поверхностей - трипланарная проекция. Надо только определиться какие треугольники лучше параметризовать через текстурные координаты, а какие через проекцию. Трипланарка сфейлить не может, но надо оценить оптимальность результатов, завязанную на множество параметров, на качество освещения, наличия швов и общий размер атласа.
К тому жы у меня на освещении лезут какие-то подозрительные белые точки в некоторых местах, главное раньше их не было вроде.
Когда с этим управлюсь, останется только прикрутить прогрессивные мешы и радиосити. Ну и полностью всё отладить и взапроверить.

Добавлено 22-12-2020 в 11:19:

Слева направо:
1. без рендеринга ребёр
2. ребра рендрятся, используя нормаль треугольника ( как в сталкере )
3. ребра пытаются получить сглаженную нормаль, а если нет, то используют нормаль треугольника



4. ребра используют только сглаженную нормаль, полученную через барицентрические координаты UV-лайтмапы
5. ребра используют только сглаженную нормаль, полученную через барицентрические координаты мировой позиции (в P2 аналогично)

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 22-12-2020 08:19
-
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1844

Рейтинг



На последних скриншотах балка на потолке лучше всего выглядит. Только вот шов посреди арки видно на всех скриншотах, на первом его меньше всего видно.

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

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

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

Рейтинг



Различия в освещении между полной геометрией (когда каждая моделька вставляется по месту) и инстансами (когда хранится один эталонный набор).



Как видите есть небольшая разница. Черт его знает почему так. Ну тени еще ладно, а вот то, что мелкие кусты немного по разному осветились, это я вообще хз. Я не могу это забороть. Наверное потеря точности при трансформации. Может быть этих различий не будет если увеличить разрешение лайтмапы.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 22-12-2020 09:46
-
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 21:03. Новая тема    Ответить
Страницы (240): « Первая ... « 125 126 127 128 [129] 130 131 132 133 » ... Последняя »   Предыдущая тема   Следующая тема
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