Движок VSO: Под капотом нашего редактора
Недавно наши ребята из движковой команды выпустили статью о том, как мы навели, «красивостей» в нашем внутреннем движке. Речь шла о концепциях и том, что было важно для нас при улучшении визуальной составляющей. В этой статье я хочу рассказать, как все работает с технической стороны.
Итак, у нас есть нативный С++ движок, который работает на десктопных и мобильных платформах. Игры мы разрабатываем на десктопе, соответственно на десктопе есть редактор. Весь редактор построен на открытой библиотеке ImGui.
ImGUI
Эта библиотека работает по принципу immediate graphic user interface. Собственно, это заключено в ее названии. Суть в том, что мы одновременно описываем интерфейс и одновременно обрабатываем реакции на него. Например:
Этот код одновременно и рисует кнопку, и проверяет нажатие на кнопку, и возвращает true, если она была нажата. Довольно удобно.
Но, как говорится, есть нюанс. Он заключается в парадигме immediate ui (мгновенный интерфейс). Дело в том, что, когда мы рисуем элемент один за другим, мы банально не знаем, что будет дальше. Будет ли он перекрыт кем-то, сколько еще кнопок в этой строке и т. д.
Отсюда возникает проблема с версткой. Адаптивную верстку делать весьма сложно. Это когда мы задаем пропорциональные размеры кнопок, например. А ведь бывают ситуации гораздо сложнее нескольких кнопок в строке. И в случае ImGui нужно все рассчитывать заранее. Сама библиотека дает некоторый функционал для упрощения адаптивной верстки, но, скажу честно, это довольно простые функции.
Casket
Мы решили сделать свой фреймворк поверх ImGui и назвали его Casket. Этот фреймворк оборачивает immediate режим в ООП. Все элементы — кнопки, поля ввода, текст, чекбоксы и т. п. — были обернуты в классы. Элементы выстраиваются в дерево. Так мы описываем вложенность и пропорции. И так как теперь мы знаем, что «будет дальше» при отрисовке, можно заранее посчитать все размеры. Выглядит это примерно так:
Внутри ООП-классов вызов все той же отрисовки ImGui, но с жестко заданной позицией и размером, рассчитанными ранее.
Важный аспект этого фреймворка в том, что он может встраиваться в Immediate код. То есть вывели пару элементов по классике, затем создали Casket-контейнер, вывели его, продолжили в immediate-режиме.
Стили
У нас уже есть «обертка» над ImGui, есть возможность перед отрисовкой менять цвета, и этим мы воспользовались. Мы сделали простые классы-структуры, описывающие стили разных элементов. Отдельно для кнопки, отдельно для поля ввода, чекбокса и т. п. И сделали общий класс со всеми существующими стилями, задали стили по умолчанию.
Затем, когда Casket-элемент создается, он берет стиль по умолчанию и просто копирует себе внутрь. Если нам нужен другой стиль — просто передаем новую копию в элемент или же меняем параметры прямо в копии элемента. Так получается работать со стилями гибко и удобно.
Однако у этой системы есть один минус — цвета в стилях часто дублируются. На этот счет у нас в планах есть доработка: сделаем палитру цветов, а в стилях уже будет использоваться палитра.
Общее устройство
Окей, у нас есть все нужные инструменты для построения редактора. Давайте теперь посмотрим, как он устроен в общем.
Внутри у нас есть один базовый класс редактора, который объединяет в себе все. В нем создаются и регистрируются окна. Каждое окно — это отдельный класс. Здесь мы не занимались архитектурными виражами и сделали все просто: для каждого окна есть один класс, который отвечает и за отрисовку редактора, и за обработку действий в нем. Так сделано не потому, что мы глупые и не понимаем значения архитектуры, это было сделано осознанно. Мы не хотели лишнего усложнения кода, мы хотели быстрой разработки редактора. Можно было бы разделять по-классике на MVC, но это было бы разбиение ради разбиения.
В каждом окне есть вызов функции отрисовки интерфейса. До Casket мы все делали там. С приходом Casket мы стали инициализировать большинство элементов в инициализации окна.
В принципе, описывать каждое окно будет не очень интересно, проще уж выложить исходники. На самом деле редактор — это много рутины. Далее я попробую рассказать о каких-то интересных моментах, с которыми мы столкнулись.
Инспектор
Так мы называем окно, где показываем свойства объектов на сцене. Пожалуй, самое интересное место в редакторе. Мы передаем ему ссылку на объект, который необходимо отобразить, его задача показать список полей соответствующих полям классов сущностей, которые прицеплены к объекту.
Здесь не обойтись без рефлексии. В прошлой статье мы уже писали, что использовали библиотеку rttr для рефлексии, но в итоге заменили ее своей. Суть не поменялась: мы можем взять тип у класса, а у типа взять список полей. Есть простые типы для всяких чисел, строк и т. д., есть тип объекта, который содержит в себе список полей класса, есть тип массива с доступом по элементам и есть тип ассоциативного типа с доступом по ключу.
Построение полей инспектора опирается на данные рефлексии. Для передачи типа, ссылки на объект и дополнительных параметров мы используем агрегирующую структуру InspectorContext. Чуть ниже будет поподробнее про нее.
Для описания инспектора отдельного класса мы используем класс-интерфейс с одной основной функцией:
В параметры мы передаем контекст, через него мы можем получить объект, с которым работаем, установить новое значение объекту. Возвращаем из функции true или false в зависимости от того, был ли объект изменен внутри.
Есть дефолтный класс, который реализует эту функцию, выстраивая поля ввода по данным из рефлексии. Затем, в зависимости от типа поля, он вызывает соответствующую функцию.
Интерфейс OnInspector можно перегрузить и сделать свой уникальный инспектор, с помощью Casket и ImGui вывести элементы как нужно.
InspectorContext
Теперь чуть подробнее об InspectorContext. Как я уже написал выше, он хранит в себе редактируемый объект. Если мы редактируем указатель на объект, мы храним указатель. Если редактируем значение — храним копию значения. Из контекста, хранящего в себе объект, можно сделать дочерний контекст на поле этого объекта. Аналогично с массивами и элементами.
Далее, когда значение в контексте изменено, происходит изменение значения и во всех родительских контекстах. Это нужно для ситуаций, когда в иерархии контекстов есть копия объекта. Его нужно скопировать целиком обратно.
Также по ссылкам на родительский контекст можно получить путь до редактируемого поля, из которого сформировать команду Ctrl+Z для системы.
Помимо ссылки/копии редактируемого объекта, контекст содержит в себе много вспомогательной информации. Нужно ли ограничивать ширину поля, является ли поле readonly и т. п.
Эту систему отображения полей редактируемой сущности мы используем во многих местах редактора. Фактически ей можно «скормить» ссылку на любой объект, и редактор автоматически построит необходимый интерфейс для ее редактирования.
ImGuiID
Говоря об immediate ui, обычно думают, что элементы не хранят свое состояние. Ведь он мгновенный, значит, ничего хранить не должен. На самом деле это не так. Когда вы нажимаете кнопку, она приобретает состояние нажатой и забирает на себя фокус. Когда редактируете текстовое поле, то промежуточный текст не сразу передается обратно.
Так же и в нашем редакторе. Есть поля, которые хранят свое промежуточное состояние. Например, поле массива позволяет выбрать тип создаваемого элемента (если в массиве хранятся поинтеры). И выбранный тип фактически записать некуда. Структура данных предполагает только сам массив, ничего более.
Здесь используется механизм сохранения состояния в статичном хранилище по уникальному идентификатору — ImGuiID. Этот идентификатор генерируется в зависимости от идентификатора текущего элемента и идентификаторов группы, в которой находится элемент. Своеобразный хеш, сгенеренный из данных, в каком именно месте мы рисуем кнопку или что-то другое. И так как место отрисовки всегда одно и то же, то и хеш всегда генерируется один и тот же. Так можно сохранять состояния отдельных элементов.
Внутри ImGui есть своя хеш-таблица таких данных, можно использовать и ее. Можно хранить свои локальные таблицы и использовать сгенеренный ImGuiID для своих целей.
Иерархия
Наш движок имеет в себе граф сцены. Это значит что все игровые сущности представлены объектами и нодами, объединенными в иерархию. Эту иерархию мы и показываем в специальном окне.
Сама по себе задача показать дерево нод не очень сложная. Даже наивная реализация довольно быстро делается. Но проблема в том, что таких нод могут быть тысячи, и наивная реализация, конечно же, тормозит.
Здесь стоит отметить еще тот факт, что мы разрабатываем игры в режиме Debug. А те, кто знаком с MSVS (коим пользуются многие наши коллеги), знают, что Debug на порядок-два медленнее Release. При этом все так же нужно показывать тысячи нод в одном окне.
Мы решили эту проблему классически: показываем только то, что видно в данный момент, а при прокрутке дополняем/обрезаем видимые строки.
Также необходимо быстро отображать изменения в дереве, если что-то включилось/выключилось, удалилось или добавилось. Перестраивать постоянно дерево — дорого. Поэтому мы добавили специальные сообщения, которые рассылают сами ноды, если с ними что-то случилось. Дерево подписывается на эти сообщения и реагирует мгновенно.
Обозреватель ассетов
В этом окне мы показываем ассеты и ресурсы, с которыми работает игра и которые может использовать разработчик. Слева дерево папок, справа ассеты в текущей выбранной папке.
Движок предоставляет нам иерархию папок и ассетов в ней, нам необходимо лишь отобразить это. С деревом все просто — мы уже делали дерево в иерархии. Здесь мы просто фильтруем только папки и показываем их. Ничего сложного.
А вот с отображением ассетов уже интереснее. У нас есть три режима отображения: плитка, список и таблица. Каждый из трех способов — это три разных алгоритма отрисовки ассетов. Отображение плиткой и списком — просто рисуем один элемент за другим. Здесь можно рассмотреть, как ImGUI работает с зонами прокрутки. Начинается все, конечно же, с ImGUI::BeginChild, который обозначает группу элементов в зоне прокрутки. Далее мы просто рисуем элементы, обозначая их в системе — ImGUI::ItemAdd. Чтобы прокрутить список до нужного элемента, в момент его отрисовки вызываем ImGUI::SetScrollHereY();.
С отображением таблицей немного сложнее. Сначала нам нужно пройтись по всем ассетам и собрать информацию о том, какие есть редактируемые поля. Эти поля будут столбцами в таблице. Далее используем эту информацию, чтобы отрисовать элементы и их поля в таблице по очереди.
Еще у нас рисуются тамбнейлы — это маленькие превью содержимого ассетов. Если с текстурами все просто, то с моделями, префабами, частицами приходится рендерить их налету. Мы используем job-system на корутинах, чтобы немного нагружать основной поток этой задачей. Все, что отрендерили, кешируем на диск, ну а потом уже просто отображаем как текстуру. В будущем хотим еще добавить динамики к превью анимаций и частиц.
Нодовый редактор
У нас есть несколько нодовых редакторов в движке. Они используются для разных фич: стейтграф анимаций, визуального скриптинга, отображения взаимосвязей ивентов и квестов.
Их все объединяет общий интерфейс нодового редактора. Он предоставляет простое шаблонное API, через которое передаются данные о блоках и их связях. Внутри он работает со своей структурой данных.
Здесь изобилует кастомный код отрисовки и обработки ввода в ImGUI. Для отрисовки используются стандартные примитивы ImGUI, такие как прямоугольник, линия, кружки. Но для отображения кривых мы сделали свою реализацию кривой безье. Она умеет постепенно заполняться как прогресс-бар для отображения переходов между блоками. А еще умеет понимать клики по ней.
С обработкой ввода поначалу складывалось все сложно. Так как блоки могут свободно двигаться во все стороны и умеют разворачиваться, неизбежна ситуация перекрытия блоков. Если обрабатывать ввод наивно — попали в прямоугольник и нажали кнопку мыши — то неизбежны ложные прокликивания. Например, работая с одним блоком, можно случайно что-то поменять в другом.
Поэтому мы стали применять невидимые кнопки. ImGUI считает их полноценными элементами управления, поэтому понимает, кто из них выше и куда в итоге попадает клик. Чтобы нарисовать такую кнопку, нужно вызвать функцию InvisibleButton. Далее мы можем накладывать такие кнопки сколь угодно много друг на друга, не получая ложных кликов.
Мы в Playrix постоянно развиваем свой движок, и есть еще немало вещей, над которыми наша команда работает прямо сейчас. Если у вас есть вопросы о VSO, пишите комментарии, и мы с командой обязательно ответим на них здесь или в следующих статьях.
Vso software class что это
Скриншот VSO Downloader
VSO Downloader – это бесплатный загрузчик развлекательного и образовательного контента из сети Интернет. Кроме того, программа позволяет конвертировать понравившееся видео в популярные форматы для просмотра как на ПК, так и на других устройствах.
VSO Downloader поддерживает механизмы загрузки более тысячи веб-сайтов, таких как YouTube, IMDB, Kinopoisk, VK, EuroSport и многих других. Пользователю необходимо всего лишь открыть приложение и запустить любой видеоролик, после чего загрузка начнется автоматически.
Программа предоставляет пользователю возможность одновременной закачки нескольких файлов. Также в его распоряжении находятся опции остановки (паузы) и догрузки (повторного запуска). При этом фильтры, входящие в состав загрузчика, своевременно распознают и удалят надоедливую рекламу, оставив исключительно полезное содержимое.
VSO Downloader совместим с большинством популярных браузеров – Microsoft Edge, Google Chrome, Mozilla Firefox, Opera, Safari, а также с множеством VPN-клиентов, благодаря чему обеспечивается максимальная безопасность и конфиденциальность пребывания пользователя онлайн.
Интерфейс программы выполнен в фирменном стиле. Набор инструментов и расположение элементов напоминают известные torrent-клиенты. Загрузка роликов выполняется быстро и легко с помощью автоматического определения URL-адреса.
VSO Downloader способен загружать видеофайлы с разрешением до 4К, извлекать звуковые дорожки, распознавать и сохранять потоковое видео и радиоэфир, а также переводить это все в подходящие форматы с целью дальнейшего воспроизведения на любом проигрывателе.
Преимущества VSO Downloader
Недостатки VSO Downloader
Заключение
VSO Downloader ведет себя корректно, однако наблюдается небольшая задержка при запуске клиента, что видимо связано с запуском сетевых драйверов, необходимых для его работы.
Внимание
Для полноценной работы загрузчика требуется наличие на компьютере пользователя свободно распространяемого пакета Microsoft Visual C++ 2010, который доступен на странице загрузки нашего сайта.
Установка VSO Downloader
Установка программы не занимает много времени. Файл-инсталлятор доступен для скачивания ниже на данной странице описания продукта. По завершении загрузки запустите исполняемый файл vso_downloader_setup.exe. В появившемся окне контроля учетных записей Windows (UAC) подтвердите действие, щелкнув Да. Далее выберите язык VSO Downloader. В окне приветствия мастера установки нажмите Next. Пользуясь подсказками мастера, примите условия лицензионного соглашения, а также укажите путь для будущего расположения программы. Нажмите Next и перейдите на этап выбора дополнительных опций. Укажите, какие компоненты загрузчика необходимо установить, как то ярлыки и сетевые драйвера, отметив соответствующие пункты галочками. При возникновении каких-либо трудностей оставьте все значения по умолчанию. Перейдите к следующему шагу и дождитесь завершения установки. По необходимости подтвердите установку драйверов NDIS и WinPcap путем нажатия кнопки Install в появившемся окне мастера. По завершении процесса запустите программу с помощью ярлыка на рабочем столе либо из меню Пуск.
Чтобы изменить язык интерфейса щелкните пункт Options на панели инструментов в левом верхнем углу программы. Выберите General. В открывшемся окне в разделе General перейдите в подраздел Language. Далее установите требуемое значения языка с помощью предложенного перечня. Чтобы применить настройки нажмите Save. Изменения вступят в силу незамедлительно.
Изменения в последней версии (история изменений)
Комментарии
Комментариев еще нет. Вы можете оставить свой комментарий к программе VSO Downloader. Для этого нужно войти. Если вы еще не с нами – зарегистрируйтесь.
Внушительный пакет программ от VSO Software. Поддерживает все известные форматы. в состав входят все последняя финальные версии. С помощью программы Может создавать фильмы, которые можно записать и просмотреть на DVD.
Список поддерживаемых форматов: AVI (DivX, XviD, etc.), DV AVI, MP4 (inc. Sony PSP and Apple iPod), WMV, 3GP, 3G2, QuickTime (MOV, QT), SWF, DVD, VOB, VRO,MPG, MPEG 1,2,4, DAT, VCD, SVCD, ASF, ASX, MJPEG, H.263, H.264, Real Video (RM, RMVB), DVR-MS, MKV, OGM, FLV.
В состав входят :
• VSO ConvertXtoDVD 5.1.0.14 Final
— Note: ConvertXtoDVD 5.2.0.5b update is also included for beta testing.
• VSO Video Converter 1.3.0 Final
• VSO DVD Converter Ultimate 3.3.0 Final
• VSO Downloader Ultimate 4.0.0.19 Final
• VSO Blu-ray Converter Ultimate 3.3.0 Final
• VSO CopyTo 5.1.1.3 Final
• VSO Blindwrite 7.0.0.1 Final
VSO Video Converter — неплохой видеоконвертер от разработчиков ConvertXtoDVD. Позволяет преобразовывать видео DVD, AVI, MKV, iPhone, iPad, iPod, Android, Xbox, PS3, PlayStation, MPEG2, MPEG4, H.264, Xvid и др., извлекать аудио из видео в MP2, MP3, AC3, RA, M4A, OGG, AAC и другие форматы. Есть функция пакетного преобразования, предварительного просмотра во встроенном проигрывателе. Вы сможете выбрать и настроить аудио и видео-кодеки, параметры конвертирования. Программу отличают простой и удобный интерфейс с возможностью смены цветовых решений оформления.
Особенности:
• Видеоконвертер «всё в одном»
• Высочайшее качество изображения + быстрая конвертация
• Конвертация в 1 клик и расширенные возможности
• Впечатляющий список доступных опций
Конвертация видео любого формата
• Из любых видео форматов, включая DVD, Avi, Blu-ray, flv, mp4, dvd, iso.
• В: DVD, AVI, MKV, iPhone, iPad, iPod, Xbox, PS3, Playstation, Mpeg2, Mpeg4, H264, Xvid, телефоны и планшеты на Android..
• Доступно много аудио: стерео, мультиканальное, AC-3, dts, AAC, Mp2
• В комплекте исчерпывающий набор инструментов: нет необходимости в сторонних программах!
• СВОБОДНАЯ конвертация в MKV, OGG, Ремукс форматы!
VSO DVD Converter Ultimate — это очень мощное профессиональное программное средство, которое направленно для конвертации видеофайлов в DVD. Кроме того, Вы легко сможете создавать DVD-видео с уникальным меню (содержит множество шаблонов) и записывать видео на диски. Поддерживается большинство распространённых видеоформатов. Разработчик позаботился и об обладателях видеокарт семейства nVidia, включив в проект поддержку технологии NVIDIA CUDA, которая позволяет конвертировать видео в намного быстрее.
В программе присутствует выбор языка субтитров и аудио, возможность выбора шаблонов DVD меню, так же в утилиту встроено множество скинов и Вы без проблем сможете изменить интерфейс программы и многое другое.
Особенности VSO DVD Converter Ultimate 2:
• Преобразование DVD фильмов в форматы AVI, DVD, MKV, iPad, iPhone, Xbox, PS3 и др.
• Высокое качество и скорость конвертации.
• Возможность выбор языка субтитров и аудио.
• Копирование DVD.
• Загрузка DVD из ISO образа.
• Наличие функции предварительного просмотра.
• Оптимизация под многоядерные процессоры.
• Поддержка технологии NVIDIA CUDA.
• Поддержка наиболее популярных кодеков H264, Mpeg4, Xvid, AC3, AAC, DTS.
• Запись готовых проектов на оптические носители.
VSO Downloader — менеджер для многопоточной загрузки файлов, с помощью которого можно загружать онлайн-видео с различных сервисов видеохостинга, как например YouTube. Для загрузки нет необходимости копировать и вставлять URL-адрес — программа автоматически обнаруживает и скачивает потоковое видео, отсекая при этом различные баннеры и рекламные объявления. Присутствует поддержка HTTP, HTTPS протоколов и прокси-серверов, возможность докачки и прочее.
Дополнительная информация:
• 100% бесплатен (нет рекламы, шпионских программ, панелей инструментов).
• Совместим с множеством сайтов потокового видео/аудио.
• Обнаруживает и загружает медиа (аудио + видео) файлы из браузера (обнаруживает рекламу и не загружает ее).
• Не нужно копировать и вставлять URL — медиа определяется автоматически.
• Умное автоматическое переименование файлов (ручное переименование файла во время загрузки также возможно «F2»).
• Очень легкий, использует наименьшее количество системных ресурсов, занимает меньше 5 Мб памяти и использует всего 2% процессора при скачивании.
• Высокоскоростной движок загрузки и надежный многопоточный алгоритм для загрузки файлов.
• Поддерживает HTTP, HTTPS протоколы и все основные VPN и прокси-сервера (совместим с SOCKS5 протоколами и HTTP).
• Функция возобновления загрузки начнет загрузку с того, где она была прервана (когда процесс загрузки прерывается, вам не нужно начинать сначала).
• Работает независимо от веб-браузера, следовательно, он работает со всеми, в том числе с Internet Explorer, Firefox, Chrome, Opera и многими другими.
VSO Blu-ray Converter Ultimate — быстрая и простая в работе программа для преобразования Blu-Ray видеофайлов в DVD, AVI, MKV, iPhone, iPad, Xbox, PS3 форматы, с возможностью записи готовых проектов на оптические носители. В VSO Blu-ray Converter Ultimate реализован встроенный анализатор качества, с помощью которого можно установить соответствующие настройки для получения высококачественного видео. Присутствует выбор языка субтитров и аудио, установка очередности проигрывания видео и др. Готовые проекты можно просмотреть на практически любом DVD-плеере.
Особенности:
• преобразование Blu-ray в MP4, AVI, HD-AVI, MKV, HD-MKV, H264 и другие видео форматы
• конвертер видео для iPhone, iPod, iPad, Xbox, PS3 и других мобильных телефонов, игровых приставок и проигрывателей
• выбор различных кодеков видео (H264, MPEG4, XviD) и аудио кодеков (AC3, AAC, DTS)
• запись DVD из Blu-ray видео
• поддержка многоядерных процессоров и NVIDIA CUDA
• выбор файлов для сохранения и конвертирования
• настройка параметров конвертирования
• пакетный режим конвертирования
• предварительный просмотр
VSO CopyTo — очень простая в использовании программа, благодаря которой вы сможете практически одним нажатием кнопки записывать нужные файлы в любом формате на CD/DVD диски. После установки программа интегрируется в проводник, в результате чего запись происходит быстро и оперативно. По принципу работы схожа с программами, предназначенными для пакетной записи, но при этом не создаёт ограничений для чтения записанных дисков. Поскольку они записываются в обычном формате, прочитать их можно на любом компьютере. Для записи достаточно выделить в файловом менеджере группу файлов и папок, которые необходимо записать на носитель, вызвать контекстное меню правой кнопкой мыши и выбрать в нем пункт CopyTo.
Главные особенности:
• Копирование дисков с музыкой, видео, играми, софтом.
• Интеграция с Windows.
• Создание Audio CD из MP3, WMA, Ogg Vorbis, MusePack, APE файлов.
• Создание Дата дисков с поддержкой ISO, Joliet, UDF форматов.
• Мультисессионные и мультизагрузочные.
• Создание видео DVD из домашнего или другого видео.
• Поддержка большинства CD, DVD, Blu-ray приводов.
• Поддержка CD-R/RW, DVD-R/RW, DVD+R/RW, DVD-RAM, DVD+R DL, DVD-R DL, BD-R, BD-RE болванок.
• Поддержка Double Layer и HD-Burn технологий.
• Высокая скорость работы.
• Высокое качество результата.
• Удобный пользовательский интерфейс с многоязычной поддержкой.
VSO BlindWrite — одна из самых эффективных утилит для копирования CD и DVD дисков. Программа поддерживает большое количество форматов и часто обновляется. BlindWrite использует усовершенствованную технологию считывания/записи, а также особый алгоритм коррекции ошибок. Данная утилита прекрасно подходит для создания резервной копии любого типа данных – файлов, аудио CD, DVD- фильмов и т. д.
Она оптимизирована для работы с высококачественными приводами и поддерживает большое число форматов, в том числе BlindWrite 4.x (.BWT), CloneCD (.CCD), Iso images (.ISO), Cuesheet/Binary (.CUE/.BIN), Alcohol (.MDS). BlindWrite доступна на многих языках, в том числе и на русском.
Особенности:
• Копирование дисков с музыкой, видео, играми, софтом
• Интеграция с Windows
• Создание Audio CD из MP3, WMA, Ogg Vorbis, MusePack, APE файлов
• Создание дисков данных с поддержкой ISO, Joliet, UDF форматов
• Мультисессионные и мультизагрузочные
• Создание видео DVD из домашнего или другого видео
• Поддержка большинства CD, DVD, Blu-ray приводов
• Поддержка CD-R/RW, DVD-R/RW, DVD+R/RW, DVD-RAM, DVD+R DL, DVD-R DL, BD-R, BD-RE болванок
• Поддержка Double Layer и HD-Burn технологий
• Высокая скорость работы
• Высокое качество результата
• Удобный пользовательский интерфейс.



