Макото наэги спрайты


Ох, как же я ненавижу эти две сюжетные линии. Да, в этом аниме две сюжетные линии. И они обе просраны. Но давайте обо всё по порядку.

Сторона: Отчаяние. Это приквел ко всем событиям. Да, эта сюжетная линия самая ранняя из всех известных и рассказывает о участниках второй игры в мирное время. Они учатся, веселятся и просто мирно проводят время. Но до тех пор, пока не появляется Джунко. Да, её снова запихали. Она берёт под контроль одного из учеников — Рёту Митарая и заставляет его сделать видео, которое охватит всех отчаянием. После этого, Эношима заставляет старосту класса проходить поле с испытаниями, а её одноклассников — смотреть за происходящим. Они отчаиваются и начинают крушить мир. В конце показывают, как участники первой игры закрываются в академии. Казалось бы, что может пойти не так? А всё. Кто такой Рёта Митарай? Ведь его не было во время второй игры. А это просто персонаж, которого придумали для этого аниме, как двигателя истории. Поэтому мы о нём ничего и не слышали на протяжении трёх игр и новеллы.
део отчаяния — это полный бред. Задумайтесь: отчаяние в первых играх показывалось через стресс героя, проходящего через убийства своих друзей, родных, а возможно и покушения на себя. И в конце персонаж полностью опускает руки, когда ему говорят, что он достиг конца, но лучшим исходом событий была бы для него просто смерть. А здесь нам говорят, что этого чувства можно достигнуть, просто посмотрев видео. Ну бред же. Ладно, пойдём дальше — староста проходит поле с испытаниями. Когда в стенах академии успели построить комнаты с шипами, катящимися шарами и прочими опасными штуками? Ну и конец — участники первой игры сами запирают себя в академии. На кадрах показано, что Сакура Огами — участница игры, своими руками закручивает огромные гайки. Почему она их обратно не открутит, чтобы выбраться? А чёрт их знает. Ладно, может они так запороли только первую половину?..

Сторона: Будущее. Нам показывают, как Фонд Будущего наблюдает за тем, как выжившие участники первой игры выходят из академии. А дальше — история. Макото Наеги судят за то, что он решил перевоспитать участников второй игры и отправил их в компьютерную симуляцию(но на тот момент он не знал, что состоится игра внутри симуляции). Однако на базу Фонда Будущего нападают и отрезают от внешнего мира. Стоит рассказать, что из себя представляет Фонд Будущего. Эта организация целиком и полностью состоит из преподавателей и управляющих академией «Пик надежды». Туда взяли почти всех выживших, кроме Токо Фукавы.
также прихватили Рёту Митарая. Фонд Будущего собирается восстановить жизнь на земле после глобального убийства почти всех людей. Так вот, герои отрезаны от внешнего мира, на их руках браслеты, которые умертвят героев ядом, если они сделают действие, указанное на браслетах. Персонажи пытаются понять, кто стоит за всем этим, медленно, но верно умирают. Финальный поворот хоть и неожиданный, но очень тупой. Начну описывать, что и тут не так. Почему Фонд Будущего ничего не делал, когда происходила первая игра? Вы скажете, «Но ведь у них не было ничего, что могло бы сломать стены и открыть путь на волю». Я к этому позже вернусь. Злодеем этой игры оказывается, нет, не Джунко Эношима, а тот, на кого никто бы не подумал — глава Фонда Будущего. Он специально с помощью вертолёта обрушил вход и нацепил браслеты в зависимости от поведения членов Фонда Будущего. А целью было знаете что? Чтобы Митарай запустил видео надежды. Видео надежды мазафака!!! И даже при том, что на Митарае был браслет «Использовать свои навыки», при исполнении которого он бы умер, его план сработал. Но пройдя через кучу случайных событий, которые могли бы не случиться с вероятностью в 99%. Представьте себе, что вы кидаете 6 кубиков, и ваша задача, чтобы с одного броска на всех кубиках выпали разные цифры. Так вот примерно это и случилось в аниме. Возвращаясь к тому, что Фонд Надежды не мог помочь участникам игры. У них был чёртов вертолёт. Почему они им не пробили стену? И да, в конце арки умирает Киригири Кёко — любовь всея жизни Макото Наеги. Митарай включает видео надежды и все счастливы. Или нет?..


