HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть II
Страницы (32): « Первая ... « 17 18 19 20 [21] 22 23 24 25 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
racing for fish

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

Рейтинг



C++ Source Code:
1
class xform
2
{
3
  vec3 mat[4];
4
};
5
class Object
6
{
7
  xform m_matrix;
8
  xform &GetMatrix( void ) const
9
  {
10
    return m_matrix;
11
  }
12
  xform GetTransform( void ) const
13
  {
14
    if( foo )
15
    {
16
      xform tmp;
17
      return tmp;
18
    }
19
    return GetMatrix(); <---
20
  }

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

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 08-10-2024 09:29
-
 Дядя Миша
racing for fish

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

Рейтинг



Очередной большой день сегодня! Удалось заставить работать лифт с демокарты elevatordemo.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 08-10-2024 18:32
-
(_-=ZhekA=-_)
Житель форума

Дата регистрации: Jan 2006
Проживает: Москва
Сообщений: 4054
Возраст: 37

Рейтинг



Слишком много больших событий сегодня

__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.

http://button.moddb.com/download/medium/125531.png

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

Старое сообщение 08-10-2024 18:38
- За что?
FiEctro
Кот Арсис

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

Рейтинг



Цитата:
Дядя Миша писал:
Псевдокод. Собственно вот здесь и была проблема, когда мы брали объект по ссылке, но должны были его скопировать в возвращаемое значение, компилятор, вместо того чтобы скопировать объект, копировал ссылку на него. У меня там было соответствующее условие для объекта, для указателя, а для ссылки я забыл добавить. Нуивот.


Клёво. А в шоте вообще можно без указателей какой то простой код делать? Ну примерно как на шарпах.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

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

Старое сообщение 09-10-2024 06:05
- За что?
 Дядя Миша
racing for fish

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

Рейтинг





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

Цитата:
FiEctro писал:
А в шоте вообще можно без указателей какой то простой код делать? Ну примерно как на шарпах.

Да можно конечно.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 09-10-2024 14:23
-
FiEctro
Кот Арсис

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

Рейтинг



Дядя Миша
Я так понял у тебя мечта оставить только виртуальную машину, а весь движок на шоте написать?

Цитата:
Дядя Миша писал:
Да можно конечно.


Отлично.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

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

Старое сообщение 09-10-2024 15:53
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
FiEctro писал:
Я так понял у тебя мечта оставить только виртуальную машину, а весь движок на шоте написать?

у меня не мечта, у меня тестирование нагрузочной способности.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 09-10-2024 16:02
-
 Дядя Миша
racing for fish

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

Рейтинг



Карта с пулемётом, который рисует декалями. Слева XashXT, справа XashNT

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 10-10-2024 07:54
-
FiEctro
Кот Арсис

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

Рейтинг



Дядя Миша
FPS подрос хорошо.
А что с гаммой и декалями? И почему на одной и той же сцене разное количество Дипов и треугольников? От количества декалей зависит?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 10-10-2024 в 08:00

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

Старое сообщение 10-10-2024 07:58
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
FiEctro писал:
И почему на одной и той же сцене разное количество Дипов и треугольников?

Кол-во дипов не является какой-то фундаментальной величиной, которая зависит от сцены. Сколько раз твой рендер сделает флуш - столько дипов и будет. И с кол-вом треугольников та же песня. Помоему старый ксаш вообще не учитывает полигоны декалей в статистике.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 10-10-2024 09:56
-
 Дядя Миша
racing for fish

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

Старое сообщение 13-10-2024 11:56
-
FiEctro
Кот Арсис

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

Рейтинг



Цитата:
Дядя Миша писал:
Бесшовный чейнджлевел тоже отлажен и полностью работает


Это как в халфе или асинхронная загрузка?

Добавлено 13-10-2024 в 15:50:

Дядя Миша
А ты слышал про принцип цикады для уменьшения эффекта тайлинга для однообразных текстур?
https://habr.com/ru/articles/117160/

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

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

Старое сообщение 13-10-2024 12:50
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
FiEctro писал:
Это как в халфе или асинхронная загрузка?

как в халфе.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 13-10-2024 12:54
-
 Дядя Миша
racing for fish

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

Рейтинг



Поскольку я плотно занимаюсь рейтрейсером, у меня накопилось немного интересных новостей и я спешу поделиться ими с вами.
Вынужден признать, что несмотря на тот факт, что в своё время я написал компилятор уровней для Паранои, я по прежнему недостаточно хорошо понимаю принцип работы Q1BSP. Точнее в некоторых мелочах у меня пробелы в знаниях. Но поскольку рейтрейсер будет базироваться как раз на дереве такого типа, то я эти пробелы как раз и закрою. Для начала - минутка забавного. Как вы все знаете, для построения BSP используются только позитивные плоскости, но если в ку2 и в ку3 это явно видно в коде, то в ку1 и халфе - совсем даже неочевидно. Но вчера я наткнулся на замечательное:

C++ Source Code:
1
for( int i = 0; i < g_nummapplanes; i += 2 )
2
{
3
  n = AllocSurface();
4
  n->planenum = i; <-- !!!

Нувыпонели, да?
Ну а теперь перехожу к основному. Построить дерево несложно. Сложно определить где и что у нас внутри, а что снаружи. Где солидное, а где несолидное. Помните как я мучался в 2020-м году, строя BSP из полигонов для коллизии? Дерево построено, а где какие контентсы определить - ну решительно невозможно. Если ориентироваться на контентсы, заданные типом самого материала, мы просто придём к тому, что все наши пустые лифы окажутся заполненными. Правда мы можем прибегнуть к инверсному варианту - если в лифе есть геометрия, значит он пустой и наоборот.
Это прекрасно работает, на первый взгляд проблема решена?
Да, но нет. Потому что нам блин надо ещё как-то отличить solid от sky!!!!
Это же одна из основных фишек Q1BSP - возможность отличить просто твёрдую поверхность от неба, просто проверяя ноды, и не касаясь реальной геометрии. И, забегая вперёд, скажу что я был полностью прав - дерево такого типа действительно самая быстрая ускоряющая структура из всех существующих, известных мне. Ну навскидку, такое BSP-дерево быстрее BVH структуры (которая между прочим использует SSE2-оптимизации) в четыре с половиной раза. И это ещё рекурсивный вариант с одной оптимизацией goto. В шейдере-то будет вариант с циклом - он ещё быстрее. Но ровно до тех пор, пока мы не начинаем проверять реальные фейсы, принадлежащие ноде. Что вообщем-то и логично. Геометрия растворена в дереве, мы трейсим дерево и получаем сумашедшую производительность. Одна только мелочь нам мешает - как же диффернцировать солидные фейсы от небесных?

В Q1BSP (да и в халфе так же), контентсы сурфейсов приходят из CSG. А изначально (до CSG) контентсы ставятся брашам, т.е. замкнутным объемам.
Как вы помните, поскольку в Q1 (да и в халфе), может быть только единственный контентс на браш, функция выбора этих самых контентсов - очень ответственное и непростое дело. То есть нам надо решить как поступить если часть браша вода, а часть - солиды, ну итд. А можно не решать, т.к. CSG вполне может отрезать эту солидную часть и останется только вода. Из чего ясно следует - CSG в Q1BSP (да и в халфе тоже), определяет вообще абсолютно всё. Помните как я в своё время удивлялся, что CSG напрямую влияет и на швы на лайтмапе и на качество построения дерева и на всякие визуально-физичные глюки, типа невидимой воды. Ну и вот. При этом CSG в этом конвейере неотключаемый и выбросить его в принципе нельзя - без CSG построить дерево попросту не удасться, т.к. мы не будем знает где какие контентсы. Проще говоря ерунда получится, да и всё.
Хорошо, но так ли всё плохо? Ведь есть же Q2. Там с одной стороны уже и порталы ввели, а с другой - осталось классическое дерево из Q1 где все поверхности уложены на ноду. Совершенно верно, дерево там такое же, несмотря на то, что контентсы задаются уже битами. И CSG там тоже отключаемый, можно и вовсе без него (отдельный кайф это то, как там водяные брашы лишаются своих внутренних сторон, совершенно не так как в Q1, я вам как-нибудь расскажу), следовательно можно прибегнуть к опыту Кармака в Q2 и сделать как там? Да, можно, с одной маленькой поправкой. В Quake2 нет CONTENTS_SKY. Как раз в силу невозможности его определения без CSG. И теперь вы это тоже знаете.
А я буду думать дальше.

Добавлено 27-10-2024 в 14:05:

Собственно, как определяются контентсы в Q2
C++ Source Code:
1
for (b=brushes ; b ; b=b->next)
2
{
3
  // if the brush is solid and all of its sides are on nodes,
4
    // it eats everything
5
  if (b->original->contents & CONTENTS_SOLID)
6
  {
7
    for (i=0 ; i<b->numsides ; i++)
8
      if (b->sides[i].texinfo != TEXINFO_NODE)
9
        break;
10
      if (i == b->numsides)
11
      {
12
        node->contents = CONTENTS_SOLID;
13
        break;
14
      }
15
  }
16
  node->contents |= b->original->contents;
17
}

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

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 27-10-2024 11:05
-
Crystallize
Житель форума

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

Рейтинг



Напомни пожалуйста что такое сторона, уложенная на ноду, и чем она отличается от стороны не уложенной на ноду.

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

Нода это секущая плоскость, сторона это плоскость браша. Нода, как я знаю, обычно появляется при распространении во все стороны плоскости браша, которую компилятор счёл достаточно важной (аксиальной и большой) чтобы рассечь ею ещё несколько листьев в дереве на более мелкие листья. Получается "сторона лежит на ноде" это просто когда стороны двух брашей лежат в одной плоскости? Но тогда как можно приводить пример с брашем висящим посреди комнаты? Что-то не складывается.

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

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



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


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

Временная зона GMT. Текущее время 20:13. Новая тема    Ответить
Страницы (32): « Первая ... « 17 18 19 20 [21] 22 23 24 25 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть II
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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