На прошлой неделе я много работал над подготовкой к релизу OVERVIEW. Он уже выпущен на Vive Port, страница на Steam уже онлайн, релиз будет в ближайшие 2 недели. Для релиза на Oculus Store требуется дополнительная работа.

Основные изменения для VR – реализация «управления взглядом». Это способ взаимодействия с интерфейсом без мыши или VR-контроллеров. Когда открывается меню или какое-либо диалоговое окно, на нем появляется курсор в виде точки, которая следует за взглядом пользователя. Она работает как дубликат курсора мыши: если назначить контрол «взаимодействие с интерфейсом» на какую-либо кнопку геймпада, она будет действовать как щелчок левой кнопкой мыши. Я также добавил аналоговый контрол для дублирования колесика мыши для упрощения навигации в окнах с полосами прокрутки. Он может быть привязан к оси геймпада или сенсорной панели контроллера. Итак, теперь SE почти полностью функционален в VR: вы можете получить доступ к любому окну интерфейса и использовать его с помощью VR-контроллера или геймпада, без необходимости нащупывать мышь и клавиатуру или снимать шлем. Единственное, что осталось адаптировать для VR, это заменить тулбары по краям экрана на что-то более удобное (например, прикрепить их к самим VR-контроллерам), и адаптировать браузер солнечной системы, режим чарта и карту. Последние два вообще ещё не тестировались в VR.

Другим интересным применением «управления взглядом» является возможность взаимодействия с интерфейсом вообще без нажатия каких-либо аппаратных кнопок. Это реализовано для кнопок меню в OVERVIEW. Когда пользователь смотрит на какую-либо кнопку, она превращается в постепенно заполняющийся прогресс-бар, и, если пользователь продолжает смотреть на него до полного заполнения, кнопка «нажимается». Этот стиль управления знаком пользователям Oculus.

Теперь обладатель шлема VR может произнести фразу, которая звучит, словно сошедшая со страниц научно-фантастического романа: «Я управляю вещами своим взглядом в виртуальной реальности» ^_^

Также я пару дней работал над импортом изумительной модели кометы Чурумова-Герасименко, сделанной Маттиасом Мальмером. Он любезно предоставил для SpaceEngine последнюю версию модели и текстуры к ней. Модель содержит 4 миллиона треугольников, а текстуры имеют разрешение 8k * 8k (альбедо + нормали), что явно многовато для релиза. Загрузка таких огромных текстур вызывает лаг аж в 30 секунд, потому что у SE нет асинхронной передачи данных текстур с CPU на GPU (модель кометы реализована так же, как модели корабля, и в отличие от планет, они работают с целыми текстурами, которые надо загружать в память целиком). Я уменьшил текстуры до 4k * 4k и попытался оптимизировать модель, чтобы уменьшить количество полигонов, но пока безуспешно. С другой стороны, в полном разрешении эта модель на моём компьютере вполне выдаёт 60 fps (GTX 780), так что она может быть выпущена как аддон.

Модель кометы, преобразованная в формат SE (.sm), чудовищно велика – 611 МБ, поэтому я решил уменьшить размер вершин, перейдя от формата с плавающей запятой на целочисельный. Это уменьшило размер модели до 235 МБ, но она по-прежнему слишком велика для релиза SE. Итак, теперь есть новая консольная команда:

OptimizeSM “file.sm” { Format “int_full” Recenter true }

Он загружает файл sm, преобразует его в новый формат (целочисельный) и сохраняет с другим именем файла. Вы должны обновить cfg-файл модели корабля, указав в нём новый путь и/или изменить Unit, потому что для преобразования в целочисельный формат требуется масштабирование модели. Это необходимо для сохранения пространственного разрешения (потому что int16 имеет ограниченную точность), и чтобы избежать выхода за пределы диапазона int16 (от -32768 до +32767). После релиза 0.990 я обновляю туториал по импорту моделей кораблей с подробным описанием этой команды.

Эти скриншоты сделаны без текстуры нормалей, потому что с ней появилась проблема при импорте модели из формата obj (неправильно рассчитывается tangent space). Но так как это по сути модель корабля, а шейдер корабля поддерживает детальные текстуры, можно использовать эту возможность: наложить детальную текстуру скалы, чтобы улучшить вид поверхности с близкого расстояния. Повторяющийся паттерн очень заметен, поэтому я и реализовал хитрое текстурирование ландшафта, описанное в этом блог-посте. Аналогичный метод должен быть добавлен в шейдер корабля. Я также добавил эффект оппозиции (Hapke BRDF) для симуляции рассеяния света пыльной поверхностью кометы (вы можете заметить его на двух последних скриншотах).

Следующее крупное обновление OVERVIEW обязательно должно иметь главу об этой комете. Она выглядит потрясающе в VR!

Обсудить пост можно на форуме.