#1 Re: Свободный треп » Про новомодный bbmod... » 2023-01-15 09:16:45

Не знал об этом движке раньше. К сожалению, демка из коробки не запустилась, выдает ошибку "Variable <unknown_object>.show_debug_message_ext(101506, -2147483648) not set before reading it."
Судя по скринам, выглядит довольно интересно - как я понял, он написан на чистом GML, без библиотек? Если так, то это имхо минус, т.к. встроенное 3D в ГМ всегда будет ограниченным, и там нет особых перспектив для развития.

#2 Re: Разработка движка » Xtreme3D 4.0 64-bit » 2023-01-11 17:02:11

Привет форумчанам, всех с наступившим Новым годом!
На праздниках было время заняться этим проектом - и вот, выпускаю, как и обещал, первую альфа-версию Xtreme3D v4 для 64-битного GameMaker Studio 2:

Релиз на GitHub

Реализована вся функциональность из v3, кроме следующей:

  • Система TextureEx для материалов

  • Система освещения LightFX

  • Теневые карты ShadowMap

  • Объекты HUDShape

  • Объекты шрифтов TTFont

  • Поддержка индивидуальной анимации для объектов ActorProxy

  • Линейные волны для объектов Water

  • Некоторые дополнительные функции Viewer

  • Некоторые дополнительные функции спрайтов

  • Некоторые дополнительные функции DCE и ODE

  • Загрузчики форматов ASE, DXS, FBX, MTS, Х

  • Физический движок Kraft.

#3 Re: В процессе разработки » Obsession » 2023-01-08 11:25:11

По описанию - очень интересно! Подписался на группу вк, буду следить, желаю успеха!

#4 Re: Разработка движка » Xtreme3D 4.0 64-bit » 2022-11-13 19:34:42

Разобрался, в чем проблема - оказалось, дело в том, что загрузчики ошибочно вызывают не ту функцию StrToFloatDef для парсинга чисел, которая в русской локали по умолчанию использует запятую как разделитель вместо точки. Разрабы проблему уже заметили, вроде чинят. Так и знал, что причина какая-то простая, но не очевидная hmm

кстати, твой движок на D, больше графический движок, или прям игровой ?

Пока больше графический, в основном коде только рендер, а все остальное (физика, GUI) подключается в виде расширений.

#5 Re: Разработка движка » Xtreme3D 4.0 64-bit » 2022-11-01 20:04:31

Ой, нет, рано я обрадовался - GLScene оказалась забагованная( Только сделал врапперы Freeform и Actor, как оказалось, что анимированные (и некоторые статичные) форматы при загрузке дают Access Violation. Видимо эти загрузчики никто толком не тестировал все эти годы, и там вкрались регрессионные ошибки. Придется пока отложить этот проект в долгий ящик. Жаль, конечно. Я думал, если вторую версию выпустили, то есть какая-никакая стабильность, а у них там конь не валялся)

#6 Re: Разработка движка » Xtreme3D 4.0 64-bit » 2022-10-31 11:20:31

Порт будет писаться в два этапа. На первом я перенесу только базовые функции-врапперы, основанные на встроенных классах GLScene, и, видимо, выпущу первую альфа-версию Xtreme3D 4. На втором будут реализованы аналоги тех возможностей, для которых пришлось добавлять новые классы и менять методы встроенных. По итогам второго этапа будет выпущена вторая альфа, на основе которой затем будет подготовлен релиз Xtreme3D 4.0.0. Также на II этапе будет подготовлен биндинг для Python 3.
Если все пройдет успешно, затем выйдет версия 4.1, в которой будут добавлены врапперы некоторых новых классов GLScene 2.

План I этапа:

Engine - изменения в некоторых функциях
Pak - без изменений
Viewer - без изменений, некоторые функции будут добавлены на II этапе
Dummycube - без изменений
Camera - изменения в некоторых функциях
Light - без изменений, система LightFX будет добавлена на II этапе
Font & Text - без изменений, но возможность поддержки Freetype будет рассмотрена на II этапе
Sprite - без изменений
Primitives - без изменений
Actor - без изменений
Freeform - без изменений
Terrain - без изменений
Object - без изменений
Polygon - удаляется
Material - без изменений, кроме системы TextureEx
Shaders - без изменений, поддержка теней и FBO в GLSL-шейдерах будет добавлена на II этапе
ThorFX - без изменений
FireFX - без изменений
Lensflare - без изменений
Skydome - без изменений
Water - без изменений
Blur - без изменений
Skybox - без изменений
Lines - без изменений
Tree - без изменений
Trail - без изменений
Shadowplane - без изменений
Shadowvolume - без изменений
Navigator - без изменений
DCE - без изменений, некоторые функции будут добавлены на II этапе
ODE - без изменений
FPSManager - без изменений
Mirror - без изменений
Partition - без изменений
Proxy & MultiProxy - без изменений
Grid - без изменений
MemoryViewer - без изменений
Movement - без изменений
ObjectHash - без изменений
Window - без изменений
Input - без изменений
Color - без изменений
Pipe - без изменений
Verlet - без изменений

#7 Разработка движка » Xtreme3D 4.0 64-bit » 2022-10-31 10:51:55

Gecko
Ответов: 8

Поторопился я хоронить Xtreme3D для GameMaker Studio! Мне стало так досадно, что движок теперь нельзя использовать в GMS, что я на днях поставил Delphi 10.4 со свежей GLScene и решил посмотреть, насколько реально обновить Xtreme3D. Обнаружил, что основную часть движка можно портировать без существенных переделок, так сказать, полуавтоматическим методом - заменяя отдельные служебные функции и изменившиеся части API. Я пока не уверен на 100%, что получится перенести все мои расширения и дополнительные классы, которых не было в оригинальной GLScene, но вероятнее всего их можно будет реализовать заново, либо как-то адаптировать. Во всяком случае, серьезных препятствий этому я теперь уже не вижу, и потому есть смысл попробовать.

Что это даст:

  • Возможность перехода на 64 бита и, следовательно, совместимость с современными версиями GameMaker Studio. Я уже портировал некоторые функции и проверил в GMS2 работоспособность 64-битной версии - она работает.

  • Доступ ко всем новым фичам GLScene 2.x (которые я пока детально не изучал - как только сделаю это, отпишусь)

  • Возможность писать на современном Delphi и полноценно использовать в движке сторонние библиотеки - в перспективе это поможет реализовать, например, поиск пути, поддержку видео и т.д.

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

Обновление от 01.11.22: продолжение работы над Xtreme3D 4 пока под вопросом из-за вскрывшихся проблем в коде GLScene.

Обновление от 20.11.22: проблемы решены обновлением GLScene, разработка продолжается.

Обновление от 11.01.23: вышел Xtreme3D 4.0.0 alpha1.

#8 Re: Вопросы и ответы » проблема с функцией Mouselook и баги с экстентами карты » 2022-10-29 09:31:27

Ограничение камеры предлагаю делать так - ввести переменную camPitchAngle для хранения угла наклона и ограничить ее верхним и нижним пределами, например 70 и -70 градусов:

deltax = (mx - display_mouse_get_x()) / 8;
deltay = (my - display_mouse_get_y()) / 8;

camPitchAngle += deltay;
maxAngle = 70;
minAngle = -70;
if (camPitchAngle > maxAngle)
   camPitchAngle = maxAngle;
else if (camPitchAngle < minAngle)
   camPitchAngle = minAngle;

ObjectSetRotation(camera, -camPitchAngle, 0, 0);
ObjectRotate(camPos, 0, -deltax, 0);
display_mouse_set(mx, my);

Что касается форматов моделей: какой текст ошибки? Какие программы использовал? Если у модели есть текстуры, то чтобы они загрузились, нужно прописать путь к папке с текстурами через библиотеку материалов, иначе будет ошибка:

ffmatlib = MaterialLibraryCreate();
MaterialLibrarySetTexturePaths(ffmatlib, "data/model_folder");
ff = FreeformCreate("data/model_folder/model.b3d", ffmatlib, ffmatlib, global.scene);

#9 Re: Анонсы » Xtreme3D 3.9.1 для Game Maker Studio » 2022-09-12 13:21:55

На днях обнаружил, что, к сожалению, Xtreme3D 3.9.1 не работает с Game Maker Studio 2 версии 2022.800.0.161 и выше из-за полного перехода конструктора на 64-битную архитектуру. Движок доступен только в качестве 32-битной библиотеки. Так что можно считать, что история связки Xtreme3D + GM подошла к концу (что, впрочем, не отменяет возможность использовать его в других языках - только привязок маловато пока).

#10 Re: В процессе разработки » Xtreme3D Editor » 2022-08-22 19:19:00

FireRun пишет:

Да, сейчас я действительно пишу свой движок с нуля, много чего уже реализовано!

Очень интересно, список фич выглядит многообещающе) Генератор деревьев самописный или на основе чужой библиотеки?

Я кстати тоже начал присматриваться к ImGui, очень понравились некоторые возможности и архитектурные моменты - добавил его поддержку к себе в движок как альтернативу Nuklear.

В общем желаю удачи - больше движков хороших и разных)

#11 Re: Вопросы и ответы » Платформы для Xtreme3D » 2022-04-24 09:31:02

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

#12 Re: Вопросы и ответы » Платформы для Xtreme3D » 2022-04-19 18:26:04

Только Windows. В теории его, думаю, можно на Linux портировать, но я вряд ли этим буду заниматься когда-либо.

