Предисловие
Доброго времени суток, речь пойдёт о игровом движке X-Ray, а точнее о его форке X-Ray Oxygen В декабре 2016 года был опубликован проект X-Ray Oxygen. Тогда я разрабатывал его один и не мечтал о том, чем он стал на данный момент.
В марте мне пришла в голову идея: «А почему бы не перенести это всё на x64?». Как вы поняли, именно об этой идее, а точнее её реализации, пойдёт речь.
Сборка проекта
Первым шагом был перенос кода, чтоб собрать всё это дело под x64 платформу. После настройки проектов я столкнулся с первой проблемой… Нет, не Ptr функции, а ассемблерные вставки.
__forceinline void fsincos( const float angle , float cosine ) < __asm < fld DWORD PTR [angle] fsincos mov eax , DWORD PTR [cosine] fstp DWORD PTR [eax] mov eax , DWORD PTR [sine] fstp DWORD PTR [eax] >>
Прелесть такого кода заключалась в оптимизации, но MSBuilder в x64 его не поддерживал и не поддерживает до сих пор. Большую часть такого кода можно было заменить на std аналоги, были места, которые можно было с лёгкостью поменять на Intrinsics’ы, к примеру, как:
Как исправить — Прекращена работа программы «X-Ray 1.6 Engine» в S.T.A.L.K.E.R.: Зов Припяти
__asm pause;
Можно было смело заменить на:
_mm_pause();
Так же в движке иногда встречались аналоги функций на нативном коде (Хвала системе CPUID). Но бывали места, от которых приходилось просто избавляться. К примеру MMX инструкции канули в лету. К счастью, они нигде и не вызывались, а просто компилировались и и валялись без дела.
Работоспособность
После всех правок по сборке наступил следующий этап: Как всё это запустить?
Первым предателем стал LuaJIT. К несчастью, LuaJIT стал нормально (ну, почти. ) работать в x64 только с версии 2.0.5. И то были небольшие проблемы с аллокацией памяти из малых разрядов. Но, тогда я не знал об этом и первым делом выпилил LuaJIT и накатил ванильный Lua 5.1. Да, это исправило проблему, но скорость… Помним, скорбим. Позже мне на форуме сообщили, что можно попробовать использовать LuaJIT 2.0.4.
И да, это помогло, я запустил игру и смог выйти в главное меню!
Но… Счастье было недолгим… Привет смещениям структур, типам данных и xrCDB. Игра не загружала уровень, полетели материалы на объектах и движку это сильно не нравилось. Спустя пару дней я отчаялся окончательно и решил попросить помощи у более опытного программиста под ником Giperion. Я не рассчитывал на его участие в проекте, моей мечтой был просто совет.
Но, таким образом, я получил опытного разработчика в проект. С этого момента сформировалась команда.
Следующей проблемой стал OPCODE и типы данных. Пришлось переводить все udword’ы (unsigned int) на uqword’ы (unsigned long long). Только для того, чтобы понять это, пришлось провести под отладчиком около 4 часов.
Но, это было лишь частью проблемы. Настала очередь материалов. Что мы имеем:
union < u32 dummy; // 4b struct < u32 material : 14; // u32 suppress_shadows : 1; // u32 suppress_wm : 1; // u32 sector : 16; // >; >;
Такой код в x32 спасала волшебная #pragma pack(4) , но в x64 почему-то это не спасло. Пришла очередь выравнивания, путём деббага мы выяснили, что для некоторых случаев данные в структуре были валидны, а для других нет. Переделали структуру и сделали конвертер-валидатор. Структура получила следующий вид:
union < size_t dummy; struct < size_t material:14; // size_t suppress_shadows:1; // size_t suppress_wm:1; // size_t sector:16; // size_t dumb : 32; // Да, это волшебный дамб в x64. >;
А валидатор был таким:
. if (rebuildTrisRequired) < TRI_DEPRECATED* realT = reinterpret_cast(T); for (int triIter = 0; triIter < tris_count; ++triIter) < TRI_DEPRECATED TRI newTri = oldTri; >> else < std::memcpy(tris, T, tris_count * sizeof(TRI)); >.
Таким образом, пришлось поменять часть вызовов из-за флага rebuildTrisRequired, но игра смогла запуститься.
Но, со временем настала проблема с партиклами:
real_ptr = malloc( sizeof( Particle ) * ( max_particles + 1 ) ); particles = (Particle*)((DWORD)real_ptr + (64 — ((DWORD)real_ptr
Этот код не вызывал проблем с оригинальными партиклами. Они были слишком простыми и спокойно вмещались в выделяемую для них память. Но с более сложными и красочными партиклами, которые делали модмейкерами, пришли вылеты по памяти. x64 и вылеты по памяти, как так-то?! Код был переделан, вылеты ушли:
particles = alloc(max_particles);
Игровые проблемы
Первой проблемой стал, опять, LuaJIT

Полетела userdata для smart cover’ов. Эта проблема была исправлена почти самой последней. Просто переносом правок из релизнувшегося LuaJIT 2.0.5.
Следующая проблема: Физика и вычисление float’ов. control87 и _controlfp для вычисления infinity в x64 были заблокированы… Была огромная проблема с дропом предметов, один раз к трём они падали правильно. Иногда улетали в космос, иногда под террейн. Проблема крылась всего в одной переменной, которой давалось значение infinity. Ситуацию исправил FLT_MAX, одинаковый для всех платформ.
surface.mu = dInfinty // x32 surface.mu = FLT_MAX // x64
Последней проблемой стала скорость партиклов. Обратим внимание на следующий код:
DWORD angle = 0xFFFFFFFF; . if (angle != *((DWORD*) . if (angle != *((DWORD*) angle = *((DWORD*) // fsincos(angle, sina, cosa); fsincos(*(float*) >
Заключение
В заключение я хочу сказать всего лишь одно: порт в x64 принёс много новых знаний, которые пригодятся в дальнейшем. Я рассказал вам о многих проблемах при портировании. А дальше всё будет зависить от вас, если вы решите проделать это в каких-либо OpenSource проектах.
Источник: habr.com
Xray программа что это
Будь в курсе последних новостей из мира гаджетов и технологий
iGuides для смартфонов Apple

История игровых движков №7 — X-ray Engine

Егор Морозов — 20 марта 2017, 12:00

Движок X-ray достаточно мало известен за пределами стран СНГ, да и у нас его знают немногие мододелы, и это не удивительно — на нем вышло всего 3 игры. А вот эти игры знает практически любой геймер — это трилогия S.T.A.L.K.E.R., одна из немногих качественных игровых серий, выпущенных на постсоветском пространстве. Она оказалась настолько захватывающей, что новые моды появляются даже сейчас, спустя 8 лет после выхода последней игры серии (Зов Припяти, 2009 год). А некоторые моды стали культовыми, радикально меняющими игру — они добавляли более умный ИИ, машины, больше оружия, новые сюжетные задания и даже локации. Увы — продолжение серии, игра S.T.A.L.K.E.R. 2, официально заморожена, но многие ждут ее так же, как и Half-Life 3.
История появления движка
Движок полностью разработала украинская игровая студия GSC Game World, над графической частью движка в основном работали программисты Алесь Шишковцов и Александр Максимчук (они же работали в 4A Games над проектом Metro 2033). Первая демонстрация движка была проведена в 2001 году:
Как видно, изначально тематики S.T.A.L.K.E.R. не было и близко — демонстрация была больше похожа на джунгли Far Cry 1. Однако уже тогда движок был достаточно продвинутым — работал на DirectX 7 (в дальнейшем к выходу Теней Чернобыля в 2007 году добавили поддержку DirectX 8 и 9), поддерживал Detail mapping, Lightmap, продвинутый AI и текстуры высокого разрешения — в одном кадре могло находиться до 4 000 000 полигонов. Однако, чтобы всю эту красоту могли тянуть компьютеры того времени, пришлось сильно ограничить размер игровой локации — она могла быть не больше 2 кв. км и грузилась сразу и целиком, но между локациями были переходы с загрузочными экранами. X-Ray был написан на C/C++ с использованием исходников Microsoft DirectX SDK, с подключенным к нему компилятором языка LUA “lua.JIT.1.1.4”. При работе использовались библиотеки Microsoft Visual C++ 7.1, Creative EAX (технология для создания звуковых эффектов окружающей среды), ODE (открытый физический движок), OpenAL(интерфейс программирования приложений (API) для работы с аудиоданными, GameSpy Client (мультиплеерная составляющая) и Color Picker.
- Поддержка всех D3D акселераторов третьего поколения, от GeForce 2 и выше;
- Визуализация, оптимизированная под технологию TnL (Transform and Lighting — механизм, преобразующий 3D объект из одного опорного кадра в другой);
- Технология отложенного освещения и затенения, которая позволяет достичь высокой достоверности в рендеринге освещения при высокой геометрической сложности сцены;
- Продвинутая Level of Detail технология для всей геометрии;
- Высокодетализированные персонажи и оружие;
- Высокоскоростная смешанная система анимации, способная на неограниченное число интерполяции костей и модульных операций;
- Поддержка SSE/3Dnow! технологий для процессоров Intel и AMD соответственно, позволяющие оптимизировать нагрузку на них;
- Основанная на портальной системе, нелинейная система определения видимости;
- Технологии Dynamic occlusion/contribution culling (отключение рендеринга объектов, находящихся за пределами камеры или на большом расстоянии);
- Адаптирующаяся под «железо» технология кешированния;
- Колорированное динамическое освещение и динамические «мягкие» тени;
- Разрушаемые анимированные источники света;
- Продвинутый выбор источника света, совмещение и его разделение, отбрасывание теней персонажами;
- Система частиц с реальной физикой;
- Продвинутая шейдерная система;
- Динамическая смена погоды, дня и ночи.
- Рендеринг в высоком динамическом диапазоне (HDR) с плавающей запятой;
- Bump mapping, Normal mapping и Parallax mapping (различные виды рельефного текстурирования);
- Полностью динамическое освещение, мягкие тени;
- Depth of field (глубина резкости), Motion Blur (размытие в движении), Bloom (размытие света на краях объекта) и динамические лучи света.
A-Life
Еще одна особенность движка, которой могут гордиться разработчики — это система искусственного интеллекта A-Life (artificial life — искусственная жизнь). Сами разработчики описывают ее так:
Суть [A-Life] заключается в том, что персонажи в игре живут своей жизнью и существуют всё время, а не только когда их видит игрок. [. ] Мы ввели два термина, характеризующие 2 модели поведения персонажа, отличающихся степенью детализации: офлайн и онлайн. Офлайновое поведение персонажа является очень простым с точки зрения детализации: персонаж не отыгрывает анимации, звуки, не управляет активно инвентарём, не строит детализированные сглаженные пути (хотя строит пути по глобальному навигационному графу, но об этом позже) и т.д. Онлайновое поведение напротив имеет полную степень детализации. Т.е. можно считать, что офлайновое поведение является плодом онлайнового.
В нашей системе пока игрок играет на своём уровне, другие персонажи живут на других уровнях, т.е. находятся в офлайне, т.е. используют офлайновое поведение. Более того, ввиду большой населённости, не все персонажи в пределах одного уровня имеют онлайновое поведение, а лишь те, кто находится в заданном радиусе от игрока (это может зависеть от уровней, обычно в районе 150 метров) или же по желанию геймдизайнеров.
Для реализации этого симулятор следит за передвижением игрока и объектов в офлайне и переводит их в онлайн/офлайн. При вычислении перехода объектов используется стандартный трюк с инерцией: радиус перехода в офлайн больше радиуса перехода в онлайн.
Далее стоит сказать о навигации объектов в онлайне и офлайне. У нас в игре есть уровни, для каждого из которых создаётся свой навигационный граф, который используют персонажи для передвижения в онлайне. Мы называем его детальным графом.
Для каждого детального графа также создаётся его менее детализированный аналог, вершины которого можно связать с вершинами такого же графа другого уровня/ей. Т.е. после объединения всех таких графов воедино мы получаем граф, который объединяет все уровни. Он и используется персонажами для передвижения в офлайне.
Также им пользуются персонажи в онлайне, когда они выполняют свои стратегические цели. Например, если персонаж в онлайне решил идти на другой уровень, то он строит путь по глобальному графу, затем строит путь по детальному графу своего уровня со своей позиции до точки глобального графа. Если эта точка уже на другом уровне, то он телепортируется туда и автоматически переходит в офлайн. Для того, чтобы это не происходило на глазах у игрока, мы точки перехода для игровых персонажей ставили дальше точки перехода игрока, где-то «за углом»
Как видно, ИИ сделан очень качественно, и на протяжении всей игры нет ощущения, что Зона мертва — постоянно происходят какие-то события: перестрелки, встреча различных сталкеров, мутантов, появление новых сообщений на КПК и т.д.
X-Ray Engine 1.5
Через год послы выхода Теней Чернобыля, в 2008 году, вышла новая часть игры, Чистое Небо. В игру добавили новое оружие и локации, а так же поддержку нового API — DirectX 10. Это позволило существенно улучшить качество воды и частиц, а так же добавить поддержку намокающих поверхностей (то есть поверхность до и после дождя выглядит по-разному) и Steep Parallax Mapping (реалистичное отображение выпуклых объектов на плоской текстуре — например, выпирающих камней в стене). Но в общем и целом графика была на уровне предыдущей части игры:
X-Ray Engine 1.6
В заключительной части трилогии, Зов Припяти, вышедшей в 2009 году, движок получил поддержку DirectX 11. Однако увы — все его особенности движок 8илетней давности не потянул, поэтому добавили только тесселяцию (процесс добавления новых выпуклых многоугольников в полигональную сетку с целью повышения детализации сетки, иными словами — выпуклые объекты стали реалистичнее). Общий уровень графики остался тем же:
Физический движок
В «X-Ray» используется свободный физический движок Open Dynamics Engine (ODE). Его особенности:
- Высокая скорость обработки столкновений (быстрее, чем в коммерческих движках MathEngine, Havok, и т.д.), обнаружение столкновений оптимизировано для большого числа запросов в высокополигональной среде;
- Реалистичная симуляция баллистики, движения, физики машин и т.д.
Источник: www.iguides.ru
Инструменты Kali Linux
Список инструментов для тестирования на проникновение и их описание
XRay
Описание XRay
XRay — это инструмент для разведки, исследования периметра и сбора информации на основе открытых источников из публичных сетей (OSINT).
Цель XRay выполнить некоторые первоначальные задачи по сбору информации и исследованию сетевого периметра.
Как это работает?
XRay довольно простой инструмент, он делает следующее:
- Брутфорсит субдомены используя словарь и DNS запросы.
- Для каждого найденного субдомена/IP использует Shodan чтобы узнать об открытых портах и другой имеющей значение информации о сетевых хостах.
- Если указан API ключ ViewDNS, то для каждого субдомена будет получена исторические данные.
- Для каждого уникального IP адреса и для каждого открытого порта будут запущены захватчик банеров и сборщики информации.
- В итоге данные будут представлены пользователю в графическом веб-интерфейсе.
Захватчики банеров и сборщики информации:
- HTTP Server, X-Powered-By и Location заголовки.
- HTTP и HTTPS пункты disallowed в файле robots.txt.
- Цель сертификатов HTTPS (с рекурсивным захватом субдоменов от CN и Alt Names.
- Тег title в HTML.
- Записи DNS version.bind. и hostname.bind.
- MySQL, SMTP, FTP, SSH, POP и IRC банеры.
Справка по XRay
xray ОПЦИИ
-address СТРОКА IP адрес на котором будет веб-сервер графического интерфейса. (по умолчанию «127.0.0.1») -consumers ЧИСЛО Количество одновременных потоков для перечисления доменов. (по умолчанию 16) -domain СТРОКА Базовый домен, с которого начнётся перечисление. -port int TCP порт на котором будет веб-сервер графического интерфейса. (по умолчанию 8080) -preserve-domain Не удалять субдомены от этого доменного имени. -session СТРОКА Session file name. (по умолчанию «-xray-session.json») -shodan-key СТРОКА API ключ Shodan. -viewdns-key СТРОКА API ключ ViewDNS. -wordlist СТРОКА Файл словаря используемый для перечисления. (по умолчанию «wordlists/default.lst»)
Руководство по XRay
Страница man отсутствует.
Примеры запуска XRay
Скачиваем словарь default.lst со списком субдоменов:
wget https://raw.githubusercontent.com/evilsocket/xray/master/wordlists/default.lst
Запускаем программу для сбора информации о субдоменах сайта ebay.com (-domain ebay.com), будет выполнен брут-форс субдоменов по списку слов (-wordlist default.lst), для найденных субдоменов будут найдены открытые порты и иная информация (-shodan-key API_КЛЮЧ_SHODAN), а также будут получены данные о смене IP адресов и другая историческая информация (-viewdns-key API_КЛЮЧ_VIEWDNS):
sudo xray -domain ebay.com -shodan-key API_КЛЮЧ_SHODAN -viewdns-key API_КЛЮЧ_VIEWDNS -wordlist default.lst
Обратите внимание, что вместо API_КЛЮЧ_SHODAN и API_КЛЮЧ_VIEWDNS нужно вписать действительные ключи этих сервисов.
Установка XRay
Установка в Kali Linux
Вначале необходимо установить компилятор Go. Для этого перейдите к статье «Установка Go (компилятора и инструментов) в Linux» и выберите вариант «Ручная установка самой последней версии компилятора Go».
После установки компилятора Go достаточно выполнить команды:
go get github.com/evilsocket/xray rm -rf /home/git/go/pkg/dep/sources/https—go.googlesource.com-text/ cd $GOPATH/src/github.com/evilsocket/xray/ make mv build/xray /usr/bin/ xray -h
Установка в BlackArch
Программа предустановлена в BlackArch.
sudo pacman -S xray
Информация об установке в другие операционные системы будет добавлена позже.
Скриншоты XRay
Инструкции по XRay
Источник: kali.tools
Как исправить ошибку XRay Engine в Сталкере
В последней части серии Сталкер – Зове Припяти, были устранены многие ошибки и недоработки предыдущих частей. Разработчики прислушались к многим советам и сообщениям фанатов, исследовали отзывы сообщества и сделали практически безупречный проект.
Однако, как и во многих проектах, после релиза игры начинаются некоторые проблемы. У каждого игрока свой компьютер или ноутбук, различные комплектующие и их характеристики. После релиза начали выявляться и устраняться различные баги и недоработки, незамеченные до этого. Но некоторые игроки встречаются с проблемой вылета игры – так называемой ошибкой XRay Engine. В данной статье будут приведены способы решения этой проблемы.
Что значит ошибка XRay Engine?
Ошибка встречается не у всех, но достаточно часто у тех, кто скачивает пиратскую версию игры. Сама ошибка относится к ошибкам игрового движка, ведь игру разрабатывали на XRay Engine. В сообществе геймеров ошибку прозвали – Жук несчастья, так как на табличке, оповещающей о данной неисправности, размещается зелёный жук. Ошибка обычно выскакивает после запуска игры. После запуска происходит вылет Зова Припяти и появляется табличка с описанием ошибки. Далее рассмотрены способы решения данной проблемы:

Как убрать ошибку XRay Engine
Вариант 1. Удаление файла user.ltx
Первый способ довольно прост и хорошо работает. Он заключается в удалении конфигурационного файла из документов игры – user.ltx. Чтобы найти данный файл, необходимо пройти по пути: Локальный диск C – Пользователи – Общие – Общие документы – Папка Зова Припяти. Именно в этой папке будет находиться нужный файл, который следует удалить. После этого можно запускать игру:

Вариант 2. Удаление папки Gamedata
Второй вариант направлен на удаление папки gamedata. Данная папка находится в коренной папке с проектом, там, куда была установлена игра. После удаления папки игра должна запуститься:

Вариант 3. Манипуляции с папкой save
Данная папка также находится в коренной папке с установленной игрой. Необходимо удалить следующие элементы, находящиеся в данной папке: папку logs, папку shaders_cache и файл tmp.ltx. Необходимо оставить только папку savedgames и user.ltx. Данные манипуляции также могут помочь, и ошибка должна исчезнуть:

Вариант 4. Покупка игры
Если проблема не исчезает после проделанных манипуляций, следует задуматься о покупке игры. На данный момент вся серия Сталкера стоит совсем недорого в любом игровом магазине. Покупка не только поможет избежать различных ошибок запуска игры, но и поддержит разработчиков. Возможно именно эта покупка поможет в разработке новой части – Сталкер 2:

Вариант 5. Переустановка игры
Ещё один способ, справляющийся с большинством известных проблем – переустановка игры. Это рекомендуют делать в различных ситуациях, в том числе и при ошибке XRay Engine. Переустанавливать лучше игру, скачанную из другого источника, так как предыдущая могла быть неправильно пропатчена, что приводило к данной проблеме. Лучше всего найти репак последней версии и с хорошими отзывами:

Выводы
Теперь вы знаете как исправить ошибку XRay Engine в Сталере. Эта ошибка — не что-то критичное, не то, что нельзя исправить. Как минимум один из представленных способов поможет каждому, столкнувшемуся с этой проблемой.
Для устранения ошибки не нужно скачивать дополнительные программы, переустанавливать операционную систему или копаться в различных незнакомых папках. Все манипуляции довольно просты и доступны к выполнению большинства пользователей.
Источник: stalked.ru
Скачать бесплатно X-Ray Engine 1.6

X-Ray Engine – движок, который использовался в основных играх серии «СТАЛКЕР» и дополнений к ним. Был создан разработчиком игр GSC Game World. Включает в себя исходный код и инструменты для разработки (SDK).
Движок X-Ray Engine поддерживает DirectX с версии 9.0 по 11. Также в нем реализована технология отложенного освещения, благодаря которой реалистично отрисовывается эффект освещения. Также поддерживается смена времени суток, изменение погоды и мягкие тени. Физика в основана на другом движке Open Dynamics Engine. Он обеспечивает реалистичную механику столкновений и динамику движения твердых тел.
Помимо исходного кода, X-Ray Engine содержит инструментарий для разработки программного обеспечения (SDK). Он в первую очередь пригодится мододелам, которые хотели бы создать и добавить в игру собственные модификации.
Особенности движка
• Применялся при создании игр серии «СТАЛКЕР».
• Поддерживает DirectX версий с 9 по 11.
• Поддерживает отложенное освещение, погодные явления, реалистичную механику столкновений.
• Содержит инструменты для разработки собственных модификаций.
X-Ray Engine и инструментарий к нему свободно распространяется, поэтому движок можно скачать бесплатно.
Скачать бесплатно X-Ray Engine 1.6
| Версия: | 1.6 |
| Русский язык: | Нет |
| Разработчик: | GSC Game World |
| Операционка: | Windows All |
| Размер: | 446 Mb |
Источник: besplatnye-programmy.com