Для чего нужны шейдеры

Что такое шейдеры простыми словами?

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдерыВ рамках данной статьи, я расскажу вам простыми словами что такое шейдеры, а так же зачем они нужны.

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

Однако, в периоды становления нынешней 3D-графики, многие столкнулись с той проблемой, что встроенных фильтров и примочек видеокарт (GPU) попросту не хватает. К примеру, нередко возникала необходимость в собственных эффектах. Поэтому многое приходилось делать вручную и проводить расчеты в основном процессоре компьютера (CPU), что несомненно отражалось на производительности (при том, что видюха, как говорится, «простаивала» без дела).

Так что, со временем появились различные технологии, такие как шейдеры, позволяющие использовать мощности GPU для специфических нужд.

Что такое шейдеры и зачем они нужны?

Снижение общей нагрузки центрального процессора это не все предназначение возможности создания собственных шейдеров. Стоит понимать, что немало игр и видео повторно используют одни и те же возможности. К примеру, зачем в десятках однотипных анимационных программах с нуля писать, например, эффекты для воды, если можно воспользоваться готовыми библиотеками, такими как OpenGL или же DirectX? Последние содержат в себе уже немало реализованных шейдеров и предоставляют более удобный метод написания собственных (не нужно писать низкоуровневые команды для GPU).

То есть, если раньше, чтобы создать самую простую анимацию или игру, нужно было обладать существенными познаниями, то в сегодняшних реалиях это задача посильная многим.

В чем польза подхода с шейдерами?

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдеры

Таким образом, если вы используете шейдеры известной библиотеки, то достаточно выхода следующей версии, чтобы качество повысилось само собой. Конечно, тут есть нюансы, такие как совместимость, поддержка появившихся специализированных команд и прочее, но все же.

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

1. Повышается скорость и производительность компьютера (ведь центральному процессору нет необходимости производить расчет графики вместо GPU).

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

Теперь, вы знаете что такое шейдеры, зачем они нужны и какая от них польза.

Источник

Шейдер

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдеры

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдеры

Ше́йдер (англ. Shader ; схема затенения, программа построения теней) — это программа для одной из ступеней графического конвейера, используемая в трёхмерной графике для определения окончательных параметров объекта или изображения. Она может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затенение, смещение поверхности и эффекты пост-обработки.

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

Содержание

Потребность в шейдерах

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

Предшественниками шейдеров были процедурная генерация текстур (широко применявшаяся в Unreal для создания анимированных текстур воды и огня) и мультитекстурирование (на нём был основан язык шейдеров, применявшийся в Quake 3). Но и эти механизмы не обеспечивают такой гибкости, как шейдеры.

Типы шейдеров

В настоящее время шейдеры делятся на три типа: вершинные, геометрические и фрагментные (пиксельные).

Вершинные шейдеры (Vertex Shader)

Вершинный шейдер оперирует данными, сопоставленными с вершинами многогранников. К таким данным, в частности, относятся координаты вершины в пространстве, текстурные координаты, тангенс-вектор, вектор бинормали, вектор нормали. Вершинный шейдер может быть использован для видового и перспективного преобразования вершин, генерации текстурных координат, расчета освещения и т. д.

Геометрические шейдеры (Geometry Shader)

Геометрический шейдер, в отличие от вершинного, способен обработать не только одну вершину, но и целый примитив. Это может быть отрезок (две вершины) и треугольник (три вершины), а при наличии информации о смежных вершинах (adjacency) может быть обработано до шести вершин для треугольного примитива. Кроме того, геометрический шейдер способен генерировать примитивы «на лету», не задействуя при этом центральный процессор. Впервые начал использоваться на видеокартах Nvidia серии 8.

Пиксельные шейдеры (Pixel Shader)

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

Шейдерные языки

Впервые использованные в системе RenderMan компании Pixar, шейдеры получали всё большее распространение со снижением цен на компьютеры. Основное преимущество от использования шейдеров — их гибкость, упрощающая и удешевляющая цикл разработки программы, и при том повышающая сложность и реалистичность визуализируемых сцен.

Шейдерные языки обычно содержат специальные типы данных, такие как матрицы, семплеры, векторы, а также набор встроенных переменных и констант для удобной интеграции со стандартной функциональностью 3D API. Поскольку компьютерная графика имеет множество сфер приложения, для удовлетворения различных потребностей рынка было создано большое количество шейдерных языков.

Профессиональный рендеринг

Данные шейдерные языки ориентированы на достижение максимального качества визуализации. Описание свойств материалов сделано на максимально абстрактном уровне, для работы не требуется особых навыков программирования или знания аппаратной части. Такие шейдеры обычно создаются художниками с целью обеспечить «правильный вид», подобно наложению текстуры, источников света и другим аспектам их работы.

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

Шейдерный язык RenderMan

Шейдерный язык RenderMan, описанный в Спецификации интерфейса RenderMan, является фактическим стандартом для профессионального рендеринга. API RenderMan, разработанный Робом Куком, используется во всех работах студии Pixar. Он также является первым из реализованных шейдерных языков.

Шейдерный язык Gelato

NVIDIA Gelato представляет собой оригинальную гибридную систему рендеринга изображений и анимации трехмерных сцен и объектов, использующую для расчетов центральные процессоры и аппаратные возможности профессиональных видеокарт серии Quadro FX.

Основополагающим принципом, которого неукоснительно придерживаются разработчики, является бескомпромиссное качество финального изображения, не ограниченное ничем, в том числе — современными возможностями видеокарт. Как производственный инструмент, способный создавать конечный продукт высокого качества, Gelato предназначен для профессионального использования в таких областях как кино, телевидение, промышленный дизайн и архитектурные визуализации.

Рендеринг в реальном времени

Шейдерный язык OpenGL

Шейдерный язык OpenGL носит название GLSL (The OpenGL Shading Language). GLSL основан на языке ANSI C. Большинство возможностей языка ANSI C сохранено, к ним добавлены векторные и матричные типы данных, часто применяющиеся при работе с трехмерной графикой. В контексте GLSL шейдером называется независимо компилируемая единица, написанная на этом языке. Программой называется набор откомпилированных шейдеров, связанных вместе.

Шейдерный язык Cg

Разработан nVidia совместно с Microsoft (такой же по сути язык от Microsoft называется HLSL, включён в DirectX 9). Cg расшифровывается как C for Graphics. Язык действительно очень похож на C, он использует схожие типы (int, float, а также специальный 16-битный тип с плавающей запятой — half). Поддерживаются функции и структуры. Язык обладает своеобразными оптимизациями в виде упакованных массивов (packed arrays) — объявления типа «float a[4]» и «float4 a» в нём соответствуют разным типам. Второе объявление и есть упакованный массив, операции с упакованным массивом выполняются быстрее, чем с обычными. Несмотря на то, что язык разработан nVidia, он без проблем работает и с видеокартами ATI. Однако следует учесть, что все шейдерные программы обладают своими особенностями, которые следует получить из специализированных источников.

Шейдерные языки DirectX

Низкоуровневый шейдерный язык DirectX (DirectX ASM)

По синтаксису сходен с Ассемблером. Существует несколько версий, различающихся по набору команд, а также по требуемому оборудованию. Существует разделение на вершинные (vertex) и пиксельные (pixel) шейдеры, которые различаются.

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

Выполняет обработку цветовых данных, полученных при рисовании треугольника. Оперирует с текстурами и цветом. Количество инструкций значительно ограничено. Так, к примеру, в версии 1.4 оно не может быть больше 32-х. Пример фрагмента кода:

Высокоуровневый шейдерный язык DirectX (HLSL — High Level Shader Language)

Является надстройкой над DirectX ASM. По синтаксису сходен с C, позволяет использовать структуры, процедуры и функции.

Литература

Ссылки

Полезное

Смотреть что такое «Шейдер» в других словарях:

шейдер — Подпрограмма построения теней и др. эффектов. Шейдером в широком смысле называется программа для визуального определения поверхности объекта. Это может быть описание освещения, текстурирования, постобработки и т.п. [http://www.morepc.ru/dict/]… … Справочник технического переводчика

Цел-шейдер — Два вида рендеринга. Слева обычный. Справа цел шейдер. Цел шейдерная анимация (англ. Cel shaded), также называемая как цел шейдинг или тун шейдинг это тип нефотореалистичного рендеринга, сделанного так, чтобы выглядеть как картинка,… … Википедия

вершинный шейдер — Вершинные шейдеры это программы, выполняемые видеочипами, которые производят математические операции с вершинами (vertex, из них состоят 3D объекты в играх), иначе говоря, они предоставляют возможность выполнять программируемые алгоритмы по… … Справочник технического переводчика

пиксельный шейдер — Пиксельные шейдеры это программы, выполняемые видеочипом во время растеризации для каждого пикселя изображения, они производят выборку из текстур и/или математические операции над цветом и значением глубины (Z buffer) пикселей. [http://www.morepc … Справочник технического переводчика

Сравнение графических процессоров ATI — Эта таблица содержит основную информацию о графических процессорах ATI и видеокартах, построенных на официальных спецификациях ATI Technologies. Содержание 1 Замечания о версиях DirectX 2 Замечания о версиях OpenGL … Википедия

Сравнение графических процессоров NVIDIA — Эта таблица содержит основную информацию о графических процессорах NVIDIA серии GeForce и видеокартах, построенных на официальных спецификациях NVIDIA. Содержание … Википедия

Сравнение графических процессоров AMD — Эта таблица содержит основную информацию о графических процессорах AMD и видеокартах, построенных на официальных спецификациях AMD. Содержание … Википедия

Nvidia Quadro — Quadro серия видеокарт, разработанных фирмой NVIDIA для пользователей профессиональных приложений 2D и 3D. Quadro NVS видеокарты, разработанные для бизнес приложений (финансовых, корпоративных, ECAD) и для многомониторных решений… … Википедия

Quadro — Quadro серия видеокарт, разработанных фирмой NVIDIA для пользователей профессиональных приложений 2D и 3D. Quadro NVS видеокарты, разработанные для бизнес приложений (финансовых, корпоративных, ECAD) и для многомониторных решений… … Википедия

Direct3D 11 — Стиль этой статьи неэнциклопедичен или нарушает нормы русского языка. Статью следует исправить согласно стилистическим правилам Википедии. Direct3D 11 (D3D11) компонент интерфейса программирования приложений (англ. … Википедия

Источник

Шейдеры. Или почему мир игр стал визуально так похож на наш!

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

Всем нам нравится, когда в играх реалистичные пейзажи: красиво переливающиеся блики солнца на водной глади, движения каждого листочка на ветке во время ветра, волосы персонажей выглядят лучше, чем у тебя и много другое. В общем все, что нас так притягивает в современных играх не взялось из неоткуда(ежу понятно). Так кто же «виновник торжества»

Может кто-то уже и догадался по названию поста(глупый вопрос, конечно, там ж написано), речь пойдет о шейдерах. Что это, для чего и почему. Постараюсь разложить все по полочкам. Начнем:)

Что вообще такое эти самые шейдеры. Шейдеры — это программки, которые исполняются на видеокарте и описывают эффекты, методы обработки и прорисовки графики. Изначально GPU преимущественно обрабатывали 2D графику. В это время появляются так называемые акселераторы(ускорители). Они берут на себя часть операций, связанную с обработкой графических данных, сами прорисовывают каждый пиксель и определяю его цвет. Все это использовали видеокарты NVIDIA Riva128 и 3Dfx Voodoo. Эти карты брадли на себя только такие задачи как текстурирование и закраску, все остальное выполнял СPU. Естественно картинка была соответствующей. Подумайте сами, процессор и так загружен другими системными задачами, а тут еще ему и графические данные прорисовывать приходится, которые, по сравнению с арифметическими расчетами, просто звери.

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдеры Но в те времена этого было достаточно конечному пользователю. Далее начали применяться графические библиотеки такие как Open Gl, Direct 3d. Они снимали с CPU значительную часть нагрузки и брали на себя. Теперь видеокарта строила сцену с нуля. Производителям видеоигр в те времена такое решение было удобно. Все применяемые в тех играх эффекты были уже аппаратно встроены в видеокарты. Их было достаточно для игр того поколения. Но ничего не стоит на месте, разработчики видеоигр стремились вырваться вперед по сравнению с конкурентами и появилась потребность как-то улучшать имеющиеся эффекты 3D графики. Тогда то и появилась проблема — для того, чтоб апгрейдить какой-то эффект, разработчикам видеоигр приходилось подождать годик, чтоб вышла видеокарта, поддерживающая данный эффект. Что было и дорого и длительно по времени. Тогда — то и появились шейдеры. Так началась новая эра развития трехмерной графики в игровой индустрии.

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдеры
Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдерыТеперь пробежимся коротенько по видам шейдера дабы лучше понять их применение.
Вершинные шейдеры. Из назавания понятно, что они оперируют с вершинами(координаты вершин, текстурные координаты) Сопоставляют координаты вершин объекта и координаты вершин текстуры. Следовательно, они отвечают за любое трансформирование картинки. Например, колышащиеся деревья и трава на ветру, лицевая анимация и динамично перемещающийся свет.

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдерыПиксельные шейдеры или геометрические. В отличие от вершинных, геометрические шейдеры оперируют на уровне примитивов. Проще говоря, они делят изображение на примитивы(точки, отрезки, треугольники) и работают с каждым в отдельности. Сглаживают, освещают, анимируют, добавляют эффекты HDR и Motion Blur. Главное назначение пиксельных шейдеров заключается в комплексном смешивании текстур, просчете освещенности и оптических свойств моделей, постобработке кадра. В общем, почти все, что мы видим в современных играх, — плод трудов пиксельных шейдеров!

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдеры Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдеры Естественно, как вы навреное уже поняли, шейдеры пишутся игровыми программистами. С развитием трехмерной графики, написание шейдеров усложняется. Раньше они вообще состояли из небольшого куска кода на ассемблероподобном языке, а сейчас же существует несколько шейдерных языков, которые ориентированые на достижение максимального качества визуализации. Ни одна современня игра не обходится без шейдеров, если вы видите потрясную картинку с ослепительным эффектом, то знайте, это все работа шейдеров. Без них мы бы до сих пор играли в игры типо первых Quake, Doom, Unreal. Так же необходимо отметить, что современные игры сочетают в себе много шейдеров одновременно, которые выполняются параллельно вашей видеокартой.

Однако, но хоть шейдеры — это программы, их количество напрямую связано с качеством вашей видеокарты. Их количество настроено изначально на заводе-производителе и самому изменить это параметр невозможно. Хотя, обладателям консолей не стоит этого бояться т.к игры изначально оптимизируют под консоли и она в любом случае пойдет на приемлемом качестве. И как раз из-за шейдеров обладателям ПК приходится сверять системные характеристики и постоянно увеличивать мощность своего компьютера. Так же нужно помнить, что всего хорошего должно быть в меру. Программист, который разрабатывает шейдеры должен четко понимать что, где и как шейдер должен делать. Иначе получится полная ж… иными словами переизбыток шейдеров ничего хорошего не сулит!

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдеры И под конец хочу сказать, что без шейдеров не было бы ничего из того, что мы сейчас имеем. Шейдеры — это мощное средство для реализации достижений сложной трехмерной графики. Чем сложнее эффекты, тем прокаченней и больше по количеству нужно шейдеров. И… у меня плохо с заключением… и если вы еще до сих пор не поняли что такое шейдеры, то сходите съешьте шоколадку и прочитайте этот пост еще раз:) Спасибо за прочтение!

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдеры Эй-эй, это между прочим пример сглаживания!)

Источник

Шейдеры в видеокарте – что это такое: их версии и как они влияют на работу

Всем привет! Сегодня разберем, что такое шейдеры в видеокарте, что дают, как влияют на обработку графики в играх и для чего используются, какие бывают версии и как узнать шейдеры своей платы. О том, что значит OC в наименовании видеокарты NVidia или AMD, можно почитать здесь.

Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдеры

Немного истории

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

Видеоигры только зарождались, и пока никто всерьез не рассматривал компьютер как средство для развлечения. Это был рабочий инструмент для выполнения вычислений, к тому же доступный не всякому среднестатистическому американцу.

Шло время, появились первые разработки в сфере компьютерной 3D графики. Вот тут-то и стало понятно, что такую технологию моделирования объектов можно использовать для симуляции виртуальных пространств, живущих по своим законам. Да, речь идет о видео играх.

Простыми словами я рассказываю именно об играх, так как это — прикладная область, которая в полной мере позволяет реализовать 3D технологии. Следующим этапом можно считать унификацию «полномочий» различных игровых компонентов. Так, в отдельный элемент «откололся» так называемый движок — структура, которая отвечает за взаимодействие всех игровых компонентов.

Если вы увлекаетесь видеоиграми, то, конечно же, слышали такие термины как Unity, Cry Engine или Creation Engine. Узкая специализация позволяет игроделам не «изобретать велосипед» каждый раз с нуля, сосредоточившись на главном — созданием непосредственно самой игры.

Любой 3D объект состоит из так называемых полигонов, которые имеют треугольную форму. Детализация объекта будет зависеть от количества таких полигонов: чем их больше, тем четче нарисована каждая мелочь. При выводе изображения на экран полигоны нужно растеризовать, то есть перевести их из трехмерного пространства на плоский экран с сохранением пропорций.Для чего нужны шейдеры. Смотреть фото Для чего нужны шейдеры. Смотреть картинку Для чего нужны шейдеры. Картинка про Для чего нужны шейдеры. Фото Для чего нужны шейдерыИнженеры пришли к выводу, что это слишком рутинная задача, чтобы нагружать ею центральный процессор. В результате «эволюции» после ряда экспериментов появились видеокарты, которые мы видим сегодня: отдельный графический чип, который через специальную шину связывается с видеопамятью.

Что такое shedar

Shader переводится с английского как «оттеняющий». Это специальная программа, которая обрабатывает объекты, содержащиеся в игровом коде, и придает им окончательный вид.

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

Это еще больше упрощает создание игр: не нужно каждый раз программировать, как именно будут отображаться блики, преломление света, разряды молний и прочие красивости, делающие современные игры крайне реалистичными. Фактически, все это уже есть готовое и содержится в DLL библиотеках, которые обрабатываются шейдерами.

Виды шейдеров

Современные графические адаптеры оснащены универсальным набором шейдеров, который умеет обрабатывать любые объекты. Всего их существует 3 типа:

Все это относится к realtime графике, то есть обработке изображения в режиме реального времени (например, 60 кадров в секунду, как это бывает в играх). Для создания 3D мультфильмов используются совсем другие технологии: качество там такое, что для рендеринга видео нужны очень большие вычислительные мощности.

Как узнать какие шейдеры поддерживает моя видеокарта

Самый простой способ сделать это — установить бесплатную утилиту GPU-Z. Нужная информация отображается в поле DirectX Support. Это будет число в поле SM — например 2.0 (более старая версия) или 3.0 (пригодна для современных игр). Последние модели графических адаптеров поддерживают уже четвертую версию шейдеров.

Также при покупке графической платы обратите внимание на количество шейдеров и их частоту. Принцип прост: чем выше эти параметры, тем лучше.

Для вас будут полезны публикации «Что такое в видеокарте HDCP?» и «Что означает Dual в маркировки видеокарты и что это дает покупателю». Буду признателен, если вы поделитесь этим постом в социальных сетях. До скорой встречи!

Источник

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

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