Обновление EdenSpark 0.9.0.12

Обновление

ИИ-помощник ищет информацию в реальной документации

ИИ-помощник в EdenSpark теперь умеет искать информацию в документации, а не полагаться на то, что запомнила модель. Когда вы просите его написать или исправить код на Daslang, он обрщается к справочнику EdenSpark/Daslang и встроенных примерах проектов, а затем даёт ответ со ссылками на конкретные файлы и строки, которые он прочитал. Вы реже сталкиваетесь с прилдуманными API, а ответы соответствуют версии редактора, которую вы используете.

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

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

Инструменты редактора — расширяйте редактор с помощью Daslang

Теперь вы можете создавать собственные инструменты редактора на Daslang. Поместите скрипт в папку `editor/` вашего проекта, и он будет выполняться *внутри* редактора одновременно с вашей игрой, превращая редактор в инструмент, который вы на настраиваете под нужды своей команды.

Инструмент редактора умеет:

  • Добавлять кнопки и пункты меню в инспектор любого компонента — одним кликом запускайте любую логику, с собственными иконками и подсветкой активного состояния
  • Рисовать пользовательские виджеты прямо в секции компонента — ползунки, палитры цветов, поля ввода, выпадающие списки, выбор ресурсов, индикаторы прогресса — весь инструментарий для каждого выбранного узла
  • Открывать всплывающие окна инструментов поверх области просмотра (перетаскиваемые, изменяемые, сворачиваемые, отображаемые в меню Window) — ваши элементы управления не занимают место на сцене
  • Управлять камерой редактора — перемещать её, менять ориентацию, переключать перспективу/ортографию или 2D-режим, или центрировать на выбранном узле, как при нажатии F
  • Читать и изменять выделение, а также вносить изменения в сцену, которые работают с Undo/Redo — целая группа изменений может быть свёрнута в одно нажатие Ctrl+Z
  • Привязывать узлы к сетке или опускать их на поверхность под ними
  • Управлять открытым префабом — сохранять, открывать другой или закрывать
  • Переключать вид области просмотра — режим манипулятора (перемещение/поворот/масштаб/границы/трансформация), затенённый или каркасный режим, и какая вкладка редактора активна
  • Реагировать на цикл редактора и на изменения узлов, а также определять, остановлена ли игра, приостановлена или запущена — и запускать, приостанавливать, перезапускать или воспроизводить её по кадрам

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

Инструменты также доступны для ИИ-помощников: встроенный MCP-сервер редактора показывает все активные виджеты и позволяет агенту читать и устанавливать значения, нажимать кнопки и запускать инструменты компонентов — точно так же, как это сделал бы пользователь, включая функцию отмены. Ваши окна инструментов остаются видимыми независимо от активной вкладки редактора; только полупрозрачное наложение Tools по умолчанию живёт вместе с областью просмотра.

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

Встроенный профилировщик

Теперь прямо внутри редактора работает встроенный профилировщик производительности — без необходимости внешних инструментов. Откройте его из Window ▸ Profiler (или по кнопке Open Profiler на наложении статистики), чтобы следить за временем кадров и нагрузкой рендеринга в виде прокручивающихся графиков примерно за последние 2000 кадров. Теперь вы видите всплески и статистику, а не просто текщие данные.

In-editor profiler

Окно отображает пять графиков: время игрового потока, время потока рендеринга, счётчики рендеринга (вызовы отрисовки / образцы(instances) / треугольники), счётчики теневых проходов и память. На двух графиках времени кадра показаны сырые значения за каждый кадр с наложенным сглаженным средним, поэтому остаются заметными кратковременные рывки . У каждого графика есть легенда, по которой можно кликнуть, чтобы показать или скрыть отдельные серии. Нажмите Pause, чтобы изучить захваченное окно, или Clear, чтобы начать заново.

Встроенная сериализация JSON

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

Публичный модуль json заменяет старые помощники daslib/json / json_boost, которые теперь заблокированы в пользу более быстрого встроенного модуля.

Новый API для генерации мешей

Асинхронный API генерации мешей был значительно упрощён за счёт удаления ненужных обёрток. Убедитесь в этом сами!

До:

// generator.das require engine.serializer.genericstorage require engine.gengeometry.meshstructures def create_my_mesh(width : float, height : float, subdivisions : int) : MeshGeometry{ // your generation return <- MeshGeometry(...) } [export] def build(data : string) : MeshGeometry { var req <- GenericStorage(data) let width = get_or(req, "width", 1.) let height = get_or(req, "height", 1.) let subdivisions = get_or(req, "subdivisions", 24) return <- create_my_mesh(width, height, subdivisions) } // main.das require engine.serializer.generic_storage [export] def on_initialize() { var req : GenericStorage set(req, "width", 2.) set(req, "subdivisions", 50) let meshId = generate_mesh("%file/generator.das", req) }

После:

// generator.das require engine.gen_geometry.mesh_structures [mesh_generator] def create_my_mesh(width : float = 1., height : float = 1., subdivisions : int = 24) : MeshGeometry { // your generation return <- MeshGeometry(...) } // main.das [export] def on_initialize() { let meshId = generate_mesh("%file/generator.das", (width = 2., subdivisions = 50)) }

Подробности см. в соответствующей статье документации.

Примечание: старый код в уже опубликованных играх по-прежнему работает, но выдаёт предупреждение об устаревании, которое блокирует публикацию.

Лаунчер

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

Навигация и поиск пути

Теперь агенты могут находить дорогу в игровом пространстве. Добавьте компонент NavMesh на узел, разместите геометрию с Collider на любом дочернем узле (или на самом узле NavMesh), затем постройте навигационную сетку на основе этой геометрии. Затем вы можете запрашивать её из скриптов, чтобы перемещать персонажей, врагов или любых других агентов по проходимой поверхности.

Компонент NavMesh содержит профиль агента, для которого строится сетка: радиус и высоту капсулы, максимальную высоту шага, максимальный уклон и размер вокселя. Нажмите Bake в инспекторе, чтобы построить сетку из дочерних коллайдеров, или Clear, чтобы удалить её.

// Bake at runtime from procedurally placed geometry; the block is called when the bake finishes navmeshNode?.NavMesh.bakeAsync() @(result : BakeResult) {     // result: BakeResult.Baked / .Empty / .Failed } // Ask for a walkable route between two world positions (on any navmesh) navmesh_find_path(NavPathQuery(from = character.localPosition, to = destination)) $(waypoints) {     // waypoints : array<float3> -- follow them in order } // or request a path on a specific navmesh navmeshNode?.NavMesh.findPath(NavPathQuery(from = character.localPosition, to = destination)) $(waypoints) {     // waypoints : array<float3> -- follow them in order }

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

Вы можете протестировать функциональность навигации самостоятельно в демонстрации navmesh (samples/showcases/navmesh) в лаунчере. Функциональность NavMesh всё ещё активно разрабатывается, новых возможности мы представим в ближайших обновлениях.

Частицы

Теперь вы можете создавать визуальные эффекты с помощью нового компонента ParticleSystem.

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

Всё настраивается в редакторе, где параметры сгруппированы по понятным категориям и редактируются с помощью специальных визуальных элементов управления.

Пост-эффект шейдеры на Daslang

Теперь пиксельные шейдеры могут работать как полноэкранные пост-эффекты. Напишите [pixel_shader], который принимает PostEffectInput, читает отрендеренную сцену с помощью sample_scene_color и sample_scene_depth, и прикрепите полученный материал к сцене с помощью компонента PostEffect.

