0

Игры на движке x ray

X-Ray

Логотип движка на презентации в 2004 году.
Тип Игровой движок (Список)
Разработчик GSC Game World
Ключевые программисты Олесь Шишковцов, Александр Максимчук, Дмитрий Ясенев
Дата анонса 13 ноября 2001
Аппаратные платформы IBM-PC-совместимые компьютеры
Поддерживаемая ОС Windows, Linux, Xbox 360 (ограниченная поддержка)
Написан на языках C/C++
Лицензия проприетарная, не лицензируется — только внутреннее использование
Последняя версия 1.6.02 (build 4017) / 2 февраля 2010
Первая игра на движке S.T.A.L.K.E.R.: Тень Чернобыля / 20 марта 2007
Последняя игра на движке S.T.A.L.K.E.R.: Зов Припяти / 2 октября 2009
Официальный сайт

Движок был представлен общественности ещё в 2001 году. Изначально он был ориентирован на DirectX 8, но впоследствии многократно дорабатывался, чтобы соответствовать своему времени. Таким образом в нём появилась поддержка DirectX 9, а с выходом S.T.A.L.K.E.R.: Чистое небо добавился и DirectX 10. После выхода патча 1.5.07 для S.T.A.L.K.E.R.: Чистое небо в игре появилась поддержка DirectX 10.1. В S.T.A.L.K.E.R.: Зов Припяти в движке появилась поддержка DirectX 11.

Над графической частью движка в основном работали программисты Олесь Шишковцов и Александр Максимчук [1] (они же работали в 4A Games над проектом Metro 2033 по одноимённой книге Дмитрия Глуховского [2] ).

Содержание

Характеристики и особенности движка [ править | править код ]

Графический движок [ править | править код ]

Графический движок, основной компонент игрового движка X-Ray Engine, использует технологию отложенного освещения и затенения (англ. Deferred shading ), которая позволяет достичь высокой достоверности в рендеринге освещения при высокой геометрической сложности сцены. Поддерживается рендеринг в высоком динамическом диапазоне с плавающей запятой.

Изначально движок был ориентирован на DirectX 8, но впоследствии он многократно дорабатывался, чтобы соответствовать своему времени. Таким образом в нём появилась поддержка DirectX 9, и в игре S.T.A.L.K.E.R.: Тень Чернобыля пользователь мог в графических опциях игры выбирать версию графического API. В версии X-Ray Engine 1.5, которая появилась в игре S.T.A.L.K.E.R.: Чистое небо 2008 года выхода, разработчики добавили поддержку DirectX 10. Патч 1.5.07 к этой игре добавил в движок поддержку DirectX 10.1.

9 сентября 2009 года старший маркетинговый менеджер AMD-ATi Ян МакНоутон (англ. Ian “Cabrtosr” McNaughton ) в своём блоге опубликовал статью «DirectX 11 — What to expect!», в которой описал преимущества и основные особенности Direct3D 11. В этой статье он заявил, что «S.T.A.L.K.E.R.: Зов Припяти», наряду с «BattleForge» и «Colin McRae: Dirt 2», будет использовать DirectX 11 [3] [4] .

Таким образом, последняя версия движка (1.6) поддерживает следующие версии Direct3D:

  • DirectX 9 (шейдерная модель 2.0)
  • DirectX 9.0с (шейдерная модель 3.0)
  • Direct3D 10 (шейдерная модель 4.0)
  • Direct3D 10.1 (шейдерная модель 4.1)
  • Direct3D 11 (шейдерная модель 5.0)

Графический движок поддерживает высокую детализацию (до 4 000 000 полигонов в кадре) и способен качественно отрисовывать как закрытые, так и открытые пространства, площадь открытых пространств может достигать 2 кв. км. Имеется система динамической смены дня и ночи, поддержка различных погодных эффектов, таких как дождь, ветер, туман.

