FAQ по Xtreme3D
Если возникли проблемы...
...вместо того, чтобы лишний раз беспокоить народ на форуме, не поленитесь заглянуть сюда. Может быть, решение вашей проблемы уже есть!
Содержание:
  • Актуально ли сегодня использование Xtreme3D?
  • Какой движок лучше - Xtreme3D, Ultimate3D или GMOgre?
  • Игру какого жанра можно сделать при помощи Xtreme3D?
  • Какие технологии рендеринга поддерживает Xtreme3D?
  • Почему движок не запускается?
  • Почему движок работает медленно?
  • Почему движок вылетает с ошибкой?
  • Поддерживает ли Xtreme3D шейдеры?
  • Как увеличить производительность игр на Xtreme3D?
  • Почему модели в игре неправильно повернуты?
  • Почему при загрузке моделей не загружаются текстуры?
  • Что такое Манекены (Dummycubes) и для чего они нужны?
  • Почему в Xtreme3D не работают события мыши?!!!
  • Как растянуть окно игры на весь экран? Опция Start in fullscreen mode не работает!
  • Как сделать проверку столкновений?
  • Как получить индексы материалов, автоматически загруженных вместе с моделью?
  • Почему ландшафт (Terrain) выглядит ступенчатым?
  • Как вывести кириллицу в объектах текста?
  • Поддерживает ли Xtreme3D воспроизведение видео?
  • Почему к телам ODE не прикладываются силы?
  • Поддерживает ли ODE "тряпичные куклы" (ragdoll)?
  • Q: Актуально ли сегодня использование Xtreme3D?
    A: Для серьезного использования в индустрии (создания коммерческих игровых проектов) - скорее нет, чем да. Xtreme3D, конечно, не может конкурировать с популярными современными движками типа Unity и Unreal Engine. Тем не менее, любительские игровые проекты, как правило, и не пытаются сравниться в плане графики с AAA-тайтлами, поэтому для создания простых инди-игр Xtreme3D 3.x вполне подходит. Движок по-своему интересный и привлекательный - теоретически, с его помощью можно создать игру не хуже, чем Doom 3 или Half-Life 2.
    Q: Какой движок лучше - Xtreme3D, Ultimate3D или GMOgre?
    A: Все зависит от требований относительно простоты изучения, гибкости и удобства. Ultimate3D очень прост в изучении, но технологически сильно уступает остальным. GMOgre - достаточно сложный движок с очень своеобразным API, но очень мощный, с его помощью можно сделать если не все, то очень многое. Xtreme3D в последних версиях (3.0 и выше) по функциональности приближается к GMOgre и сейчас умеет почти все, что и он - при этом у Xtreme3D более простая архитектура, доставшаяся в наследство от GLScene, и интуитивный API.
    Если вы только начинаете изучать 3D-графику, рекомендуем Ultimate3D. Если вы уже обладаете достаточным опытом во встроенной 3D-графике GM, если вас не пугают сложности и отсутствие документации - можно взглянуть в сторону GMOgre. Если вам просто нужен легковесный, но в то же время мощный и хорошо документированный 3D-движок, который легко изучить и удобно использовать - то берите Xtreme3D. Имейте также в виду, что Xtreme3D сейчас является единственным активно развивающимся 3D-движком для GM - если вам чего-то не хватает, вы можете сделать запрос на форуме, и мы постараемся реализовать нужные вам функции.
    Q: Игру какого жанра можно сделать при помощи Xtreme3D?
    A: Движок не имеет жанровых ограничений, но лучше всего адаптирован для action-игр от первого и третьего лица. Известны также проекты по созданию на X3D платформера, стратегии, top-down-шутера, логических игр и гонок.
    Q: Какие технологии рендеринга поддерживает Xtreme3D?
    A: В основе Xtreme3D лежит классический прямой рендер (фиксированный конвейер с вершинным освещением). Однако, благодаря поддержке GLSL-шейдеров в Xtreme3D 3.x, вы можете запрограммировать практически любой спецэффект или графический пайплайн, от простого попиксельного освещения до нетривиальных отложенных эффектов вроде SSAO. На Xtreme3D успешно реализованы несколько моделей освещения (Blinn-Phong, Cook-Torrance), image-based lighting (IBL), теневые карты (в том числе каскадные), а также множество эффектов постобработки.
    Вопрос о том, можно ли реализовать полноценный отложенный рендеринг (deferred rendering) и сопутствующие ему эффекты (например, SSLR и SSGI), пока остается открытым - для этого необходима поддержка MRT, которая, вполне возможно, скоро появится.
    Q: Почему движок не запускается?
    A: По состоянию на 2016 год (Windows 8.1) движок должен работать нормально. Отдельные проблемы могут быть связаны с видеодрайвером. Xtreme3D требует драйвер с поддержкой OpenGL 1.3 (плюс несколько расширений для работы отдельных функций) - если Xtreme3D не запускается или работает медленно, рекомендуем обновить видеодрайвер.
    Q: Почему движок работает медленно?
    См. предыдущий вопрос.
    Q: Почему движок вылетает с ошибкой?
    A: Чаще всего сообщение о неизвестной ошибке ("Unexpected error occurred when running the game") возникает из-за передачи в функции Xtreme3D неправильных параметров. Например, движок не проверяет id'ы объектов (указатели) на валидность, поскольку такую проверку невозможно сделать эффективной. Движок предполагает, что вы не будете передавать ему недействительные id'ы.
    Также ошибка возникает, если попытаться загрузить несуществующую текстуру или модель. Если ваша модель содержит данные о текстурах, убедитесь, что движок может найти их - задайте папку с текстурами с помощью MaterialLibrarySetTexturePaths.
    Наконец, ошибка может возникнуть, если попытаться удалить объект, имеющий потомков. Всегда преварительно отсоединяйте потомков или удаляйте их при помощи ObjectDestroyChildren.
    Q: Поддерживает ли Xtreme3D шейдеры?
    A: Да, в Xtreme3D 3.x реализована полноценная поддержка шейдеров на языке GLSL 1.1 и 1.2. Также в движке есть много встроенных шейдеров, реализующих те или иные популярные эффекты.
    Q: Поддерживает ли Xtreme3D динамические тени?
    A: Да, в Xtreme3D 3.x есть поддержка трех видов теней (shadow plane, shadow volume, shadow map). Мы рекомендуем использовать теневые карты (объект ShadowMap), как наиболее современные и эффективные. Можно на их основе сделать cascade shadow maps для охвата тенями обширных пространств - ищите соответствующую демку в разделе Примеры.
    Q: Как увеличить производительность игр на Xtreme3D?
    A: Это зависит от механики игры, но есть несколько распространенных способов:
  • Используйте менее детализированные модели и текстуры меньшего разрешения
  • Разделите все игровое пространство на части и отключайте отдельные части по мере надобности
  • Отключайте или удаляйте ненужные/невидимые в данный момент объекты
  • Уменьшите разрешение ресурсоемких эффектов (Вода, Размытие и т.д.)
  • Установите рендеринг в событии Alarm вместо Step. FPS возрастет как минимум на 30%!
  • Вместо загрузки одной и той же модели несколько раз, используйте дублирование. Это существенно сэкономит память. Также в Xtreme3D 3.x можно использовать прокси (ProxyObject), которые позволяют создать сколь угодно много копий модели, не дублируя ее в памяти
  • Не создавайте новые объекты в цикле (событии Step) для таких вещей, как, например, снаряды, пули, лазеры, спрайты для взрывов и эффектов частиц. Создание и удаление объекта - медленные операции. Используйте массивы заранее созданных объектов, а затем включайте/отключайте их по пере необходимости
  • Большие количества однотипных объектов (например, призов) заносите в Octree или Quadtree, а затем используйте PartitionQueryFrustrum для отсеивания невидимых объектов и PartitionQueryBSphere или PartitionQueryAABB для оптимизации проверки столкновений с этими объектами
  • В Xtreme3D 3.x можно реализовать LOD (level of detail) при помощи мультипрокси (MultiProxyObject). Вблизи от камеры мультипрокси будет рендерить высопоколигональную модель, а вдалеке - низкополигональную
  • В Xtreme3D 3.x можно использовать объект ClipPlane для отсечения графики произвольными плоскостями. Например, вы можете разделить уровень на подземелье и верхний мир - когда игрок находится в подземелье, верхний мир отсекается плоскостью, и наоборот.
  • Q: Почему модели в игре неправильно повернуты?
    A: Причина кроется в различиях между координатными системами. Xtreme3D использует координатную систему, где ось Z указывает вперед относительно экрана (Z-forward), а ось Y - вверх (Y-up). Вы легко можете исправить положение,
    а) переориентировав модель в 3D-редакторе, так, чтобы при загрузке в Xtreme3D она была повернута правильно;
    б) сделав модель дочерней для Манекена (Dummycube) и повернув модель при помощи ObjectRotate (в этом случае для всех остальных действий вместо модели используется Манекен);
    в) повернув модель при помощи функции MeshRotate (только для моделей типа Freeform). В Xtreme3D 3.x эта функция называется FreeformMeshRotate.
    Q: Почему при загрузке моделей не загружаются текстуры?
    A: Библиотеки материалов Xtreme3D по умолчанию загружают все текстуры из рабочей директории игры. Если модель находится в какой-либо папке (например, data/models), то вы должны указать ее как путь к текстурам при помощи MaterialLibrarySetTexturePaths. Если одновременно загружаются модели из разных папок, следует создать несколько библиотек материалов и при загрузке переключаться между ними при помощи MaterialLibraryActivate. Для каждой из них необходимо указать путь к текстурам соответствующей модели. В Xtreme3D 3.x библиотеки указываются индивидуально при создании модели, поэтому переключаться при помощи MaterialLibraryActivate необязательно.
    Q: Что такое Манекены (Dummycubes) и для чего они нужны?
    A: Манекены - очень важный тип объектов. Они невидимы и используются для создания иерархических структур. Сделав Манекен родительским для одного или нескольких объектов, Вы можете управлять ими всеми сразу, управляя Манекеном. Например, если отключить Манекен, то все его дочерние объекты также будут отключены. Это очень удобно для представления группы объектов одного типа. Второе главное назначение Манекенов - создание так называемых шарнирных структур (pivot), когда вторичные состояния объекта находятся в зависимости от первичных. Если, скажем, неободимо получить или задать поворот объекта независимо от вектора направления, то проще будет сделать объект дочерним для Манекена и для работы с направлением использовать Манекен, а для поворота - объект. Подобная структура используется также в скелетной анимации.
    Q: Почему в Xtreme3D не работают события мыши??!!
    A: События мыши проверяют только окно GM, в то время как Xtreme3D создает новую активную форму поверх старой, и поэтому обычные события мыши в ней не работают. Нажатия кнопок мыши можно проверять только функцией keyboard_check_direct(mb_left) или keyboard_check_direct(mb_right) - в этом случае нажатия проверяются непосредственно на аппаратном уровне, вне зависимости от конкретного активного окна. В Game Maker 8 можно также использовать функцию mouse_check_button_pressed.
    Q: Как растянуть окно игры на весь экран? Опция Start in full-screen mode не работает!
    A: В Global Game Settings на вкладке Resolution поставьте галочку Set the resolution of the screen. В списке Resolution выберите нужное вам разрешение (обычно то, которое было указано в функции ViewerCreate - убедитесь, что они совпадают). На вкладке Graphics все же выберите Start in full-screen mode, т.к. если этого не сделать, будут видны границы окна.
    Q: Как сделать проверку столкновений?
    A: В Xtreme3D есть несколько способов для этого.
    1. Функции ObjectCheck... (ObjectCheckCubeVsCube, ObjectCheckSphereVsFace и др.). Они определяют факт столкновения между двумя объектами (а точнее, их ограничивающими кубами или сферами). Такая проверка может быть полезна для проверки типа снаряд/цель, игрок/приз и т.д.
    2. Для стрельбы в шутерах (а также для реализации взаимодействия игрока с интерактивными предметами и триггерами) можно использовать трассировку лучей (raycasting). Заданный объект испускает луч, и другие объекты проверяются на пересечение с этим лучом. При этом можно получить координаты точки и нормаль полигона пересечения (см. пример).
    3. Для кинематики (чтобы персонаж передвигался по карте и не проходил сквозь стены) существуют специальные движки проверки столкновений - DCE и FpsManager. Пример DCE для шутера от первого лица см. здесь. Для Xtreme3D 3.x, кстати, разрабатывается вспомогательная библиотека GMDMech, реализующая более качественную кинематику, чем в DCE - подробности в разделе Примеры.
    Q: Как получить индексы материалов, автоматически загруженных вместе с моделью?
    A: Индексы (имена) материалов, как правило, совпадают с теми, которые были указаны в трехмерном редакторе перед сохранением модели в файл. Зная эти имена, можно легко получить доступ к загруженным в текущую библиотеку материалам.
    Q: Почему ландшафт (Terrain) выглядит ступенчатым?
    A: Если при создании ландшафта он выглядит ступенчатым, значит исходная карта высот закодирована в 24 бита на пиксель, а не 8, как это должно быть. Изображение нужно преобразовать в черно-белое (256 цв.). Например, в GIMP это делается так: Изображение -> Режим -> Градации серого.
    Q: Как вывести кириллицу в объектах текста?
    A: В Xtreme3D 3.x есть шрифт TTFont, поддерживающий вывод любых символов Юникода через кодировку UTF-8. В старых версиях Xtreme3D можно использовать растровый шрифт (Bmpfont), где английские буквы заменены русскими, а затем выводить соответствующий текст латиницей.
    Q: Поддерживает ли Xtreme3D воспроизведение видео?
    A: Нет. Для воспроизведения видеороликов придется использовать специализированные DLL.
    Q: Почему к телам ODE не прикладываются силы?
    A: Дело в том, что в Xtreme3D 2.0.2.0 появилась возможность автовыключения тел, если они бездействуют определенное время, а к выключенным телам невозможно применить силы. Автовыключение по умолчанию активировано, его нужно просто выключить: OdeWorldSetAutoDisableFlag(false);
    Q: Поддерживает ли ODE "тряпичные куклы" (ragdoll)?
    A: Да, ODE в Xtreme3D 3.x полноценно поддерживает Ragdoll для Актеров (Actor). В более старых версиях такой возможности нет, но можно реализовать Ragdoll для примитивов (см. пример в ODE SDK).



    Hosted by uCoz