Sidebar

Новые компиляторы уровней для Xash3D

Raid

VIP
VIP
11.07.06
8 319
33
  • Rocket медаль
2 crystallize:
Да просто травма детства, почти как изнасилование родителями, только виз.
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Расскажите мне поподробнее про func_instance. Можно ли их вращать, можно ли вкладывать друг в друга до бесконечности. Про пространство имён я уже получил представление. На мой взгляд этими инстансами надо оперировать именно как хидерами в С++, это наиболее точно отражает концепцию.

Post automatically merged:

Код:
void CMapFile::CheckForInstances( const char *pszFileName )
{
	if ( this != g_MainMap )
	{	// all sub-instances will be appended to the main map master list as they are read in
		// so the main loop below will naturally get to the appended ones.
		return;
	}
Как я понимаю, рекурсия зарублена.
 
Останнє редагування:

Raid

VIP
VIP
11.07.06
8 319
33
  • Rocket медаль
2 Дядя Миша:
Расходуют ли эти вставки мап энтити как все остальные, или как со статиками ситуация?
 

xDShot

Well-known member
20.12.10
1 844
Можно ли их вращать, можно ли вкладывать друг в друга до бесконечности.
Можно. Инстанс можно поворачивать и перемещать, но не скалировать. Внутри инстанса могут быть другие инстансы. Рекурсивные включения не допускаются, иначе зависнет редактор или компилер, единственный прокол.

Так же через Func_instance_parms и Func_instance_io_proxyможно настроить "каналы связи" между энтитями внешней карты и инстанса(ов) для передачи input/output (trigger).

Оригином инстанса считается центр vmf инстанса. Можно пофиксить добавлением func_instance_origin.

Распространенный пример-юзкейс инстансов:
  • Основная геометрия, общая для всех игровых режимов
  • Переусложненная группа брашей префабов для детализации, например колонны и высотки (добавлены в основной инстанс)
  • Какой-нибудь домик, чтобы всю эту конструкцию можно было без боли, просто и легко передвинуть или повернуть в случае необходимости (добавлен в основной инстанс)
  • Энтити, специфичные для игрового режима 1
  • Энтити, специфичные для игрового режима 2
  • Параметры окружения, скажем, для дневной версии карты (light_environment, туманчег и т.п.)
  • То же для ночной версии
  • Общий переход между прошлой картой и нынешней.

Ну и далее, в конечных картах ставятся эти инстансы, по надобности.

На мой взгляд этими инстансами надо оперировать именно как хидерами в С++
В хаммере они манипулируются как энтити. Во время компиляции все инстансы сливаются в конечную карту как единое целое. В игре как таковые они перестают существовать (наподобие info_null или func_detail).

меня удивляет, что никто мне за всё время так и не предложил добавить эту фишку, хотя все знали и молчали.
Хотелось бы, да чет как-то неудобно. Это значит надо доставать пейсателей карторедакторов, чтобы эти инстансы отображались. Потом авторов компиляторов просить запилить разруливание инстансов, либо писать дополнительный компилятор, который вставит все эти инстансы в конечную карту.
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Можно. Инстанс можно поворачивать и перемещать, но не скалировать
У меня поддерживается полный набор трансформаций - независимый скейл по трём осям, повороты и смещения. Ну и рекурсивное включение. Насчёт сорсовского, судя по коду я совсем не уверен что он умеет корректно добавить карту из карты. Иными словами если я на основной карте поставлю func_instance, а в нём укажу путь к карте, на которой тоже будет func_instance, то он будет проигнорирован. Ну так я вижу реализацию в SDK - идёт явный игнор субвключений.
Так же через Func_instance_parms и Func_instance_io_proxyможно настроить "каналы связи" между энтитями внешней карты и инстанса(ов) для передачи input/output (trigger).
Этого у меня пока нет, но исключительно потому что я еще концепцию не выработал. Потом с вами обсудим как лучше.
Хотелось бы, да чет как-то неудобно
Неудобна сама концепция или то, что кого-то надо просить?
Строго говоря я эту фишку сделал, потому что меня дико заломало рекурсивно компилить модельки из карт, а потом это конвертить в формат понятный халфе. Я подумал - да ну его на! и написал вот такую систему. А это оказывается модная концепция.

Кстати. Тут в SDK 2013 стрим-трасса на SSE, надо её апробовать в деле. Ну это лучше чем тащить за собой 15 метровые библиотеки embree. Если с этой трассой рад ускорится хотя бы в 100 раз будет неплохо. Но на самом деле, мне это нужно совсем для другого. Ускорение это побочный эффект.
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Раскопал очень критичный баг, связанный с CSG. Вот как раз исчезновение фейсов. Всё очень просто, дело в том, что фейсы, окрашенные NULL имеют равнозначный приоритет с обычными. А поскольку у них одинаковый контентс, дальше всё происходит наудачу. Ну просто нет у мапперов такой привычки - целиком покрывать видимые фейсы брашем с текстурой нулл. Зато она присутствует в мапперов под Q3, ведь там нет CSG. И всё это гамно моментально вылезло. В ту же кассу и создание террейнов где только одна сторона видимая, а остальные окрашены нуллом. Небольшие ошибки округления при вычитании и вот уже нулл жрёт видимый браш. Самое любопытное в том, что баг видимо отсутствовал в ZHLT, его посадил китаец, со своей любовью к оптимизациям. Ну и я тоже за компанию. Второй момент - сортировать брашы по контентсам дико неудобно, тут нужен именно приоритет.
Позже будет более подрбная инфа.
 

nemyax

тндайпц тра
Команда форуму
Модератор
30.07.15
643
25
18
Дядя Миша сказав(ла):
и вот уже нулл жрёт видимый браш
Жрёт, факт. Я сегодня кокрас начал подозревать такую фигню.
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Если нетрудно - проверьте кто кого жрёт на китайских, моих и всевозможных ZHLT.
Ну и помните что порядок вычитания зависит от того какой браш в списке выше.
 

GNU/Hurt

Maïté
05.03.14
1 092
25
38
2 Дядя Миша:
Не совсем понял о чём речь. Нуллбраши не должны резать мир или что?
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
нуллбраши не должны поедать видимые браши. Давайте я немного проясню с терминологией.
Клипбраш - это детальный браш, он вообще не влияет на видимый хулл и как следствие не затрагивает обычные браши при CSG. Но из-за того что он детальный, им нельзя заделывать наружные стенки уровня. Нуллбраш - это структуральный колоизационный браш, он влияет на разбиение обычных брашей.
И на CSG в том числе. То есть это просто невидимые фейсы, которые наравне с хинтами участвуют в разбиении пространства. А потом удаляются из финальной карты. Но BSP плевать на наличие текстуры или текстурной матрицы, он ориентируется только по плоскости. Т.е. на уровне BSP всё происходит штатно. Проблемы начинаются именно в CSG. CSG как известно вычитает одни браши из других, а потом, по возможности склеивает эти результаты в новые браши. Есть несколько критериев, по которым это осуществляется.
1. контентс браша. Ну понятно, скай режет воду, солиды режут скай и все режут empty.
2. detaillevel - если он совпадает, то старший браш в списке режет младший
если не совпадает, то старший детайллевел режет младший
3. порядок следования брашей - самое главное. Второй браш режет первый, третий режет второй и так далее.
Понятное дело, что браши никаким чудом не могут случайно распологаться таким образом, чтобы корректно друг-друга порезать, поэтому перед CSG их обычно сортируют по контентсам, обеспечивая выполнение первого и третьего условия, а второе выполняется уже в процессе CSG. С сортировкой раньше были некоторые баги, которые китаец успешно исправил, но главный баг - остался.
Дело в том, что нуллбраши имеют точно такой CONTENTS_SOLID как и видимые.
А теперь внимание - как они друг-друга порежут при CSG? Как-то!
Это типичный UB. Я помню в 2004-м или в 2005-м Миг-29 делал какой-то маленький мод про халфу и у него были загадочные дырки в полигонах, причём карта не ликовала. Народ еще выразился в том плане, что это были "продвинутые глюки". Вот как раз из-за неопредёлённости вычитания между видимым и невидимым брашем. Очевидно отсюда же лезут лики при любой попытке сделать какую-нибудь лошадку моделькой, однажды точности эпсилона просто нехватает и невидимый браш сжирает сторону видимого. Хотя визуально кажется что там всё ровно. Отсюда же и видимый эффект при накрутке эпсилона, хотя и нестабильный. Но в действительности всё дело только лишь в приоритете. Нулл не должен жрать видимый браш ни при каких раскладах. Если это внешние фейсы - они удалятся в любом случае. А если внутренние - вы будете наслаждаться вот такими "ликами". Но сортировка по контентсам вообще не предполагает задание явного порядка следования для особых случаев - я не смогу втиснуть новый контентс с нужным номером, т.к. эти номера часть спецификации формата. Да это и не нужно. Надо просто ввести уровни приоритета для каждого браша и сортировать уже по ним.

Отдельно еще хочу сказать за клипноды. Тут кристаллайз жаловался, что даже несмотря на все китайские оптимизации по прежнему какое-то говно лезет. Самое любопытное, что все кто делал карты под кваку не жаловались на плохую колоизацию никогда. Это прерогатива тех, кто кубал под халфу. Код надувания брашей в халфе и кваке совершенно разный. Почему так? Вальва переделывала код для поддержки мультипоточности. А потом всякие китайцы его исправляли. А потом еще запускали дополнительный проход для исправления исправленный клипнодов (FixBrinks). И в итоге вся эта порнография нормально не работала никогда. Клипноды может и экономила, но приглючивала. Надо просто вернуть классический код надувания брашей.
 

nemyax

тндайпц тра
Команда форуму
Модератор
30.07.15
643
25
18
2 Дядя Миша:
Вот ты пишешь, что грани с нулл-текстурой всегда участвуют в CSG-нарезке. А как отбросить их совсем, вроде кутришного caulk-а, будто их вовсе не было? ДА НЕ КАК?
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Читал китайский тред на свенкопе и наткнулся на замечательную, просто изумительную ремарку от китайца
The tools are compiled by vs2010. So their sizes are much bigger and they may run 10% slower than the older versions.
Какая хорошая десятая студия! :drink:
А как отбросить их совсем, вроде кутришного caulk-а
Кутришный caulk полностью идентичен NULL. Разница, как я уже говорил, в том, что в q3map нету CSG, предполагается, что дизайнер на уровне редактора сам всё вырежет. А CSG не делает приоритета видимых брашей над невидимыми. И в результате вот такое гамно получается.

Post automatically merged:

Вообще смотришь код оригинальных компиляторов под кваку и диву даёшься. Там было всё. И ремап финальных планесов был, вальва выкинула. И они сразу шли в double, т.к. не было этого распила csg->bsp. Вальва с со своей переделкой на мультипоток посадила кучу багов. Но справедливости ради стоит отметить, что кушные компиляторы до сих пор в большинстве своём так и работают в одном потоке.

Post automatically merged:

А вот откуда растут китайские корни FixBrinks
/

and when you approach the edge walking along the horizontally depicated wall, you get stuck upon coming to the edge.
____<-- o
/
_o__ (stuck)
/


Yeah. I have managed to reproduce this issue. Now trying to figure out what exactly has happened.
Edit: It has nothing to do with the compiler. It is a bug of the engine.

The clipnode structure where I found the problem is like this:

EMPTY
______| EMPTY
______|
______|________
_____/|
____/_| SOLID
___/__|
SOLID

I guess what the engine sees is a small gap because of some accuracy issue:

EMPTY
______| EMPTY
______|
_____/|________
____/_|
___/__| SOLID
__/___|
SOLID


Edit 2:
I seem to have found the cause from the source code of Quake 2, and I think the compiler can do nothing about this.
Он увидел, как ку2 замазывает скосы бевелами и решил что ему тоже это надо. Хотя плюс клипнодов как раз таки в том, что ничего этого не надо.
 
Останнє редагування:

Raid

VIP
VIP
11.07.06
8 319
33
  • Rocket медаль
Дядя Миша сказав(ла):
Почему так? Вальва переделывала код для поддержки мультипоточности. А потом всякие китайцы его исправляли. А потом еще запускали дополнительный проход для исправления исправленный клипнодов (FixBrinks). И в итоге вся эта порнография нормально не работала никогда. Клипноды может и экономила, но приглючивала. Надо просто вернуть классический код надувания брашей.
Не означает ли это полный отказ от x64 случаем? Если так то это тупик. Кроме того не забывай что карта под кваку едва ли цепляет существенную часть лимитов ксаша - не только на браши но и на всё остальное. Я не имею понятия про лимиты кваки но что-то мне подсказывает что это даже не рядом с хл, а не то что там с ксашем. Методы кваки, возможно, идеально работают на малых расстояниях и на х86 до двух гигов памяти. Почему я так думаю не имея понятия о технических деталях? Потому что показывают наблюдения: все танцы вокруг старых архитектур могут давать высокие показатели - выше рассчётных - но в узких диапазонах, когда например можно увеличить количество элементов А а элементы Б при этом в идеале вообще должны отсутствовать. Вон скарж пихал миллионы полигонов в хл, например.
предполагается, что дизайнер на уровне редактора сам всё вырежет.
Отличная идея. Джек даже коробку по дефолту с нуллом в некрашенных местах создаёт.
 
Останнє редагування:

crystallize

Well-known member
06.06.14
1 715
46
48
2 Raid:
Как ты уложишь Arcane Dimensions в свои рассуждения о лимитах Кваки?
 

Raid

VIP
VIP
11.07.06
8 319
33
  • Rocket медаль
2 crystallize:
Очень просто: дальше неё не прыгнуть, это технический предел. Ксаш находится за ним из коробки.
 

xDShot

Well-known member
20.12.10
1 844

Game Server

Доноры Красавчики

Користувачі онлайн

Немає користувачів онлайн.