Система освещения является полностью динамической и попиксельной. Возможны мягкие тени и используется технология Screen Space Ambient Occlusion. Из технологий рельефного текстурирования используются Normal mapping и Parallax mapping.

Из-за особенностей используемой технологии отложенного освещения и затенения движок не может одновременно использовать её совместно с полноэкранным сглаживанием в режиме DX9 [5] .

Физический движок [ править | править код ]

Игровой ИИ [ править | править код ]

Игровой искусственный интеллект в X-Ray Engine называется «A-Life» (англ. artificial life — рус. искусственная жизнь ) [6] .

Суть [A-Life] заключается в том, что персонажи в игре живут своей жизнью и существуют всё время, а не только когда их видит игрок. Это идёт вразрез с привычными оптимизациями, используемыми при разработке игр [. ] Мы ввели два термина, характеризующие 2 модели поведения персонажа, отличающихся степенью детализации: офлайн и онлайн. Офлайновое поведение персонажа является очень простым с точки зрения детализации: персонаж не отыгрывает анимации, звуки, не управляет активно инвентарём, не строит детализированные сглаженные пути (хотя строит пути по глобальному навигационному графу, но об этом позже) и т.д. Онлайновое поведение напротив имеет полную степень детализации. Т.о. можно считать, что офлайновое поведение является плодом онлайнового.

В нашей системе пока игрок играет на своём уровне, другие персонажи живут на других уровнях, т.е. находятся в офлайне, т.е. используют офлайновое поведение. Более того, ввиду большой населённости, не все персонажи в пределах одного уровня имеют онлайновое поведение, а лишь те, кто находится в заданном радиусе от игрока (это может зависеть от уровней, обычно в районе 150 метров) или же по желанию гейм дизайнеров.

Для реализации этого симулятор следит за передвижением игрока и объектов в офлайне и переводит их в онлайн/офлайн. При вычислении перехода объектов используется стандартный трюк с инерцией: радиус перехода в офлайн больше радиуса перехода в онлайн.

Далее стоит сказать о навигации объектов в онлайне и офлайне. У нас в игре есть уровни, для каждого из которых создаётся свой навигационный граф, который используют персонажи для передвижения в онлайне. Мы называем его детальным графом. Для каждого детального графа также создаётся его менее детализированный аналог, вершины которого можно связать с вершинами такого же графа другого уровня/ей. Т.о. после объединения всех таких графов воедино мы получаем граф, который объединяет все уровни. Он и используется персонажами для передвижения в офлайне. Также им пользуются персонажи в онлайне, когда они выполняют свои стратегические цели. Например, если персонаж в онлайне решил идти на другой уровень, то он строит путь по глобальному графу, затем строит путь по детальному графу своего уровня со своей позиции до точки глобального графа. Если эта точка уже на другом уровне, то он телепортируется туда и автоматически переходит в офлайн. Для того, чтобы это не происходило на глазах у игрока, мы точки перехода для игровых персонажей ставили дальше точки перехода игрока, где-то «за углом»

Читайте также:  Гарантия на смартфон по закону

Звуковой движок [ править | править код ]

Звуковой движок использует технологию Creative EAX для качественной генерации звука в пространстве. Поддерживается вывод шестиканального (5.1) звука. Звуковые данные сохраняются в медиаконтейнерах MP3, MP2, WMA, ADPCM, Ogg.

Работа с сетью [ править | править код ]

Движок использует сетевую модель «клиент-сервер» и технологию распределённых вычислений. Движком поддерживается до 32 игроков в одном матче.

Список игр с использованием X-Ray Engine [ править | править код ]

Название игры Дата выхода игры Платформы Версия движка
Oblivion Lost Отменена Windows, Xbox Альфа-версия X-Ray Engine 1.0
S.T.A.L.K.E.R.: Тень Чернобыля 20 марта 2007 Windows X-Ray Engine 1.0
S.T.A.L.K.E.R.: Чистое небо 22 августа 2008 Windows X-Ray Engine 1.5
S.T.A.L.K.E.R.: Зов Припяти 2 октября 2009 Windows X-Ray Engine 1.6

Утечка исходного кода в сеть [ править | править код ]

28 апреля 2014 г. исходный код движка X-Ray, версии приблизительно 1.0007 (rc1), был выложен в интернете на одном из фан-сайтов. Архив размером 7 MБ представлял собой полные исходники собственно движка на C++, за исключением игрового SDK, утилит, плагинов и сторонних компонентов.

9 августа полный исходный код версий, примерно соответствующей патчам 1.0007 (rc1) (Тень Чернобыля) 1.5.10 (Чистое небо) был выложен одним из друзей GSC на форуме gameru.net.

16 сентября был выложен код движка Зова Припяти (версия 1.6.02).

11 апреля 2015 года все на том же форуме gameru.net был выложен исходный код так и не дописанного движка X-Ray Engine 2.0, а 14 апреля — код движка наиболее масштабной игровой модификации Lost Alpha.

Хотя официально последней версией движка является X-Ray Engine 1.6.02, в то же время фанатами игры разрабатывается более продвинутые версии движка, в которых по сравнению с оригинальным движком устранены множество критических ошибок, добавлены новые функции, а также поддержка многоядерных процессоров и, самое главное, многопоточности.

С неофициального разрешения Сергея Григоровича допускается использовать исходный код движка X-Ray Engine 1.x.x в некоммерческих проектах [ источник не указан 355 дней ] .


Движок 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.

Развитие движка

Как и любой «долгострой», за 6 лет с момента выхода движка до появления на нем первой игры он приобретал все больше новых «плюшек», таких как:

  • Поддержка всех D3D акселераторов третьего поколения, от GeForce 2 и выше;
  • Визуализация, оптимизированная под технологию TnL (Transform and Lighting — механизм, преобразующий 3D объект из одного опорного кадра в другой);
  • Технология отложенного освещения и затенения, которая позволяет достичь высокой достоверности в рендеринге освещения при высокой геометрической сложности сцены;
  • Продвинутая Level of Detail технология для всей геометрии;
  • Высокодетализированные персонажи и оружие;
  • Высокоскоростная смешанная система анимации, способная на неограниченное число интерполяции костей и модульных операций;
  • Поддержка SSE/3Dnow! технологий для процессоров Intel и AMD соответственно, позволяющие оптимизировать нагрузку на них;
  • Основанная на портальной системе, нелинейная система определения видимости;
  • Технологии Dynamic occlusion/contribution culling (отключение рендеринга объектов, находящихся за пределами камеры или на большом расстоянии);
  • Адаптирующаяся под «железо» технология кешированния;
  • Колорированное динамическое освещение и динамические «мягкие» тени;
  • Разрушаемые анимированные источники света;
  • Продвинутый выбор источника света, совмещение и его разделение, отбрасывание теней персонажами;
  • Система частиц с реальной физикой;
  • Продвинутая шейдерная система;
  • Динамическая смена погоды, дня и ночи.
Читайте также:  Дистрибутивы операционной системы linux

X-Ray Engine 1.0

В единственной игре на этом движке, Тени Чернобыля, изначально на выбор в настройках было два API — DirectX 8 с особенностями, описанными выше, и DirectX 9, добавляющий еще несколько графических эффектов:

  • Рендеринг в высоком динамическом диапазоне (HDR) с плавающей запятой;
  • Bump mapping, Normal mapping и Parallax mapping (различные виды рельефного текстурирования);
  • Полностью динамическое освещение, мягкие тени;
  • Depth of field (глубина резкости), Motion Blur (размытие в движении), Bloom (размытие света на краях объекта) и динамические лучи света.

Игра, хоть и была долгостроем, получилась хорошей по графике, в основном за счет фотореалистичных объектов зоны (разработчики ездили в ЧЗО несколько раз для фотографирования):



A-Life

