SteamVR (и Source 2) глазами Unity-разработчика

Затея сделать собственный скин для Steam-VR может привести к далеко идущим выводам...

Это мой первый пост на DTF и по совместительству копипаста из своего ВК. Периодически натыкаясь на странные сплетни, превозносящие Source 2, я подумал, что эти впечатления могут показаться кому-то интересными.
О себе: CG-шник с 10+-летним опытом, рендерщик, FX-ер, писатель шейдеров руками, последние годы — TA, RnD и FX-artist в небольшой студии с мобильным 3D-проектом.

В общем, я купил VR-шлем. Конкретно — один из Microsoft Mixed Reality, но это не принципиально.

Освоился в #Steam #VR.

Захотел сменить home- #environment на что-нибудь космическо-Sci-Fi'ное.

Полез в их мастерскую — и не нашёл буквально ни одного мало-мальски приличного скина. Увидев фоны (скайбоксы), сделанные из панорамных скриншотов Нормандии — решил, раз авторов не забанили, выдернуть саму настоящую 3D-модель палубы звездолёта и залить в мастерскую. Будет круто бродить за Шепарда по его кораблю.

​Это <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fsteamcommunity.com%2Fsharedfiles%2Ffiledetails%2F%3Fid%3D658398370%26amp%3Bsearchtext%3Dmass%2Beffect&postId=75051" rel="nofollow noreferrer noopener" target="_blank">есть</a> в «мастерской» steam — но лишь как фон. 360°-текстура. А я хочу — настоящую 3D-сцену.
​Это есть в «мастерской» steam — но лишь как фон. 360°-текстура. А я хочу — настоящую 3D-сцену.

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

— подумал я.

Наивный…

Потыкавшись с полчаса, как именно билдить environment'ы для #SteamVR из #Unity — я понял, что… никак.

Нет, реально: ЕДИНСТВЕННЫЙ способ добавить кастомное окружение в SteamVR — это сделать его... на сраном Source'е.
При чём, в Asset Store есть плагин для Юнити, который позволяет бесшовно интегрировать полноценную игру в SteamVR. А вот сделать скин к нему самому — нет. Только #Source.
Я искренне не понимаю, что мешало организовать импорт сцен, собранных в Юньке, через билд её ассет-бандлов. Раз функционал интеграции с API SteamVR уже всё равно есть.

«Но чо ты его хаешь, нормальный же движок,» — возразят те, кто его в глаза не видел.

Мне — в прошлом уже доводилось тыкаться с этим… кхм… куском кода, и тогда я зарёкся делать на нём хоть что-то. Но тут, по идее, выдернутые инструменты уже из второй версии, которые, по слухам, капитально переделывали перед релизом The Lab, и которые, вроде как, доведены до ума, чтоб любой желающий мог добавить своё окружение... да и #Source2 сама #Valve рекламила как свой сверх-секретный убер-переработанный инхаузный #engine, который затыкает за пояс по удобству что Unity, что Unreal. А то, как он заточен под VR — по обещаниям, должно быть просто сказкой, благодаря их собственному© уникальному® супер-пупер VR-optimized™ рендеру (который они даже с помпой выкладывали в Asset Store).

Так вот:

НЕТ.

Тулсет для SteamVR — это просто хтонический мрак. Если кто-то удивится, почему подавляющее большинство кастом-Environment'ов для SteamVR (стремящееся к 100%) столь вырвиглазно чудовищно выглядит, будто все они вылезли из девяностых — это потому, что двиг действительно прямиком оттуда, а вовсе не из-за жёстких ограничений самого VR как технологии.

Так чем же плох Source? Ох… скорее, чем же он НЕ плох? Такое ощущение, что это просто эталон того, каким НЕ надо делать двиг, для палаты мер и весов.

Начнём с того, что по своей архитектуре — он наследник тех бородатых времён, когда игра и была, по сути, движком: просто запущенным в определённом режиме. А это означает две вещи. Во-первых, нет того магического момента, когда ты нажимаешь кнопку «билд», и из исходного контента (который лежит в проекте) собираются ассеты. Ты должен сразу вставлять весь контент в том формате, который будет обрабатываться игрой в рантайме.
Во-вторых, нет никакого, собственно, «режима движка» и «проекта». Некой единой среды разработки, в которой ты пользуешься нужными инструментами. Вместо этого — несколько отдельных программ-инструментов, которые работают с файлами игры. Ещё раз: ты имеешь дело не с понятными сущностями типа «ассет» или «материал», которые можно связать друг с другом средствами движка. Нет, ты имеешь дело с файлами, которые вручную надо подключать друг в друга с помощью вороха этих отдельных утилит. Одна программа позволяет создать файл материала. В другой ты его затягиваешь и назначаешь на модель, которую сохраняешь… правильно, в файл. Да-да, связь с материалом «жёстко» сохраняется прямо в меш. А в третьей утилите — ты из этих файлов-моделей собираешь уровень. И упаси тебя дьявол что-то куда-то переместить.
Разумеется, ни о каком менеджменте базы данных ассетов или банальном поиске зависимостей между ними — речи нет и в помине.

Ах да, сами сущности — чётко детерминированных типов. Ничего кастомного: только стандартные "текстура", "материал", "модель" и "карта", последовательно подключенные друг в друга именно в таком порядке. И импорт контента — через складывание файлов в специальных форматах в СПЕЦИАЛЬНО ПОИМЕНОВАННУЮ - ЧЁРТ ВОЗЬМИ - ПАПКУ и правку текстовых конфигов.

Скрипты пишутся на каком-то своём извратском недо-языке, никаких конструкторов логики. При чём, я даже не о визуальных редакторах кода, а хотя бы об artist-friendly контроллерах типа Юнитишного Аниматора.

Шейдеров в тулките — ОДИН. Один шейдер вообще на всё, я не шучу. При чём, если ты думаешь, что это какой-то универсальный убер-шейдер на все случаи жизни, с кучей дополнительных фич, которые включаются опционально... Нет. Просто нет. Стандартный максимально примитивный PBR с топорнейшей моделью освещения.

Dispacement? Ишь чо удумал! Parallax mapping? А зачем тебе! Sprite-sheet с frame-blending'ом, чтоб для партиклов не нужны были текстуры по 8К? Сойдёт и так! Тесселяция? Эм... чо?
Запаковать несколько монохромных текстур в RGB-каналы одного файла? Пффф!

​Тот самый шЫдевр полёта шейдерной мысли, который, по мнению Valve, должен удовлетворить вообще все возможные потребности.
​Тот самый шЫдевр полёта шейдерной мысли, который, по мнению Valve, должен удовлетворить вообще все возможные потребности.

Добавлять свои шейдеры — можно, но только через лютейшую попоболь.
Попоболь — даже для человека, который в повседневном режиме пишет (да-да, именно пишет, а не собирает из нод) шейдеры для Юнити, запускающиеся на всём: от умных холодильников на Android до кривого-косого WebGL в Опере на видюхах Intel. А в прошлом — писал также шейдеры и для RenderMan, и для mantra.

Во всех современных движках кастомные шейдеры — это давным-давно осознанная необходимость. Без них не то что хитрые эффекты — порой даже просто многие оптимизации не сделать.

В SteamVR же — вот тебе один шейдер, пято́к стандартных текстур-слотов, назови файлы текстур так-то и положи в папочку с моделью вот туда-то. Чо те не нравится? Жри!

Привык выгружать модели в двиг, просто закидывая FBX? Забудь! Вот тебе наш очешуительно богоподобный #Hammer, юзай его.

​Я понимаю, что вы очень гордитесь своим недо-3Dmax'ом с блекджеком… Но можно я сделаю меш там, где мне удобно, а в двиг просто закину FBX? Нет, нельзя? Ну ооок…
​Я понимаю, что вы очень гордитесь своим недо-3Dmax'ом с блекджеком… Но можно я сделаю меш там, где мне удобно, а в двиг просто закину FBX? Нет, нельзя? Ну ооок…

Да, формально — FBX затянуть тоже можно. Но — опять же — только через этот их недо-3D-редактор. Это не «выгрузка в движок» в привычном понимании, а именно импорт FBX'а в «файл модели» Хаммера. И это ручной процесс, которому посвящён целый отдельный туториал.

Чтоб понимать масштабы катастрофы: даже единица измерения в этой утилите — дюймы.
Всё. ВООБЩЕ ВСЁ, чёрт возьми, в проклятых, мать его, дюймах. При чём, они понимают градус абсурда, поэтому в официальных туторах предлагают планируемую сцену по-человечески измерить в метрах, а потом сесть с калькулятором и поделить сантиметры на 2.54. На полном серьёзе. Да, прям делить числа вручную. Вместо того, чтоб просто выбрать другую единицу измерения в настройках.

В общем, на девелоперском подразделении Valve — я для себя поставил окончательный крест. Если они в конце 2019-го держат ТАКОЕ за серьёзный движок — то никаких игр от них ждать не сто́ит. Вот прям вообще. Никаких, даже посредственных.

Может, я упускаю что-то фундаментальное. Что-то, что сделает «вжух!» — и это страшилище в один клик переключится в режим нормального движка. Но пока что — я искренне не понимаю, зачем вообще Valve продолжает форсить свой Source хоть для чего-то.
Это же — максимум, уровень колхозного движка категории «я сделяль» от Васяна на 2-ом курсе ПТУ.

Ах да, этот их хвалёный супер-пупер VR-optimized™ рендер, который они так пафосно релизили в Asset Store — не более чем самый банальный forward рендерер, вообще без каких-то адвансед фич.

Земля вам пухом, игры от Valve. А ведь когда-то — вы рождали целые жанры и задавали тренды…

8383
108 комментариев

Комментарий недоступен

19
Ответить

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

11
Ответить

Комментарий недоступен

19
Ответить

Ну так официально Source 2 и не вышел ведь. И тулзов специально для него нет. То что есть сейчас это монстр франкенштейн из первого Source в который костылями добавляют штуки из второго чтобы он был как второй. Ну насколько я понимаю ситуацию.

по слухам они доработают и выпустят S2 к релизу Half Life VR. И там он должен быть более юзер френдли. Ну в теории. От Valve конечно можно ждать чего угодно 

9
Ответить

На Unity они делают VR-игры, на Unity. А не на Source 2.

Ответить

Ну а что вы хотели? Unity - это своего рода революция в дружественности разработки. Он изначально задуман как среда с низким порогом вхождения, в котором удобство было приоритетной задачей. Технологичность в нём приблизилась к уровню тяжелых движков только недавно. И дружественность тяжелых движков соответственно тоже совсем недавно приблизилась к Unity (Unreal 4 например). А до этого момента (до конца нулевых) все тяжелые хорошо оптимизированные движки были сделаны так как Source. То есть это именно движок, который по сути подключаемая библиотека с наборов самых основных тулз (брошенных с барского плеча).

9
Ответить

А разработчикам титанфолла и ареха норм. 

6
Ответить