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

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

Старое сообщение 04-08-2020 17:34
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12882
Возраст: 32

Рейтинг



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

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

Старое сообщение 04-08-2020 18:13
- За что?
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



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


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


А как ты проверишь, что код не допускает появления невалидных данных?

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

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

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

Рейтинг



Цитата:
Government-Man писал:
А как ты проверишь, что код не допускает появления невалидных данных?

в основном - прецендентным образом. 90% прецедентов находятс во время первичной имплементации, тестирования и отладки. Оставшиеся 10% можно ловить всю жизнь.

Цитата:
FiEctro писал:
Ты же сам понимаешь что не бывает идеальных алгоритмов

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

Government-Man в UE4 по прежнему | это DotProduct, а ^ CrossProduct?

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 04-08-2020 19:16
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



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


Цитата:
Дядя Миша писал:
в UE4 по прежнему | это DotProduct, а ^ CrossProduct?


Да, хотя я все-равно предпочитаю использовать FVector::DotProduct() и FVector::CrossProduct() - так нагляднее, хотя и многословнее.

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

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

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

Рейтинг



В UE3 не было. Вообще за такое руки надо отрывать. Один из самых мерзких антипаттернов. Вообще в UE3 довольно много антипаттернов, навскидку.
Как в четвертом не знаю, сорцы не дают без регистрации.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 04-08-2020 21:36
-
 Дядя Миша
racing for fish

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

Рейтинг



Инстансинг

Ну вот и встала в полный рост проблема. Я еще, когда над параноей работал, прекрасно это понимал, собсно куча одинаковых моделей на карте - это очень плохо во всех отношения. Это не только избыточные данные на диске, но и видеопамяти. Ну хорошо, на грасстесте от силы древеьев мало, ёлочи и той штук 30 не наберётся. А если я захочу ТЛез32? Сосны, поляно, медвед. 65 тысяч килоёлок. Сколько такая карта будет весить?
Одна ёлка занимает полтора мегабайта. Значит карта из уникальных ёлок будет весить 122 гигабайта. То есть вообще не вариант. И да, 65 тысяч килоёлок, это ТЛез16 всего-то навсего. Инстансинг, напомню хранить только то, что отличается. Матрица трансформации и освещение. С динамикой вопросов нет. Как быть со статикой? С лайтмапой на самом деле очень просто - надо завести в описании модели оффсет до реального места в атласе и номер страницы. А вот повертексное так уж не запишешь.
Но я так рассуждаю - если уж на модели есть лайтмапа, то и фиг с ним, с повертексным-то. К тому же возможность встроить модель внутрь карты, никуда не исчезнет, она тоже останется.
Но сделать инстансинг - полдела. Мне еще предстоит работать промежуточный бинарный формат кэшированных моделей. Объясню почему. Генерация лайтмапы, равно как и построение конвексного хулла - весьма небыстрое дело. Есть резон построить это один раз, сохранить в кэш, а в дальнейшем просто брать при компиляции эту модельку из кэша. Ну или вообще хранить снаружи, чтобы не усложнять. Или использовать оба варианта. Возможно что промежуточный бинарный формат станет одним из основных неанимированных форматов мешей для движка. Как оптимальнее - станет понятно уже по факт имплементации.
В принципе в параное есть зачатки такого кэша, она создаёт файлы .TBN и .CLIP видели наверное.

Добавлено 08-08-2020 в 00:11:



Вообще до смешного доходит. makebsp трудился над грасс-тестом две с половиной минуты. Знаете чем он занимался? Генерил текстурные координаты персонально для каждой одинаковой ёлки. В сумме 0.3-0.5 секунд, но и ёлочи тоже порядочно ведь на карте.

dolight строил KD-tree для эффективной трассировки 22 секунды.
А собственно рассчёт освещения длился 13 секунд. Лайтмапа, к слову немаленькая, 1024х1024. Чёрные треугольники - это не артефакты, они просто развернуты в сторону от солнца. Вообщем узкое место совсем не там, где его можно было-бы ожидать.
ЗЫ. лайтмапа пропорциональная, форум не пускает.

Добавлено 08-08-2020 в 00:16:

Вообще видно наглядно, как все старые "проверенные" технологии из 90-х отваливаются, когда речь заходит о получении боле-менее достойной картинки.

[ Вложение ]
lm_0000.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: Записан
Сообщение: 196199

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

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

Рейтинг



Поскольку разработка движка ведётся примерно так же, как выполняется программный код, это меня приводит порою к очень далёкому отклонению от изначальной цели. Ну скажем, решил я разработать новый формат шрифтов. А где шрифты - там и спрайты. Значит надо переписать худ и меню, чтобы оно использовало новые картинки. Вот и разработка рендерера (эксперименты с динамическим освещением). вполне логично пришла к тому, что неплохо бы иметь референс в качестве лайтмапы, а где лайтмаппер, там и новый формат уровней, а в новом формате уровней неплохо бы предусмотреть возможность embedded-моделей - ну это, чтобы не дублировать их, а хранить одну копию только. Но поскольку для этих моделей неплохо бы предусмотреть какой-то промежуточный кэш, потому что вычисление координат лайтмапы, сглаживание нормалей, рассчёт конвекс-меша, всё это, очевидно занимает какое-то время, лучше сделать кэш. Но какой смысл лепить для кэша какие-то искуственные форматы? Лучше уж сразу его сделать чем-то типа студиомодели, чтобы его можно было использовать и так и эдак. Но всё равно, поскольку этот формат встраивается в карту, логично обеспечить сходность структур, чтобы всё совпадало. И тут я прихожу к мысли, что разделение на уровни и модели - излишне. У них весьма много общего - коллизия, BSP-дерево, сурфейсы, вертексы (у вертексов хранится либо повертексное освещение, либо номера костей), сурфейсы. Ну вообщем отличия только в том, что у BSP есть виздата с порталами, а у моделек - кости. Вполне логично объединить всё это в общий формат с чанками. Получим доброкачественный комбинаторный взрыв, возможности которого по настоящему смогут раскрыть только будущие пользователи движка.
Опять же не придется городить разные просмотровщики для моделей и уровней. Но есть и еще один важный момент - у моделей, как известно есть анимации, а у брашей их нет. Но и тут всё довольно удачно складывается - дело в том, что хранить анимации в модели неудобно и сейчас так уже практически никто не делает. Вместо этого используется банк анимаций. Наделал человек персонажей, к примеру. Они все разные, но у них один и тот же скелет. Какой смысл вкомпиливать эти анимации в каждую модель заново, дублируя? Никакого. Банк анимаций будет строится автоматически, при компиляции каждой новой модельки, если конечно они в нее добавлены. Доступные анимации будут находиться тоже автоматически, по сравнению скелетов. У скелета должны совпасть кол-во костей, имена костей и их иерархия. Ну можно еще конечно позицию-вращение проверять, но это пусть Nemyax скажет, важно это или нет.

Добавлено 08-08-2020 в 15:00:

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

__________________
My Projects: download page

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

Цитата:

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

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

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

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

Рейтинг



Цитата:
Дядя Миша писал:
Ну можно еще конечно позицию-вращение проверять, но это пусть Nemyax скажет, важно это или нет.

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

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

Старое сообщение 08-08-2020 17:12
- За что?
thambs
мразь конченная

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

Рейтинг



Дядя Миша
Интересно, несколько таких 'моделей' можно будет собрать в единый префаб/сущность/контейнер?

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

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

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

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

Рейтинг



Цитата:
thambs писал:
Интересно, несколько таких 'моделей' можно будет собрать в единый префаб/сущность/контейнер?

Так в том-то и соль! Эта схема идеально ложится на все мои задумки.
Можно такую модель использовать как карту. Можно в карту вкомпилить модели. Единственное условие - они все должны быть статические. Ну оно и понятно - встроенным моделям анимация ни к чему всё же. Нет, ну что-то такое процедурное типа ветра конечно можно будет сделать, но и только.
Через какие-то функции. Впрочем оно везде так, кроме разве что кризиса, где эти йолки реально можно было рубить.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 08-08-2020 20:12
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12882
Возраст: 32

Рейтинг



Ничего не понял, но напомнило мне то что я описывал тут

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

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

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

Рейтинг



Слева p2st честный радиосити. Справа - фейковые баксплэши. Яркость немного не совпадает, да, потом подкручу.


Ну это так, навскидку.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 10-08-2020 13:00
-
thambs
мразь конченная

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

Рейтинг



Цитата:
фейковые баксплэши

Что это?

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

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

Старое сообщение 10-08-2020 13:06
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12882
Возраст: 32

Рейтинг



Пол и стены пересвечены, а потолок чёрный.

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

Старое сообщение 10-08-2020 13:08
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 01:06. Новая тема    Ответить
Страницы (240): « Первая ... « 111 112 113 114 [115] 116 117 118 119 » ... Последняя »   Предыдущая тема   Следующая тема
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