require engine.render.shader_dsl var {     @color vignetteColor = float3(0, 0, 0)     strength = 1.5     radius   = 0.6     softness = 0.4 } [pixel_shader] def vignette(inp : PostEffectInput) {     let uv = inp.screenPos     let col = sample_scene_color(uv)     // Distance from center [0,1] -> vignette mask     let d = length(uv - float2(0.5, 0.5)) * strength     let mask = smooth_step(radius - softness, radius, d)     return PostEffectOutput(out_color = lerp(col, vignetteColor, mask)) }

Вместе с обновлением поставляется демонстрация post_effect с 12 готовыми эффектами: сканер, визуализация глубины, выделение по глубине, виньетка, иней, урон, исцеление, ночное зрение, радиальное размытие, повышение резкости, тепловая дымка и вид «из шлема».

Редактор спрайтов

Теперь текстуры могут содержать спрайты — именованные подпрямоугольники, вырезанные из атласа, которые можно использовать напрямую в игре. Выберите любую импортированную текстуру и нажмите Edit Sprites… в окне Импортера, чтобы открыть новый редактор спрайтов.

Редактор спрайтов — нарезка сеткой
Редактор спрайтов — нарезка сеткой

Доступны два режима нарезки:

  • Grid — нарезка сеткой по размеру ячейки или по количеству столбцов и строк с возможностью настройки смещения, отступов, привязки и опции пропуска полностью прозрачных ячеек. Идеально подходит для листов анимации.
  • Smartавтоматическая нарезка, которая находит спрайты на основе прозрачности с настраиваемым порогом альфа-канала и минимальным размером области. Идеально подходит для нерегулярных атласов.
Редактор спрайтов — умная нарезка
Редактор спрайтов — умная нарезка

Каждый спрайт можно редактировать индивидуально — переименовывать, изменять его прямоугольник, точку привязки и границы, а также удалять:

Редактор спрайтов — редактирование отдельного спрайта
Редактор спрайтов — редактирование отдельного спрайта

Умный импорт текстур

Импорт текстур был переработан вокруг единой настройки usage. Выберите Color, NormalMap, LinearGrayscale или LinearRGBA, и импортер выберет правильный формат пикселей, цветовое пространство и каналы. Для распространённых случаев (карты нормалей, градации серого) применение определяется автоматически, поэтому большинство текстур импортируется правильно без каких-либо изменений.

ручной выбор формата и флаги sRGB
один выпадающий список usage + опциональное сжатие

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

Пять текстур без сжатия— 90.6 MB on GPU
Те же текстуры, но со сжатием — 15.9 MB on GPU

Демонстрация с тайловой картой

Новая демонстрация (samples/new/tilemap) показывает, как загружать и отображать карты, созданные в редакторе Tiled и экспортированные в формате JSON. Это пока не нативная поддержка импорта из Tiled, но конвертер, поставляемый вместе с демонстрацией, уже очень близок к ней: поддерживаются ортогональная, шестиугольная и изометрическая ориентации карт, наборы тайлов из атласов (с учётом отступов и промежутков) и из коллекций изображений, перевороты тайлов, а также слои с параллаксом.

Desert - orthogonal map on an atlas tileset
Desert - orthogonal map on an atlas tileset
Sticker Knight - orthogonal platformer with parallax layers
Sticker Knight - orthogonal platformer with parallax layers
Hexagonal map
Hexagonal map
Isometric grass and water
Isometric grass and water

Векторный рендеринг шрифтов

Шрифты теперь рендерятся напрямую из контуров глифов на GPU, вместо использования предварительно сгенерированного растрового атласа шрифтов. Результат остаётся идеально чётким при любом размере — никакого размытия или пикселизации при масштабировании текста, анимации, размещении в 3D-мире или просмотре вблизи.

ПримечаниеTextEffect.Glow не поддерживается в новом рендеринге векторных шрифтов (текст отображается без этого эффекта). Используйте Outline или Shadow, чтобы имитировать эффект свечения.

Pre-baked font rendering (old)
Vector font rendering (new)
Pre-baked font rendering (old) in DogDispatch game
Vector font rendering (new) in DogDispatch game

Физика транспортных средств

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

📐 Изменения API

  • API генерации мешей был упрощён и теперь не требует обёрток build+GenericStorage (обратная совместимость сохранена).

✨ Новое

  • ИИ-помощник ищет информацию во встроенной документации EdenSpark/Daslang и примерах проектов и ссылается на конкретные файлы и строки; индекс и модель внедрения работают полностью офлайн, без необходимости аккаунта или ключа API
  • Переименовывайте ноды, файлы и ассеты прямо в окнах Inspector и Importer — выберите элемент, начните редактирование, нажмите Enter для сохранения или Escape для отмены.
  • Встроенное окно Profiler — графики времени кадров и рендеринга, счётчики рендеринга и теней, память за последние ~2000 кадров; открывается из Window ▸ Profiler
  • Кнопка Open Profiler на наложении статистики
  • Эффекты вибрации геймпада — добавьте тактильную обратную связь в свою игру с помощью вибрации контроллера. Используйте start_rumble() , чтобы запустить вибрацию с раздельным управлением низкочастотным (тяжёлым) и высокочастотным (лёгким) моторами, и задайте длительность в секундах, чтобы она остановилась автоматически. Вызовите stop_rumble() , чтобы прервать вибрацию немедленно. Вибрация автоматически приостанавливается, когда игра на паузе.
  • Поддержка мыши в триггерных действиях — комбинируйте кнопки мыши с триггерами джойстика для создания гибких схем управления.
  • Запросы сырого состояния ввода — проверяйте состояние ввода с клавиатуры, мыши и геймпада с помощью get_raw_active_state() (текущее удержание любого типа ввода), get_raw_just_pressed_state() (начало нажатия кнопки) и get_raw_just_released_state() (окончание нажатия кнопки).
  • Быстрое обнаружение нажатий — новые функцииis_any_* fпозволяют определить, есть ли активность на клавиатуре, мыши или геймпаде, без необходимости запрашивать полное состояние ввода.
  • Пост-эффект пиксельные шейдеры: PostEffectInput/ PostEffectOutput с функциями sample_scene_color и sample_scene_depth для чтения отрендеренной сцены
  • Компонент PostEffect — прикрепление материала пост-эффекта к сцене из кода или редактора
  • Демонстрация post_effect с 12 примерами эффектов
  • Узлы сравнения, select и покомпонентный lerp
  • Узел трансформации камеры
  • mod оператор
  • Вспомогательные функции в пиксельных шейдерах: пишите обычные функции def внутри файла .shader и вызывайте их из кода шейдера — компилятор автоматически встраивает их (инлайнит).[pixel_shader]требуется только для точки входа.
  • Большая новая библиотека примеров пиксельных шейдеров, каждый с готовым к использованию .material:
  • Примеры постобработки: ночное зрение, радиальное размытие, повышение резкости, иней, лечение, повреждение, тепловая дымка, шлем-оверлей, контур по глубине.
  • 2D-шейдеры: Мандельброт, ЭЛТ-экран, выпуклость, дизеринг, тиснение, калейдоскоп, диаграмма Вороного, градиентная карта, свечение и многие другие.
  • 3D-шейдеры: преломление сцены, туман по глубине.
  • Редактор спрайтов: нарезка текстурных атласов на именованные спрайты с помощью сетки и умной (на основе прозрачности) нарезки
  • Индивидуальное редактирование спрайтов: имя, прямоугольник, точка привязки, границы
  • Список спрайтов с прямоугольниками, отображаемыми прямо в импортере текстур
  • Настройка usage (Color / NormalMap / LinearGrayscale / LinearRGBA) с автоматическим определением, заменяющая ручной выбор формата и флагов sRGB
  • Однокликовое сжатие текстур через настройку `compressTexture`
  • Предпросмотр текстур показывает реальный размер в памяти видеокарты и количество каналов импортированной текстуры
  • Демонстрация с тайловой картой (samples/new/tilemap): конвертирует и порождает JSON-карты из Tiled (.tmj/.tsj) в виде узлов-спрайтов — поддерживаются ортогональная, шестиугольная и изометрическая ориентации, наборы тайлов из атласов и коллекций изображений, перевороты тайлов, слои с параллаксом и типизированные свойства объектов.
  • Отдельная вкладка Gamepads — все настройки геймпадов теперь собраны в одном месте, отдельно от настроек Action sets
  • Интерактивная визуализация и настройка мёртвых зон геймпада — регулируйте мёртвые зоны аналоговых стиков с визуальной обратной связью, показывающей кольца мёртвых зон и полный диапазон
  • Переназначение геймпадов — если у вас подключено несколько контроллеров, легко меняйте, какой геймпад управляет каким игровым слотом
  • Переключение кнопок A/B и X/Y для каждого геймпада — меняйте местами A↔B и X↔Y для каждого геймпада отдельно, что удобно для левшей или разных раскладок
  • Постоянные настройки управления — все ваши привязки ввода и настройки сохраняются между сессиями, поэтому вам не нужно перенастраивать их при каждом запуске. Используйте «Reset All» в любой момент, чтобы вернуться к стандартным настройкам движка
  • Добавлен компонент VehicleController, который позволяет физическому телу вести себя как автомобиль на колёсах
  • Добавлен пример, демонстрирующий возможности VehicleController
  • Поиск на вкладке Browse для поиска опубликованных игр
  • Удаление скриншотов в менеджере скриншотов с возможностью мгновенной отмены
  • Кнопка для копирования URL поста в буфер обмена без открытия в браузере
  • Полная документация редактора: панель инструментов, окно просмотра, аутлайнер, инспектор, панель проекта, импортер ассетов, консоль, внутренний редактор кода, главное меню, настройки, уведомления и перетаскивание
  • Обновлена документация по навигации, ресурсам и пользовательским шейдерам
  • Компонент HDStaticShadows для настройки статических теней в рендерере высокого разрешения
  • Компонент ParticleSystem для создания визуальных эффектов для ваших игр
  • Удалены префиксы _ в селекторе цифровых клавиш в настройках ввода пользовательского меню
  • Удалены подтверждающие всплывающие окна из кнопок "Exit" и "Restart"
  • Компонент NavMesh — задайте профиль навигационной сетки и выполните её построение (бейк) с помощью этого компонента на основе геометрии коллайдеров, находящихся в узле компонента. Построение можно выполнить как в редакторе, так и через код.
  • Поиск пути и запросы к навмешу — доступны как в виде методов компонента NavMesh, так и в виде свободных функций для текущей сцены.
  • NavCorridor — состояние хранилище для продвинутого поиска пути.
  • navmesh демонстация — демо-пример поиска пути для персонажа по клику мыши, управляемого NavCorridor; нажмите С во время выполнения, чтобы сравнить его с наивным следователем по точкам пути.

🔧 Улучшено

  • Продолажем улучшать работу с ИИ-ассистентами — встроенные инструкции и руководства для проектов, которые читают агенты, были переработаны и расширены, поэтому ассистент лучше соблюдает соглашения вашего проекта с самого начала
  • Теперь гарантируется, что ассеты полностью загружены до того, как редактор или запущенная игра начнут их использовать — больше нет пропавших мешей или одно-кадровых глюков после перезагрузки
  • Тяжёлые меши подготавливают свои данные без блокировки других загрузок, а сборки проекта создают гораздо меньшую нагрузку на файловую систему
  • Импорт моделей сообщает о проблемах валидации (например, проблемы с иерархией скелета) с понятными сообщениями об ошибках, а не молча создаёт сломанный ассет
  • Звук продолжает улучшаться во всех аспектах, включая позиционный 3D-звук — более мощный и плавный, чем раньше
  • Удерживайте Shift при перетаскивании угла манипулятора Bounds для пропорционального масштабирования с сохранением соотношения сторон — работает для элементов UI и 3D-боксов
  • Изменения в настройках импорта моделей и материалов теперь поддерживают undo/redo, как и любые другие изменения в редакторе
  • Панель проекта показывает размер файлов и папок для выбранных элементов
  • Когда текстура или ассет не загружаются, лог теперь сообщает причину (отсутствие файла, пустой файл или реальная ошибка декодера) вместо общего сообщения; декодирование SVG выполняется только для файлов, которые действительно выглядят как SVG, поэтому настоящая ошибка изображения больше не скрывается за вводящим в заблуждение сообщением об ошибке SVG
  • Трассировки стека теперь визуально выделяются своим цветом, что чётко отделяет их от основного текста ошибки
  • Улучшен выбор ресурсов — показывает «No resources found», когда поиск не даёт результатов, и предлагает плитку «New resource» для генерации текстур с помощью ИИ
  • Окна префабов теперь можно закрывать через крестик на вкладке
  • Индикатор профилирования на панели инструментов теперь называется Daslang Profiler, чтобы отличать внутриигровую инструментацию для каждой функции от встроенного окна Profiler и внешнего приложения daProfiler
  • Скомпилированные шейдеры используют меньше регистров ГПУ и слотов сэмплеров, а оценка на ЦПУ стала быстрее
  • Более понятные сообщения об ошибках компиляции шейдеров и вывод дизассемблирования
  • Использование шейдера с неправильным типом использования теперь сообщается как ошибка валидации вместо молчаливого сбоя
  • Предпросмотр текстур в редакторе спрайтов сохраняет соотношение сторон изображения
  • Strudel улучшен, стабилизирован и расширен — больше эффектов и синтезаторов, а также режим fire-and-forget для событийной музыки и звуковых эффектов
  • Импорт текстур стал более надежным: более понятные сообщения об ошибках и обновленный формат метафайлов (существующие проекты продолжают работать)
  • Отображение сообщений об ошибках теперь понятнее — когда происходят ошибки, они появляются в специальной области с подсказкой «Press Restart to continue», так что вы сразу понимаете, что пошло не так и что делать
  • ИИ-агенты теперь могут работать с игровым временем (замедлять, ускорять или замораживать его) и с префабами

🐛 Исправлено

  • Редкие сбои и зависания при параллельной загрузке ассетов и операциях с файлами
  • Ассеты, ссылающиеся на другие ассеты (рекурсивная загрузка), больше не ломаются
  • Файлы, записываемые в папки проекта, теперь появляются атомарно — система сборки больше не может подхватить полузаписанный файл
  • Цвет оверлея FPS на экране больше не мерцает, когда частота кадров находится точно на пороге качества
  • Редактор теперь переживает сброс ГПУ-устройства (например, обновление драйвера или восстановление после сбоя) вместо того, чтобы падать вместе с ним
  • Меши с castShadowsOnlyForStatic снова отбрасывают тени
  • Аниматор больше не падает, когда маска анимации ссылается на несовместимый скелет
  • Исправлена коллизия имён между полями встроенных компонентов
  • Удалён спам в логе "material was hot-reloaded" при каждом запуске
  • Область приёма перетаскивания папок теперь покрывает всю область папки, а не только заголовок
  • Исправлена ошибка, из-за которой добавление RigidBody к CharacterController заставляло объекты, касающиеся персонажа, непредсказуемо дёргаться
  • Кубические карты и texture2d массивы теперь можно корректно просматривать и редактировать в редакторе
  • Текстуры, созданные из кода, больше не получают неправильный режим sRGB
  • Исправлена ошибка, препятствующая установке префаба по умолчанию, если ни один префаб не был открыт для редактирования