Сторона: Надежда. Это серия завершает обе арки. И здесь я поясню, почему аниме сломало все временные линии. С острова возвращаются ВСЁ(кроме Чиаки Нанами — старосты, умершей в первой половине аниме) персонажи и говорят Митараю, что это они во всём виноваты. Митарай вырубает видео, уплывает с ними на остров, а Киригири жива. Конец. Это полный слив. Начнём с того, что все персонажи второй игры живы. Вот представьте себе, что вы играете, следите за развитием персонажей, переживаете за их смерти, и в конце хоть и счастливы, что всё закончилось хорошо для персонажей, но большинство мертвы. Так вот этим действием аниме, все ваши чувства сходят на нет. Киригири жива. Тоже переживания становятся равны нулю, хотя мы видим, что из её глаза текла кровь, в конце она смотрит на нас двумя целыми глазами. Я перейду к самому началу аниме. Фонд Будущего сражается против участников второй игры. И на одном из участников мы видим повязку на глазу. Глаз был утерян во время войны во вьетнаме второй игры. Как виртуальная реальность отразилась на его реальном теле? Окей, допустим, что глаз он потерял до второй игры. Тогда становится очень тупым тот факт, что виртуальную реальность специально настроили на то, чтобы он там потерял глаз. Но в этой же виртуальной реальности тело одного из участников сделали железным. Почему оно и в реальности не железное? Чёрт его знает. Итог — это аниме ломает любые законы логики и здравого смысла. Лучше не смотрите это аниме, иначе ваше впечатление от вселенной будет разрушено.


Danganronpa Gaiden: Killer Killer

Источник: pikabu.ru

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

Отношение персонажей к тебе

Макото Наэги: «Ещё один абсолютный счастливчик… Т-такого быть не может, в-верно?» *и всё же, вы очень хорошие друзья*
Кёко Киригири: «Это разносторонняя личность, никто не знает, что она выдаст в следующий момент.»
Бьякуя Тогами: «Пфт.. Очередная серая мышка.»
Токо Фукава: «Не в-верится, но ей и-интересно говорить с-со мной..»
Аой Асахина: «Она такая замкнутая, вообще не хочет со мной говорить..» Ясухиро Хагакуре: «Иногда мы беседуем о гаданиях, но в основном она не очень любит поболтать.»
Джунко Эношима: «…»
Саяка Майзоно: «Ещё не общались
-w-» Но я постараюсь сделать это как можно скорее, обещаю!»
.
фуми Ямада: «Мы с Куботой-доно очень хорошо ладим! Она сказала, что когда-нибудь нарисует одного из героев моих фанфиков.»
Селес: «Ещё не общались, хотя я в этом и не заинтересована.»
Сакура Огами: *после разговора с Сакурой твоя самооценка немного повышается*

Макото наэги спрайты Макото наэги спрайты Макото наэги спрайты Макото наэги спрайты Макото наэги спрайты Макото наэги спрайты Макото наэги спрайты Макото наэги спрайты Макото наэги спрайты Макото наэги спрайты Макото наэги спрайты ЛАВ ОНЛИ ДАНГАНРОНПА
(нуещечутьчутьнанбаку)

Источник: trikky.ru

Краткое описание


Изначально я хотел проверить, можно ли совместить наложенные друг на друга спрайты с синхронизованными аниматорами для создания модульного персонажа с заменяемыми причёсками, снаряжением и носимыми предметами. Можно ли объединить нарисованную вручную пиксельную анимацию с по-настоящему настраиваемым персонажем.

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

Я раскопал этот древний GIF моего первого месяца работы с Unity. На самом деле этот модульный спрайт оказался одним из первых моих экспериментов в разработке игр!

Я создал прототип при помощи системы анимаций Unity, а затем для проверки концепции добавил одну рубашку, одну пару штанов, одну причёску и три предмета. Для этого потребовалось 26 отдельных анимаций.

В то время я создавал всю свою анимацию в Photoshop и не заморачивался автоматизацией процесса, поэтому он был очень скучным. Потом я подумал: «Так, основная идея сработала, позже я добавлю новые анимации и снаряжение». Оказалось, что «потом» — это несколько лет спустя.


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

