Diablo 3 – пузыри ресурсов

http://simonschreibt.de/gat/diablo-3-resource-bubbles/
  • Перевод
Эта статья — перевод статьи Simon Schreibt «Diablo 3 – Resource Bubbles».



В мире есть три вещи, на которые я могу смотреть вечно: Огонь, как другие работают и сферы ресурсов в Diablo3. Я уже полюбил стиль Blizzard, как вы могли, возможно, заметить по моей статье о их 2.5D деревьях. Сегодня речь о другом. Сегодня мы всмотримся глубокооо в кристальные сферы Diablo в поисках истины.
(внутри много картинок)







Они кажутся такими глубокими. Такими круглыми. Очаровательная смесь размытости и чёткости. Позвольте мне описать мои первые мысли о том как этого можно было бы добиться (если в кратце: они обе неверные. Я на ложной тропе (woodway прим. пер.), как говорят у нас в Германии):

Первая ложная тропа


Взять полигональную сферу, отрезать половину и поместь текстуры на поверхность. Почему это неверно? Потому что я проверил внутриигровую сетку “пузыря”. И знаете что? Это НЕ пузырь! Посмотрите на моё видение (красная сфера) и реальную сетку из Diablo3 (зеленый), которая, кстати, содержит всего 218 треугольников против моих 960.



Вторая ложная тропа


Я спросил Neox что он думает и он предложил взять сферу, запечь её в карту нормалей и делать всё остальное в шейдере. Это была хорошая идея, но я не смог найти подобной текстуры в файлах Diablo. Так какого лешего я тогда трачу ваше время на всю эту чепуху?
Да потому что mikiex разместил отличный пример, который похож на идею Neox’а. Думаю это будет моей следующей статьёй. А сейчас просто посмотрите на изображение и обратите внимание как великолепно выглядит сфера Земли. Но мы же не ищем лёгких путей.



Теперь поговорим о правильном решении.

Первая адова тропа — “UV развертка”


Мне удалось вытащить сетку “пузыря” и посмотреть на её текстурную развертку (UV). И вот на что она похожа:



UV модифицированы (растянуты на краях и сжаты в центре). Давайте посмотрим что произойдет когда мы применим узор шахматной клетки на пузыре и позволим UV двигаться слева направо:



Оно, возможно, не выглядит как идеальная сфера (больше похоже на круглую шляпу), но так как края пузыря большей частью закрыты нарисованными отражениями или этим грустным каменным ангелом, то работает очень хорошо на мой взгляд. На самом деле я думаю, что она выглядит круто.


Вторая адова тропа — “Геометрия”



Однако движение только одной текстуры не создаст этого прекрасного тандема движения и глубины. Благодаря D3 model viewer мы можем увидеть что здесь не одна плоскость.



Вы заработали 666 очков, если заметили что эти текстуры содержат совершенно неверный цвет и узор. Как матёрый игрок в старую Diablo2 я искал по термину “мана” в файлах, но в ресурсах Diablo3 у чародея оно зовется Arcane Energy. Мана используется колдуном.
Хотя мне кажется, что они используют для этого сетку от мана-пузыря, так как я не смог найти никакой специальной геометрии под arcane sphere.

У bb0x возник отличный вопрос о линии, которая появляется, когда ресурс не на 100% полный. Эта линия не согнутая (не подвержена искажению UV. прим. пер.) и он упомянул, что они, возможно, используют второй слой UV развертки для этого.



К счастью для нас Julian Love рассказал как это было сделано и я добавил это ниже.

Третья адова тропа — “Текстуры”


Текстуры для ресурса чародея выглядят вот так:



Если честно, я не могу сказать как именно всё это смешивается вместе. Но я хочу сделать пару заметок (догадок):
#1
03 это альфа-канал от 02. Кроме 04 ни одна другая текстура не имеет своего альфа-канала.
#2
Я серьезно начал копать, как же они заставили текстуру жидкости подниматься чуть выше актуального уровня заполнения. 04 и три остальные небольшие текстуры используются для отрисовки уровня.



#3
Если смотреть кадр за кадром, вы увидите прозрачную сферу и я думаю, что 01 используется как альфа-канал для неё.
Я не понимаю почему всё остальное рендерится позже, но мне кажется что игра обрабатывает это всёже иначе. (Мне кажется речь идет о том, что первый слой полностью перекрывается дальнейшей отрисовкой и как бы рисуется зря. Возможно он рисуется в буфер, чтобы использоваться потом, но по порядку именно первым. На анимации снизу видно что первый кадр полностью закрыт вторым. прим. пер.)



Вы дочитали почти до конца статьи. Симон слишком печален. чтобы писать больше, потому что ему не нравится то, что он не смог найти больше информации о смешении текстур. Он надеется, что Blizzard наймут его на должность грустного ангела, сидящего с левой стороны пузыря. Тогда он сможет собрать больше крутых фишек прямо из сердца арта.

Дополнение #1


Я имел честь получить больше деталей о пузырях от Julian Love:

Текстуры умножаются друг с другом. Не смешиваются. Отсюда и идет вся сложность в движении цвета. Вот еще как обрабатывается движение линии воды. […] Вот формула для альфа-маски линии воды:

a = tex1.a * tex2.a * 4

Также линия воды деформируется с помощью UV, но заметить это искажение очень трудно, если смотреть на сферу ровно спереди.”
Поскольку я не имею огромных знаний о шейдерном коде, я спросил его, что если “* 4” используется для высветления текстуры, поскольку умножение очень сильно её затемняет. Его ответ был:
Да, *4 в конце высветляет его назад очень значительно. Тоже самое мы делаем с цветом, только используем *2. Формула цвета такая:

rgb = ((tex1.rgb * text2.rgb * 2) * text3.rgb * 2)

Каждая текстура на самом деле это экземпляр одной и той же текстуры, только каждый этап имеет различное смещение, скорость и масштаб UV.

Спасибо этим святым программам: D3TexConv v0.9b & MPQ Extractor & Blender. Без них написание этой статьи было бы невозможным.
MikieX упомянул о действительно неплохих блестящих шариках. Не могу поверить, что это просто спрайт с тяжеленной магией пиксельного шейдера. Насколько круто? Apex восстановил пузырь и он даже имеет ползунок для манипуляции уровнем заполнения! Он сделал это на Unity и посмотреть можно тут. Зацените!
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 30
    +10
    Просто космос.
      0
      Жаль только, пример на юнити не работает.
        0
        К сожалению, ничего сделать не могу, разве что сказать об этом автору, возможно ему удастся попросить своего друга поправить пример.
          +3
          В комментариях есть ссылка на zip, можно скачать, посмотреть. Выглядит потрясающе! Возможно, отличия с оригиналом есть, но на глаз для меня незаметны.
            0
            Спасибо
            +6
            Вот тут работает.
              +1
              Связался с автором статьи и поправили линк на рабочий.
              –1
              Почему-то конец статьи вызвал ассоциацию с «99 франков» Фредерика Бегбедера.
                +5
                Спасибо за интересную статью и её перевод. Очень удивился с какой скрупулезностью Blizzard подходит к разработке. Многие разработчики сделали бы простой шарик с меньшей производительностью, но они…

                В общем, желаю автору пройти кастинг на грустного ангела и узнать еще, что-то интересное.
                Жду новых переводов статей от этого автора.
                  0
                  Просто это Blizzard, на их качество нужно равняться.
                    0
                    Очень хочется равняться. Но перфекционизм до добра не доводит, особенно если ресурсы ограничены :)
                      0
                      Ресурсы Blizzard ограничены? :)))))
                        0
                        Конечно же нет, я про себя :) Мне очень хочется равняться, но до добра не доводит обычно.
                          0
                          Тут я думаю даже стоит вопрос времени, они могут позволить делать игры по 10 лет, у других такой роскоши нет.
                            0
                            Да и персонала у них много.
                    0
                    Многие разработчики сделали бы простой шарик с меньшей производительностью, но они…

                    Это как вы так определили, за «всех»? :)
                      +1
                      Сужу по выходящим играм других разработчиков, последнее время выходит много игр, которые после выхода, даже через год, еле работают. А о поддержке вообще промолчу, единицы выпускают патчи играм старше года. Не думаю, что руководство этих кампаний, задумывается о чем-то кроме денег.
                        0
                        Примеры можно?
                          +3
                          Battlefield4 вышел больше года назад, каждые несколько месяцев выходили аддоны которые ломали игру, постоянные дисконекты, лагучий Origin, до выхода нового аддона, вроде, чинили, но после выхода опять все сначала.

                          Splinter Cell Conviction пробовал на разных компах, все идет на максимальных настройках, но спустя минут 10-15 начинаются жуткие лаги, фпс падает на 5-10 кадров. И с этим ничего нельзя поделать, до сих пор, хотя игре уже достаточно лет и вышло уже еще пару частей.

                          Assassin’s Creed Unity вышла очень сырой, что закрытая альфа версия игры от Blizzard работает стабильнее и не так глючит.

                          Этого я думаю достаточно, большинство крупных издателей забивают на работоспособность и выпускают сырые продукты, лишь бы денег заработать, а не подарить людям часы удовольствия и отдыха. Это так, накипело.
                          • НЛО прилетело и опубликовало эту надпись здесь
                        • НЛО прилетело и опубликовало эту надпись здесь
                            –1
                            А для Diablo2 последний мажорный патч вышел 10 лет спустя после релиза. Для них это норма. Ты платишь денег, покупаешь игру, а тебе её не только патчат, но и контент новый дают бесплатно. Мажорные аддоны — за деньги. Минорные бесплатно. Я в своей игре тоже так делать собираюсь.
                      +3
                      Наверное у них работают парни, которые занимались/занимаются демками. )
                        +3
                        Объемные планеты в 2D через шейдер — недавняя статья на хабре, где чувак рассказывает про планеты и те же самые ресурсы на шейдерах
                          +14
                          Так вышло, что этот чувак это я. Но то была моя методика, и если честно признаться, было забавно найти эту интересную статью спустя неделю после публикации моей. Потому что по сути задачи в ней решаются очень похожие. Более того, моя та идея была не нова и Симон в следующей статье своей пытался делать что-то аналогичное.

                          По сути — мне понравились некоторые статьи Симона и я решил что имеет смысл их перевести для хабра. К тому же тут уже одна была: 3D-режим в Diablo 2.
                            0
                            «Oops! I did it again» :)
                          0
                          сидящего с левой стороны пузыря

                          Он хочет быть еще одним, или путает лево и право? :)
                            0
                            Ну справа же уже занято :) Мне кажется он боится лишать работы уже сидящего ангела. Поэтому набивается в напарники.
                              +2
                              Мы не знаем графика их работы, возможно им не хватает четвертого работника с графиком по 12 часов два через два (или каким-то другим), поэтому из-за переработки ангел грустит.
                              +1
                              Regarding the angel: I want to sit on the left because on the right side there's already an angel :D

                              Относительно ангела: Я хочу сидеть слева, так как справа уже есть ангел :D

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое