Мы давно хотели опробовать Metal API, но долгое время не представлялось такой возможности. Все наши предыдущие проекты под Mac использовали OpenGL для рендеринга.
Я думаю, все в Elverils с почтением относятся к OpenGL, но к сожалению, многие подходы, используемые в нём, устарели, и добиться максимальной производительности с ним становится всё сложнее.
Даже во времена портирования первой версии Divinity: Original Sin под macOS в 2015 году приходилось использовать довольно подозрительные и неочевидные хаки с OpenGL, чтобы, например, ускорить подгрузку текстур во время быстрого вращения камерой.
Нас давно уже не пугает перспектива использовать специфичное графическое API для разных платформ, ведь основная цель — получить наибольшую совместимость и производительность. Да и вряд ли удалось бы получить хороший результат с использованием прослойки наподобие Vulkan → Metal.
Так что это был однозначный выбор в сторону Metal API. Metal позволяет управлять ресурсами ГПУ практически напрямую. С учётом архитектуры современного железа и потребностями разработчиков его можно считать удобным настолько, насколько это вообще возможно.
Также не стоит забывать и про доступные для Metal средства отладки, они значительно упрощают разработку и сохраняют время. Так что когда мы взялись за новый порт, у нас не было никаких сомнений в выборе графического API.
Из-за необходимости поддержки старых версий macOS выбрали более старую версию Metal 1.2. И тут всё не так гладко — это привело к необходимости использовать более медленный код для загрузки графических подпрограмм (шейдеров).
Как итог, результат нас не устроил, старые версии macOS из-за большого количества мелких проблем (ошибки в шейдерах, ошибки в видеодрайверах) получили статус «неподдерживаемые». В будущем мы планируем начать уже как минимум с Metal 2.0.
Основной этап с базовыми вещами удалось сделать в течение трёх недель, дальше всё сводилось к багфиксу, оптимизации и реализации каких-то уж особо специфичных вещей. Конечно, ещё были тысячи шейдеров, часть из которых предстояло переписать вручную. Но основываясь на прошлом опыте, мы делали всё это параллельно — один человек отвечал за шейдеры, другой за шейдеры материалов, ещё один — за базовый рендеринг.
Уже буквально через пару недель мы могли «наслаждаться» немного забагованным главным меню, а дальше уже сосредоточиться на различных эффектах, тенях и постобработке.
Всегда есть возможности для дальнейшей оптимизации. Вопрос лишь в том, насколько это оправданно в масштабах проекта. Все современные работающие под macOS устройства обладают достаточной производительностью, чтобы выдавать хорошую картинку в Divinity: Original Sin 2. Самое интересное, что перенос этого кода на iOS-устройства должен быть интуитивным и безболезненным.
Офигенная игра
Комментарий недоступен
Это они на жёстких стульях весь день работают ? Проблем со спиной нет ?
У меня поясница дико болеть начинает ,если на жёстком стуле долго сижу.
Только на время съемок, мягкие были слишком громоздкие и не очень вписывались.
один из лучших портов, так держать ребята!
А я как раз неделю назад в стим зашел и увидел, что моя Дивинити теперь доступна на маке
Спасибо, чуваки =)
А на Switch Divinity вы портируете?