Я ожидал, что придётся отказаться от кастомизации персонажа и создать единственного главного героя, как в большинстве игр с ручной анимацией. Но у меня был план действий, и настало время проверить, смогу ли я победить этого монстра!

Спойлер: всё получилось замечательно. Ниже я раскрою свои ***секреты***

Модульная система спрайтов

I. Познай свои границы

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

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

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

Аспект отслеживания времени оказался очень важным, и я крайне рекомендую использовать его, чтобы отвечать на вопросы типа: «Сколько врагов могу я позволить себе создать в игре?». Всего после нескольких тестов мне удалось экстраполировать достаточно точную оценку. При дальнейшей работе над анимациями я продолжил следить за временем и пересматривать мои ожидания.


Поделюсь копией моего журнала работы за последние два месяца. Учтите, что это время идёт в добавок к моей обычной работе, где я провожу по 30 часов в неделю:

https://docs.google.com/spreadsheets/d/1Nbr7lujZTB4pWMsuedVcgBYS6n5V-rHrk1PxeGxr6Ck/edit?usp=sharing

II. Смена палитры ради светлого будущего

С умом используя цвета в дизайне спрайтов, можно отрисовать один спрайт и создать множество различных вариаций при помощи смены палитры. Можно менять не только цвета, но и создавать различные включаемые и отключаемые элементы (например, заменой цветов на прозрачность).

Каждый набор брони имеет 3 вариации, а смешивая верхние и нижние части, можно получить множество комбинаций. Я планирую реализовать систему, в которой можно собрать один набор брони для внешнего вида персонажа, а другой — для его характеристик (как в Terraria).

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

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


Я не буду объяснять всё в подробностях, а вместо этого расскажу о способах реализации этой техники в Unity, и об их плюсах и минусах.

1. Текстура поиска для каждой палитры

Это наилучшая стратегия для создания вариаций врагов, фонов и всего того, где множество спрайтов иеет одинаковую палитру/материал. Различные материалы нельзя сгруппировать в батчи, даже если они используют одинаковый спрайт/атлас. Работа с текстурами довольно мучительна, но палитры можно изменять в реальном времени, заменяя материалы, с помощью SpriteRenderer.sharedMaterial.SetTexture или MaterialPropertyBlock, если вам нужны разные палитры для каждого экземпляра материала. Вот пример фрагментной функции шейдера:

sampler2D _MainTex; sampler2D _PaletteTex; float4 _PaletteTex_TexelSize;   half4 frag(v2f input) : SV_TARGET {  half4 lookup = tex2D(_MainTex, input.uv);  half4 color = tex2D(_PaletteTex, half2(lookup.r * (_PaletteTex_TexelSize.x / 0.00390625f), 0.5));  color.a *= lookup.a;  return color * input.color; }

2. Массив цветов

Я остановился на этом решении, потому что мне нужно было заменять палитры каждый раз, когда меняется внешний вид персонажа (например, при надевании предметов), и создавать некоторые палитры динамически (чтобы отобразить выбранные игроком цвета волос и кожи). Мне показалось, что во время выполнения и в редакторе для этих целей гораздо проще будет работать с массивами.

Код:

sampler2D _MainTex; half4 _Colors[32];  half4 frag(v2f input) : SV_TARGET {  half4 lookup = tex2D(_MainTex, input.uv);  half4 color = _Colors[round(lookup.r * 255)];  color.a *= lookup.a;  return color * input.color; }    

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

— Обновление палитр на различных материалах при редактировании цветов для отображения изменений в реальном времени.

— Присваивание названий и изменение порядка цветов в палитре (используйте поле для хранения индекса цвета, а не его порядка в массиве).

— Выбор и редактирование нескольких цветов за раз. (Совет: поля Color в Unity можно копипастить: просто нажмите на один цвет, скопируйте, нажмите на другой цвет, вставьте — теперь они одинаковы!)

— Применение цвета оверлея ко всей палитре

— Запись палитры в текстуру

3. Единая текстура поиска для всех палитр

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

Во-первых, нужно будет упаковать все палитры в одну большую текстуру. Затем вы используете цвет, заданный в компоненте SpriteRenderer (AKA цвет вершины) для определения строки, которую надо считать из текстуры палитры в шейдер. То есть палитра этого спрайта управляется через SpriteRenderer.color. Цвет вершины — это единственное свойство SpriteRenderer, которое можно менять без нарушения батчинга (при условии, что все материалы одинаковы).

В большинстве случаев лучше всего использовать для управления индексом альфа-канал, потому что вам скорее всего не понадобится куча спрайтов с различной прозрачностью.

Код:

sampler2D _MainTex; sampler2D _PaletteTex; float4 _PaletteTex_TexelSize;   half4 frag(v2f input) : SV_TARGET {  half4 lookup = tex2D(_MainTex, input.uv);  half2 paletteUV = half2(  lookup.r * _(PaletteTex_TexelSize.x / 0.00390625f),  input.color.a * _(PaletteTex_TexelSize.y / 0.00390625f)  )  half4 color = tex2D(_PaletteTex, paletteUV);  color.a *= lookup.a;  color.rgb *= input.color.rgb;  return color; }

Чудеса замены палитр и слоёв спрайтов. Так много комбинаций.

III. Автоматизируйте всё и применяйте подходящие инструменты

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

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

Затем я написал импортёр для Unity. Aseprite выводит удобный файл JSON с данными кадров, поэтому можно создавать ассеты анимаций программно. Обработка Aseprite JSON и запись этого типа данных оказались довольно нудными, поэтому я привожу их здесь. Вы можете с лёгкостью загрузить их в Unity с помощью JsonUtility.FromJson<AespriteData>, только не забудьте запустить Aseprite с опцией —format ‘json-array’.

Код:

[System.Serializable] public struct AespriteData {  [System.Serializable]  public struct Size {  public int w;  public int h;  }   [System.Serializable]  public struct Position {  public int x;  public int y;  public int w;  public int h;  }   [System.Serializable]  public struct Frame {  public string filename;  public Position frame;  public bool rotated;  public bool trimmed;  public Position spriteSourceSize;  public Size sourceSize;  public int duration;  }   [System.Serializable]  public struct Metadata {  public string app;  public string version;  public string format;  public Size size;  public string scale;  }    public Frame[] frames;  public Metadata meta; }

На стороне Unity серьёзные проблемы у меня возникли в двух местах: в загрузке/нарезке спрайтшита и в построении клипа анимации. Мне бы очень помог понятный пример, поэтому вот фрагмент кода из моего импортёра, чтобы вы не так мучились:

Код:

TextureImporter textureImporter = AssetImporter.GetAtPath(spritePath) as TextureImporter; textureImporter.spriteImportMode = SpriteImportMode.Multiple;  SpriteMetaData[] spriteMetaData = new SpriteMetaData[aespriteData.frames.Length];  // Slice the spritesheet according to the aesprite data. for (int i = 0; i < aespriteData.frames.Length; i++) {  AespriteData.Position spritePosition = aespriteData.frames[i].frame;   spriteMetaData[i].name = aespriteData.frames[i].filename;  spriteMetaData[i].rect = new Rect(spritePosition.x, spritePosition.y, spritePosition.w, spritePosition.h);  spriteMetaData[i].alignment = (int)SpriteAlignment.Custom; // Same as "Pivot" in Sprite Editor.  spriteMetaData[i].pivot = new Vector2(0.5f, 0f); // Same as "Custom Pivot" in Sprite Editor. Ignored if alignment isn't "Custom". }  textureImporter.spritesheet = spriteMetaData; AssetDatabase.ImportAsset(spritePath, ImportAssetOptions.ForceUpdate);  Object[] assets = AssetDatabase.LoadAllAssetsAtPath(spritePath); // The first element in this array is actually a Texture2D (i.e. the sheet itself). for (int i = 1; i < assets.Length; i++) {  sprites[i - 1] = assets[i] as Sprite; }   // Create the animation.  AnimationClip clip = new AnimationClip(); clip.frameRate = 40f; float frameLength = 1f / clip.frameRate;  ObjectReferenceKeyframe[] keyframes = new ObjectReferenceKeyframe[aespriteData.frames.Length + 1]; // One extra keyframe is required at the end to express the last frame's duration.  float time = 0f; for (int i = 0; i < keyframes.Length; i++) {  bool lastFrame = i == keyframes.Length - 1;   ObjectReferenceKeyframe keyframe = new ObjectReferenceKeyframe();  keyframe.value = sprites[lastFrame ? i - 1 : i];  keyframe.time = time - (lastFrame ? frameLength : 0f);   keyframes[i] = keyframe;   time += lastFrame ? 0f : aespriteData.frames[i].duration / 1000f; }  EditorCurveBinding binding = new EditorCurveBinding(); binding.type = typeof(SpriteRenderer); binding.path = ""; binding.propertyName = "m_Sprite"; AnimationUtility.SetObjectReferenceCurve(clip, binding, keyframes);  AssetDatabase.CreateAsset(clip, "Assets/Animation/" + name + ".anim"); AssetDatabase.SaveAssets();