Еще одна особенность движка, которой могут гордиться разработчики — это система искусственного интеллекта A-Life (artificial life — искусственная жизнь). Сами разработчики описывают ее так:

Суть [A-Life] заключается в том, что персонажи в игре живут своей жизнью и существуют всё время, а не только когда их видит игрок. [. ] Мы ввели два термина, характеризующие 2 модели поведения персонажа, отличающихся степенью детализации: офлайн и онлайн. Офлайновое поведение персонажа является очень простым с точки зрения детализации: персонаж не отыгрывает анимации, звуки, не управляет активно инвентарём, не строит детализированные сглаженные пути (хотя строит пути по глобальному навигационному графу, но об этом позже) и т.д. Онлайновое поведение напротив имеет полную степень детализации. Т.е. можно считать, что офлайновое поведение является плодом онлайнового.

В нашей системе пока игрок играет на своём уровне, другие персонажи живут на других уровнях, т.е. находятся в офлайне, т.е. используют офлайновое поведение. Более того, ввиду большой населённости, не все персонажи в пределах одного уровня имеют онлайновое поведение, а лишь те, кто находится в заданном радиусе от игрока (это может зависеть от уровней, обычно в районе 150 метров) или же по желанию геймдизайнеров.

Для реализации этого симулятор следит за передвижением игрока и объектов в офлайне и переводит их в онлайн/офлайн. При вычислении перехода объектов используется стандартный трюк с инерцией: радиус перехода в офлайн больше радиуса перехода в онлайн.

Далее стоит сказать о навигации объектов в онлайне и офлайне. У нас в игре есть уровни, для каждого из которых создаётся свой навигационный граф, который используют персонажи для передвижения в онлайне. Мы называем его детальным графом. Для каждого детального графа также создаётся его менее детализированный аналог, вершины которого можно связать с вершинами такого же графа другого уровня/ей. Т.е. после объединения всех таких графов воедино мы получаем граф, который объединяет все уровни. Он и используется персонажами для передвижения в офлайне. Также им пользуются персонажи в онлайне, когда они выполняют свои стратегические цели. Например, если персонаж в онлайне решил идти на другой уровень, то он строит путь по глобальному графу, затем строит путь по детальному графу своего уровня со своей позиции до точки глобального графа. Если эта точка уже на другом уровне, то он телепортируется туда и автоматически переходит в офлайн. Для того, чтобы это не происходило на глазах у игрока, мы точки перехода для игровых персонажей ставили дальше точки перехода игрока, где-то «за углом»

Как видно, ИИ сделан очень качественно, и на протяжении всей игры нет ощущения, что Зона мертва — постоянно происходят какие-то события: перестрелки, встреча различных сталкеров, мутантов, появление новых сообщений на КПК и т.д.

Через год послы выхода Теней Чернобыля, в 2008 году, вышла новая часть игры, Чистое Небо. В игру добавили новое оружие и локации, а так же поддержку нового API — DirectX 10. Это позволило существенно улучшить качество воды и частиц, а так же добавить поддержку намокающих поверхностей (то есть поверхность до и после дождя выглядит по-разному) и Steep Parallax Mapping (реалистичное отображение выпуклых объектов на плоской текстуре — например, выпирающих камней в стене). Но в общем и целом графика была на уровне предыдущей части игры:

В заключительной части трилогии, Зов Припяти, вышедшей в 2009 году, движок получил поддержку DirectX 11. Однако увы — все его особенности движок 8илетней давности не потянул, поэтому добавили только тесселяцию (процесс добавления новых выпуклых многоугольников в полигональную сетку с целью повышения детализации сетки, иными словами — выпуклые объекты стали реалистичнее). Общий уровень графики остался тем же:

В «X-Ray» используется свободный физический движок Open Dynamics Engine (ODE). Его особенности:

Поэтому часть содержания является первоисточником.

Ну что, подождём ещё чуть-чуть, для гарантии?