#13 Re: Вопросы и ответы » пример Xtreme3D для GMS2 » 2022-04-09 15:39:02

Выпустил новую версию с функцией PtrToReal. Теперь создавать вид надо так:

viewer = ViewerCreate(0, 0, window_get_width(), window_get_height(), PtrToReal(window_handle()));

Ссылка на релиз

#14 Re: Вопросы и ответы » пример Xtreme3D для GMS2 » 2022-04-09 10:04:49

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

#15 Re: Вопросы и ответы » Уничтожение объектов » 2022-03-23 10:00:04

Fps падает в отсутствие оптимизации покадровой нагрузки. Чем больше видимых объектов, тем больше расчетов матриц в Update и нагрузка на пайплайн для обработки примитивов (которые, возможно, в итоге вообще не будут отрисованы). Так что, по идее, нужно скрывать объекты, которые находятся за пределами экрана. Куллинг по пирамиде видимости - EngineSetCulling(vcObjectBased) или EngineSetCulling(vcHierarchical) - может в этом помочь, но не во всех случаях - например, если объекты находятся за стеной или горой, то они все равно считаются видимыми для куллинга.
В интерьерных сценах можно сделать систему порталов (т.е., показываем комнату, только если игрок в ней, или на экране виден дверной проем - и так же, рекурсивно, связанные с ней комнаты). В общем случае это будет вычислительно дешевле, чем обычный куллинг, который является брутфорс-алгоритмом - при использовании порталов мы вообще не проходим по заведомо невидимым комнатам и не проверяем их. Xtreme в принципе имеет все нужные для системы порталов инструменты, но у меня пока нет готовой реализации.
В уличных сценах можно для детализированных объектов сделать lod'ы и использовать мультипрокси, но это конечно немного усложняет логику игры, в зависимости от используемых компонентов.

Из-за того, что мало встроенных оптимизаций, GLScene/Xtreme3D - скорее для маленьких игр с ограниченным миром, чем для open world и тому подобного. Вообще библиотека, как я понимаю, изначально создавалась больше под научную визуализацию, да и игры в те времена были не такие большие.

#16 Re: В процессе разработки » Xtreme3D Editor » 2022-03-22 07:17:48

Я в создании этого редактора никак не участвовал (у меня была попытка создать свой редактор, но это был просто эксперимент). Как тут обстоят дела, я конечно точно не знаю, это надо спрашивать у FireRun'а - насколько я помню, он свой движок пишет.

#17 Re: Вопросы и ответы » Теневые карты » 2022-03-21 10:23:50

Вот о чем я говорю (CSM):

csm1.png csm2.png

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

Если использовать только одну карту, то мы бы видели тени, грубо говоря, только в красной зоне. Если эта зона не в поле зрения камеры, то теней вообще не будет видно. Я подозреваю, у тебя именно такая ситуация.

image.png

#18 Анонсы » Статус Xtreme3D, сайта и сообщества » 2022-03-21 09:36:15

Gecko
Ответов: 0

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

Что из себя представляет Xtreme3D, и есть ли у него будущее?
Это движок на основе GLScene 1.0, написанный на Delphi 7. К сожалению, его невозможно портировать на современные версии Delphi без серьезной адаптации кодовой базы. В 2022 году писать на Delphi 7, сами понимаете, то еще "удовольствие", поэтому сама возможность добавлять новые фичи или как-то серьезно переделывать старые ограничена спецификой устаревшего языка, недоступностью современных библиотек и т.д. Другое существенное ограничение - OpenGL 1.5. Старый графический API не позволяет использовать многие техники, которые являются стандартом на сегодняшний день, или по крайней мере не дает реализовать их эффективно/кроссплатформенно/с удобством для пользователя. Переписывать Xtreme3D на другие языки и под современный OpenGL я не буду, так как это бесперспективная трата ресурсов - когда-то я начинал делать свой движок по образцу Xtreme3D, это постепенно привело меня к созданию Dagon, над которым я и работаю сейчас, и это уже совсем другая история.

Каков статус проекта и моего участия в нем в 2022 году (и в дальнейшем)?
Xtreme3D - это legacy-проект в режиме базовой техподдержки. Исходники Xtreme3D 3.x открыты - любой может брать и делать на их основе все, что угодно. Я больше не занимаюсь разработкой новых возможностей для Xtreme3D, и скорее всего 3.9 является последней версией. Максимум, я могу исправлять какие-то очевидные баги, которые легко детектить, либо добавлять простые функции-врапперы, не требующие написания новых классов и какой-либо сложной новой логики. Я в обозримом будущем буду обеспечивать существование сайта https://xtreme3d.ru и, вероятно, буду появляться на форуме, чтобы по мере сил отвечать на вопросы.

В общем случае, я не рекомендую использовать Xtreme3D начинающим - он преимущественно для тех, кто уже с ним раньше работал и по каким-то причинам хочет продолжать (например, из ностальгии или ради создания ремейка старого проекта). Xtreme3D нельзя сравнивать с актуальными инструментами, такими как Unity и др. Проблемы совместимости Xtreme3D с Game Maker 8 (и Windows 10), как и вопросы удобства создания игр по современным стандартам на этой связке, сегодня уже не могут быть темой для серьезных дискуссий - учитывая огромный выбор альтернатив, бесплатных/недорогих движков и языков с хорошей поддержкой и кроссплатформенностью.

Сам я не являюсь активным пользователем Xtreme3D и Game Maker - давно ушел на язык D. Какого-то коммерческого интереса развивать этот проект у меня, естественно, нет. Я могу лишь минимально консультировать по вопросам API и архитектуры движка, но я не буду тратить свое свободное время на то, чтобы бесплатно обучать пользованию Xtreme3D с нуля/фиксить баги в чужих исходниках/писать код и примеры по запросу. Если кого-то не устраивает такое положение дел, и он не готов большую часть времени самостоятельно разбираться в Xtreme3D и дорабатывать его, мириться с ограничениями, специфической архитектурой и проблемами совместимости, то я советую перейти на Unity, Unreal Engine или любой другой современный движок.

Надеюсь на понимание.

Примечание от 12.02.2023: я все-таки принял решение сделать еще один рывок, чтобы портировать Xtreme3D на современный Delphi и актуальную версию GLScene. Это оказалось необходимо для обеспечения совместимости с 64-битным GameMaker: Studio 2. Но не факт, что эта версия будет во всем аналогична Xtreme3D 3.9, и я не могу гарантировать, что смогу полноценно заниматься ее поддержкой в дальнейшем.

#19 Re: В процессе разработки » Xtreme3D Editor » 2022-03-21 08:58:50

Воду свою не забудьте добавить!!!

Я сомневаюсь, что тут будет дальнейший прогресс.

#20 Re: Вопросы и ответы » Теневые карты » 2022-03-21 08:14:03

Любые объекты должны отбрасывать тени) Скорее всего, неправильно что-то настроено. Или ты не там ищешь тень, где она должна быть (т.е., например, теневая камера неправильно повернута)
Также тень будет отсекаться по размеру проекции (ShadowMapSetProjectionSize). Теневая проекция имеет ограниченный размер в 3D. Все, что за ее пределами, не будет отбрасывать тень. Ее можно увеличить, но тогда пропорционально падает детализация теней - в этих случаях лучше использовать CSM, то есть, каскадные тени (но они не встроены в движок, нужно писать свой шейдер).

#22 Re: Вопросы и ответы » Уничтожение объектов » 2022-03-21 08:07:42

Просто в одном объекте не создашь количество нужных xtreme-объектов приближенной к бесконечности, в отличии от создания нового объекта-gm. Таких может быть бесчисленное множество. А делать все в объекте engine дает скончаемое количество (так как каждый xtreme-объект имеет свое имя).

Нет такого ограничения, для Xtreme совершенно не важно, как ты создаешь его объекты - он про ГМ ничего не знает. Это чисто вопрос архитектуры приложения.

К тому же я использую direction объекта для его поворота по Y и x y гамака, для передвижения. Остается только ObjectSetPosition(object,x,Y,y); Мне это нужно для движения и вычислений функций гамака, которые не стыкуются с объектами xtreme (например instance_nearest(x,y,object)) и их проще выставить в комнате (если они привязаны к x y). Есть какой-то другой способ о котором я не знаю?

Если так, то да, есть смысл делать в объектах ГМ. Но как я уже сказал, если что-то удалять динамически, есть риск того, что где-то остаются ссылки на несуществующие объекты.

Это может быть не баг если после события аларм происходит чтение из события степа объекта. Это может быть так? У меня в событии аларм уничтожается объект, а в степе еще есть функции с этим объектом.

Очень вероятно, что проблема где-то тут)

Кстати, забыл сказать: у видимых объектов Xtreme графические данные всегда создаются заново (у моделей, примитивов и пр.). Если нужно много точных копий объекта, то надо использовать Proxy (или ActorProxy), иначе память у тебя будет засоряться лишними копиями моделей.

#23 Re: Вопросы и ответы » Уничтожение объектов » 2022-03-19 18:04:45

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

#24 Re: Вопросы и ответы » Уничтожение объектов » 2022-03-19 17:38:39

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

#25 Re: Вопросы и ответы » Порядок прорисовки » 2022-03-19 17:18:23

Альфа-тест делается так: MaterialSetBlendingMode('myMaterial', bmAlphaTest50);
Или bmAlphaTest100, если надо вырезать альфу меньше 1 (bmAlphaTest50 - меньше 0.5)

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

Подвал доски

Под управлением FluxBB