Если вы этого ещё не делали, то поверьте — начать создавать собственные инструменты очень легко. Самый простой трюк заключается в размещении в сцене GameObject с привязанным к нему MonoBehaviour, которое имеет атрибут [ExecuteInEditMode]. Добавьте кнопку, и вы готовы к бою! Помните, что ваши личные инструменты не обязаны выглядеть хорошо, они могут быть чисто утилитарными.

Код:

[ExecuteInEditMode] public class MyCoolTool : MonoBehaviour {    public bool button;   void Update() {  if (button) { button = false; DoThing(); }  } }

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

Код:

string path = "Assets/Whatever/Sprite.png"; Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>(path); TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter; if (!textureImporter.isReadable) {  textureImporter.isReadable = true;  AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate); }  Color[] pixels = texture.GetPixels(0, 0, texture.width, texture.height); for (int i = 0; i < pixels.Length; i++) {  // Do something with the pixels, e.g. replace one color with another. }  texture.SetPixels(pixels); texture.Apply(); textureImporter.isReadable = false; // Make sure textures are marked as un-readable when you're done. There's a performance cost to using readable textures in your project that you should avoid unless you plan to change a sprite at runtime.  byte[] bytes = ImageConversion.EncodeToPNG(texture); File.WriteAllBytes(Application.dataPath + path.Substring(6), bytes); AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);

Источник: habr.com

Всем привет, с вами Элл!

И я решила сделать запись , про интересные факты о бета-версии игры Danganronpa: Trigger Happy Havoc! Ни-ши-ши ^^

•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*

1 Факт: облик героев

Макото Наэги

Бьякуя Тогами

Аой Асахина

Селестия Люденберг

Чихиро Фуджисаки

Хифуми Ямада

Джунко Эношима

Киётака Ишимару

Мондо Овада

Сакура Огами

Саяка Майзоно

Леон Кувата

Токо Фукава

Ясухиро Хагакурэ

Кёко Киригири

Монокума

•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*

2 Факт: о Макото Наэги

Макото Наэги в бета-версии не имел имени , его звали просто Главным Героем. С самого начала с бета-версии он являлся Гг , за которого мы проходим игру.

•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*

3 Факт: как показывались события?

В основном это был текст, казни показывались в виде комикса

•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*

4 Факт: хорошие отношения?

В бета-версии надо было поднимать отношение со всеми или же вы могли их опускать. И в чём же смысл? А смысл в том , что во время классного суда отношение с другими , могли вам помочь в суде.

•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*

5 Факт: локации

Локации были похожи на разрушенную школу. Было всё довольно в жутком состоянии

•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*

6 Факт: Смерть на первом суде.

Многие знают что убийца Леон, а мертва Саяка. Но так ли было в бета-версии? Нет!

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

•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*

7 Факт: Цвет крови.

Изначально цвет крови был красный , из-за чего игра выгрлядила реалистичнее , но создатели решили изменить цвет крови для своей фишки. И так цвет крови стал розовым.

•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*

8 Факт: игру запретили!?

Да, игра была запрещена из-за сильной жестокости из-за этого создателям пришось изменить некоторые моменты , чтобы игра не была настолько жестокой.

•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•*

Ну вот и все факты , которые я знаю!

Надеюсь вам понравилось, с вами была Элл ^^

Источник: aminoapps.com


You May Also Like

About the Author: admind

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.