Популярно о 3D графике. Часть 2. Игры и 3D


    Прошу прощение за столь большой перерыв между первой и второй частью, но на то были как объективные, так и субъективные причины. Итак, часть вторая, про компьютерные игры и 3D.
    И, да, статья рассчитана на тех, кто не имеет вообще представления о данном вопросе.

    3D графика в компьютерных играх
    Когда я на заработанные летом деньги в старших классах купил себе свой первый компьютер — ZX Spectrum и научился загружать с кассеты игры, меня сразу начал интересовать вопрос: как это все программируется? Ответ на этот вопрос я получил из книги по программированию игр для ZX Spectrum. Когда у меня появился РС-совместимый компьютер я уже представлял как делаются игры. Но прошло совсем немного времени и появились игры которые были непохожи на другие — игры с 3D персонажами. Одной из ярких представителей таких игр была Tomb Raider. И с каждым годом количество таких игр росло. Мне всегда было интересно: а как же они создаются? Но вразумительного ответа (Интернет тогда был экзотикой) я не нашел. Если бы мне в то время попалась подобная статья, то я бы получил ответы на некоторые вопросы. Надеюсь, что нижеприведенный текст поможет дать представление о том как в 3D играх появляются окружение и персонажи.


    Но сначала немного о полигонах. В прошлой статье Популярно о 3D графике, часть 1 были упомянуты полигоны. Но, судя по комментариям, цель статьи была не совсем достигнута. Поэтому хочу немного остановиться на тесселяции и сглаживании. Представьте, что у вас есть лист бумаги. Это и будет полигон. Разделите его пополам по горизонтали и вертикали. Получим 4 части. Это и есть тесселяция. Зачем нам это нужно в 3D графике? Все дело в том, что полигон является базовой единицей поверхности (в полигональном моделировании) и им можно смоделировать разве что плоскость. Вспомните, что для того, чтобы изготовить бумажный самолетик необходимо лист бумаги несколько раз согнуть. Так и с полигонами — разбивая исходные полигоны на части, располагая их под нужными углами друг к другу и сглаживая можно получать те или иные формы. Сглаживание, как уже упоминалось в прошлой части, это разбиение полигонов с изменением углов между полигонами. Это означает, что если у нас есть квадрат, у которого, как известно, прямые углы 90 градусов, то после сглаживания эти углы будут уже примерно 135 градусов. Как операция сглаживания преображает заготовку модели можно увидеть на видео ниже.

    В данном случае применено две итерации сглаживания. Видно, как увеличивается количество полигонов и модель приобретает плавные формы.

    Но вернемся к играм.

    На заре персональных компьютеров графические (были и текстовые, да, да, текстовые! игры) игры были двумерными во всех смыслах: персонажи были рисованными в проекции и двигаться могли только по осям X и Y. Для имитации, к примеру, ходьбы отрисовывались положения ног в разный период времени и эти кадры просто пускались по кругу. Классический пример двумерной игры — Тетрис. На приведенном ниже видео кадры из двумерной игры Nebulus для необыкновенно популярной в 80-х годах (а в СНГ и в 90-х) прошлого века платформы ZX Spectrum.

    Но компьютеры росли и в последнее время большинство игр являются трехмерными. Что же нам дает трехмерность? (кстати, итоговая картинка для обычных мониторов все равно псевдохтрехмерная, но за счет размещения объектов в перспективе и возможности двигаться в трех измерениях, появляется иллюзия трехмерности). Трехмерность нам дает больше свободы и реалистичности. Взгляните на эти шахматы, одни из которых двумерные, а вторые — трехмерные. Какие из них смотрятся реалистичнее?

    Каким же образом в игре появляется трехмерный персонаж? Для начала моделер изготавливает высокополигональную модель необходимого объекта или персонажа в одной из программ трехмерного моделирования (например, 3ds Max или Maya, возможна доработка в ZBrush или Mudbox). Затем строится развертка — представление рисунка трехмерного объекте на плоскости. По развертке художник рисует текстуры, т.е., грубо говоря, раскрашивает модель, затем настраиваются материалы, включающие нарисованные текстуры. Материалы позволяют придать текстурам реалистичности. Модель готова. Но для игры необходима низкополигональная модель. Ее получают из высокополигональной или копируют на определенном этапе моделирования высокополигональной. Зачем нужна высокополигональная модель? Она дает возможность получить более реалистичную картинку, смоделировать мелкие детали, тени, которые затем будут присутствовать в игре в виде текстуры. Многое, что мы в играх воспринимаем как мелкие объекты (углубления, коррозия, трещины, шпингалеты и многое-многое другое) на самом деле нарисовано с учетом теней, что при не очень детальном рассмотрении воспринимается как трехмерный объект. Из высокополигональной модели получают вспомогательные текстуры. Как правило, кроме текстуры цвета и рисунка применяют текстуры рельефа (bump) и отражений (specular), карту нормали. Накладываясь на текстуру рисунка (diffuse) они делаю модель более реалистичной. Все это позволяет снизить требования к аппаратному обеспечению до доступного для современного железа уровеня.
    Затем низкополигональная модель и текстуры экспортируется в так называемый игровой движок который позволяет, как правило, симулировать некоторый мир. Игровой движок ответственен за сам игровой процесс: взаимодействие героя с окружающим миром, визуализацию изображения в реальном времени, за искусственный интеллект компьютерных персонажей. Игровые 3D движки бывают разные: как платные, так и бесплатные, бесплатные при некоммерческом использовании, сложные и трудные в освоении, для различных платформ и т.п. Если вы решите поэкспериментировать с экспортом собственных моделей в игровой движок главное, чтобы была возможность конвертировать модель в формате вашего 3D редактора в формат игрового движка и последний работал на вашей платформе.
    Чтобы не быть голословным я в представленном ниже видео кратко покажу как модель вставляется в игровой движок. Для примера я взял CryEngine 3. Почему именно его? Потому, что на нем «бегает» широко известный шутер Crysis 3, к тому же сам движок доступен для свободного скачивания и бесплатен для не коммерческого использования. Для CryEngine 3 доступна документация как на английском, так и на русском, присутствует расширение для 3ds Max.



    На этом пока все.

    Предыдущие статьи данного цикла:
    Популярно о компьютерной графике. Часть 1 Введение и полигоны.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 20

      +1
      А на спектруме тоже были игры в честном 3D, как минимум видел четыре штуки: Total Eclipse, Escape From Targ, F-19 Stealth Fighter. Ну и ELITE же!
        0
        Были, но для них модели программировались, а не рисовались. Это немножко не так, как в современных играх.
          +3
          Что то я готов поспорить…
            –2
            Что же, с удовольствием почитаю про то, в чем и как рисовались модели для той же ELITE
              +3
              Давайте начнём с того что модели всё таки не «рисуются», а моделятся. А при рендере растеризируются. В частности нет никакой разницы между программной генерацией вертексов образующих полигоны или подгрузки их из файла. В современных играх всё точно также, просто растеризация происходит апаратно с применением шейдеров.

              Про моделинг. Неужели вы думаете бедные программисты рисовали всю графику в играх nes, sega? Про ELITE — здесь сложнее квадрата ничего не увидел, следовательно, рисовать моделить вообще не че го.
                0
                По поводу «не рисуются» — вопрос спорный. В том же ZBrush можно рисовать на плоскости и… опа — трехмерный объект. Или берешь кисть и рисуешь… складки на одеже. Но пусть будет «моделируются».
                По поводу разницы. Разница есть в производстве. Моделируй, рисуй текстуры, или используй готовые, подгружай в движок и без единой строчки кода со стороны разработчика уже есть игровой мир. Добавляем скрипты и, вуаля, есть игра.
                Да, рисовали, всю. Художники. Но как это все переносилось в игру — сканированием или созданием вручную массивов данных — тут я не знаю конкретно про sega. Но для ZX Spectrum были дигитайзеры, как тогда называли графические планшеты для ввода рисованной информации. Это облегчало работу по созданию игр, но не заменяло никак программирование самого персонажа.
                  0
                  Вы же не назовёте гипсовую лепку рисованием, так почему браш таковым является? Рисовать можно в фотошопе.

                  Что бы так удобно загрузить всё в движок было написано больше одной строки когда. Но разговор конкретно про ELITE в которую я к сожалению, не играл, но по скриншотам видно, что сложнее куба в ней ничего нет. Честно, я даже это за моделинг не считаю.

                  Давайте проясним ситуацию, что мы сейчас говорим конкретно про рендер и создателям ELITE ни что не мешало внедрить код загрузки вертексов из файла в память для растеризации. Просто они посчитали им это не нужно(и это так) и воспользовались функциями генераторами примитивов )
                    0
                    Сейчас конкретно мы говорим о том, что при создании игр для ZX Spectrum никакой графический 3D редактор не применялся. Хотя они на тот момент существовали. Работали на специальных графических станциях, стоили десятки и сотни тысяч долларов, применялись в теле и кино индустриях.
        –1
        Взгляните на эти шахматы, одни из которых двумерные, а вторые — трехмерные. Какие из них смотрятся реалистичнее?

        И те, и другие. Просто слева изображены настенные демонстрационные шахматы, вот такие:
        image
          –4
          Интересно, когда вы играете с кем то в шахматы, вы используете настенные демонстрационные? Когда я играю с компьютером мне гораздо приятнее, когда игровое поле максимально приближено к тому, как бы я играл с человеком. Но тут, правда, на вкус и цвет…
          Что касается вашей картинки. На ней невооруженным взглядом видно, что, на самом деле фигуры хоть и тонкие, но объемные, в несколько мм. На той иллюстрации, что в статье и близко это не чувствуется.
          +1
          А каждому объекту нужно моделировать эффекты от выстрелов? Или можно было выбрать из набора готовых эффектов? Как-то незаконченно выглядит демонстрация с белыми отлетающими квадратами…

          По поводу статьи. Как-то пока ничего нового не узнал, хотя и не имею отношения к моделированию. Интересно было бы узнать про то, как делается модель разрушения объектов и, главное, оптимизация всего этого дела. Вот это, действительно, остаётся для меня в некотором роде загадкой. Для одиночных объектов можно было бы менять текстуры или модели объектов, но это вряд ли подходит для тотального разрушения всего и вся на уровне. К тому же интересно частичное и «умное разрушение», с учитыванием силы и направления воздействия.
            0
            Да, согласен. С этой точки зрения пример нельзя назвать завершенным. Но и такой цели не ставилось. Задача была показать, что «не боги горшки обжигают». Берем 5 кубиков и вставляем в готовую игровую сцену.
            Да, можно выбирать из библиотеки уже готовые как текстуры так и эффекты от попадания пуль. Для разрушения объектов необходим скрипт.
              0
              Напишите статью «Непопулярно о 3d моделировании». Низкий поклон вам будет за это, более глубоко копните, т.к. туториалов как начать очень много и так.
                0
                Да это как бы и не туториал. Как бы это объяснить?
                В Инете действительно много материала и уроков по тем или иным программам моделирования, игровым движкам и т.п. для начинающих. В них рассказывают как взять конкретный инструмент и начать работать. Только вот почему именно так, как можно иначе и зачем вообще все это нужно? — практически нигде на написано. Общего описания «с высоты птичьего полета» практически нигде нету. И только когда тратишь сотни часов на тот или иной проект, только тогда начинаешь представлять себе очертания предмета, которым занимаешься. Как по мне — это неверный подход. Сначала надо охватить весь кратер беглым взглядом, так сказать, а уж потом углубляться в детали на глубине этого кратера. В данном цикле я хочу показать из чего состоит, чем дышит, если можно так выразиться, трехмерная компьютерная графика. Конкретные примеры появились во второй части по просьбам в комментариях к первой. Но цель — не конкретные примеры, а разъяснить что такое моделирование, освещение, текстурирование, рендеринг, какие программы используются и т.д.
                И только затем, имхо, можно переходить к «не популярно». Тем более, что «не популярно» интересно, как правило, только узкому кругу. А материалы «о черных дырах „на пальцах“ интересны значительно большей аудитории.
                0
                Скрипт динамически меняет объект? Интересно, что именно происходит с моделью во время разрушения? Допустим без изменения вашей модели (кубиков) скриптом вряд ли получится сделать разрушение?
              0
              «Популярно о 3D графике».
              Давайте лучше «Популярно о 3D моделлинге». А то когда я вижу слова 3D графика, я обычно думаю о векторах и матрицах.
                0
                Можно и так. Вернее, «Популярно о 3D моделировании».
                Хотя, согласно Вики:
                Трёхмерная графика (3D (от англ. 3 Dimensions — рус. 3 измерения) Graphics, Три измерения изображения) — раздел компьютерной графики, совокупность приемов и инструментов (как программных, так и аппаратных), предназначенных для изображения объёмных объектов.

                  0
                  Я тоже ожидал статью об обработке движком 3d графики. Например, пример простого 3d движка, чтоб на пальцах алгоритмы объяснили. А здесь о моделинге =( Хотя статья полезная для начинающих, конечно.

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

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