Дядя Миша
Ну так мы с тобой тогда ещё 8 лет назад разбирались как это работает. Вроде как и тогда к похожим выводам пришли. Просто да, в первых пдфках не очень доходчиво было описано.
Дядя Миша писал: Фактически отражённый свет работает только для статичной геометрии.
Ну не совсем, если это например вагончик, то относительно мира она динамичный. А вот относительно игрока внутри он статичный.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Ну так мы с тобой тогда ещё 8 лет назад разбирались как это работает
Англичане старательно замалчивали всю инфу. А японцы взяли и вывалили.
Техника использования предрассчитаных трансферов может по разному называться, главное что без предрассчётов в принципе не обойтись.
Но я и не планировал.
Добавлено 18-09-2022 в 11:57:
Цитата:
FiEctro писал: Вот кстати тоже тебе в копилочку:
Да не надо мне воксели показывать, они память дико жрут.
Добавлено 18-09-2022 в 12:04:
Да, чтобы у вас не сложилось превратного представления, будто бы я там что-то навязываю. Движок, равно как и тулзы гибко конфигурируются под рассчёт любого типа освещения, можно к примеру запускать компилятор уровней с параметром -nolightmaps, это сгенерит более эффективную для отрисовки геометрию, а свет считать в шейдерах полностью.
Можно использовать только лайтмапы, а можно будет смешанные режимы, т.е. полностью на усмотрение пользователя.
Дочитал тот документ по Enlighten. Ну что сказать? Опять куча лайтпроб, нерегулярная сетка, масса проблем и их героическое преодоление.
Всё то, с чем я столкнулся еще в P2, только в гораздо больших масштабах.
Надо подумать, возможно имеет смысл генерировать эти лайтпробы прямо на лету, но опираясь на информацию от трансферов и VPLS.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Это при условии, что источник света неподвижен, а больше всего лайтпроб на открытом пространстве, где мы хотим сделать смену дня и ночи.
То есть всё это имеет ограниченное применение.
У меня тут есть любопытная мысль, на стыке LPV и Enlighten замутить технологию, может быть что-то и получится из этого. Из LPV взять генерацию лайтпроб налету в регулярных сетках, а из Enlighten - те самые предрассчитанные данные. Ну в смысле идеи взять, а не код, конечно.
Дядя Миша писал: Из LPV взять генерацию лайтпроб налету в регулярных сетках
Так, а откуда ты данные возмешь? Ладно если лайтпроба рядом со стеной, а если она на улице высоко в воздухе, с каких трансферов она будет брать информацию о своём освещении?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Сегодняший день, 19.10.2022 можно официально считать датой рождения нового языка программирования.
Это не день, когда я внезапно принял решение о создании такого языка. Это не день, когда я набросал первый прототип и провёл первый юнит-тест, в стиле Hello World. Это день, когда мне удалось портировать на новый язык исходный код меню из XashNT, написанный на С++ и провести серию тестов по стабильности, производительности, да и вообще соответствию языка ожидаемому поведению. Теперь, когда, всё это сделано, уже можно с ответственностью заявить - язык создан, опробован в деле и будет как минимум использоваться внутри среды разработки игр XashNT. Подобно тому, как для первого квейка использовался QuakeC или для Unity используется C#. Однако заложенные в нём возможности позволяют использовать язык и для любых других задач, в отличие от того же QuakeC, он не прибит гвоздями намертво к игровому движку и там нет никаких явных привязок.
Язык имеет собственное имя: HeadShot или просто Shot. В этом можно усмотреть аллюзии на С++ который позволяет стрелять себе в ногу. А мой язык позволит выстрелить сразу в голову и не мучаться. Или же намёк на то, что с его помощью можно писать игровой код для шутеров, в которых хедшоты - важная часть игрового процесса. В принципе оба утверждения в какой-то степени справедливы. Но в какой именно, я конечно не скажу, т.к. любой продукт должен обрастать собственными легендами с момента появления. Расскажу поподробнее как я пришёл к выводу, что мне нужен собственный язык, что в нём планировалось сделать и что уже сделано, а что еще только предстоит.
Идею создания собственного языка я вынашивал примерно с 2006-го года, но тогда, у меня разумеется, не было для этого никакого опыта. Поэтому я планировал использовать расширенный QuakeC из движка FTE. Этот движок, к слову, развивается до сих пор, причём по большей части упор делается именно на расширение возможностей QuakeC. К сожалению изначальные рамки, заданные для этого языка Кармаком, сделали невозможным добавление в него многих возможностей и особенностей С++, которые на мой взгляд оказались бы весьма полезными. Я так же рассматривал другие языки, которые бы меня полностью устроили, однако ничего подобного так и не удалось найти. Минимальное соответствие моим требованиям было только у AngelScript, но и там были вещи, которые меня не устроили. К тому же, с момента, когда было принято решение о портировании VCL, он отпал автоматически. Возможно кто-то не в курсе, но портировать Delphi на C++ в ряде случаев - нерешаемая задача. Заодно, у тех, кто внимательно следит за моими "невероятными приключениями", наверняка встал вопрос - отчего же я не взял уже портированую библиотеку VCL, для C++ Builder. Ведь разработчики Delphi выпускали и такой продукт тоже и там VCL тоже была. Так вот если внимательно изучить рантайм, то вы увидите, что там VCL присутствует в своём оригинальном виде, т.е. по прежнему на языке Delphi. Никто и никогда не портировал её на С++, в нём отсутствует ряд возможностей, которые она активно использует. В частности там нет свойств и нет виртуальных конструкторов. А вот на C# она успешно портирована, как раз потому что, этот язык и создавался с учётом возможности портирования подобного кода. То есть в каком-то смысле я повторяю путь Микрософта начала нулевых. Но конечно у меня есть собственные идеи, насчёт всего этого. Исходя из всего вышесказанного было принято единственное верное решение - нужен свой собственный язык. В котором следует реализовать как минимум привычный синтаксис и поведение С++ и заодно те вещи, ради, которых всё это и затевалось. Перечислю их:
1. Возможность легкого отправления объектов по сети. Для чего у члена класса просто ставится необходимый атрибут и больше ничего делать не надо. Всё остальное происходит автоматически. Опционально можно указать сколько бит переменной должно быть передано.
2. Возможность легкой сериализации объектв. Полностью аналогично первому пункту - атрибут у переменной и опционально указать кол-во бит.
3. Возможность портирования кода с Delphi. Здесь нам понадобятся виртуальные конструкторы и свойства с расширенными возможностями.
4. Язык ни в коем случае не должен иметь привязки к игровому движку, как это случилось, например с QuakeC, но одновременно должен позволять максимально плотную интеграцию для увеличения скорости работы и её упрощения.
5. Язык должен иметь синтаксис и поведение полностью аналогичные С++, при этом предоставляя программисту такие возможности, которых в С++ нет и они там не появятся уже никогда. А если и появятся, то это будет сделано через костыли типа STL.
6. По возможности сохранить в языке идеологию, заложенную Страуструпом - вы не платите за то, чем не пользуетесь. Практически все известные мне скриптовые языки эту концепцию игнорируют.
7. Встроенные в язык средства отладки, позволяющие выводить исполняемый код на экран, расставлять точки остановки, ошибки внутри исполняемой среды языка не должны приводить к краху всего приложения - ну вообще стандартные возможности песочницы.
8. Не слишком удручающая скорость выполнения кода, даже без преобразования опкодов в реальные исполняемые коды x86. Т.е. без JIT-конвертации.
9. Возможность манипулирования объектами со стороны рантайма, например для реализации физики объектов, подобно тому как это было сделано в Quake.
Вот такие задачи были мной поставлены и надо сказать, у меня получилось практически всё из намеченного. Так же у языка будет возможность работы на 64-х битных системах, я изначально закладывал это в его архитектуру, но пока в этом просто нет необходимости.
Архитектура системы комманд - RISC. Команды имеют фиксированную длину и три операнда (но необязательно используются все три). Из них смещения на данные в случае 16-битных смещений составляют 6 байт, а в случае 32-битных смещений соответственно 12. Плюс 4 байта информации. Из которых 8 бит - номер опкода и по 8 бит мета-информации на каждый операнд, где 2 бита - размер операнда, а 6 бит флаги их состояний. В отличие от CISC-системы команд, их легко проматывать и полностью исключена возможность вредоносного вмешательства из-за переполнения буффера, когда данные трактуются как команда.
Немного о практическом применении, с учётом накопленного опыта. Valve, как вы знаете, купив первый Quake у Кармака, очень быстро упёрлась в возможности этого ограниченного языка и было принято решение переписать игровую библиотеку на С++. Это было сделано в спешке, поэтому кодинг под GoldSource напоминает пляски на картофельном поле с дедомграблях. Абсолютно все сталкивались, не с тем, так с этим.
Просто раз уж у нас тематический форум по халфе, в каком-то смысле, вы все хорошо знаете, о чём я говорю. Так вот для многих эти ужасы послужили негативным стимулом вообще забросить программирование.
Что характерно, Valve не отошла от этой практики и в последующих движках, но там действительно уже было невозможно ориентироваться, даже на мой взгляд.
Плюс разработка под С++ требует наличия на компьютере тяжеловесной MSVC. Иногда требуется какая-то строго опредлённая версия, иначе потребуются дополнительные пляски с бубном. Unity со своим C# аналогично требует наличия MSVC. К тому же у меня в последнее время сложилось нехорошее впечатление, что сигналом для выхода новой версии Unity как раз и служит новая версия СиШарпа. Может быть в 2005-м году, когда Юнитех сделал свой выбор пользу Шарпа, он еще не выглядел так страшно, как сейчас, хотя тенденция уже тогда просматривалась. Так или иначе, но лично мне совершенно не хочется зависеть от капризов разработчиков стороннего языка и следить, чтобы код мог компилироваться на целом букете компиляторов. В дальнейшем, если новый язык выйдет за рамки XashNT и получит некоторое распространение для решения иных прикладных задач, об этом придётся задуматься, но пока что здесь обеспечена необходимая целостность.
А редактор исходного кода я встрою прямо в основной редактор, таким образом вам вообще не придётся использовать студию для разработки игр на XashNT. Но конечно не исключена возможность и сопряжения компилятора с теми видами продвинутых блокнотов, к которым вы привыкли. Да и в самой студии, вроде как есть возможность подмены компилятора. Это что касается вопросов редактирования исходников.
Сказано достаточно, теперь самое время ответить на ваши вопросы, которые у вас возможно появились по вышенаписанному.
Возможно у нас здесь собралась аудитория которая не слишком хорошо знает все возможности С++, да и не факт, что многим это будет интересно, но я всё же опубликую список того, чего ещё нет в моём языке (в отличие от С++) и что планируется туда добавить, т.к. разработка языка еще не завершена, хотя в сущности поставленная задача уже выполнена.
Итак, что еще планируется добавить в язык:
1. Перегрузка операторов. Полезна для создания абстрактных типов данных, вроде векторов, матриц и комплексных чисел, но и не только.
2. Поддержка функций внутри функций как в Delphi, ну или лямбда-выражений, пока еще не определился точно. К слову сказать трюк с объявлением локального класса прямо внутри функции, как это возможно в С++, у меня тоже работает, хотя, как и так, не даёт никаких преимуществ, в плане оптимизации.
3. inline-разворачивание функций. Это весьма сложная вещь, которая прячется за простым интерфейсом. К тому же я не уверен, что в случае скриптового языка от нее будет какая-то польза. Но серию экспериментов я конечно проведу. Для методов get\set (невиртуальных свойств), развертывание, к слову уже имеется, т.к. это часть их природы.
4. Шаблоны для функций. На данный момент поддерживаются только шаблоны для объектов. Не то чтобы сложно, просто руки пока не дошли.
5. Доступ к защищенным членам класса с выводом соответствующих ошибок. На данный момент компилятор не учитывает секции private\protected\public, хотя и хранит информацию о них. Это в сущности мелочь, т.к. при ошибке доступа просто выдаётся соответствующее предупреждение компилятора, больше ничего не делается.
6. Механизм исключений. Он не является особенностью именно С++, т.к. есть много где. И он идеально ложится на RISC-архитектуру. Аналогично пункту 4 пока не дошли до него руки.
Все остальные возможности и особенности С++, по крайней мере те, которые регулярно используются так или иначе уже реализованы. Постепенно всё будет приводится к соответствию стандартов самого С++, если речь идёт об унаследованных особенностях, а те вещи, которых в С++ нет, будут максимально тесно интегироваться с уже имеющимися для обеспечения максимальной целостности нового языка.
Добавлено 19-10-2022 в 10:45:
Цитата:
MrThomasCooper писал: Плюшка из Делфи, в виде «набросал контроллов и готово» перекочевала тоже?
Совершенно верно. Причём эта особенность в дальнейшем появится и для внутриигрового меню тоже. А возможно и новые энтити можно будет создавать похожим образом.
Цитата:
MrThomasCooper писал: И насколько оно будет совместимо со старыми версиями винды и старым железом в целом?
Ну на XP будет работать точно. Ниже не уверен.
Строго говоря XashNt по возможности прозрачен для железа, т.е. его потребление ресурсов в первую очередь зависит от тяжести ресурсов самой игры. Понятное дело, что уровни сталкеровского типа нагрузят видеокарту куда сильнее, нежели коридоры из кваки. А если вы планируете сделать тетрис, то всё будет летать даже на самых слабых конфигурациях. Впрочем в процессе разработки я уже использовал некоторые возможности WinAPI, которых не было в Windows ниже XP.
Но не думаю, что это представляет проблему. Если Xp до сих пор еще используют, то людей, сидящих под 2K или Win98 я себе не представляю.
Добавлено 19-10-2022 в 11:00:
Надо будет сформулировать все ключевые пункты концепции XashNT, я про них периодически упоминаю, то там, то здесь, но надо собрать их воедино, чтобы пользователи знали чего именно ожидать.
Дядя Миша
Это все конечно хорошо, а есть рабочая версия - запустить посмотреть, что и как?
__________________
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.
Дядя Миша писал: Но не думаю, что это представляет проблему. Если Xp до сих пор еще используют, то людей, сидящих под 2K или Win98 я себе не представляю.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
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.