Редактор продолжает работу над этой статьёй, но временно отошёл попить чаю. Пожалуйста, не спешите с собственными правками.

X-Ray
Логотип
Название X-Ray Engine
Ключевые
разработчики
Олесь Шишковцов
Александр Максимчук
Дмитрий Ясенев
Андрей Коломиец
Среда разработки Microsoft Visual Studio
6.0 [прим. 1]
.NET [прим. 2]
.NET 2003 [прим. 3]
Используемые API Boost, DirectPlay, DirectX, EAX, FreeImage, FreeMagic, Lua, Lua.JIT, NvAPI, ODE, OGG, OpenAL, SciLexer, Theora, Vorbis, XML

X-Ray — трёхмерный игровой движок, разработанный программистами Олесем Шишковцовым и Александром Максимчуком в компании White Lynx. Впоследствии был представлен компании GSC Game World, где началась разработка проекта Oblivion Lost на этом движке.

Содержание

История разработки [ править | править код ]

Написание движка началось в в 1998-м году ведущим программистом компании White Lynx — Олесем Шишковцовым. Он занимался разработкой графического движка, искусственного интеллекта и сетевым режимом. Позже к разработке присоединился Александр Максимчук, который занимался всем остальным. Движок получил рабочее название wlynxengine, на нём началась разработка трёхмерного симулятора игры «Морской бой». Предположительно, игра в первоначальном виде была выпущена для игровых автоматов и ПК, но не получила никакой известности. После этого началась разработка проекта Alien Logic, движок получил название X-Ray. Олесь занимался написанием полноценной системы движка для игры. Разработка проекта происходила нестабильно: игра то замораживалась, то разработка возобновлялась.

Читайте также:  Как активировать камеру ростелеком

GSC Game World [ править | править код ]

2000 год [ править | править код ]

В 1999-м году у руководителя компании White Lynx Юрия Сторчака начались финансовые проблемы, в связи с чем ведущие программисты Олесь и Александр начали искать новую работу, не увольняясь из White Lynx. За несколько месяцев они написали техническую демо-версию сетевого шутера на своём движке X-Ray. Весной 2000-го попытались устроится на работу в компанию GSC Game World, продемонстрировали наработки на собеседовании руководителю компании Сергею Григоровичу, ему понравился результат и он принял на работу программистов. Так началось развитие движка в компании GSC.

В июне 2000 началась переработка игрового редактора уровней игры Alien Logic, над которым в стенах компании White Lynx работал Александр "AlexRR" Рудковский. Редактор перерабатывался под новую концепцию движка. В августе 2000, Олесь Шишковцов переписал OGF Exporter – плагин для Discreet 3ds max 4, который был предназначен для конвертации смоделированной геометрии в формат .OGF, который на тот момент был основным трехмерным форматом для игрового редактора и движка в целом.

11 сентября последняя правка и сборка редактора уровней XRay Map Editor (Gold edition), написанный в среде Microsoft Visual Developer Studio 6.0. В конце сентября, Александр Максимчук начал переносить исходный код редактора в среду Borland C++ 5.0, который был закончен к концу ноября 2000.

2 сентября, в движок был внедрен основанный на C скриптовый язык программирования — Scripting engine 0.94a, за авторством польского программиста — Пшемыслава Подсиадлы, написанный в 1998 году.
10 сентября – внедрение интерфейса трехмерного преобразования от трехмерного движка Genesis 3D, который распространялся в открытом виде по свободной лицензии и RAPID API.
20 сентября был создан репозиторий движка, содержащий в себе сам исходный код движка, также редактор уровней и OGF экспортер. После этого была сформирована иерархия классов движка с переосмыслением старых классов:

Иерархия классов
Класс Приуроченный подкласс
Basic Camera
Object
Camera Cameras_Array
Object Hero
Key
Bridge
Teleport
Bird
CXR_APP
CXR_Input Устройство ввода
CXR_Inifile ini-файл системы
CXR_Textrloader Загрузка и управление текстурами
CXR_SoundManager Загрузка и управление звуками
CXR_Creator [прим. 4]
FStaticRender Загружает, содержит и рендерит всю статику которая раз загружается и в процессе не изменяется
CXR_Render Рендерит все остальное
CXR_EffectManager Эффекты
CXR_Meshloader Загрузка объектов
CXR_Cameras_Array Камеры уровня
CXR_Console Консоль вывода на экран
CXR_Inifile ini-файл уровня
CXR_Space Назначение определения столкновения между объектами. Загружает и содержит Collision Forms для всей статики. добавляет, удаляет и перемещает формы для динамических объектов.
CXR_Stationary_Array
CXR_Mobile_Array
CXR_Command_List Список событий

В конце сентября Шишковцов и Максимчук распределили между собой работу над собой, где игровой редактор полностью отошел к Максимчуку, графическая часть к Шишковцову. Александр начал переводить игровой редактор на среду разработки Borland C++ 5.0, А Олесь начал доводку и оптимизацию графической части. Олесем была сделана доводка скриптовой базы, в понятии обработки конструктора/деструктора/оператора функции, возвращающие структуры, различие функций [прим. 5] , реализации модификатора const и typedef, строковые и векторные классы и оптимизацию кода самого движка.

В начале октября была реализована эмуляция карт освещения и четырехпроходное текстурирование, с поддержкой до 15-ти текстурных проходов, где оптимальная разворотка шейдеров для использования мультитекстуринга, на тестируемых видеокартах GeForce2 достигала до 15-ти текстур, развернутых в четыре прохода. На TNT(1/2) – в 8 проходов, Voodoo 1 – в 15 проходов. Программируемые шейдеры были переписаны в виде скриптов и оптимизированы для аппаратной T&L [прим. 6] . Была реализована автоконвертация форматов вершин в зависимости от шейдера с соотношением количества текстур, что понизило требования к памяти, ускорило трансформацию и уменьшило требования к пропускной способности ускоренного графического порта на видеокартах. Была ускорена работа отсечения объектов по сферам во фрустуме, начата реализация AABB и OBB отсечения. Начался процесс отказа от внутреннего формата текстур .t на использование формата .TGA для HUD-текстур, с целью ускорения их работы.

В процессе перевода функционала редактора на Borland C++, было решено отказаться от компиляции локаций внутри редактора и вывести компиляцию в отдельно-исполняемое приложение. 10 октября Олесь Шишковцов начал реализовывать компилятор геометрии — xrLBuilder.

В конце октября внутренний формат текстур — .t был окончательно вытеснен растровым форматом .TGA, который теперь использовался для всех текстур. Были проведены тесты отрисовки геометрии с использованием AABB, OBB отсечения и технологии progressive meshes, которая была доработана Шишковцовым. В начале ноября была оптимизирована работа просчета коллизии объекта, в частности RayPick [прим. 7] и общих математических операций, а также скелетной анимации. Движок был переведен на новый DirectX 8.0 API.

В течении декабря под новый API были адаптированы все текстурные классы движка [прим. 8] , отлажена скелетная анимация под аппаратный рендер и с использованием прогрессивной геометрии. Была начата реализация статической скелетной анимации, псевдо-статической [прим. 9] и псевдо-динамической [прим. 10] геометрии, облаков на небе [прим. 11] , системы фларов и воллмарков [прим. 12] . Был реализован Demo Play и Demo Record.

2001 год [ править | править код ]

Tavex [ править | править код ]

В 2000-м году произошло слияние White Lynx с компанией Tavex, она же TerraGame Group [прим. 13] и на движке X-Ray началась разработка некоторых новых (Tangram 3D, Pacman 3D, Titan Racer и Kremlin Puzzle) и доработка старых проектов. В 2001-м году были доработаны и выпущены Alien Logic, а также трёхмерный симулятор «Морского боя» 3D Armada (где использовалась самая первая версия движка wlynxengine).

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *