DOOM Renderer Explained
реклама
Теперь собственно перейду к делу. Что отличает дум от всех остальных? Правильно, полностью динамичный свет и тени. Рассчет правильной позиции теней в пространстве со всеми взаимовлияниями любого числа объектов и источников света не превзойден до сих пор. Но тени — ерунда. Главная фишка — это все-таки свет. Именно здесь и лежит основное отличие в самом способе рендеринга. Другие движки используют целые библиотеки шейдеров для имитации разных материалов, заранее рассчитанный свет и кучку шейдеров для имитации динамичного света когда это действительно необходимо (фонарик в руках игрока). Дум делает иначе. Большинство современных игр используют бамп. Для его рассчета надо иметь карту нормалей и знать векторы на источники света и наблюдателя. Но ведь теже векторы нужны и для блеска (только еще нужна карта блеска) и самое интересное — для рассчета освещенности пикселя. Так зачем городить кучу шейдеров? Зачем использовать заранее рассчитанный свет когда бамп — по сути побочный продукт рассчета света в реальном времени и пропадает сам смысл этой устаревшей оптимизации? Все гениальное просто. В думе есть всего один незаменимый пиксельный шейдер — шейдер освещения. Он считает все за раз — и бамп и блеск и свет, причем шейдер достаточно короткий и потому легко адаптируется и оптимизируется. Действительно — все материалы в жизни отличаются лишь цветом, рельефностью и способностью блестеть. В любой момент можно сменить технику отрисовки — заменить бамп на параллакс или дисплейсмент меппинг и бесконечно развивать алгоритмы блеска. Только придется заново сгенерить весь арт из исходных высокополигональных моделей 3DMax чтобы полностью перейти на другую технику. Так что для уже вышедшей игры патчик был бы увесистый, но для создания новой игры с нуля это не проблема. Но не стоит думать, что в думе всего один шейдер и других быть не может — развитая система материалов и спецэффектов позволяет использовать любые шейдеры. Даже сам дум использовал дополнительные шейдеры для некоторых эффектов, например для колыханий горячего воздуха. А в некоторых пользовательских картах есть самая настоящая вода, с преломлениями и отражениями. Естественно шейдер для воды сделали уже создатели карты. Но все-таки у подхода дума есть и свой минус — мало способов снижения графики и как следствие тормоза на слабых картах даже на минимальных настройках. Например нельзя совсем выключить попиксельное освещение, другие могут совсем выключить шейдеры и использовать заранее рассчитанные карты освещения, но не дум — у него же нет таких карт и был бы просто черный экран. Ужасная графика при выключенном бампе — так как мы все рисуем одним шейдером, то никаких отступлений от общего правила быть не должно, а значит из основной текстуры (карты цвета) должен быть удален любой намек на нарисованный объем, чтобы весь объем был только от карты нормалей. В других играх потому и так много шейдеров казалось бы на один и тотже бамп — они индивидуально учитывают уже нарисованный на карте цвета объем. Реально графику можно регулировать лишь разрешением текстур, разрешением экрана, анизотропией и антиалиасингом. Все остальное сопряжено с определенными трудностями.
Самые распространенные заблуждения:
1. Движок не поддерживает действительно крутой геометрии. На самом деле ни один из современных движков не накладывает никаких ограничений на это. Времена таких движков прошли лет 10 назад. Но почему тогда в модели не запихали 100 тысяч полигонов? А чтобы в игру могли играть не только обладатели самых крутых компов. В принципе можно было бы сделать несколько вариантов моделек, отличающихся числом полигонов. Но сейчас так редко кто делает, не знаю почему.
2. Движок дума и плохое разрешение текстур — синонимы. Так как все вышедшие игры на этом движке повсеместно используют бамп (кстати, движок к этому вовсе не обязывает, можно совмещать бамп и рисованный объем прямо в одном кадре, и не надо даже танцев с бубном — достаточно просто не указывать карты нормалей в описании материала и нарисовать объем на карте цвета), то они используют минимум (минимум потому что можно и больше — для всяких эффектов) по 3 текстуры на поверхность (цвет, нормали и блеск), то естественно разрешение надо снижать чтобы влезть в жалкие 128-256 метров локальной видеопамяти. А вы что хотели?
3. Он не поддерживает открытые пространства. Достаточно посмотреть на скрины Enemy Territory: Quake Wars чтобы понять, что это не так. Такие движки как CryEngine не творят чудес, они попросту снижают геометрию отдаленных объектов и качество текстур на них, вот и все. Ничего не стоит прицепить это к любой игре на думовском движке.
4. Другие давно используют третьи шейдеры, а дум не может. Может, причем сам факт использования третьих шейдеров обеспечивается добавлением всего одной строчки вначале шейдера. Просто в случае с оригинальным основным шейдером дума третья шейдерная модель ничего дать не может, ведь он даже не подходит к пределу максимально разрешенной длины шейдера второй шейдерной модели. Модификации — другое дело, в них давно наворотили всевозможных красот для счастливых владельцев топовых видеокарт.
5. Им не дано даже сделать HDR. На самом деле для поддержки HDR надо только 2 вещи — уметь делать постпроцессинг картинки (а он делается даже в самом думе, для эффекта замедления времени например) и уметь выбирать FP16 как формат для рендеринга. И то и другое давно есть, другой вопрос что ни в думе ни в квейке не реализовано (хотя что-то похожее замечено на скринах все того же Quake Wars).
реклама
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила