В этой статье мы поговорим про такое понятие как PBR и разберемся, почему оно важно для 3d художников. Начнем с общего обзора, разберемся с его происхождением и в итоге подойдем к более конкретным техническим моментам, также мы пройдемся по основным текстурным картам, так как они, по сути, являются самой важной частью PBR рендера.
Оно расшифровывается как Physically Based Rendering - физически корректный рендер, или, иначе говоря, рендер основанный на физике поведения света и его взаимодействия с материалами. Если говорить простыми словами, то это способ отображения графики при помощи расчета и моделирования падения, отражения и преломления света в реальном времени, как это было бы в реальном мире.
Зайдем издалека и посмотрим, что такое луч света сам по себе, как физическое явление - это геометрическая линия, по которой направляется световая энергия, или пучок света. Он имеет точку начала и направление движения, это направление параллельно источнику света. Также он обладает, в частности, такими свойствами как преломление и отражение, то есть зависит от среды в которой находится и поверхностей, с которыми может взаимодействовать. На деле у него несколько больше специфичных свойств, но у нас не урок физики, поэтому не станем углубляться.
Работа над физически точной визуализацией началась в 1980 годах. Преимущественно она велась в Корнельском университете (Cornell University, США). В 2004 году исследователи Мэтт Фарр (Matt Pharr), Грег Хамфрис (Greg Humphreys) и Пэт Ханрахан (Pat Hanrahan) издали книгу под названием «Physically Based Rendering», тем самым дав толчок распространению как понятию, так и самой технологии. По словам авторов эта книга «описывает как математическую теорию современной фотореалистичной системы рендеринга, так и её практическую реализацию.
Идеи и программное обеспечение в этой книге показывают, как создавать и использовать полнофункциональную систему рендеринга, способную создавать потрясающие образы». Эта книга является фундаментальным трудом в области компьютерной графики и принесла авторам ряд наград за достижения в области создания спецэффектов. Отдельно стоит выделить Пэта Ханрахана, так как он в целом является крупным деятелем в области компьютерной графики, был одним из первых сотрудников Pixar, имеет немало наград за развитие компьютерной графики и связан с уже знакомым нам Эдом Катмуллом (статья про топологию). Как видите, мир компьютерной графики весьма тесен.
При желании в интернете можно найти электронную версию их книги, в которой исчерпывающе описана как история PBR, так и технические тонкости. Это полезная для общего развития информация, а мы тем временем пойдем дальше и рассмотрим PBR чуть ближе, но при этом постараемся оставаться в рамках 3D моделирования и понятий, с которыми вам почти наверняка предстоит сталкиваться постоянно.
Джо «EarthQuake» Уилсон - специалист из Marmoset и автор статей на polycount (и не только) утверждает, что PBR это скорее идея, чем набор строгих правил. Но при этом эта идея имеет некоторые конкретные примечания.
Одно из них и пожалуй наиболее важное - PBR признает, что в реальном мире “блестит все” (цитата Джона Хейбла, программиста графики из Naughty dog). Проще говоря любая поверхность так или иначе отражает хотя бы минимальное количество света, даже если это пыльный бетон. В PBR большую роль играют поверхности, а для корректного отображения объектов используются разнообразные вспомогательные текстуры и математические модели.
Итак, подытожим тем, что PBR это принцип отображения графики работающий с поверхностями материалов и их свойствами.
Можно выделить две группы материалов - металлы и диэлектрики (материалы которые не проводят электричество). Говоря иначе - металлы и неметаллы. Металлы не пропускают свет, они только отражают его весь, или практически весь. Диэлектрики обладают таким свойством как диффузное отражение - лучи света проходят под поверхность материала и часть из них поглощается, а часть возвращается в виде отражения. В частности, это проявляется в блике этих материалов - у металла он будет цветной, а у диэлектрика - белый. Это подводит нас к таким понятиям как Diffuse (рассеивание) и Specular (отражение). Эти понятия часто можно встретить в работе с 3D моделями и это напрямую касается процессов текстурирования.
На следующей схеме можно наблюдать как работает Diffuse - рассеивание света. Луч проникает под поверхность объекта и часть его отражается обратно. Это свойство материалов влияет на цвет частиц, которые будут рассеиваться наружу, от поверхности. Проще говоря - показывает нам его цвет. Это подводит нас к теме Diffuse color, иначе говоря Albedo.
Говоря простым языком - это цвет материала видимый глазу. Мы еще коснемся этой темы чуть позже. А пока поговорим об еще одном свойстве материалов, связанном с отражением света.
Этот эффект назван в честь французского физика Огюстена Жана Френеля. Он является одним из создателей волновой теории света.
Если говорить простыми словами, то в компьютерной графике это работает так - сила отражения зависит от угла падения света на поверхность относительно наблюдателя. Чем более острый угол, тем больше света отразится. По сути, объекты с правильными настройками Френеля будут иметь более яркие отражения ближе к краям. Немного сложно выглядит, но на деле все проще чем кажется. Важно запомнить простое правило - чем более касательным будет падение света на поверхность относительно вашего взгляда, тем больше его отразится.
Обратите внимание на примере ниже - при наличии эффекта Френеля видно, что по краям объекта отражение яркое, в то время как без этого эффекта свет отражается равномерно по всей поверхности. В случае с PBR имеется пара особенностей, которые влияют на финальное отображение Френеля.
Первое - на всех материалах отражение будет максимальным на краях. То есть они будут вести себя как идеальное зеркало вне зависимости от типа материала.
Второе (и выходящее из первого) - перепад отражения от центра к краю не будет отличаться слишком сильно у разных материалов. По факту это обусловлено тем, что PBR рендеринг определенным образом контролирует этот параметр беря за основу значения отражаемости материала.
Это говорит нам о том, что когда мы задаем на материале базовые значения отражаемости, то во время рендеринга эффект Френеля будет накидывать отражения поверх установленного значения, учитывая края объекта.
Это еще одно свойство диффузии света на материалах. По факту и то и другое, это уровень того, насколько сильно свет проникает сквозь материал и слабее рассеивается. В случае с просвечиваемостью - можно наблюдать с обратной стороны, как свет рассеивается сквозь материал.
Отражение и диффузия это, по сути, противоположные понятия, как мы уже поняли из раздела про металлы и диэлектрики, но при этом они зависимы друг от друга. Свет должен проникнуть под поверхность материала, чтобы подвергнуться диффузии и частично отразиться, показав нам цвет материала (в случае с диэлектриком). Этого не произойдет, если он будет отражен практически полностью без проникновения под поверхность (в случае с металлом). По закону сохранения энергии количество отраженного света не может превысить количество поглощенного. Опять же, звучит достаточно сложно, благо, в современных программах вроде Marmoset Toolbag существуют автоматизированные средства контроля таких параметров.
Работает он таким образом - при повышении параметра отражения материала программа проверяет, чему равна сумма зеркальных и диффузных отражений. Если это значение превышает единицу, то диффузные отражения начинают подавляться, а цвет диффузии перестает влиять на внешний вид материала. Если эта разница не будет учтена, то получится некорректное отображение материала - материал будет одновременно давать и зеркальное отражение (как металл) и диффузное (как диэлектрик).
Свойства материалов, которые мы рассмотрели выше, зависят от поверхностей, которым они присваиваются. В первую очередь это форма самого объекта, во вторую - карта нормалей с более мелкой детализацией, тему карт нормалей мы раскрывали в статье Average normal. Но есть еще один важный момент - любая (или почти любая) поверхность в реальном мире имеет микродетализацию. Трещины, шероховатости и прочую структуру, которую чаще всего практически незаметно глазу. Но при этом они имеют влияние на то, как с поверхностью будет работать отражение и диффузия света. Если говорить простым языком, то чем более шероховатой будет поверхность, тем более размытым будет блик на ней.
Для определения этой характеристики материала в PBR есть такой параметр как Roughness - шероховатость. Этот параметр определяется либо константой (постоянным значением), либо текстурной картой дающей уникальное распределение шероховатости по поверхности. В реальном мире редко можно встретить идеально гладкие поверхности, по этому шероховатость имеет важное значение при работе с внешним видом ваших моделей.
Итак, мы весьма обстоятельно разобрались с основными параметрами материалов, поняли чем отличается металл от неметалла и как они взаимодействуют со светом. Важно понимать, что это крайне обширная тема, на которую написано немало учебников и люди годами занимаются исследованиями и разработками в этой сфере. Выше мы прошлись по фундаментальным понятиям PBR рендеринга. Наша задача, как 3D художников - понимать суть этих процессов. А детали давайте оставим программистам и исследователям.
Теперь самое время перейти к тому, как это работает в повседневных задачах 3D художника, в частности, разберемся с основными текстурными картами. В результате вы поймете, что все гораздо проще, чем может показаться, и вам не нужно быть ученым-физиком чтобы понимать, как правильно текстурировать вашу модель.
Их существует два - более старый (но он все равно применяется в некоторых случаях и адаптирован для PBR), и более актуальный, с которым вы будете сталкиваться чаще. Определяются они настройками свойств материалов и их сочетанием. А их применение в работе обычно диктуется условиями и особенностями конкретного проекта.
Первый, это метод Specular/Glossiness. В работе с ним используются 3 текстурные карты, которые определяют следующие параметры - Diffuse (рассеивание света, цвет поверхности материала), Specular (отражаемость материала), Glossiness (гладкость материала).
Все что требуется от художника, это присвоить цветовое значение из таблицы конкретному параметру материала, например пипеткой. После присвоения материал получит конкретное числовое значение.
Второй метод, это Metalic/Roughness. Он работает с параметрами Base Solor (это базовый цвет материала, и он имеет характерную для метода особенность, о которой мы поговорим чуть ниже), Metalic (обозначение металл/неметалл), Roughness (уровень шероховатости материала).
Примечание: текстуры Roughness и Glossiness, это одна и та же текстура с инверсией. Шероховатость и гладкость соответственно.Особенность этого метода заключается в том, что в нём мы задаем свойства материалов прямыми значениями, без каких либо калибровок. По сути, мы задаем значение металл/неметалл при помощи Metalic. 1 = металл, 0 = неметалл.
Если ваш материал является неметаллом, то Base Color будет отвечать за его параметр Diffuse - силу и цвет рассеянного света. То есть, по сути, параметры Base Color и Metalic являются созависимыми и именно их сочетание, вкупе с параметром шероховатости дает нам финальный вид объекта.
Из всего этого можно сделать такой вывод - все материалы по своей природе имеют одинаковые наборы параметров, которые мы довольно подробно рассмотрели в начале, а методы текстурирования влияют на то, как мы ими управляем. Если вы читали внимательно, то вероятно заметили, что в разделе про закон сохранения энергии примеры приводились именно на параметрах Glossiness/Diffuse.
Все это выглядит довольно громоздко, но на деле гораздо проще, главное помнить что так или иначе любой материал будет иметь конкретные свойства и если вы их знаете, то проблем не возникнет. Ну и как всегда - практика и насмотренность это ваши основные помощники на пути к качественной работе.
Теперь самое время пройтись по текстурным картам и немного поговорить о том в чём их суть. Рассмотрим на примере Metallic/Roughness. Это будет комплект карт характерный для этого метода, часть этих карт мы получаем в результате текстурирования, часть карт мы создаем для процесса текстурирования.
От того что мы выбрали именно Metallic/Roughness не изменится суть PBR, просто мы будем разбираться на конкретном примере, с которым вы почти наверняка будете сталкиваться чаще и который более распространен в индустрии.
Справедливости ради стоит отметить, что эти карты мы можем получить в результате запекания, но это тема для отдельного разговора. По этому берем за условие, что идет стандартный процесс - запекание с High-Poly на Low-Poly и дальнейшее текстурирование в Substance 3D Painter по стандарту PBR Metalic/Roughness с экспортом готовых текстур.
Для начала давайте условимся с определениями - в работе вы будете в равной степени встречать понятия Albedo, Diffuse color и Base Color. По большому счету всё это одно и тоже - базовый чистый цвет материала. В случае с картами давайте остановимся на понятии Albedo.
Выше, в разделе про металлы/неметаллы, мы упоминали такое понятие как Diffuse Color - это цвет материала, который отображается после рассеивания света. Как мы уже поняли - в случае с Metalic/roughness он контролируется сочетанием параметров Base Color и Metalic. Собственно, результатом этой работы и будет карта Albedo.
В работе с Albedo стоит придерживаться пары принципов - нельзя уходить в верхние или нижние значения цвета. Лучше остановиться на значениях приблизительно между 20 и 80 процентов. Также обычно в природе не бывает чистых цветов - любой цвет имеет оттенок. Это тоже стоит учитывать.
Это карта, без которой движок не поймет какие зоны модели или поверхности имеют свойства металлов, а какие нет. Она является черно-белой, белый цвет в ней - это металл, черный - неметалл (например грязь или ржавчина, как в случае нашего примера).
Это карта шероховатостей вашей модели. Как мы уже поняли - не бывает идеально гладких поверхностей. Эта карта позволяет движкам понимать, как свет должен отрабатывать на поверхностях, в каких местах они более гладкие, а в каких - нет. И опять же, здесь все просто - с самого начала думайте о том, как должна выглядеть поверхность того или иного объекта и закладывайте это при покраске.
Как уже говорилось ранее - Roughness и Glossiness это по сути одна и таже карта, просто в инверсии, так как они в конечном итоге выполняют одинаковую функцию.
Собственно, три эти карты - результат работы с PBR Metalic/Roughness. Чаще всего вы будете получать подобный результат после текстурирования и экспорта готового результата. В статье про запекание мы упоминали, что есть еще несколько текстур помимо карты нормалей и карты АО, которые нужны для дальнейшей работы над моделью. Эти карты имеют прямое отношение к PBR текстурированию. Давайте немного поговорим о них.
Эта карта является основной и важной, так как без неё мы не получим финальный результат, раз речь снова пошла про запекание, то её стоит коснуться ради полноты картины. Мы уже разбирали как она работает в статье Average Normal и просто напомним, что это карта направления нормалей поверхностей, которая помогает движку корректно распределять свет по поверхностям Low-Poly с учетом геометрии High-Poly. В работе с PBR она поможет нам в текстурировании модели с учетом особенностей ее поверхностей, а движок сможет корректно отобразить внешний вид модели.
Эта текстура схожа с картой нормалей. Её отличие заключается в том, что на ней рассчитаны координаты нормалей объекта относительно мировых координат, а не координат самого объекта в мире. То есть эту карту можно использовать вместо карты нормалей, но при этом объект станет статичным - его нельзя будет двигать. Но врядли вам когда-нибудь это пригодится. Она содержит в себе информацию на трех RGB каналах. Каждый канал отвечает за направление - справа-налево, сверху-вниз и назад-спереди.
В PBR текстурировании она применяется как удобный инструмент для распределения текстур по поверхности объекта, с учетом его топологии. То-есть если у нас есть, допустим, столб, то из карты WSN можно сделать маску для текстуры направленной от дна вверх и изобразить грязь и брызги свойственные подобным объектам находящимся на земле. Либо покрутить направление и отображение текстур в генераторах, которые предлагает нам Substance 3D Painter.
Это градиентная карта, растяжка градиентов в которой берёт направление по осям модели. Она также полезна как инструмент текстурирования, так как с её помощью можно быстро задать нужное направление текстуры, которую вы накладываете на объект, так же как в случае выше.
Отличие будет заключаться в том, что эта карта не учитывает топологию объекта, только его оси. В Substance 3D Painter многие генераторы работают в том числе с этой картой, либо с её помощью можно сделать маску. Эта карта также работает с каналами RGB по точно такому же принципу - на каждом канале свое направление.
Карта кривизны поверхностей. Это вспомогательная текстура, которая упрощает жизнь в процессах текстурирования а также помогает улучшить результат, так как позволяет воздействовать непосредственно на углы, грани и прочие перепады.
В Substance 3D Painter есть ряд инструментов непосредственно для работы с картой Curvature. Она черно-белая и суть её в том, чтобы за счет яркости пикселей показать перепады высоты поверхностей. Чем ближе пиксель к белому - тем он выше и наоборот. Серый цвет - это плоскость, среднее значение.
Это карта толщины поверхностей. Более тонкие области создают яркие значения, а более толстые - темные. Ранее мы говорили о таких вещах как Translucency и Transparency (просвечиваемость и прозрачность) - эта карта имеет прямое отношение к ней. Она нужна в работе с материалами, которые имеют подповерхностное рассеивание света (например, человеческая кожа), за счет распределения толщин на них будет задано корректное и плавное распространение света внутри материала. Также с ее помощью можно сделать высветление альбедо по тонким участкам модели.Это более специфичная карта, и может не так часто пригождаться, особенно на простых объектах. Но в принципе, беря во внимание ее свойства, иногда ее можно применить чтобы дополнительно поработать с яркостью отдельных элементов. На примере с сайта Marmoset видно довольно четкую разницу между объектами и принцип распределения.
Возможно вы уже сталкивались с этим понятием, оно довольно распространено в сфере графики для игр. По сути это “самозатенение”, или “контактное затенение” объекта. На стыках элементов, на углублениях, во всех участках куда попадает меньше рассеянного света начинает работать Ambient Occlusion. Эта текстура черно-белая и здесь все просто - темные участки это затенение, светлые - плоскость. Помимо того что она сама по себе улучшает внешний вид модели, ее также можно использовать как инструмент текстурирования. Ниже представлен пример карты AO. Это кирпич с сайта Quixel. На нем видно, что затенение будет работать на швах между кирпичами, а также на сколах и трещинах - всех участках куда по какой то причине не попадает весь свет падающий на модель. Соответственно, например, он может помочь вам распределить пыль по углублениям модели.
Итак. Медленно но верно мы разобрали весьма громоздкую тему и самое время подвести итоги.
Важно понимать, что сама по себе технология PBR это очень мощный и серьезный инструмент, который применяется в разных сферах компьютерной графики. Мы разобрались с тем, откуда она взялась и в чем заключаются ее основные принципы. Мы разобрались с важной темой того, какими путями происходит рендер материалов и на чем он основан. Это помогло нам лучше понять на чем держатся процессы текстурирования моделей для игр. А разбор основных карт помог нам разобраться, как начать текстурировать и как сделать этот процесс более удобным, а результат - более качественным. Это большой пласт информации и польза от него будет целиком зависеть от того, насколько хорошо вы разберетесь в аспектах PBR связанных с моделями для игр и насколько хорошо будете понимать смежные темы, такие как топология, запекание и.т.д. Все эти темы идут рука об руку и их совокупность полностью определяет финальный вид модели. Если эта статья подкинула вам больше поводов для чтения, изучения и практики, если она показала вам какие то моменты, которые вы не учитывали раньше - прекрасно, значит у вас все получится.
Array ( [ID] => 339 [~ID] => 339 [CODE] => platformer-zhanr-videoigr [~CODE] => platformer-zhanr-videoigr [XML_ID] => 339 [~XML_ID] => 339 [NAME] => Платформер. Жанр видеоигр [~NAME] => Платформер. Жанр видеоигр [TAGS] => [~TAGS] => [SORT] => 500 [~SORT] => 500 [PREVIEW_TEXT] => Платформер - передвижение по платформам, с помощью прыжков, лазанье по лестницам, сбор предметов, необходимых для завершения уровня или победы над врагами. [~PREVIEW_TEXT] => Платформер - передвижение по платформам, с помощью прыжков, лазанье по лестницам, сбор предметов, необходимых для завершения уровня или победы над врагами. [PREVIEW_PICTURE] => Array ( [ID] => 3950 [TIMESTAMP_X] => 23.04.2023 20:42:20 [MODULE_ID] => iblock [HEIGHT] => 190 [WIDTH] => 320 [FILE_SIZE] => 116846 [CONTENT_TYPE] => image/jpeg [SUBDIR] => iblock/95e/bkd8jk1pkep3ctuvmdfvl3b4p6p1edql [FILE_NAME] => Anons_Platformer.-ZHanr-videoigr.jpg [ORIGINAL_NAME] => Anons_Платформер. Жанр видеоигр.jpg [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 020fd97017a3a6104e1a4ba169769f6e [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/95e/bkd8jk1pkep3ctuvmdfvl3b4p6p1edql/Anons_Platformer.-ZHanr-videoigr.jpg [UNSAFE_SRC] => /upload/iblock/95e/bkd8jk1pkep3ctuvmdfvl3b4p6p1edql/Anons_Platformer.-ZHanr-videoigr.jpg [SAFE_SRC] => /upload/iblock/95e/bkd8jk1pkep3ctuvmdfvl3b4p6p1edql/Anons_Platformer.-ZHanr-videoigr.jpg [ALT] => Платформер. Жанр видеоигр [TITLE] => Платформер. Жанр видеоигр ) [~PREVIEW_PICTURE] => 3950 [DETAIL_TEXT] =>Платформер - передвижение по платформам, с помощью прыжков, лазанье по лестницам, сбор предметов, необходимых для завершения уровня или победы над врагами.
Игры с рисованной мультяшной графикой, а персонажи - вымышленные существа. Один из самых древних жанров компьютерных игр, который появился в начале 1980-х годов и стал трёхмерным в середине 90-х.
Эра двумерной графики
Электронные устройства не были достаточно мощными, поэтому игры не могли отображать трёхмерную графику. Они были ограничены статическими игровыми мирами, которые помещались на один экран. Игрок перемещался по лестницам, прыгал с платформы на платформу, собирая паверапы.
Одной из первых игр 1981 года считается Donkey Kong, аркадная игра, созданная фирмой Nintendo.
С появлением длинных многоэкранных прокручивающихся игровых миров прохождение уровней стало горизонтальным. Начало этому положили наиболее популярные игры на домашних компьютерах, такие как Pitfall! фирмы Activision (1982), Manic Miner (1983) и продолжение этой игры Jet Set Willy (1984).
В 1985 году Nintendo выпустила революционный платформер Super Mario Bros для приставки Nintendo Entertainment System. Главный герой Марио стал символом фирмы. Игра была наполнена сложными уровнями и стала примером для последующих создателей игр. По сей день многие люди считают её одной из самых лучших. Игра имела большую популярность и активно продавалась огромными тиражами.
Трехмерная эра
Трехмерный платформер это либо геймплей, включающий в себя три измерения, либо использование трехмерных полигонов в реальном времени, либо и то и другое. Задачей игр стала необходимость тщательно исследовать каждый уровень, собирая кусочки головоломок или звезды, как в Super Mario 64, появилась возможность развития персонажа.
Самым ярким примером является Crash Bandicoot. Эта игра оставалось двумерным платформером, в котором использовались плоские уровни, а в конце располагалась игровая цель.
Изометрические игры
Изометрические игры отображают трехмерную сцену с помощью двумерной графики. Задача игр - исследование внутренних помещений (небольшие комнаты, соединённые дверьми), в которых находились элементы головоломок.
Примерами являются игры 1983 года Congo Bongo в мире аркадных автоматов и 3D Ant Attack для ZX Spectrum, после перенесенная на Commodore 64.
Платформеры настолько легко узнаваемые, что их знают даже те, кто никогда не увлекался играми. [~DETAIL_TEXT] =>Платформер - передвижение по платформам, с помощью прыжков, лазанье по лестницам, сбор предметов, необходимых для завершения уровня или победы над врагами.
Игры с рисованной мультяшной графикой, а персонажи - вымышленные существа. Один из самых древних жанров компьютерных игр, который появился в начале 1980-х годов и стал трёхмерным в середине 90-х.
Эра двумерной графики
Электронные устройства не были достаточно мощными, поэтому игры не могли отображать трёхмерную графику. Они были ограничены статическими игровыми мирами, которые помещались на один экран. Игрок перемещался по лестницам, прыгал с платформы на платформу, собирая паверапы.
Одной из первых игр 1981 года считается Donkey Kong, аркадная игра, созданная фирмой Nintendo.
С появлением длинных многоэкранных прокручивающихся игровых миров прохождение уровней стало горизонтальным. Начало этому положили наиболее популярные игры на домашних компьютерах, такие как Pitfall! фирмы Activision (1982), Manic Miner (1983) и продолжение этой игры Jet Set Willy (1984).
В 1985 году Nintendo выпустила революционный платформер Super Mario Bros для приставки Nintendo Entertainment System. Главный герой Марио стал символом фирмы. Игра была наполнена сложными уровнями и стала примером для последующих создателей игр. По сей день многие люди считают её одной из самых лучших. Игра имела большую популярность и активно продавалась огромными тиражами.
Трехмерная эра
Трехмерный платформер это либо геймплей, включающий в себя три измерения, либо использование трехмерных полигонов в реальном времени, либо и то и другое. Задачей игр стала необходимость тщательно исследовать каждый уровень, собирая кусочки головоломок или звезды, как в Super Mario 64, появилась возможность развития персонажа.
Самым ярким примером является Crash Bandicoot. Эта игра оставалось двумерным платформером, в котором использовались плоские уровни, а в конце располагалась игровая цель.
Изометрические игры
Изометрические игры отображают трехмерную сцену с помощью двумерной графики. Задача игр - исследование внутренних помещений (небольшие комнаты, соединённые дверьми), в которых находились элементы головоломок.
Примерами являются игры 1983 года Congo Bongo в мире аркадных автоматов и 3D Ant Attack для ZX Spectrum, после перенесенная на Commodore 64.
Платформеры настолько легко узнаваемые, что их знают даже те, кто никогда не увлекался играми. [DETAIL_PICTURE] => Array ( [ID] => 3224 [TIMESTAMP_X] => 23.04.2023 20:42:20 [MODULE_ID] => iblock [HEIGHT] => 191 [WIDTH] => 1640 [FILE_SIZE] => 63719 [CONTENT_TYPE] => image/png [SUBDIR] => iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6 [FILE_NAME] => SHapka_2_.png [ORIGINAL_NAME] => Шапка(2).png [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 83b772cac086ad34060576410d2261e4 [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [UNSAFE_SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [SAFE_SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [ALT] => Платформер. Жанр видеоигр [TITLE] => Платформер. Жанр видеоигр ) [~DETAIL_PICTURE] => 3224 [DATE_ACTIVE_FROM] => 22.10.2022 [~DATE_ACTIVE_FROM] => 22.10.2022 [ACTIVE_FROM] => 22.10.2022 [~ACTIVE_FROM] => 22.10.2022 [DATE_ACTIVE_TO] => [~DATE_ACTIVE_TO] => [ACTIVE_TO] => [~ACTIVE_TO] => [SHOW_COUNTER] => 11891 [~SHOW_COUNTER] => 11891 [SHOW_COUNTER_START] => 22.10.2022 19:47:02 [~SHOW_COUNTER_START] => 22.10.2022 19:47:02 [IBLOCK_TYPE_ID] => articles [~IBLOCK_TYPE_ID] => articles [IBLOCK_ID] => 9 [~IBLOCK_ID] => 9 [IBLOCK_CODE] => articles [~IBLOCK_CODE] => articles [IBLOCK_NAME] => Статьи [~IBLOCK_NAME] => Статьи [IBLOCK_EXTERNAL_ID] => [~IBLOCK_EXTERNAL_ID] => [DATE_CREATE] => 22.10.2022 19:45:05 [~DATE_CREATE] => 22.10.2022 19:45:05 [CREATED_BY] => 37 [~CREATED_BY] => 37 [CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [~CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [TIMESTAMP_X] => 23.04.2023 20:42:20 [~TIMESTAMP_X] => 23.04.2023 20:42:20 [MODIFIED_BY] => 37 [~MODIFIED_BY] => 37 [USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [~USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [IBLOCK_SECTION_ID] => 121 [~IBLOCK_SECTION_ID] => 121 [DETAIL_PAGE_URL] => /articles/platformer-zhanr-videoigr/ [~DETAIL_PAGE_URL] => /articles/platformer-zhanr-videoigr/ [LIST_PAGE_URL] => /articles/ [~LIST_PAGE_URL] => /articles/ [DETAIL_TEXT_TYPE] => html [~DETAIL_TEXT_TYPE] => html [PREVIEW_TEXT_TYPE] => text [~PREVIEW_TEXT_TYPE] => text [LANG_DIR] => / [~LANG_DIR] => / [EXTERNAL_ID] => 339 [~EXTERNAL_ID] => 339 [LID] => s1 [~LID] => s1 [EDIT_LINK] => [DELETE_LINK] => [DISPLAY_ACTIVE_FROM] => 22.10.2022 [FIELDS] => Array ( [ID] => 339 [CODE] => platformer-zhanr-videoigr [XML_ID] => 339 [NAME] => Платформер. Жанр видеоигр [TAGS] => [SORT] => 500 [PREVIEW_TEXT] => Платформер - передвижение по платформам, с помощью прыжков, лазанье по лестницам, сбор предметов, необходимых для завершения уровня или победы над врагами. [PREVIEW_PICTURE] => Array ( [ID] => 3950 [TIMESTAMP_X] => 23.04.2023 20:42:20 [MODULE_ID] => iblock [HEIGHT] => 190 [WIDTH] => 320 [FILE_SIZE] => 116846 [CONTENT_TYPE] => image/jpeg [SUBDIR] => iblock/95e/bkd8jk1pkep3ctuvmdfvl3b4p6p1edql [FILE_NAME] => Anons_Platformer.-ZHanr-videoigr.jpg [ORIGINAL_NAME] => Anons_Платформер. Жанр видеоигр.jpg [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 020fd97017a3a6104e1a4ba169769f6e [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/95e/bkd8jk1pkep3ctuvmdfvl3b4p6p1edql/Anons_Platformer.-ZHanr-videoigr.jpg [UNSAFE_SRC] => /upload/iblock/95e/bkd8jk1pkep3ctuvmdfvl3b4p6p1edql/Anons_Platformer.-ZHanr-videoigr.jpg [SAFE_SRC] => /upload/iblock/95e/bkd8jk1pkep3ctuvmdfvl3b4p6p1edql/Anons_Platformer.-ZHanr-videoigr.jpg [ALT] => Платформер. Жанр видеоигр [TITLE] => Платформер. Жанр видеоигр ) [DETAIL_TEXT] =>Платформер - передвижение по платформам, с помощью прыжков, лазанье по лестницам, сбор предметов, необходимых для завершения уровня или победы над врагами.
Игры с рисованной мультяшной графикой, а персонажи - вымышленные существа. Один из самых древних жанров компьютерных игр, который появился в начале 1980-х годов и стал трёхмерным в середине 90-х.
Эра двумерной графики
Электронные устройства не были достаточно мощными, поэтому игры не могли отображать трёхмерную графику. Они были ограничены статическими игровыми мирами, которые помещались на один экран. Игрок перемещался по лестницам, прыгал с платформы на платформу, собирая паверапы.
Одной из первых игр 1981 года считается Donkey Kong, аркадная игра, созданная фирмой Nintendo.
С появлением длинных многоэкранных прокручивающихся игровых миров прохождение уровней стало горизонтальным. Начало этому положили наиболее популярные игры на домашних компьютерах, такие как Pitfall! фирмы Activision (1982), Manic Miner (1983) и продолжение этой игры Jet Set Willy (1984).
В 1985 году Nintendo выпустила революционный платформер Super Mario Bros для приставки Nintendo Entertainment System. Главный герой Марио стал символом фирмы. Игра была наполнена сложными уровнями и стала примером для последующих создателей игр. По сей день многие люди считают её одной из самых лучших. Игра имела большую популярность и активно продавалась огромными тиражами.
Трехмерная эра
Трехмерный платформер это либо геймплей, включающий в себя три измерения, либо использование трехмерных полигонов в реальном времени, либо и то и другое. Задачей игр стала необходимость тщательно исследовать каждый уровень, собирая кусочки головоломок или звезды, как в Super Mario 64, появилась возможность развития персонажа.
Самым ярким примером является Crash Bandicoot. Эта игра оставалось двумерным платформером, в котором использовались плоские уровни, а в конце располагалась игровая цель.
Изометрические игры
Изометрические игры отображают трехмерную сцену с помощью двумерной графики. Задача игр - исследование внутренних помещений (небольшие комнаты, соединённые дверьми), в которых находились элементы головоломок.
Примерами являются игры 1983 года Congo Bongo в мире аркадных автоматов и 3D Ant Attack для ZX Spectrum, после перенесенная на Commodore 64.
Платформеры настолько легко узнаваемые, что их знают даже те, кто никогда не увлекался играми. [DETAIL_PICTURE] => Array ( [ID] => 3224 [TIMESTAMP_X] => 23.04.2023 20:42:20 [MODULE_ID] => iblock [HEIGHT] => 191 [WIDTH] => 1640 [FILE_SIZE] => 63719 [CONTENT_TYPE] => image/png [SUBDIR] => iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6 [FILE_NAME] => SHapka_2_.png [ORIGINAL_NAME] => Шапка(2).png [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 83b772cac086ad34060576410d2261e4 [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [UNSAFE_SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [SAFE_SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [ALT] => Платформер. Жанр видеоигр [TITLE] => Платформер. Жанр видеоигр ) [DATE_ACTIVE_FROM] => 22.10.2022 [ACTIVE_FROM] => 22.10.2022 [DATE_ACTIVE_TO] => [ACTIVE_TO] => [SHOW_COUNTER] => 11891 [SHOW_COUNTER_START] => 22.10.2022 19:47:02 [IBLOCK_TYPE_ID] => articles [IBLOCK_ID] => 9 [IBLOCK_CODE] => articles [IBLOCK_NAME] => Статьи [IBLOCK_EXTERNAL_ID] => [DATE_CREATE] => 22.10.2022 19:45:05 [CREATED_BY] => 37 [CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [TIMESTAMP_X] => 23.04.2023 20:42:20 [MODIFIED_BY] => 37 [USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов ) [PROPERTIES] => Array ( [CATEGORY_ARTICLES] => Array ( [ID] => 74 [IBLOCK_ID] => 9 [NAME] => Категории статей [ACTIVE] => Y [SORT] => 500 [CODE] => CATEGORY_ARTICLES [DEFAULT_VALUE] => [PROPERTY_TYPE] => L [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => [MULTIPLE_CNT] => 5 [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 1 [USER_TYPE] => [USER_TYPE_SETTINGS] => [HINT] => [~NAME] => Категории статей [~DEFAULT_VALUE] => [VALUE_ENUM] => Array ( [0] => Индустрия ) [VALUE_XML_ID] => Array ( [0] => industry ) [VALUE_SORT] => Array ( [0] => 500 ) [VALUE] => Array ( [0] => Индустрия ) [PROPERTY_VALUE_ID] => Array ( [0] => 5613 ) [VALUE_ENUM_ID] => Array ( [0] => 69 ) [DESCRIPTION] => Array ( [0] => ) [~VALUE] => Array ( [0] => Индустрия ) [~DESCRIPTION] => Array ( [0] => ) ) [SHOW_COUNTER] => ) [DISPLAY_PROPERTIES] => Array ( [CATEGORY_ARTICLES] => Array ( [ID] => 74 [IBLOCK_ID] => 9 [NAME] => Категории статей [ACTIVE] => Y [SORT] => 500 [CODE] => CATEGORY_ARTICLES [DEFAULT_VALUE] => [PROPERTY_TYPE] => L [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => [MULTIPLE_CNT] => 5 [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 1 [USER_TYPE] => [USER_TYPE_SETTINGS] => [HINT] => [~NAME] => Категории статей [~DEFAULT_VALUE] => [VALUE_ENUM] => Array ( [0] => Индустрия ) [VALUE_XML_ID] => Array ( [0] => industry ) [VALUE_SORT] => Array ( [0] => 500 ) [VALUE] => Array ( [0] => Индустрия ) [PROPERTY_VALUE_ID] => Array ( [0] => 5613 ) [VALUE_ENUM_ID] => Array ( [0] => 69 ) [DESCRIPTION] => Array ( [0] => ) [~VALUE] => Array ( [0] => Индустрия ) [~DESCRIPTION] => Array ( [0] => ) [DISPLAY_VALUE] => Индустрия ) ) [IPROPERTY_VALUES] => Array ( [SECTION_META_TITLE] => Платформер. Жанр видеоигр [SECTION_META_KEYWORDS] => Платформер. Жанр видеоигр [SECTION_META_DESCRIPTION] => Платформер. Жанр видеоигр [SECTION_PAGE_TITLE] => Платформер. Жанр видеоигр [ELEMENT_PAGE_TITLE] => Платформер. Жанр видеоигр [ELEMENT_META_TITLE] => Платформер (англ. platformer) — жанр компьютерных игр. [ELEMENT_META_KEYWORDS] => game, platformer [ELEMENT_META_DESCRIPTION] => Платформер - передвижение по платформам, с помощью прыжков, лазанье по лестницам, сбор предметов, необходимых для завершения уровня или победы над врагами. ) )
Array ( [ID] => 376 [~ID] => 376 [CODE] => topologiya-v-3d-modelirovanii [~CODE] => topologiya-v-3d-modelirovanii [XML_ID] => 376 [~XML_ID] => 376 [NAME] => Топология в 3D моделировании [~NAME] => Топология в 3D моделировании [TAGS] => [~TAGS] => [SORT] => 500 [~SORT] => 500 [PREVIEW_TEXT] => Топология - это раздел математики, который изучает, грубо говоря, непрерывность форм. В трехмерной графике топология - это расположение полигонов создающее некоторый путь по поверхности полигональной сетки. [~PREVIEW_TEXT] => Топология - это раздел математики, который изучает, грубо говоря, непрерывность форм. В трехмерной графике топология - это расположение полигонов создающее некоторый путь по поверхности полигональной сетки. [PREVIEW_PICTURE] => Array ( [ID] => 3889 [TIMESTAMP_X] => 24.05.2023 23:54:57 [MODULE_ID] => iblock [HEIGHT] => 190 [WIDTH] => 320 [FILE_SIZE] => 71707 [CONTENT_TYPE] => image/png [SUBDIR] => iblock/90d/xcnmi6e6ecai6d7y75140oojhuwu03ry [FILE_NAME] => Anons_Topologiya-v-3D-modelirovanii_cgitems.ru.png [ORIGINAL_NAME] => Anons_Топология в 3D моделировании_cgitems.ru.png [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 4f087dbe9abb806953c22f48708bbf9c [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/90d/xcnmi6e6ecai6d7y75140oojhuwu03ry/Anons_Topologiya-v-3D-modelirovanii_cgitems.ru.png [UNSAFE_SRC] => /upload/iblock/90d/xcnmi6e6ecai6d7y75140oojhuwu03ry/Anons_Topologiya-v-3D-modelirovanii_cgitems.ru.png [SAFE_SRC] => /upload/iblock/90d/xcnmi6e6ecai6d7y75140oojhuwu03ry/Anons_Topologiya-v-3D-modelirovanii_cgitems.ru.png [ALT] => Топология в 3D моделировании [TITLE] => Топология в 3D моделировании ) [~PREVIEW_PICTURE] => 3889 [DETAIL_TEXT] =>Что такое топология
Топология - это раздел математики, который изучает, грубо говоря, непрерывность форм. В трехмерной графике топология - это расположение полигонов создающее некоторый путь по поверхности полигональной сетки.
Топология относится к геометрическим характеристикам поверхности 3D сетки. Также можно встретить понятие «Polygon Flow» - поток полигонов, но расположение вершин и ребер сетки также играет важную роль в создании 3d моделей.
Можно сказать, что по сути не существует четких стандартов или железных правил в работе с топологией. Это та сфера, успеха в которой можно достигнуть только посредством практики, анализа и наработки опыта, «насмотренности».В чем-то топологию можно сравнить с изучением иностранного языка - да, вы можете приехать в другую страну не зная ее язык, но при этом определенно столкнетесь с проблемами и сложностями, не получите от поездки тот результат, который могли бы получить, если бы знали местный язык хотя бы на базовом уровне.
В чем же заключается важность топологии?
В принципе, это зависит от задачи стоящей перед художником.
В случае с Hard Surface моделированием хорошая топология позволит нам легче и быстрее вносить правки и менять геометрию модели, выбирать отдельные участки, работать с чистыми и аккуратными фасками, получать чистый финальный результат.В случае с моделированием персонажей, либо существ, сетка будет деформироваться во время анимации, а это значит, что в этом случае правильная топология важна для корректной и чистой работы анимации, она облегчит жизнь аниматору и, опять же, позволит легко и быстро работать над правками и изменениями сетки модели.
Из всего этого можно сделать вывод, что чем чище и правильнее топология модели, тем легче нам контролировать и предсказать финальный результат, избежать неприятных артефактов, а также сэкономить себе массу времени исключив бесполезные действия из рабочего процесса.
Из чего состоит 3D модель
Любая модель будет состоять из трех элементов - полигон, ребро, вершина (Polygon, Edge, Vertex). Вы часто (всегда) будете слышать следующие обозначения - вертекс, эдж, полигон.
Vertex - это позиция точки в трехмерном пространстве, которая определяется координатами X, Y, Z. Она может хранить в себе такую информацию как цвет, направление нормали, текстурные координаты. Несколько эджей и полигонов могут иметь один вертекс.
Edge - это линия, которая соединяет два вертекса. Как и в случае с вертексом, несколько полигонов могут иметь общий эдж. Важно - лучше не называть их линиями и сразу привыкнуть к понятию Edge (ребро).
Polygon - многоугольник. Состоит из трех или более вертексов, с замкнутым контуром эджей. Это как раз та самая форма, которая определяет поверхность трехмерной сетки. Polygon flow - помните такое понятие, верно?
Полигон также называют Face - поверхность. Обычно 3D сетка содержит в себе от десятков до сотен и тысяч полигонов. Зависит от задачи, под которую мы делаем свою модель.
Всем известное понятие «оптимизация» в том числе включает в себя то, какое количество полигонов (а если точнее, то треугольников) включает в себя сетка, часто оно может быть жестко ограничено под требования проекта (в случае с играми). С каждым годом эти требования становятся все более размытыми, благодаря развитию вычислительных технологий. НО, это не единственный аспект оптимизации.
Виды и особенности полигонов
Полигоны имеют названия исходя из их количества сторон. Давайте выделим три вида, которые вы будете встречать чаще всего.
Triangle (tri, триангл) - трехсторонний полигон, иначе говоря треугольник. Вы будете очень часто встречать это понятие, так как треугольник это базовая форма полигона применяемая, например, движками. Также существует процесс триангуляции - разбиение квадов модели на треугольники, обычно мы делаем это перед выгрузкой модели на запекание, движки в свою очередь сами делают триангуляцию, если она не сделана заранее.
Quadrangle (quad, квад) - полигон с четырьмя сторонами. Это тот вид полигона, который мы должны знать, любить и уважать, так как он является основой нашей модели при создании её сетки.
N-Gon - это полигон с количеством сторон более чем четыре. Важно - если вы видите квад в котором пять вертексов, то это уже n-gon, несмотря на то что визуально он квадратный.
Существует ряд мнений среди 3D сообщества на тему применения N-Gon и Triangle полигонов в создании модели. На деле все зависит от ситуации и целей, с которой создается модель.
Отдельная тема, это модели под анимацию, например персонажи. У них есть ряд своих, особых требований по применению полигонов в топологии. Давайте возьмем за основу следующий принцип - «То что я могу, не значит что так и надо», и будем стремиться к тому, чтобы строить свои сетки на quad - квадратных полигонах.Вспоминаем о том, что ровная и удобная сетка это залог простоты и скорости её редактирования, квадратный полигон в этой ситуации - наш главный помощник. Безусловно, бывают ситуации, когда применяются другие типы полигонов, но это ситуативно, становится понятнее с опытом, и уже на конкретных примерах вам надо будет смотреть и принимать решение - какой полигон применить.Planar и NON-Planar полигоны (плоские и неплоские)
Полигон является планарным, если все его вершины лежат в одной плоскости, также треугольный полигон является планарным, так как три его вершины всегда будут лежать в одной плоскости.
Большинство полигонов в ваших моделях будут планарные - лежать вершинами в одной плоскости. В свою очередь не планарным полигоном будет считаться такой полигон, в котором одна или более вершина не лежит в плоскости с остальными, создавая «загиб».Работая с топологией стоит помнить о том, что существует процесс триангуляции моделей, мы говорили об этом выше. По сути это разбиение ваших квадов на треугольники диагональным ребром.
Любой движок требует, чтобы модель была триангулирована для корректного её отображения, либо делает это сам. В случае с не планарными полигонами это может создать артефакты на поверхности модели, так как триангуляция на таких полигонах может лечь произвольно, без учета их оси деформации.Это решается правкой триангуляции вручную - она должна идти вдоль оси деформации полигона которую вы заложили изначально при его деформации, а не по той логике которую выбрал движок.Subdivision Surface (SubD)
Subdivision Surface - это алгоритм подразделения поверхностей, который создает гладкую поверхность из «грубой» полигональной сетки. Когда сетка подразделяется, она становится более плавной, её детали принимают более финальный вид.
Это преобразование является обратимым, только если вы не применили финальное сглаживание (например, перед выгрузкой High Poly для запекания).Наиболее часто используемым алгоритмом subdivision surface является Catmull - Clark (CC SubD). Его разработали Эдвин Катмулл и Джеймс Кларк в 1978 году. Обратите внимание, насколько давно удачная идея стала инструментом актуальным до сих пор.
Если объяснять простыми словами, то суть его заключается в том, что по полигонам модели под SubD размещаются центроиды - вершины в центральных точках полигонов, далее они соединяются ребрами, оставшиеся вершины смещаются, чтобы снять напряжение - происходит «округление» формы.
Этот алгоритм итеративен, то есть может повторяться раз за разом, наращивая количество подразделений. Таким образом, мы получаем high poly модель, и именно этот процесс нам надо учитывать при построении модели под SubD.Чистая и аккуратная работа с топологией под Subdivision Surface, это залог того, что на выходе вы получите правильную модель без артефактов.
Высокая плотность, хаотичность в построении сетки, разнобой в полигонах - все это может создать вам немало сложностей в процессе моделирования и превратить его в тяжелый изнурительный труд. А мы ведь хотим получать удовольствие от процесса и заниматься творчеством, а не разгребать нагромождение полигонов, верно?Важные определения и понятия топологии, которые надо знать и учитывать
PolyLoop - петля полигонов. Представляет собой набор последовательно и непрерывно связанных квадратных полигонов. Polyloop является важным элементом построения 3D модели, умение работать с петлями станет залогом вашего успеха.
Сам по себе один полигон ничего не значит, так как мысля в таком формате мы не видим созависимостей, можем пропустить важные моменты в модели, либо допустить ошибки построения. Но замкнутая цепочка полигонов это мощный инструмент позволяющий мыслить и моделировать более комплексно. Вам стоит сразу, с самого начала стараться мыслить петлями, а не отдельными полигонами при создании своих сеток.PolyLoop позволяет вам точнее и равномернее распределять полигоны, выделять отдельные участки и редактировать модель, при применении SubD правильные PolyLoop подразделяются и сглаживаются лучше всего.Именно по этому вам стоит сразу, заранее планировать свою работу и стараться мыслить комплексно - правильное начало работы, это залог того, что на финальных этапах вы сэкономите себе немало времени и сил.В разных ситуациях PolyLoop по разному работают с SubD, именно поэтому вам необходима практика и наработка опыта, чтобы увидеть и запомнить разные ситуации. Посмотрите разные примеры сеток, попытайтесь увидеть эти петли, и вскоре поймете что действительно каждая модель состоит в первую очередь именно из них.EdgeLoop - в свою очередь это петля из эджей (ребер). Как и с PolyLoop - петля ребер это разрезы, которые вы будете делать на модели, и они буду замыкаться.
Правильная работа с размещением таких петель, это также залог чистой, легкой сетки которая будет корректно сглаживаться и легко редактироваться. Обратите внимание на изображение выше - там представлены как петли полигонов, так и петли ребер, по сути это неотделимые понятия, но каждое из них само по себе важно и может нести разную функцию, в зависимости от задачи.Также бывают ситуации, когда петля ребер заканчивается звездой (еще их называю «полюс»), об этом мы поговорим далее. Каждый EdgeLoop призван служить форме вашего объекта. Посмотрите на положение петель в своей модели и скажите себе - какие из них служат какой то функции, а какие нет. Это покажет вам, где вы сделали лишнюю работу.В работе с EdgeLoop также стоит мыслить именно петлями, а не отдельными ребрами.Звезда (pole, star, полюс) - это вершина в сетке, в которую приходит 3 и более ребер. В зависимости от ситуации это может быть как плохо, так и хорошо для вашей сетки.
Неправильное размещение звезд может привести к артефактам на сглаженной модели.Если в вашей сетке есть звезды, то посмотрите откуда они взялись и несут ли в себе какую-то практическую функцию.Желательно избегать звезд в сгибах, складках и подобных сложных участках, так как при подразделении с большой вероятностью это повлияет на корректность отображения вашей поверхности.Это, опять же, тот случай, когда понимание таких моментов приходит с опытом и насмотренностью. Делайте топологию свой модели вдумчиво, смотрите на результат.Hold Edges (support edges, поддерживающие ребра) - подразделение поверхностей создает сглаженную поверхность модели.
При помощи топологии мы можем контролировать силу сглаживания. Расстояние между ребрами определяет то, насколько сильно сгладится поверхность. Поддерживающие ребра призваны помочь нам удержать форму в тех местах, где это необходимо.Также во многих современных 3D редакторах есть такая функция, как Edge Creasing (иногда её называют Edge Weighting или вес ребра) - заострение ребра. Эта функция позволяет задать «натяжение» на выбранных ребрах. В целом Hold Edges также является очень мощным и многофункциональным инструментом, который можно и нужно использовать и знать, как он работает.Немного о топологии в Low Poly
Процесс создания модели для игры включает в себя такой процесс, как ретопология.
Суть его в том, чтобы на основе вашей High Poly модели сделать её облегченную версию, которая будет, скажем так, «облеплять» High Poly модель. Это необходимо для процесса запекания (baking) и дальнейшей выгрузки готовой модели в движок.Работа с Low Poly связана с упрощением модели и сокращением числа полигонов, но при этом важно не потерять силуэт модели - её ключевые формы.
В процессе создания Low Poly модели вам надо будет избавиться от Support Edges, лишних Edge Loops, которые не влияют на силуэт и форму модели, сократить количество граней на цилиндрах, избавиться от фасок, удалить скрытые полигоны, сшить пересекающиеся элементы, проверить врезки «элемент в элемент», иначе говоря пересекающиеся элементы.Так же как и в High Poly, в Low Poly нет четких условий в моделировании - все ситуативно и необходимо смотреть на финальный результат, при необходимости возвращаясь назад и внося корректировки.
Давайте возьмем за основу принцип «отрезать все лишнее и ненужное, оставляя суть модели». На этом этапе нас уже не интересует SubD, нам важна легкая, упрощенная модель дающая четкий силуэт, которую мы сможем триангулировать и отправить на запекание\в движок.
Пробуйте, смотрите, экспериментируйте. Понимание аспектов создания Low Poly также приходит с опытом и насмотренностью.Итак, давайте подытожим
Начинайте построение модели с анализа референсов, заранее прикиньте, где у вас будут более сложные участки с повышенной плотностью полигонов, сделайте блокинг, иначе говоря - драфт модели.
Черновой набросок, который позволит вам увидеть пропорции элементов, начать набрасывать детализацию. Этот этап важен, так как поможет вам лучше представлять, как формировать сетку конечной модели и разбить работу на конкретные этапы. В процессе работы идите от общего к частному.Используйте меньше полигонов там, где это возможно.
Часто бывает так, что после применения SubD к финальной модели оказывается, что некоторые полигоны в вашей сетке не несут никакой функции.Например - если цилиндр с шестью гранями после сглаживания не отличается от цилиндра с двенадцатью гранями, то, возможно, стоит заранее это учесть и не плодить лишние грани. Разумеется все ситуативно и, опять же, подобные вещи придут к вам со временем и практикой.Треугольники и многоугольники (N-GONs) это не всегда плохо. Но стоит учитывать, что в некоторых ситуациях они могут создать артефакты на вашей модели после применения SubD (например на углах, или цилиндрических формах).
Соответственно, создавайте модель вдумчиво, ориентируйтесь на визуальный результат.Ну и конечно помните о том, что хорошая сетка, это сетка на квадах.Следите за размерами полигонов и снова - за их количеством.
Много - это не всегда хорошо и правильно. Часто бывает, что результата под SubD можно добиться гораздо меньшими силами, чем вам кажется.Полигональное моделирование, это баланс между формой и топологией - в процессе работы вы будете переключаться между созданием формы и редактированием её топологии.
Естественность направлений петель - наблюдайте, насколько естественно и логично ложатся ваши петли в сетке модели.
Не важно, в какой программе вы работаете, или сколько плагинов применяете в работе - важно, насколько хорошо вы понимаете основы работы с топологией, они будут одинаковы для любого редактора.
Работая с LowPoly помните про количество полигонов, силуэт модели и то, что надо срезать все лишнее оставив самое важное.
Учитывайте всю информацию, что прочли выше, практикуйтесь, изучайте работы 3D художников и у вас все получится!
[~DETAIL_TEXT] =>Что такое топология
Топология - это раздел математики, который изучает, грубо говоря, непрерывность форм. В трехмерной графике топология - это расположение полигонов создающее некоторый путь по поверхности полигональной сетки.
Топология относится к геометрическим характеристикам поверхности 3D сетки. Также можно встретить понятие «Polygon Flow» - поток полигонов, но расположение вершин и ребер сетки также играет важную роль в создании 3d моделей.
Можно сказать, что по сути не существует четких стандартов или железных правил в работе с топологией. Это та сфера, успеха в которой можно достигнуть только посредством практики, анализа и наработки опыта, «насмотренности».В чем-то топологию можно сравнить с изучением иностранного языка - да, вы можете приехать в другую страну не зная ее язык, но при этом определенно столкнетесь с проблемами и сложностями, не получите от поездки тот результат, который могли бы получить, если бы знали местный язык хотя бы на базовом уровне.
В чем же заключается важность топологии?
В принципе, это зависит от задачи стоящей перед художником.
В случае с Hard Surface моделированием хорошая топология позволит нам легче и быстрее вносить правки и менять геометрию модели, выбирать отдельные участки, работать с чистыми и аккуратными фасками, получать чистый финальный результат.В случае с моделированием персонажей, либо существ, сетка будет деформироваться во время анимации, а это значит, что в этом случае правильная топология важна для корректной и чистой работы анимации, она облегчит жизнь аниматору и, опять же, позволит легко и быстро работать над правками и изменениями сетки модели.
Из всего этого можно сделать вывод, что чем чище и правильнее топология модели, тем легче нам контролировать и предсказать финальный результат, избежать неприятных артефактов, а также сэкономить себе массу времени исключив бесполезные действия из рабочего процесса.
Из чего состоит 3D модель
Любая модель будет состоять из трех элементов - полигон, ребро, вершина (Polygon, Edge, Vertex). Вы часто (всегда) будете слышать следующие обозначения - вертекс, эдж, полигон.
Vertex - это позиция точки в трехмерном пространстве, которая определяется координатами X, Y, Z. Она может хранить в себе такую информацию как цвет, направление нормали, текстурные координаты. Несколько эджей и полигонов могут иметь один вертекс.
Edge - это линия, которая соединяет два вертекса. Как и в случае с вертексом, несколько полигонов могут иметь общий эдж. Важно - лучше не называть их линиями и сразу привыкнуть к понятию Edge (ребро).
Polygon - многоугольник. Состоит из трех или более вертексов, с замкнутым контуром эджей. Это как раз та самая форма, которая определяет поверхность трехмерной сетки. Polygon flow - помните такое понятие, верно?
Полигон также называют Face - поверхность. Обычно 3D сетка содержит в себе от десятков до сотен и тысяч полигонов. Зависит от задачи, под которую мы делаем свою модель.
Всем известное понятие «оптимизация» в том числе включает в себя то, какое количество полигонов (а если точнее, то треугольников) включает в себя сетка, часто оно может быть жестко ограничено под требования проекта (в случае с играми). С каждым годом эти требования становятся все более размытыми, благодаря развитию вычислительных технологий. НО, это не единственный аспект оптимизации.
Виды и особенности полигонов
Полигоны имеют названия исходя из их количества сторон. Давайте выделим три вида, которые вы будете встречать чаще всего.
Triangle (tri, триангл) - трехсторонний полигон, иначе говоря треугольник. Вы будете очень часто встречать это понятие, так как треугольник это базовая форма полигона применяемая, например, движками. Также существует процесс триангуляции - разбиение квадов модели на треугольники, обычно мы делаем это перед выгрузкой модели на запекание, движки в свою очередь сами делают триангуляцию, если она не сделана заранее.
Quadrangle (quad, квад) - полигон с четырьмя сторонами. Это тот вид полигона, который мы должны знать, любить и уважать, так как он является основой нашей модели при создании её сетки.
N-Gon - это полигон с количеством сторон более чем четыре. Важно - если вы видите квад в котором пять вертексов, то это уже n-gon, несмотря на то что визуально он квадратный.
Существует ряд мнений среди 3D сообщества на тему применения N-Gon и Triangle полигонов в создании модели. На деле все зависит от ситуации и целей, с которой создается модель.
Отдельная тема, это модели под анимацию, например персонажи. У них есть ряд своих, особых требований по применению полигонов в топологии. Давайте возьмем за основу следующий принцип - «То что я могу, не значит что так и надо», и будем стремиться к тому, чтобы строить свои сетки на quad - квадратных полигонах.Вспоминаем о том, что ровная и удобная сетка это залог простоты и скорости её редактирования, квадратный полигон в этой ситуации - наш главный помощник. Безусловно, бывают ситуации, когда применяются другие типы полигонов, но это ситуативно, становится понятнее с опытом, и уже на конкретных примерах вам надо будет смотреть и принимать решение - какой полигон применить.Planar и NON-Planar полигоны (плоские и неплоские)
Полигон является планарным, если все его вершины лежат в одной плоскости, также треугольный полигон является планарным, так как три его вершины всегда будут лежать в одной плоскости.
Большинство полигонов в ваших моделях будут планарные - лежать вершинами в одной плоскости. В свою очередь не планарным полигоном будет считаться такой полигон, в котором одна или более вершина не лежит в плоскости с остальными, создавая «загиб».Работая с топологией стоит помнить о том, что существует процесс триангуляции моделей, мы говорили об этом выше. По сути это разбиение ваших квадов на треугольники диагональным ребром.
Любой движок требует, чтобы модель была триангулирована для корректного её отображения, либо делает это сам. В случае с не планарными полигонами это может создать артефакты на поверхности модели, так как триангуляция на таких полигонах может лечь произвольно, без учета их оси деформации.Это решается правкой триангуляции вручную - она должна идти вдоль оси деформации полигона которую вы заложили изначально при его деформации, а не по той логике которую выбрал движок.Subdivision Surface (SubD)
Subdivision Surface - это алгоритм подразделения поверхностей, который создает гладкую поверхность из «грубой» полигональной сетки. Когда сетка подразделяется, она становится более плавной, её детали принимают более финальный вид.
Это преобразование является обратимым, только если вы не применили финальное сглаживание (например, перед выгрузкой High Poly для запекания).Наиболее часто используемым алгоритмом subdivision surface является Catmull - Clark (CC SubD). Его разработали Эдвин Катмулл и Джеймс Кларк в 1978 году. Обратите внимание, насколько давно удачная идея стала инструментом актуальным до сих пор.
Если объяснять простыми словами, то суть его заключается в том, что по полигонам модели под SubD размещаются центроиды - вершины в центральных точках полигонов, далее они соединяются ребрами, оставшиеся вершины смещаются, чтобы снять напряжение - происходит «округление» формы.
Этот алгоритм итеративен, то есть может повторяться раз за разом, наращивая количество подразделений. Таким образом, мы получаем high poly модель, и именно этот процесс нам надо учитывать при построении модели под SubD.Чистая и аккуратная работа с топологией под Subdivision Surface, это залог того, что на выходе вы получите правильную модель без артефактов.
Высокая плотность, хаотичность в построении сетки, разнобой в полигонах - все это может создать вам немало сложностей в процессе моделирования и превратить его в тяжелый изнурительный труд. А мы ведь хотим получать удовольствие от процесса и заниматься творчеством, а не разгребать нагромождение полигонов, верно?Важные определения и понятия топологии, которые надо знать и учитывать
PolyLoop - петля полигонов. Представляет собой набор последовательно и непрерывно связанных квадратных полигонов. Polyloop является важным элементом построения 3D модели, умение работать с петлями станет залогом вашего успеха.
Сам по себе один полигон ничего не значит, так как мысля в таком формате мы не видим созависимостей, можем пропустить важные моменты в модели, либо допустить ошибки построения. Но замкнутая цепочка полигонов это мощный инструмент позволяющий мыслить и моделировать более комплексно. Вам стоит сразу, с самого начала стараться мыслить петлями, а не отдельными полигонами при создании своих сеток.PolyLoop позволяет вам точнее и равномернее распределять полигоны, выделять отдельные участки и редактировать модель, при применении SubD правильные PolyLoop подразделяются и сглаживаются лучше всего.Именно по этому вам стоит сразу, заранее планировать свою работу и стараться мыслить комплексно - правильное начало работы, это залог того, что на финальных этапах вы сэкономите себе немало времени и сил.В разных ситуациях PolyLoop по разному работают с SubD, именно поэтому вам необходима практика и наработка опыта, чтобы увидеть и запомнить разные ситуации. Посмотрите разные примеры сеток, попытайтесь увидеть эти петли, и вскоре поймете что действительно каждая модель состоит в первую очередь именно из них.EdgeLoop - в свою очередь это петля из эджей (ребер). Как и с PolyLoop - петля ребер это разрезы, которые вы будете делать на модели, и они буду замыкаться.
Правильная работа с размещением таких петель, это также залог чистой, легкой сетки которая будет корректно сглаживаться и легко редактироваться. Обратите внимание на изображение выше - там представлены как петли полигонов, так и петли ребер, по сути это неотделимые понятия, но каждое из них само по себе важно и может нести разную функцию, в зависимости от задачи.Также бывают ситуации, когда петля ребер заканчивается звездой (еще их называю «полюс»), об этом мы поговорим далее. Каждый EdgeLoop призван служить форме вашего объекта. Посмотрите на положение петель в своей модели и скажите себе - какие из них служат какой то функции, а какие нет. Это покажет вам, где вы сделали лишнюю работу.В работе с EdgeLoop также стоит мыслить именно петлями, а не отдельными ребрами.Звезда (pole, star, полюс) - это вершина в сетке, в которую приходит 3 и более ребер. В зависимости от ситуации это может быть как плохо, так и хорошо для вашей сетки.
Неправильное размещение звезд может привести к артефактам на сглаженной модели.Если в вашей сетке есть звезды, то посмотрите откуда они взялись и несут ли в себе какую-то практическую функцию.Желательно избегать звезд в сгибах, складках и подобных сложных участках, так как при подразделении с большой вероятностью это повлияет на корректность отображения вашей поверхности.Это, опять же, тот случай, когда понимание таких моментов приходит с опытом и насмотренностью. Делайте топологию свой модели вдумчиво, смотрите на результат.Hold Edges (support edges, поддерживающие ребра) - подразделение поверхностей создает сглаженную поверхность модели.
При помощи топологии мы можем контролировать силу сглаживания. Расстояние между ребрами определяет то, насколько сильно сгладится поверхность. Поддерживающие ребра призваны помочь нам удержать форму в тех местах, где это необходимо.Также во многих современных 3D редакторах есть такая функция, как Edge Creasing (иногда её называют Edge Weighting или вес ребра) - заострение ребра. Эта функция позволяет задать «натяжение» на выбранных ребрах. В целом Hold Edges также является очень мощным и многофункциональным инструментом, который можно и нужно использовать и знать, как он работает.Немного о топологии в Low Poly
Процесс создания модели для игры включает в себя такой процесс, как ретопология.
Суть его в том, чтобы на основе вашей High Poly модели сделать её облегченную версию, которая будет, скажем так, «облеплять» High Poly модель. Это необходимо для процесса запекания (baking) и дальнейшей выгрузки готовой модели в движок.Работа с Low Poly связана с упрощением модели и сокращением числа полигонов, но при этом важно не потерять силуэт модели - её ключевые формы.
В процессе создания Low Poly модели вам надо будет избавиться от Support Edges, лишних Edge Loops, которые не влияют на силуэт и форму модели, сократить количество граней на цилиндрах, избавиться от фасок, удалить скрытые полигоны, сшить пересекающиеся элементы, проверить врезки «элемент в элемент», иначе говоря пересекающиеся элементы.Так же как и в High Poly, в Low Poly нет четких условий в моделировании - все ситуативно и необходимо смотреть на финальный результат, при необходимости возвращаясь назад и внося корректировки.
Давайте возьмем за основу принцип «отрезать все лишнее и ненужное, оставляя суть модели». На этом этапе нас уже не интересует SubD, нам важна легкая, упрощенная модель дающая четкий силуэт, которую мы сможем триангулировать и отправить на запекание\в движок.
Пробуйте, смотрите, экспериментируйте. Понимание аспектов создания Low Poly также приходит с опытом и насмотренностью.Итак, давайте подытожим
Начинайте построение модели с анализа референсов, заранее прикиньте, где у вас будут более сложные участки с повышенной плотностью полигонов, сделайте блокинг, иначе говоря - драфт модели.
Черновой набросок, который позволит вам увидеть пропорции элементов, начать набрасывать детализацию. Этот этап важен, так как поможет вам лучше представлять, как формировать сетку конечной модели и разбить работу на конкретные этапы. В процессе работы идите от общего к частному.Используйте меньше полигонов там, где это возможно.
Часто бывает так, что после применения SubD к финальной модели оказывается, что некоторые полигоны в вашей сетке не несут никакой функции.Например - если цилиндр с шестью гранями после сглаживания не отличается от цилиндра с двенадцатью гранями, то, возможно, стоит заранее это учесть и не плодить лишние грани. Разумеется все ситуативно и, опять же, подобные вещи придут к вам со временем и практикой.Треугольники и многоугольники (N-GONs) это не всегда плохо. Но стоит учитывать, что в некоторых ситуациях они могут создать артефакты на вашей модели после применения SubD (например на углах, или цилиндрических формах).
Соответственно, создавайте модель вдумчиво, ориентируйтесь на визуальный результат.Ну и конечно помните о том, что хорошая сетка, это сетка на квадах.Следите за размерами полигонов и снова - за их количеством.
Много - это не всегда хорошо и правильно. Часто бывает, что результата под SubD можно добиться гораздо меньшими силами, чем вам кажется.Полигональное моделирование, это баланс между формой и топологией - в процессе работы вы будете переключаться между созданием формы и редактированием её топологии.
Естественность направлений петель - наблюдайте, насколько естественно и логично ложатся ваши петли в сетке модели.
Не важно, в какой программе вы работаете, или сколько плагинов применяете в работе - важно, насколько хорошо вы понимаете основы работы с топологией, они будут одинаковы для любого редактора.
Работая с LowPoly помните про количество полигонов, силуэт модели и то, что надо срезать все лишнее оставив самое важное.
Учитывайте всю информацию, что прочли выше, практикуйтесь, изучайте работы 3D художников и у вас все получится!
[DETAIL_PICTURE] => [~DETAIL_PICTURE] => [DATE_ACTIVE_FROM] => 28.11.2022 [~DATE_ACTIVE_FROM] => 28.11.2022 [ACTIVE_FROM] => 28.11.2022 [~ACTIVE_FROM] => 28.11.2022 [DATE_ACTIVE_TO] => [~DATE_ACTIVE_TO] => [ACTIVE_TO] => [~ACTIVE_TO] => [SHOW_COUNTER] => 10483 [~SHOW_COUNTER] => 10483 [SHOW_COUNTER_START] => 28.11.2022 16:12:34 [~SHOW_COUNTER_START] => 28.11.2022 16:12:34 [IBLOCK_TYPE_ID] => articles [~IBLOCK_TYPE_ID] => articles [IBLOCK_ID] => 9 [~IBLOCK_ID] => 9 [IBLOCK_CODE] => articles [~IBLOCK_CODE] => articles [IBLOCK_NAME] => Статьи [~IBLOCK_NAME] => Статьи [IBLOCK_EXTERNAL_ID] => [~IBLOCK_EXTERNAL_ID] => [DATE_CREATE] => 28.11.2022 15:45:49 [~DATE_CREATE] => 28.11.2022 15:45:49 [CREATED_BY] => 37 [~CREATED_BY] => 37 [CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [~CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [TIMESTAMP_X] => 24.05.2023 23:54:57 [~TIMESTAMP_X] => 24.05.2023 23:54:57 [MODIFIED_BY] => 37 [~MODIFIED_BY] => 37 [USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [~USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [IBLOCK_SECTION_ID] => 126 [~IBLOCK_SECTION_ID] => 126 [DETAIL_PAGE_URL] => /articles/topologiya-v-3d-modelirovanii/ [~DETAIL_PAGE_URL] => /articles/topologiya-v-3d-modelirovanii/ [LIST_PAGE_URL] => /articles/ [~LIST_PAGE_URL] => /articles/ [DETAIL_TEXT_TYPE] => html [~DETAIL_TEXT_TYPE] => html [PREVIEW_TEXT_TYPE] => text [~PREVIEW_TEXT_TYPE] => text [LANG_DIR] => / [~LANG_DIR] => / [EXTERNAL_ID] => 376 [~EXTERNAL_ID] => 376 [LID] => s1 [~LID] => s1 [EDIT_LINK] => [DELETE_LINK] => [DISPLAY_ACTIVE_FROM] => 28.11.2022 [FIELDS] => Array ( [ID] => 376 [CODE] => topologiya-v-3d-modelirovanii [XML_ID] => 376 [NAME] => Топология в 3D моделировании [TAGS] => [SORT] => 500 [PREVIEW_TEXT] => Топология - это раздел математики, который изучает, грубо говоря, непрерывность форм. В трехмерной графике топология - это расположение полигонов создающее некоторый путь по поверхности полигональной сетки. [PREVIEW_PICTURE] => Array ( [ID] => 3889 [TIMESTAMP_X] => 24.05.2023 23:54:57 [MODULE_ID] => iblock [HEIGHT] => 190 [WIDTH] => 320 [FILE_SIZE] => 71707 [CONTENT_TYPE] => image/png [SUBDIR] => iblock/90d/xcnmi6e6ecai6d7y75140oojhuwu03ry [FILE_NAME] => Anons_Topologiya-v-3D-modelirovanii_cgitems.ru.png [ORIGINAL_NAME] => Anons_Топология в 3D моделировании_cgitems.ru.png [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 4f087dbe9abb806953c22f48708bbf9c [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/90d/xcnmi6e6ecai6d7y75140oojhuwu03ry/Anons_Topologiya-v-3D-modelirovanii_cgitems.ru.png [UNSAFE_SRC] => /upload/iblock/90d/xcnmi6e6ecai6d7y75140oojhuwu03ry/Anons_Topologiya-v-3D-modelirovanii_cgitems.ru.png [SAFE_SRC] => /upload/iblock/90d/xcnmi6e6ecai6d7y75140oojhuwu03ry/Anons_Topologiya-v-3D-modelirovanii_cgitems.ru.png [ALT] => Топология в 3D моделировании [TITLE] => Топология в 3D моделировании ) [DETAIL_TEXT] =>Что такое топология
Топология - это раздел математики, который изучает, грубо говоря, непрерывность форм. В трехмерной графике топология - это расположение полигонов создающее некоторый путь по поверхности полигональной сетки.
Топология относится к геометрическим характеристикам поверхности 3D сетки. Также можно встретить понятие «Polygon Flow» - поток полигонов, но расположение вершин и ребер сетки также играет важную роль в создании 3d моделей.
Можно сказать, что по сути не существует четких стандартов или железных правил в работе с топологией. Это та сфера, успеха в которой можно достигнуть только посредством практики, анализа и наработки опыта, «насмотренности».В чем-то топологию можно сравнить с изучением иностранного языка - да, вы можете приехать в другую страну не зная ее язык, но при этом определенно столкнетесь с проблемами и сложностями, не получите от поездки тот результат, который могли бы получить, если бы знали местный язык хотя бы на базовом уровне.
В чем же заключается важность топологии?
В принципе, это зависит от задачи стоящей перед художником.
В случае с Hard Surface моделированием хорошая топология позволит нам легче и быстрее вносить правки и менять геометрию модели, выбирать отдельные участки, работать с чистыми и аккуратными фасками, получать чистый финальный результат.В случае с моделированием персонажей, либо существ, сетка будет деформироваться во время анимации, а это значит, что в этом случае правильная топология важна для корректной и чистой работы анимации, она облегчит жизнь аниматору и, опять же, позволит легко и быстро работать над правками и изменениями сетки модели.
Из всего этого можно сделать вывод, что чем чище и правильнее топология модели, тем легче нам контролировать и предсказать финальный результат, избежать неприятных артефактов, а также сэкономить себе массу времени исключив бесполезные действия из рабочего процесса.
Из чего состоит 3D модель
Любая модель будет состоять из трех элементов - полигон, ребро, вершина (Polygon, Edge, Vertex). Вы часто (всегда) будете слышать следующие обозначения - вертекс, эдж, полигон.
Vertex - это позиция точки в трехмерном пространстве, которая определяется координатами X, Y, Z. Она может хранить в себе такую информацию как цвет, направление нормали, текстурные координаты. Несколько эджей и полигонов могут иметь один вертекс.
Edge - это линия, которая соединяет два вертекса. Как и в случае с вертексом, несколько полигонов могут иметь общий эдж. Важно - лучше не называть их линиями и сразу привыкнуть к понятию Edge (ребро).
Polygon - многоугольник. Состоит из трех или более вертексов, с замкнутым контуром эджей. Это как раз та самая форма, которая определяет поверхность трехмерной сетки. Polygon flow - помните такое понятие, верно?
Полигон также называют Face - поверхность. Обычно 3D сетка содержит в себе от десятков до сотен и тысяч полигонов. Зависит от задачи, под которую мы делаем свою модель.
Всем известное понятие «оптимизация» в том числе включает в себя то, какое количество полигонов (а если точнее, то треугольников) включает в себя сетка, часто оно может быть жестко ограничено под требования проекта (в случае с играми). С каждым годом эти требования становятся все более размытыми, благодаря развитию вычислительных технологий. НО, это не единственный аспект оптимизации.
Виды и особенности полигонов
Полигоны имеют названия исходя из их количества сторон. Давайте выделим три вида, которые вы будете встречать чаще всего.
Triangle (tri, триангл) - трехсторонний полигон, иначе говоря треугольник. Вы будете очень часто встречать это понятие, так как треугольник это базовая форма полигона применяемая, например, движками. Также существует процесс триангуляции - разбиение квадов модели на треугольники, обычно мы делаем это перед выгрузкой модели на запекание, движки в свою очередь сами делают триангуляцию, если она не сделана заранее.
Quadrangle (quad, квад) - полигон с четырьмя сторонами. Это тот вид полигона, который мы должны знать, любить и уважать, так как он является основой нашей модели при создании её сетки.
N-Gon - это полигон с количеством сторон более чем четыре. Важно - если вы видите квад в котором пять вертексов, то это уже n-gon, несмотря на то что визуально он квадратный.
Существует ряд мнений среди 3D сообщества на тему применения N-Gon и Triangle полигонов в создании модели. На деле все зависит от ситуации и целей, с которой создается модель.
Отдельная тема, это модели под анимацию, например персонажи. У них есть ряд своих, особых требований по применению полигонов в топологии. Давайте возьмем за основу следующий принцип - «То что я могу, не значит что так и надо», и будем стремиться к тому, чтобы строить свои сетки на quad - квадратных полигонах.Вспоминаем о том, что ровная и удобная сетка это залог простоты и скорости её редактирования, квадратный полигон в этой ситуации - наш главный помощник. Безусловно, бывают ситуации, когда применяются другие типы полигонов, но это ситуативно, становится понятнее с опытом, и уже на конкретных примерах вам надо будет смотреть и принимать решение - какой полигон применить.Planar и NON-Planar полигоны (плоские и неплоские)
Полигон является планарным, если все его вершины лежат в одной плоскости, также треугольный полигон является планарным, так как три его вершины всегда будут лежать в одной плоскости.
Большинство полигонов в ваших моделях будут планарные - лежать вершинами в одной плоскости. В свою очередь не планарным полигоном будет считаться такой полигон, в котором одна или более вершина не лежит в плоскости с остальными, создавая «загиб».Работая с топологией стоит помнить о том, что существует процесс триангуляции моделей, мы говорили об этом выше. По сути это разбиение ваших квадов на треугольники диагональным ребром.
Любой движок требует, чтобы модель была триангулирована для корректного её отображения, либо делает это сам. В случае с не планарными полигонами это может создать артефакты на поверхности модели, так как триангуляция на таких полигонах может лечь произвольно, без учета их оси деформации.Это решается правкой триангуляции вручную - она должна идти вдоль оси деформации полигона которую вы заложили изначально при его деформации, а не по той логике которую выбрал движок.Subdivision Surface (SubD)
Subdivision Surface - это алгоритм подразделения поверхностей, который создает гладкую поверхность из «грубой» полигональной сетки. Когда сетка подразделяется, она становится более плавной, её детали принимают более финальный вид.
Это преобразование является обратимым, только если вы не применили финальное сглаживание (например, перед выгрузкой High Poly для запекания).Наиболее часто используемым алгоритмом subdivision surface является Catmull - Clark (CC SubD). Его разработали Эдвин Катмулл и Джеймс Кларк в 1978 году. Обратите внимание, насколько давно удачная идея стала инструментом актуальным до сих пор.
Если объяснять простыми словами, то суть его заключается в том, что по полигонам модели под SubD размещаются центроиды - вершины в центральных точках полигонов, далее они соединяются ребрами, оставшиеся вершины смещаются, чтобы снять напряжение - происходит «округление» формы.
Этот алгоритм итеративен, то есть может повторяться раз за разом, наращивая количество подразделений. Таким образом, мы получаем high poly модель, и именно этот процесс нам надо учитывать при построении модели под SubD.Чистая и аккуратная работа с топологией под Subdivision Surface, это залог того, что на выходе вы получите правильную модель без артефактов.
Высокая плотность, хаотичность в построении сетки, разнобой в полигонах - все это может создать вам немало сложностей в процессе моделирования и превратить его в тяжелый изнурительный труд. А мы ведь хотим получать удовольствие от процесса и заниматься творчеством, а не разгребать нагромождение полигонов, верно?Важные определения и понятия топологии, которые надо знать и учитывать
PolyLoop - петля полигонов. Представляет собой набор последовательно и непрерывно связанных квадратных полигонов. Polyloop является важным элементом построения 3D модели, умение работать с петлями станет залогом вашего успеха.
Сам по себе один полигон ничего не значит, так как мысля в таком формате мы не видим созависимостей, можем пропустить важные моменты в модели, либо допустить ошибки построения. Но замкнутая цепочка полигонов это мощный инструмент позволяющий мыслить и моделировать более комплексно. Вам стоит сразу, с самого начала стараться мыслить петлями, а не отдельными полигонами при создании своих сеток.PolyLoop позволяет вам точнее и равномернее распределять полигоны, выделять отдельные участки и редактировать модель, при применении SubD правильные PolyLoop подразделяются и сглаживаются лучше всего.Именно по этому вам стоит сразу, заранее планировать свою работу и стараться мыслить комплексно - правильное начало работы, это залог того, что на финальных этапах вы сэкономите себе немало времени и сил.В разных ситуациях PolyLoop по разному работают с SubD, именно поэтому вам необходима практика и наработка опыта, чтобы увидеть и запомнить разные ситуации. Посмотрите разные примеры сеток, попытайтесь увидеть эти петли, и вскоре поймете что действительно каждая модель состоит в первую очередь именно из них.EdgeLoop - в свою очередь это петля из эджей (ребер). Как и с PolyLoop - петля ребер это разрезы, которые вы будете делать на модели, и они буду замыкаться.
Правильная работа с размещением таких петель, это также залог чистой, легкой сетки которая будет корректно сглаживаться и легко редактироваться. Обратите внимание на изображение выше - там представлены как петли полигонов, так и петли ребер, по сути это неотделимые понятия, но каждое из них само по себе важно и может нести разную функцию, в зависимости от задачи.Также бывают ситуации, когда петля ребер заканчивается звездой (еще их называю «полюс»), об этом мы поговорим далее. Каждый EdgeLoop призван служить форме вашего объекта. Посмотрите на положение петель в своей модели и скажите себе - какие из них служат какой то функции, а какие нет. Это покажет вам, где вы сделали лишнюю работу.В работе с EdgeLoop также стоит мыслить именно петлями, а не отдельными ребрами.Звезда (pole, star, полюс) - это вершина в сетке, в которую приходит 3 и более ребер. В зависимости от ситуации это может быть как плохо, так и хорошо для вашей сетки.
Неправильное размещение звезд может привести к артефактам на сглаженной модели.Если в вашей сетке есть звезды, то посмотрите откуда они взялись и несут ли в себе какую-то практическую функцию.Желательно избегать звезд в сгибах, складках и подобных сложных участках, так как при подразделении с большой вероятностью это повлияет на корректность отображения вашей поверхности.Это, опять же, тот случай, когда понимание таких моментов приходит с опытом и насмотренностью. Делайте топологию свой модели вдумчиво, смотрите на результат.Hold Edges (support edges, поддерживающие ребра) - подразделение поверхностей создает сглаженную поверхность модели.
При помощи топологии мы можем контролировать силу сглаживания. Расстояние между ребрами определяет то, насколько сильно сгладится поверхность. Поддерживающие ребра призваны помочь нам удержать форму в тех местах, где это необходимо.Также во многих современных 3D редакторах есть такая функция, как Edge Creasing (иногда её называют Edge Weighting или вес ребра) - заострение ребра. Эта функция позволяет задать «натяжение» на выбранных ребрах. В целом Hold Edges также является очень мощным и многофункциональным инструментом, который можно и нужно использовать и знать, как он работает.Немного о топологии в Low Poly
Процесс создания модели для игры включает в себя такой процесс, как ретопология.
Суть его в том, чтобы на основе вашей High Poly модели сделать её облегченную версию, которая будет, скажем так, «облеплять» High Poly модель. Это необходимо для процесса запекания (baking) и дальнейшей выгрузки готовой модели в движок.Работа с Low Poly связана с упрощением модели и сокращением числа полигонов, но при этом важно не потерять силуэт модели - её ключевые формы.
В процессе создания Low Poly модели вам надо будет избавиться от Support Edges, лишних Edge Loops, которые не влияют на силуэт и форму модели, сократить количество граней на цилиндрах, избавиться от фасок, удалить скрытые полигоны, сшить пересекающиеся элементы, проверить врезки «элемент в элемент», иначе говоря пересекающиеся элементы.Так же как и в High Poly, в Low Poly нет четких условий в моделировании - все ситуативно и необходимо смотреть на финальный результат, при необходимости возвращаясь назад и внося корректировки.
Давайте возьмем за основу принцип «отрезать все лишнее и ненужное, оставляя суть модели». На этом этапе нас уже не интересует SubD, нам важна легкая, упрощенная модель дающая четкий силуэт, которую мы сможем триангулировать и отправить на запекание\в движок.
Пробуйте, смотрите, экспериментируйте. Понимание аспектов создания Low Poly также приходит с опытом и насмотренностью.Итак, давайте подытожим
Начинайте построение модели с анализа референсов, заранее прикиньте, где у вас будут более сложные участки с повышенной плотностью полигонов, сделайте блокинг, иначе говоря - драфт модели.
Черновой набросок, который позволит вам увидеть пропорции элементов, начать набрасывать детализацию. Этот этап важен, так как поможет вам лучше представлять, как формировать сетку конечной модели и разбить работу на конкретные этапы. В процессе работы идите от общего к частному.Используйте меньше полигонов там, где это возможно.
Часто бывает так, что после применения SubD к финальной модели оказывается, что некоторые полигоны в вашей сетке не несут никакой функции.Например - если цилиндр с шестью гранями после сглаживания не отличается от цилиндра с двенадцатью гранями, то, возможно, стоит заранее это учесть и не плодить лишние грани. Разумеется все ситуативно и, опять же, подобные вещи придут к вам со временем и практикой.Треугольники и многоугольники (N-GONs) это не всегда плохо. Но стоит учитывать, что в некоторых ситуациях они могут создать артефакты на вашей модели после применения SubD (например на углах, или цилиндрических формах).
Соответственно, создавайте модель вдумчиво, ориентируйтесь на визуальный результат.Ну и конечно помните о том, что хорошая сетка, это сетка на квадах.Следите за размерами полигонов и снова - за их количеством.
Много - это не всегда хорошо и правильно. Часто бывает, что результата под SubD можно добиться гораздо меньшими силами, чем вам кажется.Полигональное моделирование, это баланс между формой и топологией - в процессе работы вы будете переключаться между созданием формы и редактированием её топологии.
Естественность направлений петель - наблюдайте, насколько естественно и логично ложатся ваши петли в сетке модели.
Не важно, в какой программе вы работаете, или сколько плагинов применяете в работе - важно, насколько хорошо вы понимаете основы работы с топологией, они будут одинаковы для любого редактора.
Работая с LowPoly помните про количество полигонов, силуэт модели и то, что надо срезать все лишнее оставив самое важное.
Учитывайте всю информацию, что прочли выше, практикуйтесь, изучайте работы 3D художников и у вас все получится!
[DETAIL_PICTURE] => [DATE_ACTIVE_FROM] => 28.11.2022 [ACTIVE_FROM] => 28.11.2022 [DATE_ACTIVE_TO] => [ACTIVE_TO] => [SHOW_COUNTER] => 10483 [SHOW_COUNTER_START] => 28.11.2022 16:12:34 [IBLOCK_TYPE_ID] => articles [IBLOCK_ID] => 9 [IBLOCK_CODE] => articles [IBLOCK_NAME] => Статьи [IBLOCK_EXTERNAL_ID] => [DATE_CREATE] => 28.11.2022 15:45:49 [CREATED_BY] => 37 [CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [TIMESTAMP_X] => 24.05.2023 23:54:57 [MODIFIED_BY] => 37 [USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов ) [PROPERTIES] => Array ( [CATEGORY_ARTICLES] => Array ( [ID] => 74 [IBLOCK_ID] => 9 [NAME] => Категории статей [ACTIVE] => Y [SORT] => 500 [CODE] => CATEGORY_ARTICLES [DEFAULT_VALUE] => [PROPERTY_TYPE] => L [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => [MULTIPLE_CNT] => 5 [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 1 [USER_TYPE] => [USER_TYPE_SETTINGS] => [HINT] => [~NAME] => Категории статей [~DEFAULT_VALUE] => [VALUE_ENUM] => Array ( [0] => Документация [1] => Основы ) [VALUE_XML_ID] => Array ( [0] => documentation [1] => baza ) [VALUE_SORT] => Array ( [0] => 500 [1] => 500 ) [VALUE] => Array ( [0] => Документация [1] => Основы ) [PROPERTY_VALUE_ID] => Array ( [0] => 5986 [1] => 5987 ) [VALUE_ENUM_ID] => Array ( [0] => 68 [1] => 71 ) [DESCRIPTION] => Array ( [0] => [1] => ) [~VALUE] => Array ( [0] => Документация [1] => Основы ) [~DESCRIPTION] => Array ( [0] => [1] => ) ) [SHOW_COUNTER] => ) [DISPLAY_PROPERTIES] => Array ( [CATEGORY_ARTICLES] => Array ( [ID] => 74 [IBLOCK_ID] => 9 [NAME] => Категории статей [ACTIVE] => Y [SORT] => 500 [CODE] => CATEGORY_ARTICLES [DEFAULT_VALUE] => [PROPERTY_TYPE] => L [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => [MULTIPLE_CNT] => 5 [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 1 [USER_TYPE] => [USER_TYPE_SETTINGS] => [HINT] => [~NAME] => Категории статей [~DEFAULT_VALUE] => [VALUE_ENUM] => Array ( [0] => Документация [1] => Основы ) [VALUE_XML_ID] => Array ( [0] => documentation [1] => baza ) [VALUE_SORT] => Array ( [0] => 500 [1] => 500 ) [VALUE] => Array ( [0] => Документация [1] => Основы ) [PROPERTY_VALUE_ID] => Array ( [0] => 5986 [1] => 5987 ) [VALUE_ENUM_ID] => Array ( [0] => 68 [1] => 71 ) [DESCRIPTION] => Array ( [0] => [1] => ) [~VALUE] => Array ( [0] => Документация [1] => Основы ) [~DESCRIPTION] => Array ( [0] => [1] => ) [DISPLAY_VALUE] => Array ( [0] => Документация [1] => Основы ) ) ) [IPROPERTY_VALUES] => Array ( [SECTION_META_TITLE] => Топология в 3D моделировании [SECTION_META_KEYWORDS] => Топология в 3D моделировании [SECTION_META_DESCRIPTION] => Топология в 3D моделировании [SECTION_PAGE_TITLE] => Топология в 3D моделировании [ELEMENT_PAGE_TITLE] => Топология в 3D моделировании [ELEMENT_META_TITLE] => [ГАЙД] Что такое топология? | Топология в 3D моделировании и играх [ELEMENT_META_KEYWORDS] => Topology, топология [ELEMENT_META_DESCRIPTION] => В чем же заключается важность топологии? В трехмерной графике топология - это расположение полигонов создающее некоторый путь по поверхности полигональной сетки. ) )
Array ( [ID] => 410 [~ID] => 410 [CODE] => zapekanie-tekstur-baking [~CODE] => zapekanie-tekstur-baking [XML_ID] => 410 [~XML_ID] => 410 [NAME] => Запекание текстур. Baking [~NAME] => Запекание текстур. Baking [TAGS] => [~TAGS] => [SORT] => 500 [~SORT] => 500 [PREVIEW_TEXT] => Baking, или запекание текстур - это процесс получения информации от high-poly модели и создание на ее основе текстурных карт, которые перенесут эту информацию на low-poly при помощи ее UV развертки. [~PREVIEW_TEXT] => Baking, или запекание текстур - это процесс получения информации от high-poly модели и создание на ее основе текстурных карт, которые перенесут эту информацию на low-poly при помощи ее UV развертки. [PREVIEW_PICTURE] => Array ( [ID] => 3881 [TIMESTAMP_X] => 15.06.2023 23:19:20 [MODULE_ID] => iblock [HEIGHT] => 190 [WIDTH] => 320 [FILE_SIZE] => 36830 [CONTENT_TYPE] => image/png [SUBDIR] => iblock/e5b/ajps2hvk6qcd53ad7d8tkfzowyts50ey [FILE_NAME] => 01_Anons_CGitems.ru_Zapekanie_tekstur.png [ORIGINAL_NAME] => 01_Anons_CGitems.ru_Запекание_текстур.png [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => b3bce5e70780ce7ed170e37369e02dd2 [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/e5b/ajps2hvk6qcd53ad7d8tkfzowyts50ey/01_Anons_CGitems.ru_Zapekanie_tekstur.png [UNSAFE_SRC] => /upload/iblock/e5b/ajps2hvk6qcd53ad7d8tkfzowyts50ey/01_Anons_CGitems.ru_Zapekanie_tekstur.png [SAFE_SRC] => /upload/iblock/e5b/ajps2hvk6qcd53ad7d8tkfzowyts50ey/01_Anons_CGitems.ru_Zapekanie_tekstur.png [ALT] => Запекание текстур. Baking [TITLE] => Запекание текстур. Baking ) [~PREVIEW_PICTURE] => 3881 [DETAIL_TEXT] => Baking, или запекание текстур - это процесс получения информации от high-poly модели и создание на ее основе текстурных карт, которые перенесут эту информацию на low-poly модель при помощи её UV развертки. Это часть процессов оптимизации моделей для игр, и она очень важна, так как это хороший способ сохранить внешний вид модели при меньшей нагрузке на движок во время рендера и на игровые компьютеры/девайсы игроков. Давайте разберемся с тем, как происходит этот процесс.Подготовка к запеканию
Floaters. Парящая (летающая) геометрия
Обратите внимание на маленькие элементы модели - они являются отдельными и размещены над поверхностью куба. Эти элементы называются floaters - иначе говоря парящая геометрия (или летающая, суть от этого не меняется). Обычно это заклепки, болты и схожие с ними по габаритам элементы. Это довольно универсальная техника и после некоторой практики вы увидите, как много элементов можно запечь таким образом.
Из статьи про Averaged normal мы уже знаем как работают нормали при запекании - процесс напрямую связан с их направлением. В случае с парящей геометрией на плоскости, она будет запечена по направлению нормалей Low-Poly этой плоскости. Далее мы увидим это на примере. Парящая геометрия это важный инструмент, его применение ускорит вашу работу. Гораздо проще сделать подобный элемент отдельным, а не врезать его в остальную модель. Но как и всегда - все зависит от конкретной ситуации.
Еще пара моментов, на которых стоит заострить внимание:
Размеры фасок - скосов и закруглений модели. Узкие фаски будут плохо читаться после запекания и стоит делать их пошире, часто фаски стоит утрировать - делать больше чем на реальных объектах. Крупная фаска делает модель более читаемой на расстоянии, лучше отделяет друг от друга отдельные части целой модели.
Скосы геометрии - модель может иметь выступающие элементы и углубления - если делать такие элементы под прямым углом относительно плоскости, из которой они выходят, то в результате они плохо запекутся и не будут читаться.
В остальном при создании high-poly для запекания надо ориентироваться на ее внешний вид и правильность топологии. Также важно стараться с самого начала закладывать в ее форму будущую low-poly модель, прикидывать что и как вы будете запекать и, в дальнейшем, красить. С опытом вы начнете лучше понимать такие детали и рабочий процесс станет проще и быстрее.
На этом закончим с High-Poly, далее нам необходима Low-Poly модель, которая примет на себя информацию при запекании.
Как видите, разница с high-poly большая. Давайте разберемся с ней и поймем, почему она так выглядит и в чем заключалась подготовка к запеканию. Мы не станем касаться тонкостей создания геометрии low-poly, это тема для отдельного разговора. Предположим, что мы уже провели основную работу и сосредоточимся на последних этапах.
Важный момент готовой low-poly - это ее UV развертка. От того как вы ее сделаете будет полностью зависеть финальный результат запекания и внешний вид модели. Также это полезный инструмент для оптимизации модели и упрощения работы с ней. На деле ее функционал в разы шире, но в этот раз нас интересует запекание.
UV развертка
По сути, UV развертка это набор плоскостей составляющих вашу Low-Poly, развернутых и размещенных в 2D пространстве по определенным правилам. Хороший пример - это разобранная картонная коробка. Оси этого пространства называются U и V. U - горизонтальная ось, V - вертикальная.
UV развертка позволяет корректно проецировать на модель текстурные карты учитывая ее геометрию. Этот процесс называется Mapping. Именно UV развертка отвечает, в частности, за корректное запекание с High-Poly и формирование правильных финальных текстурных карт. Сам процесс UV развертки достаточно индивидуален и понимание деталей приходит с опытом. Суть UV в следующем.
Разрешение UV пространства определяет разрешение текстуры на UV развертке. Внутри этого пространства размещаются те самые элементы развертки. Когда UV пространство доходит до краёв от 0 до 1 - происходит повторение и новый отсчет от 0 до 1. На схеме это серые клетки по краям. Таким образом UV пространство дублируется до бесконечности во всех направлениях. Это называется tiling, повторение - текстурные карты в каждом таком дубликате будут повторять изначальное UV пространство. С этим связана такая возможность, как применение бесшовных (тайловых) текстур, но об этом в другой раз. В этот раз мы поговорим о таком использовании UV пространства как overlap (перекрытие). Это напрямую касается запекания и подготовки к нему.
Overlap
Предположим, что у нас есть некий относительно крупный элемент имеющий отдельную low-poly с готовой разверткой.
Теперь предположим, что у нас есть два таких элемента и они совершенно одинаковы. Эти элементы можно запечь вместе и при этом сэкономить место на UV.
Каждый из них имеет свою развертку и каждая из них занимает индивидуальное место в квадрате 4х4. Как мы помним - это пространство ограничено от 0 до 1, и начинает повторяться. Следовательно, мы ограничены в количестве индивидуальных мест. Как при переезде при всем желании не получится запихать все в одну коробку, так и в случае с UV не получится разместить в один сет все, что захочется. Overlap - это способ, который позволяет при запекании (и в дальнейшем) переиспользовать текстурное UV пространство с одного объекта на другой или с одной стононы объекта на другую. Overlap помогает экономить место на UV. Чтобы применить Overlap, надо совместить развертки элементов точка в точку.
После того, как вы убедились что все совпало - надо выделить и сместить развертку копии на соседнее UV пространство (по факту на любое - верх, низ, левое, правое, лишь бы не основное), иначе запекание пройдет некорректно, так как оба элемента будут восприниматься как главные и конфликтовать. Важно, чтобы развертка копии заняла точно тоже место, что оригинал. В maya (UV editor) смещение делается стрелками клавиатуры, это позволяет правильно сместить UV одним нажатием. Если вы верно совместили UV и не забыли отбросить копию, то запекание пройдет корректно, а копия примет на себя информацию исходника. А теперь представьте, что таких копий может быть 5-10-20, все они могут быть наложены на все тот же первый исходник, отброшены на соседний квадрат и будут принимать на себя информацию исходника, но при этом место на UV по итогу будет занимать только исходник. Выглядит сложновато, но на деле все не так страшно, достаточно немного практики.
Padding
Еще один важный момент, который стоит учитывать при создании UV, это padding (отступы).
Texel density. Разрешение UV пространства
Ранее мы коснулись темы разрешения UV пространства и его влияния на развертку. Параметр Texel Density является численным значением количества пикселей на единицу UV пространства. В нашем UV пространстве стороны 4х4 метра, итого 16 квадратов 1х1 метр. Заданы распространенные значения - разрешение 2048х2048, тексель 512px на единицу (в нашем случае метр). 512*4(метра в стороне)=2048 - одна сторона. Тексель распределяется равномерно. Вот чем это важно для процесса запекания - разрешение UV пространства влияет на то, какое разрешение текстур будет на запеченной Low-Poly. И это может как принести проблем, так и помочь в работе.
Существует такой инструмент как Checker - по сути это эталонная текстура-шаблон, по которой можно проверить равномерность текстуры на модели.
Вручную уменьшим размер двух шелов UV развертки - обратите внимание, что модель осталась прежней, уменьшены именно UV шелы. На кубе видно разницу - на двух полигонах изменился размер текстуры. Это как раз то, за чем также необходимо следить при создании UV развертки - шелы UV должны соответствовать значению тексель и быть одинаковы по масштабу относительно друг друга. Но есть исключения. Если вы будете пытаться запечь мелкий элемент на вашей модели, то скорей всего на нём практически ничего не будет видно. Это можно компенсировать принудительно увеличив его UV шел на развертке. Но главное с этим не перестараться. Еще одно исключение, а скорее правило - во многих моделях есть более заметные и менее заметные участки модели. Пример - оружие от первого лица, в нем Texel Density на элементах ближних к камере (задняя часть оружия) будет выше чем, например, на нижней части, которую игрок чаще всего не видит, либо видит мельком. И в этом суть - за размерами UV шелов нужно следить и настраивать при необходимости. Для начала достаточно просто следить за верным Texel Density и не давать мелким элементам съедаться, а понимание придет с опытом.
Итак, мы разобрали несколько важных моментов, которые обязательно стоит учитывать и проверять на финальных этапах подготовки Low-Poly. Рассмотрели ряд примеров, узнали как оптимизировать модель на этапе UV развертки. Самое время вернуться к примерам с которых мы начали, и запечь их учитывая все изложенное выше.
Теперь можно разобрать low-poly понимая логику, по которой она готовилась к запеканию. Изначально модель была цельной и развернута на отдельные элементы.
Как видите, занято очень много места, больше половины. Иногда это необходимо, ведь элемент может быть центральным, важным и требовать больше детализации и уникальности. Но чаще всего в этом нет большой необходимости, а уникальности можно достигнуть разными путями. Поэтому в случае примера будет применен уже знакомый вам overlap, но по несколько иному принципу, хотя в конечном итоге точно такой же. Отличие будет в том, что мы применим overlap внутри модели, а не от одной к другой. Это было учтено при создании high-poly - в ней все сделано симметрично, с учетом того что будет overlap слева направо.
Еще один момент который важно учитывать - это совмещение High-poly и Low-poly. Они должны максимально совпадать по габаритам. Обычно это хорошо видно если присвоить моделям разные материалы, которые будут иметь разные цвета. Также это можно контролировать через режим Wireframe.
И, собственно, если High-Poly выглядит приемлемо, а Low-Poly подготовлена на финальных этапах, то можно их запекать. Перед этим не забудьте еще раз все посмотреть, накинуть на High-Poly Subd (что это, можно узнать в статье про топологию), чтобы финально увеличить её детализацию, а на Low-Poly поставить правильно группы сглаживания и выполнить триангуляцию, так как лучше сделать это вручную, а не доверять автоматической триангуляции движков во избежание случайных конфликтов и артефактов.
Baking
Запекать модель будем в Marmoset Toolbag, так как это удобная, современная и легкая для понимания программа. Суть запекания везде остается одинаковой. Чтобы получить текстурные карты, необходимо по-отдельности экспортировать Low-Poly и High-Poly. Подойдет формат obj, если вы пропекаете модель без ID Map. При экспорте, этот формат содержит только геометрию, один материал и один UV Set. Далее открываем Marmoset и создаем в нем Bake Project. В него помещаем свои объекты, там все подписано. Важно с самого начала следить за именами своих файлов, так как это поможет вам не запутаться. Также в Marmoset есть удобный функционал, который позволяет загружать модель одним файлом и автоматически распределять сразу по нужным Bake группам High-Poly и Low-Poly модели, но для этого вам потребуется уже FBX формат и правильный нейминг ваших моделей в Outliner вашего софта, в котором вы работаете.
После этого нам понадобятся настройки запекания. Эта панель отображается, если нажать на Bake Project. В ней мы можем настроить параметры для запекаемых карт. Выбрать, собственно, какие карты будем печь, задать путь по которому будут сохранены карты бейка и провести общую настройку финального результата. Коснемся основных функций, которые точно надо будет настроить для запекания.
Samples - определяет качество сглаживания текстур. Тут все просто - чем выше значение тем лучше (но не всегда нужно), и тем дольше может идти процесс запекания.
Soften - применяет “смягчающий” фильтр к текстурам. Это позволяет сделать более плавные переходы плоскостей и скрыть некоторые недостатки. Обычно хватает небольших значений от 0.05 до 0.1. Можно пробовать разные результаты и смотреть разницу исходя из конкретной ситуации.
Padding - определяет, насколько запеченное содержимое может выходить за границы UV элементов. Это необходимо, в частности, для правильной работы Mip-Mapping - изменения детализации текстуры при увеличении расстояния до нее от камеры. Обычно хватает стандартных значений.
Разрешение текстуры - собственно, разрешение финальных текстур. Всегда кратно двум и максимальное будет 8192х8192. Выбираем в зависимости от задач и потребностей. Частым вариантом является 2048х2048, его и возьмем.
Ещё необходимо указать путь для сохранения текстур.
Примечание: Marmoset не воспринимает кириллицу, поэтому все файлы и папки надо подписывать латиницей.Внизу панели находится список текстур отмеченных для запекания. Это очень обширная тема, мы не будем касаться её в этот раз. В текущей ситуации нам понадобятся карты Normal и AO (Ambient Occlusion), их хватит для просмотра финального результата. Для дальнейшей работы с моделью, в частности её окраски, понадобятся еще несколько карт.
Также в верхней части панели есть кнопки для скрытия\отображения High-Poly и Low-Poly, отображения результата запекания. Важно - при загрузке и распределении моделей по группам High-Poly по умолчанию скрыты.
Итак. Все правильно подписано, загружено, настроено, задан путь для карт и вы уверены в том, что UV развертка выполнена верно и соблюдены моменты о которых мы говорили выше. Запекать пока рано:) Потому что есть один момент, связанный с положением объектов относительно друг друга.
Пересечение объектов
На деле всё просто и пример это отражает - если элементы модели пересекаются при запекании и находятся в одной бэйк-группе, то программа пытается учесть это место стыка. И это приводит к спорным результатам - на местах пересечения будут артефакты.
Это происходит потому что пересекаются их Cage при бейке в одной Bake Group. Для того чтобы избежать этого, и получить равномерное запекание, применяется разнос элементов. Это можно сделать заранее в Maya, либо раздвинуть группы в Marmoset. В случае с Maya важно соблюсти совпадение Low-Poly и High-Poly. Мы раздвинем их в marmoset при помощи вкладки Transform, параметр Position.
Обратите внимание что элементы лежат в разных группах, но мы все равно их раздвигаем. Это связано с тем, что в противном случае на карте АО могут возникнуть небольшие артефакты. Обычно это можно подкрасить в photoshop, либо также избежать при помощи разноса. Опять же зависит от ситуации и назначения элемента.В нашем случае предпочтем чистое запекание.
Результат - чистое запекание без артефактов. Также над моделью была проведена работа при помощи инструмента Paint Skew и настройки Cage (Paint offset в Marmoset). Что это, мы детально разбирали в статье Average normal, так что не станем повторяться. Здесь был применен точно такой же принцип - увеличен Cage, чтобы спроецировать целиком выступающие элементы, и проведена настройка нормалей Cage.
В принципе, это очень простой пример, а Low-Poly максимально простая. Но с его помощью мы рассмотрели важные стороны работы с запеканием и общий процесс от модели до финального результата. Давайте подытожим:
Запекание это важный этап в работе над моделью для игры. И запечь её не так сложно, сложнее подготовить все к этому процессу. От качества подготовки зависит вся дальнейшая работа, так как запеченная модель, а тем более окрашенная, плохо поддается полноценному редактированию. По этой причине важно дотошно просматривать модель и UV развертку до финального запекания. Понимание того как это делается приходит с опытом и насмотренностью, как и на любом этапе создания модели. Всё с ходу, и за один раз учесть не выйдет, но чем внимательнее вы будете, тем большего числа проблем избежите. Это был очень простой пример запекания, и на деле у вас может быть в разы больше сложносоставных элементов, фаски на Low-Poly, огромные UV развертки с большим количеством Overlap. Наверняка вы рано или поздно столкнетесь с дорисовкой и монтажом готовых карт в Photoshop, чтобы сделать результат еще лучше. Но этот пример отлично показывает базовые принципы запекания, учитывая которые вы точно улучшите свой результат.
[~DETAIL_TEXT] => Baking, или запекание текстур - это процесс получения информации от high-poly модели и создание на ее основе текстурных карт, которые перенесут эту информацию на low-poly модель при помощи её UV развертки. Это часть процессов оптимизации моделей для игр, и она очень важна, так как это хороший способ сохранить внешний вид модели при меньшей нагрузке на движок во время рендера и на игровые компьютеры/девайсы игроков. Давайте разберемся с тем, как происходит этот процесс.Обратите внимание на маленькие элементы модели - они являются отдельными и размещены над поверхностью куба. Эти элементы называются floaters - иначе говоря парящая геометрия (или летающая, суть от этого не меняется). Обычно это заклепки, болты и схожие с ними по габаритам элементы. Это довольно универсальная техника и после некоторой практики вы увидите, как много элементов можно запечь таким образом.
Из статьи про Averaged normal мы уже знаем как работают нормали при запекании - процесс напрямую связан с их направлением. В случае с парящей геометрией на плоскости, она будет запечена по направлению нормалей Low-Poly этой плоскости. Далее мы увидим это на примере. Парящая геометрия это важный инструмент, его применение ускорит вашу работу. Гораздо проще сделать подобный элемент отдельным, а не врезать его в остальную модель. Но как и всегда - все зависит от конкретной ситуации.
Размеры фасок - скосов и закруглений модели. Узкие фаски будут плохо читаться после запекания и стоит делать их пошире, часто фаски стоит утрировать - делать больше чем на реальных объектах. Крупная фаска делает модель более читаемой на расстоянии, лучше отделяет друг от друга отдельные части целой модели.
Скосы геометрии - модель может иметь выступающие элементы и углубления - если делать такие элементы под прямым углом относительно плоскости, из которой они выходят, то в результате они плохо запекутся и не будут читаться.
В остальном при создании high-poly для запекания надо ориентироваться на ее внешний вид и правильность топологии. Также важно стараться с самого начала закладывать в ее форму будущую low-poly модель, прикидывать что и как вы будете запекать и, в дальнейшем, красить. С опытом вы начнете лучше понимать такие детали и рабочий процесс станет проще и быстрее.
На этом закончим с High-Poly, далее нам необходима Low-Poly модель, которая примет на себя информацию при запекании.
Как видите, разница с high-poly большая. Давайте разберемся с ней и поймем, почему она так выглядит и в чем заключалась подготовка к запеканию. Мы не станем касаться тонкостей создания геометрии low-poly, это тема для отдельного разговора. Предположим, что мы уже провели основную работу и сосредоточимся на последних этапах.
Важный момент готовой low-poly - это ее UV развертка. От того как вы ее сделаете будет полностью зависеть финальный результат запекания и внешний вид модели. Также это полезный инструмент для оптимизации модели и упрощения работы с ней. На деле ее функционал в разы шире, но в этот раз нас интересует запекание.
По сути, UV развертка это набор плоскостей составляющих вашу Low-Poly, развернутых и размещенных в 2D пространстве по определенным правилам. Хороший пример - это разобранная картонная коробка. Оси этого пространства называются U и V. U - горизонтальная ось, V - вертикальная.
UV развертка позволяет корректно проецировать на модель текстурные карты учитывая ее геометрию. Этот процесс называется Mapping. Именно UV развертка отвечает, в частности, за корректное запекание с High-Poly и формирование правильных финальных текстурных карт. Сам процесс UV развертки достаточно индивидуален и понимание деталей приходит с опытом. Суть UV в следующем.
Разрешение UV пространства определяет разрешение текстуры на UV развертке. Внутри этого пространства размещаются те самые элементы развертки. Когда UV пространство доходит до краёв от 0 до 1 - происходит повторение и новый отсчет от 0 до 1. На схеме это серые клетки по краям. Таким образом UV пространство дублируется до бесконечности во всех направлениях. Это называется tiling, повторение - текстурные карты в каждом таком дубликате будут повторять изначальное UV пространство. С этим связана такая возможность, как применение бесшовных (тайловых) текстур, но об этом в другой раз. В этот раз мы поговорим о таком использовании UV пространства как overlap (перекрытие). Это напрямую касается запекания и подготовки к нему.
Предположим, что у нас есть некий относительно крупный элемент имеющий отдельную low-poly с готовой разверткой.
Теперь предположим, что у нас есть два таких элемента и они совершенно одинаковы. Эти элементы можно запечь вместе и при этом сэкономить место на UV.
Каждый из них имеет свою развертку и каждая из них занимает индивидуальное место в квадрате 4х4. Как мы помним - это пространство ограничено от 0 до 1, и начинает повторяться. Следовательно, мы ограничены в количестве индивидуальных мест. Как при переезде при всем желании не получится запихать все в одну коробку, так и в случае с UV не получится разместить в один сет все, что захочется. Overlap - это способ, который позволяет при запекании (и в дальнейшем) переиспользовать текстурное UV пространство с одного объекта на другой или с одной стононы объекта на другую. Overlap помогает экономить место на UV. Чтобы применить Overlap, надо совместить развертки элементов точка в точку.
После того, как вы убедились что все совпало - надо выделить и сместить развертку копии на соседнее UV пространство (по факту на любое - верх, низ, левое, правое, лишь бы не основное), иначе запекание пройдет некорректно, так как оба элемента будут восприниматься как главные и конфликтовать. Важно, чтобы развертка копии заняла точно тоже место, что оригинал. В maya (UV editor) смещение делается стрелками клавиатуры, это позволяет правильно сместить UV одним нажатием. Если вы верно совместили UV и не забыли отбросить копию, то запекание пройдет корректно, а копия примет на себя информацию исходника. А теперь представьте, что таких копий может быть 5-10-20, все они могут быть наложены на все тот же первый исходник, отброшены на соседний квадрат и будут принимать на себя информацию исходника, но при этом место на UV по итогу будет занимать только исходник. Выглядит сложновато, но на деле все не так страшно, достаточно немного практики.
Еще один важный момент, который стоит учитывать при создании UV, это padding (отступы).
Ранее мы коснулись темы разрешения UV пространства и его влияния на развертку. Параметр Texel Density является численным значением количества пикселей на единицу UV пространства. В нашем UV пространстве стороны 4х4 метра, итого 16 квадратов 1х1 метр. Заданы распространенные значения - разрешение 2048х2048, тексель 512px на единицу (в нашем случае метр). 512*4(метра в стороне)=2048 - одна сторона. Тексель распределяется равномерно. Вот чем это важно для процесса запекания - разрешение UV пространства влияет на то, какое разрешение текстур будет на запеченной Low-Poly. И это может как принести проблем, так и помочь в работе.
Существует такой инструмент как Checker - по сути это эталонная текстура-шаблон, по которой можно проверить равномерность текстуры на модели.
Вручную уменьшим размер двух шелов UV развертки - обратите внимание, что модель осталась прежней, уменьшены именно UV шелы. На кубе видно разницу - на двух полигонах изменился размер текстуры. Это как раз то, за чем также необходимо следить при создании UV развертки - шелы UV должны соответствовать значению тексель и быть одинаковы по масштабу относительно друг друга. Но есть исключения. Если вы будете пытаться запечь мелкий элемент на вашей модели, то скорей всего на нём практически ничего не будет видно. Это можно компенсировать принудительно увеличив его UV шел на развертке. Но главное с этим не перестараться. Еще одно исключение, а скорее правило - во многих моделях есть более заметные и менее заметные участки модели. Пример - оружие от первого лица, в нем Texel Density на элементах ближних к камере (задняя часть оружия) будет выше чем, например, на нижней части, которую игрок чаще всего не видит, либо видит мельком. И в этом суть - за размерами UV шелов нужно следить и настраивать при необходимости. Для начала достаточно просто следить за верным Texel Density и не давать мелким элементам съедаться, а понимание придет с опытом.
Итак, мы разобрали несколько важных моментов, которые обязательно стоит учитывать и проверять на финальных этапах подготовки Low-Poly. Рассмотрели ряд примеров, узнали как оптимизировать модель на этапе UV развертки. Самое время вернуться к примерам с которых мы начали, и запечь их учитывая все изложенное выше.
Теперь можно разобрать low-poly понимая логику, по которой она готовилась к запеканию. Изначально модель была цельной и развернута на отдельные элементы.
Как видите, занято очень много места, больше половины. Иногда это необходимо, ведь элемент может быть центральным, важным и требовать больше детализации и уникальности. Но чаще всего в этом нет большой необходимости, а уникальности можно достигнуть разными путями. Поэтому в случае примера будет применен уже знакомый вам overlap, но по несколько иному принципу, хотя в конечном итоге точно такой же. Отличие будет в том, что мы применим overlap внутри модели, а не от одной к другой. Это было учтено при создании high-poly - в ней все сделано симметрично, с учетом того что будет overlap слева направо.
Еще один момент который важно учитывать - это совмещение High-poly и Low-poly. Они должны максимально совпадать по габаритам. Обычно это хорошо видно если присвоить моделям разные материалы, которые будут иметь разные цвета. Также это можно контролировать через режим Wireframe.
И, собственно, если High-Poly выглядит приемлемо, а Low-Poly подготовлена на финальных этапах, то можно их запекать. Перед этим не забудьте еще раз все посмотреть, накинуть на High-Poly Subd (что это, можно узнать в статье про топологию), чтобы финально увеличить её детализацию, а на Low-Poly поставить правильно группы сглаживания и выполнить триангуляцию, так как лучше сделать это вручную, а не доверять автоматической триангуляции движков во избежание случайных конфликтов и артефактов.
Запекать модель будем в Marmoset Toolbag, так как это удобная, современная и легкая для понимания программа. Суть запекания везде остается одинаковой. Чтобы получить текстурные карты, необходимо по-отдельности экспортировать Low-Poly и High-Poly. Подойдет формат obj, если вы пропекаете модель без ID Map. При экспорте, этот формат содержит только геометрию, один материал и один UV Set. Далее открываем Marmoset и создаем в нем Bake Project. В него помещаем свои объекты, там все подписано. Важно с самого начала следить за именами своих файлов, так как это поможет вам не запутаться. Также в Marmoset есть удобный функционал, который позволяет загружать модель одним файлом и автоматически распределять сразу по нужным Bake группам High-Poly и Low-Poly модели, но для этого вам потребуется уже FBX формат и правильный нейминг ваших моделей в Outliner вашего софта, в котором вы работаете.
После этого нам понадобятся настройки запекания. Эта панель отображается, если нажать на Bake Project. В ней мы можем настроить параметры для запекаемых карт. Выбрать, собственно, какие карты будем печь, задать путь по которому будут сохранены карты бейка и провести общую настройку финального результата. Коснемся основных функций, которые точно надо будет настроить для запекания.
Samples - определяет качество сглаживания текстур. Тут все просто - чем выше значение тем лучше (но не всегда нужно), и тем дольше может идти процесс запекания.
Soften - применяет “смягчающий” фильтр к текстурам. Это позволяет сделать более плавные переходы плоскостей и скрыть некоторые недостатки. Обычно хватает небольших значений от 0.05 до 0.1. Можно пробовать разные результаты и смотреть разницу исходя из конкретной ситуации.
Padding - определяет, насколько запеченное содержимое может выходить за границы UV элементов. Это необходимо, в частности, для правильной работы Mip-Mapping - изменения детализации текстуры при увеличении расстояния до нее от камеры. Обычно хватает стандартных значений.
Разрешение текстуры - собственно, разрешение финальных текстур. Всегда кратно двум и максимальное будет 8192х8192. Выбираем в зависимости от задач и потребностей. Частым вариантом является 2048х2048, его и возьмем.
Ещё необходимо указать путь для сохранения текстур.
Внизу панели находится список текстур отмеченных для запекания. Это очень обширная тема, мы не будем касаться её в этот раз. В текущей ситуации нам понадобятся карты Normal и AO (Ambient Occlusion), их хватит для просмотра финального результата. Для дальнейшей работы с моделью, в частности её окраски, понадобятся еще несколько карт.
Также в верхней части панели есть кнопки для скрытия\отображения High-Poly и Low-Poly, отображения результата запекания. Важно - при загрузке и распределении моделей по группам High-Poly по умолчанию скрыты.
Итак. Все правильно подписано, загружено, настроено, задан путь для карт и вы уверены в том, что UV развертка выполнена верно и соблюдены моменты о которых мы говорили выше. Запекать пока рано:) Потому что есть один момент, связанный с положением объектов относительно друг друга.
На деле всё просто и пример это отражает - если элементы модели пересекаются при запекании и находятся в одной бэйк-группе, то программа пытается учесть это место стыка. И это приводит к спорным результатам - на местах пересечения будут артефакты.
Это происходит потому что пересекаются их Cage при бейке в одной Bake Group. Для того чтобы избежать этого, и получить равномерное запекание, применяется разнос элементов. Это можно сделать заранее в Maya, либо раздвинуть группы в Marmoset. В случае с Maya важно соблюсти совпадение Low-Poly и High-Poly. Мы раздвинем их в marmoset при помощи вкладки Transform, параметр Position.
Обратите внимание что элементы лежат в разных группах, но мы все равно их раздвигаем. Это связано с тем, что в противном случае на карте АО могут возникнуть небольшие артефакты. Обычно это можно подкрасить в photoshop, либо также избежать при помощи разноса. Опять же зависит от ситуации и назначения элемента.В нашем случае предпочтем чистое запекание.
Результат - чистое запекание без артефактов. Также над моделью была проведена работа при помощи инструмента Paint Skew и настройки Cage (Paint offset в Marmoset). Что это, мы детально разбирали в статье Average normal, так что не станем повторяться. Здесь был применен точно такой же принцип - увеличен Cage, чтобы спроецировать целиком выступающие элементы, и проведена настройка нормалей Cage.
В принципе, это очень простой пример, а Low-Poly максимально простая. Но с его помощью мы рассмотрели важные стороны работы с запеканием и общий процесс от модели до финального результата. Давайте подытожим:
Запекание это важный этап в работе над моделью для игры. И запечь её не так сложно, сложнее подготовить все к этому процессу. От качества подготовки зависит вся дальнейшая работа, так как запеченная модель, а тем более окрашенная, плохо поддается полноценному редактированию. По этой причине важно дотошно просматривать модель и UV развертку до финального запекания. Понимание того как это делается приходит с опытом и насмотренностью, как и на любом этапе создания модели. Всё с ходу, и за один раз учесть не выйдет, но чем внимательнее вы будете, тем большего числа проблем избежите. Это был очень простой пример запекания, и на деле у вас может быть в разы больше сложносоставных элементов, фаски на Low-Poly, огромные UV развертки с большим количеством Overlap. Наверняка вы рано или поздно столкнетесь с дорисовкой и монтажом готовых карт в Photoshop, чтобы сделать результат еще лучше. Но этот пример отлично показывает базовые принципы запекания, учитывая которые вы точно улучшите свой результат.
[DETAIL_PICTURE] => [~DETAIL_PICTURE] => [DATE_ACTIVE_FROM] => 06.04.2023 [~DATE_ACTIVE_FROM] => 06.04.2023 [ACTIVE_FROM] => 06.04.2023 [~ACTIVE_FROM] => 06.04.2023 [DATE_ACTIVE_TO] => [~DATE_ACTIVE_TO] => [ACTIVE_TO] => [~ACTIVE_TO] => [SHOW_COUNTER] => 10265 [~SHOW_COUNTER] => 10265 [SHOW_COUNTER_START] => 06.04.2023 21:02:55 [~SHOW_COUNTER_START] => 06.04.2023 21:02:55 [IBLOCK_TYPE_ID] => articles [~IBLOCK_TYPE_ID] => articles [IBLOCK_ID] => 9 [~IBLOCK_ID] => 9 [IBLOCK_CODE] => articles [~IBLOCK_CODE] => articles [IBLOCK_NAME] => Статьи [~IBLOCK_NAME] => Статьи [IBLOCK_EXTERNAL_ID] => [~IBLOCK_EXTERNAL_ID] => [DATE_CREATE] => 06.04.2023 21:02:46 [~DATE_CREATE] => 06.04.2023 21:02:46 [CREATED_BY] => 37 [~CREATED_BY] => 37 [CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [~CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [TIMESTAMP_X] => 15.06.2023 23:19:20 [~TIMESTAMP_X] => 15.06.2023 23:19:20 [MODIFIED_BY] => 37 [~MODIFIED_BY] => 37 [USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [~USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [IBLOCK_SECTION_ID] => 116 [~IBLOCK_SECTION_ID] => 116 [DETAIL_PAGE_URL] => /articles/zapekanie-tekstur-baking/ [~DETAIL_PAGE_URL] => /articles/zapekanie-tekstur-baking/ [LIST_PAGE_URL] => /articles/ [~LIST_PAGE_URL] => /articles/ [DETAIL_TEXT_TYPE] => html [~DETAIL_TEXT_TYPE] => html [PREVIEW_TEXT_TYPE] => html [~PREVIEW_TEXT_TYPE] => html [LANG_DIR] => / [~LANG_DIR] => / [EXTERNAL_ID] => 410 [~EXTERNAL_ID] => 410 [LID] => s1 [~LID] => s1 [EDIT_LINK] => [DELETE_LINK] => [DISPLAY_ACTIVE_FROM] => 06.04.2023 [FIELDS] => Array ( [ID] => 410 [CODE] => zapekanie-tekstur-baking [XML_ID] => 410 [NAME] => Запекание текстур. Baking [TAGS] => [SORT] => 500 [PREVIEW_TEXT] => Baking, или запекание текстур - это процесс получения информации от high-poly модели и создание на ее основе текстурных карт, которые перенесут эту информацию на low-poly при помощи ее UV развертки. [PREVIEW_PICTURE] => Array ( [ID] => 3881 [TIMESTAMP_X] => 15.06.2023 23:19:20 [MODULE_ID] => iblock [HEIGHT] => 190 [WIDTH] => 320 [FILE_SIZE] => 36830 [CONTENT_TYPE] => image/png [SUBDIR] => iblock/e5b/ajps2hvk6qcd53ad7d8tkfzowyts50ey [FILE_NAME] => 01_Anons_CGitems.ru_Zapekanie_tekstur.png [ORIGINAL_NAME] => 01_Anons_CGitems.ru_Запекание_текстур.png [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => b3bce5e70780ce7ed170e37369e02dd2 [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/e5b/ajps2hvk6qcd53ad7d8tkfzowyts50ey/01_Anons_CGitems.ru_Zapekanie_tekstur.png [UNSAFE_SRC] => /upload/iblock/e5b/ajps2hvk6qcd53ad7d8tkfzowyts50ey/01_Anons_CGitems.ru_Zapekanie_tekstur.png [SAFE_SRC] => /upload/iblock/e5b/ajps2hvk6qcd53ad7d8tkfzowyts50ey/01_Anons_CGitems.ru_Zapekanie_tekstur.png [ALT] => Запекание текстур. Baking [TITLE] => Запекание текстур. Baking ) [DETAIL_TEXT] => Baking, или запекание текстур - это процесс получения информации от high-poly модели и создание на ее основе текстурных карт, которые перенесут эту информацию на low-poly модель при помощи её UV развертки. Это часть процессов оптимизации моделей для игр, и она очень важна, так как это хороший способ сохранить внешний вид модели при меньшей нагрузке на движок во время рендера и на игровые компьютеры/девайсы игроков. Давайте разберемся с тем, как происходит этот процесс.Обратите внимание на маленькие элементы модели - они являются отдельными и размещены над поверхностью куба. Эти элементы называются floaters - иначе говоря парящая геометрия (или летающая, суть от этого не меняется). Обычно это заклепки, болты и схожие с ними по габаритам элементы. Это довольно универсальная техника и после некоторой практики вы увидите, как много элементов можно запечь таким образом.
Из статьи про Averaged normal мы уже знаем как работают нормали при запекании - процесс напрямую связан с их направлением. В случае с парящей геометрией на плоскости, она будет запечена по направлению нормалей Low-Poly этой плоскости. Далее мы увидим это на примере. Парящая геометрия это важный инструмент, его применение ускорит вашу работу. Гораздо проще сделать подобный элемент отдельным, а не врезать его в остальную модель. Но как и всегда - все зависит от конкретной ситуации.
Размеры фасок - скосов и закруглений модели. Узкие фаски будут плохо читаться после запекания и стоит делать их пошире, часто фаски стоит утрировать - делать больше чем на реальных объектах. Крупная фаска делает модель более читаемой на расстоянии, лучше отделяет друг от друга отдельные части целой модели.
Скосы геометрии - модель может иметь выступающие элементы и углубления - если делать такие элементы под прямым углом относительно плоскости, из которой они выходят, то в результате они плохо запекутся и не будут читаться.
В остальном при создании high-poly для запекания надо ориентироваться на ее внешний вид и правильность топологии. Также важно стараться с самого начала закладывать в ее форму будущую low-poly модель, прикидывать что и как вы будете запекать и, в дальнейшем, красить. С опытом вы начнете лучше понимать такие детали и рабочий процесс станет проще и быстрее.
На этом закончим с High-Poly, далее нам необходима Low-Poly модель, которая примет на себя информацию при запекании.
Как видите, разница с high-poly большая. Давайте разберемся с ней и поймем, почему она так выглядит и в чем заключалась подготовка к запеканию. Мы не станем касаться тонкостей создания геометрии low-poly, это тема для отдельного разговора. Предположим, что мы уже провели основную работу и сосредоточимся на последних этапах.
Важный момент готовой low-poly - это ее UV развертка. От того как вы ее сделаете будет полностью зависеть финальный результат запекания и внешний вид модели. Также это полезный инструмент для оптимизации модели и упрощения работы с ней. На деле ее функционал в разы шире, но в этот раз нас интересует запекание.
По сути, UV развертка это набор плоскостей составляющих вашу Low-Poly, развернутых и размещенных в 2D пространстве по определенным правилам. Хороший пример - это разобранная картонная коробка. Оси этого пространства называются U и V. U - горизонтальная ось, V - вертикальная.
UV развертка позволяет корректно проецировать на модель текстурные карты учитывая ее геометрию. Этот процесс называется Mapping. Именно UV развертка отвечает, в частности, за корректное запекание с High-Poly и формирование правильных финальных текстурных карт. Сам процесс UV развертки достаточно индивидуален и понимание деталей приходит с опытом. Суть UV в следующем.
Разрешение UV пространства определяет разрешение текстуры на UV развертке. Внутри этого пространства размещаются те самые элементы развертки. Когда UV пространство доходит до краёв от 0 до 1 - происходит повторение и новый отсчет от 0 до 1. На схеме это серые клетки по краям. Таким образом UV пространство дублируется до бесконечности во всех направлениях. Это называется tiling, повторение - текстурные карты в каждом таком дубликате будут повторять изначальное UV пространство. С этим связана такая возможность, как применение бесшовных (тайловых) текстур, но об этом в другой раз. В этот раз мы поговорим о таком использовании UV пространства как overlap (перекрытие). Это напрямую касается запекания и подготовки к нему.
Предположим, что у нас есть некий относительно крупный элемент имеющий отдельную low-poly с готовой разверткой.
Теперь предположим, что у нас есть два таких элемента и они совершенно одинаковы. Эти элементы можно запечь вместе и при этом сэкономить место на UV.
Каждый из них имеет свою развертку и каждая из них занимает индивидуальное место в квадрате 4х4. Как мы помним - это пространство ограничено от 0 до 1, и начинает повторяться. Следовательно, мы ограничены в количестве индивидуальных мест. Как при переезде при всем желании не получится запихать все в одну коробку, так и в случае с UV не получится разместить в один сет все, что захочется. Overlap - это способ, который позволяет при запекании (и в дальнейшем) переиспользовать текстурное UV пространство с одного объекта на другой или с одной стононы объекта на другую. Overlap помогает экономить место на UV. Чтобы применить Overlap, надо совместить развертки элементов точка в точку.
После того, как вы убедились что все совпало - надо выделить и сместить развертку копии на соседнее UV пространство (по факту на любое - верх, низ, левое, правое, лишь бы не основное), иначе запекание пройдет некорректно, так как оба элемента будут восприниматься как главные и конфликтовать. Важно, чтобы развертка копии заняла точно тоже место, что оригинал. В maya (UV editor) смещение делается стрелками клавиатуры, это позволяет правильно сместить UV одним нажатием. Если вы верно совместили UV и не забыли отбросить копию, то запекание пройдет корректно, а копия примет на себя информацию исходника. А теперь представьте, что таких копий может быть 5-10-20, все они могут быть наложены на все тот же первый исходник, отброшены на соседний квадрат и будут принимать на себя информацию исходника, но при этом место на UV по итогу будет занимать только исходник. Выглядит сложновато, но на деле все не так страшно, достаточно немного практики.
Еще один важный момент, который стоит учитывать при создании UV, это padding (отступы).
Ранее мы коснулись темы разрешения UV пространства и его влияния на развертку. Параметр Texel Density является численным значением количества пикселей на единицу UV пространства. В нашем UV пространстве стороны 4х4 метра, итого 16 квадратов 1х1 метр. Заданы распространенные значения - разрешение 2048х2048, тексель 512px на единицу (в нашем случае метр). 512*4(метра в стороне)=2048 - одна сторона. Тексель распределяется равномерно. Вот чем это важно для процесса запекания - разрешение UV пространства влияет на то, какое разрешение текстур будет на запеченной Low-Poly. И это может как принести проблем, так и помочь в работе.
Существует такой инструмент как Checker - по сути это эталонная текстура-шаблон, по которой можно проверить равномерность текстуры на модели.
Вручную уменьшим размер двух шелов UV развертки - обратите внимание, что модель осталась прежней, уменьшены именно UV шелы. На кубе видно разницу - на двух полигонах изменился размер текстуры. Это как раз то, за чем также необходимо следить при создании UV развертки - шелы UV должны соответствовать значению тексель и быть одинаковы по масштабу относительно друг друга. Но есть исключения. Если вы будете пытаться запечь мелкий элемент на вашей модели, то скорей всего на нём практически ничего не будет видно. Это можно компенсировать принудительно увеличив его UV шел на развертке. Но главное с этим не перестараться. Еще одно исключение, а скорее правило - во многих моделях есть более заметные и менее заметные участки модели. Пример - оружие от первого лица, в нем Texel Density на элементах ближних к камере (задняя часть оружия) будет выше чем, например, на нижней части, которую игрок чаще всего не видит, либо видит мельком. И в этом суть - за размерами UV шелов нужно следить и настраивать при необходимости. Для начала достаточно просто следить за верным Texel Density и не давать мелким элементам съедаться, а понимание придет с опытом.
Итак, мы разобрали несколько важных моментов, которые обязательно стоит учитывать и проверять на финальных этапах подготовки Low-Poly. Рассмотрели ряд примеров, узнали как оптимизировать модель на этапе UV развертки. Самое время вернуться к примерам с которых мы начали, и запечь их учитывая все изложенное выше.
Теперь можно разобрать low-poly понимая логику, по которой она готовилась к запеканию. Изначально модель была цельной и развернута на отдельные элементы.
Как видите, занято очень много места, больше половины. Иногда это необходимо, ведь элемент может быть центральным, важным и требовать больше детализации и уникальности. Но чаще всего в этом нет большой необходимости, а уникальности можно достигнуть разными путями. Поэтому в случае примера будет применен уже знакомый вам overlap, но по несколько иному принципу, хотя в конечном итоге точно такой же. Отличие будет в том, что мы применим overlap внутри модели, а не от одной к другой. Это было учтено при создании high-poly - в ней все сделано симметрично, с учетом того что будет overlap слева направо.
Еще один момент который важно учитывать - это совмещение High-poly и Low-poly. Они должны максимально совпадать по габаритам. Обычно это хорошо видно если присвоить моделям разные материалы, которые будут иметь разные цвета. Также это можно контролировать через режим Wireframe.
И, собственно, если High-Poly выглядит приемлемо, а Low-Poly подготовлена на финальных этапах, то можно их запекать. Перед этим не забудьте еще раз все посмотреть, накинуть на High-Poly Subd (что это, можно узнать в статье про топологию), чтобы финально увеличить её детализацию, а на Low-Poly поставить правильно группы сглаживания и выполнить триангуляцию, так как лучше сделать это вручную, а не доверять автоматической триангуляции движков во избежание случайных конфликтов и артефактов.
Запекать модель будем в Marmoset Toolbag, так как это удобная, современная и легкая для понимания программа. Суть запекания везде остается одинаковой. Чтобы получить текстурные карты, необходимо по-отдельности экспортировать Low-Poly и High-Poly. Подойдет формат obj, если вы пропекаете модель без ID Map. При экспорте, этот формат содержит только геометрию, один материал и один UV Set. Далее открываем Marmoset и создаем в нем Bake Project. В него помещаем свои объекты, там все подписано. Важно с самого начала следить за именами своих файлов, так как это поможет вам не запутаться. Также в Marmoset есть удобный функционал, который позволяет загружать модель одним файлом и автоматически распределять сразу по нужным Bake группам High-Poly и Low-Poly модели, но для этого вам потребуется уже FBX формат и правильный нейминг ваших моделей в Outliner вашего софта, в котором вы работаете.
После этого нам понадобятся настройки запекания. Эта панель отображается, если нажать на Bake Project. В ней мы можем настроить параметры для запекаемых карт. Выбрать, собственно, какие карты будем печь, задать путь по которому будут сохранены карты бейка и провести общую настройку финального результата. Коснемся основных функций, которые точно надо будет настроить для запекания.
Samples - определяет качество сглаживания текстур. Тут все просто - чем выше значение тем лучше (но не всегда нужно), и тем дольше может идти процесс запекания.
Soften - применяет “смягчающий” фильтр к текстурам. Это позволяет сделать более плавные переходы плоскостей и скрыть некоторые недостатки. Обычно хватает небольших значений от 0.05 до 0.1. Можно пробовать разные результаты и смотреть разницу исходя из конкретной ситуации.
Padding - определяет, насколько запеченное содержимое может выходить за границы UV элементов. Это необходимо, в частности, для правильной работы Mip-Mapping - изменения детализации текстуры при увеличении расстояния до нее от камеры. Обычно хватает стандартных значений.
Разрешение текстуры - собственно, разрешение финальных текстур. Всегда кратно двум и максимальное будет 8192х8192. Выбираем в зависимости от задач и потребностей. Частым вариантом является 2048х2048, его и возьмем.
Ещё необходимо указать путь для сохранения текстур.
Внизу панели находится список текстур отмеченных для запекания. Это очень обширная тема, мы не будем касаться её в этот раз. В текущей ситуации нам понадобятся карты Normal и AO (Ambient Occlusion), их хватит для просмотра финального результата. Для дальнейшей работы с моделью, в частности её окраски, понадобятся еще несколько карт.
Также в верхней части панели есть кнопки для скрытия\отображения High-Poly и Low-Poly, отображения результата запекания. Важно - при загрузке и распределении моделей по группам High-Poly по умолчанию скрыты.
Итак. Все правильно подписано, загружено, настроено, задан путь для карт и вы уверены в том, что UV развертка выполнена верно и соблюдены моменты о которых мы говорили выше. Запекать пока рано:) Потому что есть один момент, связанный с положением объектов относительно друг друга.
На деле всё просто и пример это отражает - если элементы модели пересекаются при запекании и находятся в одной бэйк-группе, то программа пытается учесть это место стыка. И это приводит к спорным результатам - на местах пересечения будут артефакты.
Это происходит потому что пересекаются их Cage при бейке в одной Bake Group. Для того чтобы избежать этого, и получить равномерное запекание, применяется разнос элементов. Это можно сделать заранее в Maya, либо раздвинуть группы в Marmoset. В случае с Maya важно соблюсти совпадение Low-Poly и High-Poly. Мы раздвинем их в marmoset при помощи вкладки Transform, параметр Position.
Обратите внимание что элементы лежат в разных группах, но мы все равно их раздвигаем. Это связано с тем, что в противном случае на карте АО могут возникнуть небольшие артефакты. Обычно это можно подкрасить в photoshop, либо также избежать при помощи разноса. Опять же зависит от ситуации и назначения элемента.В нашем случае предпочтем чистое запекание.
Результат - чистое запекание без артефактов. Также над моделью была проведена работа при помощи инструмента Paint Skew и настройки Cage (Paint offset в Marmoset). Что это, мы детально разбирали в статье Average normal, так что не станем повторяться. Здесь был применен точно такой же принцип - увеличен Cage, чтобы спроецировать целиком выступающие элементы, и проведена настройка нормалей Cage.
В принципе, это очень простой пример, а Low-Poly максимально простая. Но с его помощью мы рассмотрели важные стороны работы с запеканием и общий процесс от модели до финального результата. Давайте подытожим:
Запекание это важный этап в работе над моделью для игры. И запечь её не так сложно, сложнее подготовить все к этому процессу. От качества подготовки зависит вся дальнейшая работа, так как запеченная модель, а тем более окрашенная, плохо поддается полноценному редактированию. По этой причине важно дотошно просматривать модель и UV развертку до финального запекания. Понимание того как это делается приходит с опытом и насмотренностью, как и на любом этапе создания модели. Всё с ходу, и за один раз учесть не выйдет, но чем внимательнее вы будете, тем большего числа проблем избежите. Это был очень простой пример запекания, и на деле у вас может быть в разы больше сложносоставных элементов, фаски на Low-Poly, огромные UV развертки с большим количеством Overlap. Наверняка вы рано или поздно столкнетесь с дорисовкой и монтажом готовых карт в Photoshop, чтобы сделать результат еще лучше. Но этот пример отлично показывает базовые принципы запекания, учитывая которые вы точно улучшите свой результат.
[DETAIL_PICTURE] => [DATE_ACTIVE_FROM] => 06.04.2023 [ACTIVE_FROM] => 06.04.2023 [DATE_ACTIVE_TO] => [ACTIVE_TO] => [SHOW_COUNTER] => 10265 [SHOW_COUNTER_START] => 06.04.2023 21:02:55 [IBLOCK_TYPE_ID] => articles [IBLOCK_ID] => 9 [IBLOCK_CODE] => articles [IBLOCK_NAME] => Статьи [IBLOCK_EXTERNAL_ID] => [DATE_CREATE] => 06.04.2023 21:02:46 [CREATED_BY] => 37 [CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [TIMESTAMP_X] => 15.06.2023 23:19:20 [MODIFIED_BY] => 37 [USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов ) [PROPERTIES] => Array ( [CATEGORY_ARTICLES] => Array ( [ID] => 74 [IBLOCK_ID] => 9 [NAME] => Категории статей [ACTIVE] => Y [SORT] => 500 [CODE] => CATEGORY_ARTICLES [DEFAULT_VALUE] => [PROPERTY_TYPE] => L [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => [MULTIPLE_CNT] => 5 [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 1 [USER_TYPE] => [USER_TYPE_SETTINGS] => [HINT] => [~NAME] => Категории статей [~DEFAULT_VALUE] => [VALUE_ENUM] => Array ( [0] => Marmoset Toolbag [1] => Документация ) [VALUE_XML_ID] => Array ( [0] => marmoset [1] => documentation ) [VALUE_SORT] => Array ( [0] => 496 [1] => 500 ) [VALUE] => Array ( [0] => Marmoset Toolbag [1] => Документация ) [PROPERTY_VALUE_ID] => Array ( [0] => 6063 [1] => 6064 ) [VALUE_ENUM_ID] => Array ( [0] => 42 [1] => 68 ) [DESCRIPTION] => Array ( [0] => [1] => ) [~VALUE] => Array ( [0] => Marmoset Toolbag [1] => Документация ) [~DESCRIPTION] => Array ( [0] => [1] => ) ) [SHOW_COUNTER] => ) [DISPLAY_PROPERTIES] => Array ( [CATEGORY_ARTICLES] => Array ( [ID] => 74 [IBLOCK_ID] => 9 [NAME] => Категории статей [ACTIVE] => Y [SORT] => 500 [CODE] => CATEGORY_ARTICLES [DEFAULT_VALUE] => [PROPERTY_TYPE] => L [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => [MULTIPLE_CNT] => 5 [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 1 [USER_TYPE] => [USER_TYPE_SETTINGS] => [HINT] => [~NAME] => Категории статей [~DEFAULT_VALUE] => [VALUE_ENUM] => Array ( [0] => Marmoset Toolbag [1] => Документация ) [VALUE_XML_ID] => Array ( [0] => marmoset [1] => documentation ) [VALUE_SORT] => Array ( [0] => 496 [1] => 500 ) [VALUE] => Array ( [0] => Marmoset Toolbag [1] => Документация ) [PROPERTY_VALUE_ID] => Array ( [0] => 6063 [1] => 6064 ) [VALUE_ENUM_ID] => Array ( [0] => 42 [1] => 68 ) [DESCRIPTION] => Array ( [0] => [1] => ) [~VALUE] => Array ( [0] => Marmoset Toolbag [1] => Документация ) [~DESCRIPTION] => Array ( [0] => [1] => ) [DISPLAY_VALUE] => Array ( [0] => Marmoset Toolbag [1] => Документация ) ) ) [IPROPERTY_VALUES] => Array ( [SECTION_META_TITLE] => Запекание текстур. Baking [SECTION_META_KEYWORDS] => Запекание текстур. Baking [SECTION_META_DESCRIPTION] => Запекание текстур. Baking [SECTION_PAGE_TITLE] => Запекание текстур. Baking [ELEMENT_PAGE_TITLE] => Запекание текстур. Baking [ELEMENT_META_TITLE] => [ГАЙД] Запекание текстур. Как правильно запекать текстурные карты [ELEMENT_META_KEYWORDS] => baking [ELEMENT_META_DESCRIPTION] => Baking, или запекание текстур - это процесс получения информации от high-poly модели и создание на ее основе текстурных карт, которые перенесут эту информацию на low-poly при помощи ее UV развертки. ) )Array ( [ID] => 348 [~ID] => 348 [CODE] => shuter-zhanr-videoigr [~CODE] => shuter-zhanr-videoigr [XML_ID] => 348 [~XML_ID] => 348 [NAME] => Шутер. Жанр видеоигр [~NAME] => Шутер. Жанр видеоигр [TAGS] => [~TAGS] => [SORT] => 500 [~SORT] => 500 [PREVIEW_TEXT] => Шутер - жанр компьютерных игр, основой игрового процесса которого является сражение с использованием оружия.
[~PREVIEW_TEXT] => Шутер - жанр компьютерных игр, основой игрового процесса которого является сражение с использованием оружия. [PREVIEW_PICTURE] => Array ( [ID] => 3948 [TIMESTAMP_X] => 23.04.2023 20:29:02 [MODULE_ID] => iblock [HEIGHT] => 190 [WIDTH] => 320 [FILE_SIZE] => 76645 [CONTENT_TYPE] => image/jpeg [SUBDIR] => iblock/6c0/i2xgi5qvc2xn57aakp656jhniq78zxke [FILE_NAME] => Anons_Max-Payne_-serii-Metal-Gear-Solid-i-Resident-Evil_cgitems.ru.jpg [ORIGINAL_NAME] => Anons_Max Payne, серии Metal Gear Solid и Resident Evil_cgitems.ru.jpg [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 0a0a490bfa9d9c49009646f291d0e9a3 [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/6c0/i2xgi5qvc2xn57aakp656jhniq78zxke/Anons_Max-Payne_-serii-Metal-Gear-Solid-i-Resident-Evil_cgitems.ru.jpg [UNSAFE_SRC] => /upload/iblock/6c0/i2xgi5qvc2xn57aakp656jhniq78zxke/Anons_Max-Payne_-serii-Metal-Gear-Solid-i-Resident-Evil_cgitems.ru.jpg [SAFE_SRC] => /upload/iblock/6c0/i2xgi5qvc2xn57aakp656jhniq78zxke/Anons_Max-Payne_-serii-Metal-Gear-Solid-i-Resident-Evil_cgitems.ru.jpg [ALT] => Шутер. Жанр видеоигр [TITLE] => Шутер. Жанр видеоигр ) [~PREVIEW_PICTURE] => 3948 [DETAIL_TEXT] =>Шутер - жанр компьютерных игр, основой игрового процесса которого является сражение с использованием оружия. На момент зарождения жанра за рубежом укрепилось слово «шутер», в России и некоторых других странах изначально жанр называли «стрелялка».
Стрельба – элемент шутеров, но в смешанных жанрах является необязательным. Как показывает практика стрельбу можно заменить какой-либо другой игровой возможностью.
Предшественниками шутеров являются Eidolon (1985) от Lucasfilm Games и Hovertank 3D (1991) и Catacomb 3D от id Software.
Популярность жанру принесла игра Wolfenstein 3D, созданная той же компанией.
Процесс стрельбы был очень медленным, псевдотрёхмерные уровни, спрайтовые персонажи, стены без текстур, оружие не отображалось. В 1993 году компания id Software создала игровую линейку Doom. Дизайн уровней стал сложнее, появились текстуры, добавилось покачивание при ходьбе.
Движок, на котором был построен Doom, был взят за основу многих игр сторонних компаний. Разработчики добавили возможность смотреть не только справа налево, но и сверху вниз, сделали элементы декораций реагирующими на движения игрока, добавили возможность прыгать.
Компания Parallax Software создала полностью трёхмерный шутер с элементами космического симулятора Descent. Игра была не очень популярной из-за того, что требовала джойстик, которым большинство игроков не владело в те годы.
В 1998 году компания Valve выпустила игру Half-Life, которая стала настоящим новшеством. На первый взгляд игра выглядела вполне обычно с точки зрения антуража, оружия и персонажей, но сюжет был полон загадок и недосказанностей. Игра включала в себя разгадывание загадок, а не только уничтожение врагов, для шутеров того времени это было удивительно.
В том же году компания Epic Games выпустила Unreal. Качество графики стало лучше, появилось два режима стрельбы одним оружием. Но в плане популярности игра уступила конкурентам.
В игре Aliens versus Predator (1999) звук улучшили настолько, что по нему можно было определять направление противника.
С развитием технологий компьютерные игры стали использовать максимально реалистичную графику. А вот в игре Team Fortress 2 (2007) разработчики намеренно используют нереалистичную, мультипликационную графику.
Шутер от первого лица
В большинстве современных шутеров от первого лица персонаж игрока частично невидим. Видно оружие в руках персонажа, но тело увидеть невозможно. Разработчики не создают полноценную трёхмерную модель героя потому что считают это тратой времени и ресурсов.
Игры-исключения: Thief: Deadly Shadows, The Chronicles of Riddick: Escape from Butcher Bay, Left 4 Dead, F.E.A.R., Crysis, Turok, Dark Messiah of Might and Magic, Operation Flashpoint.
К шутерам от первого лица можно отнести еще два поджанра видеоигр: рельсовые и кровавые шутеры.
Задача игры – безостановочное уничтожение противника. Рельсовые шутеры появились на аркадных автоматах, а позже были перенесены на игровые консоли, их также называют виртуальным тиром. Игрок должен стрелять в противника, перезаряжать оружие и прятаться за укрытие.Примеры игр: The House of the Dead и Resident Evil, серии Virtua Cop, Time Crisis и Doom, Serious Sam, Painkiller.
Шутеры от третьего лица
В шутерах от третьего лица камера показывает события со стороны, что помогает увидеть повествование другими глазами. Пример таких шутеров: Max Payne, серии Metal Gear Solid и Resident Evil.
[~DETAIL_TEXT] =>
Шутер - жанр компьютерных игр, основой игрового процесса которого является сражение с использованием оружия. На момент зарождения жанра за рубежом укрепилось слово «шутер», в России и некоторых других странах изначально жанр называли «стрелялка».
Стрельба – элемент шутеров, но в смешанных жанрах является необязательным. Как показывает практика стрельбу можно заменить какой-либо другой игровой возможностью.
Предшественниками шутеров являются Eidolon (1985) от Lucasfilm Games и Hovertank 3D (1991) и Catacomb 3D от id Software.
Популярность жанру принесла игра Wolfenstein 3D, созданная той же компанией.
Процесс стрельбы был очень медленным, псевдотрёхмерные уровни, спрайтовые персонажи, стены без текстур, оружие не отображалось. В 1993 году компания id Software создала игровую линейку Doom. Дизайн уровней стал сложнее, появились текстуры, добавилось покачивание при ходьбе.
Движок, на котором был построен Doom, был взят за основу многих игр сторонних компаний. Разработчики добавили возможность смотреть не только справа налево, но и сверху вниз, сделали элементы декораций реагирующими на движения игрока, добавили возможность прыгать.
Компания Parallax Software создала полностью трёхмерный шутер с элементами космического симулятора Descent. Игра была не очень популярной из-за того, что требовала джойстик, которым большинство игроков не владело в те годы.
В 1998 году компания Valve выпустила игру Half-Life, которая стала настоящим новшеством. На первый взгляд игра выглядела вполне обычно с точки зрения антуража, оружия и персонажей, но сюжет был полон загадок и недосказанностей. Игра включала в себя разгадывание загадок, а не только уничтожение врагов, для шутеров того времени это было удивительно.
В том же году компания Epic Games выпустила Unreal. Качество графики стало лучше, появилось два режима стрельбы одним оружием. Но в плане популярности игра уступила конкурентам.
В игре Aliens versus Predator (1999) звук улучшили настолько, что по нему можно было определять направление противника.
С развитием технологий компьютерные игры стали использовать максимально реалистичную графику. А вот в игре Team Fortress 2 (2007) разработчики намеренно используют нереалистичную, мультипликационную графику.
Шутер от первого лица
В большинстве современных шутеров от первого лица персонаж игрока частично невидим. Видно оружие в руках персонажа, но тело увидеть невозможно. Разработчики не создают полноценную трёхмерную модель героя потому что считают это тратой времени и ресурсов.
Игры-исключения: Thief: Deadly Shadows, The Chronicles of Riddick: Escape from Butcher Bay, Left 4 Dead, F.E.A.R., Crysis, Turok, Dark Messiah of Might and Magic, Operation Flashpoint.
К шутерам от первого лица можно отнести еще два поджанра видеоигр: рельсовые и кровавые шутеры.
Задача игры – безостановочное уничтожение противника. Рельсовые шутеры появились на аркадных автоматах, а позже были перенесены на игровые консоли, их также называют виртуальным тиром. Игрок должен стрелять в противника, перезаряжать оружие и прятаться за укрытие.Примеры игр: The House of the Dead и Resident Evil, серии Virtua Cop, Time Crisis и Doom, Serious Sam, Painkiller.
Шутеры от третьего лица
В шутерах от третьего лица камера показывает события со стороны, что помогает увидеть повествование другими глазами. Пример таких шутеров: Max Payne, серии Metal Gear Solid и Resident Evil.
[DETAIL_PICTURE] => Array ( [ID] => 3315 [TIMESTAMP_X] => 23.04.2023 20:29:02 [MODULE_ID] => iblock [HEIGHT] => 191 [WIDTH] => 1640 [FILE_SIZE] => 63719 [CONTENT_TYPE] => image/png [SUBDIR] => iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6 [FILE_NAME] => SHapka_2_.png [ORIGINAL_NAME] => Шапка(2).png [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 67c9266b21639f394da091e8be59819f [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [UNSAFE_SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [SAFE_SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [ALT] => Шутер. Жанр видеоигр [TITLE] => Шутер. Жанр видеоигр ) [~DETAIL_PICTURE] => 3315 [DATE_ACTIVE_FROM] => 29.10.2022 [~DATE_ACTIVE_FROM] => 29.10.2022 [ACTIVE_FROM] => 29.10.2022 [~ACTIVE_FROM] => 29.10.2022 [DATE_ACTIVE_TO] => [~DATE_ACTIVE_TO] => [ACTIVE_TO] => [~ACTIVE_TO] => [SHOW_COUNTER] => 8483 [~SHOW_COUNTER] => 8483 [SHOW_COUNTER_START] => 29.10.2022 13:15:25 [~SHOW_COUNTER_START] => 29.10.2022 13:15:25 [IBLOCK_TYPE_ID] => articles [~IBLOCK_TYPE_ID] => articles [IBLOCK_ID] => 9 [~IBLOCK_ID] => 9 [IBLOCK_CODE] => articles [~IBLOCK_CODE] => articles [IBLOCK_NAME] => Статьи [~IBLOCK_NAME] => Статьи [IBLOCK_EXTERNAL_ID] => [~IBLOCK_EXTERNAL_ID] => [DATE_CREATE] => 29.10.2022 13:10:11 [~DATE_CREATE] => 29.10.2022 13:10:11 [CREATED_BY] => 37 [~CREATED_BY] => 37 [CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [~CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [TIMESTAMP_X] => 23.04.2023 20:29:02 [~TIMESTAMP_X] => 23.04.2023 20:29:02 [MODIFIED_BY] => 37 [~MODIFIED_BY] => 37 [USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [~USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [IBLOCK_SECTION_ID] => 121 [~IBLOCK_SECTION_ID] => 121 [DETAIL_PAGE_URL] => /articles/shuter-zhanr-videoigr/ [~DETAIL_PAGE_URL] => /articles/shuter-zhanr-videoigr/ [LIST_PAGE_URL] => /articles/ [~LIST_PAGE_URL] => /articles/ [DETAIL_TEXT_TYPE] => html [~DETAIL_TEXT_TYPE] => html [PREVIEW_TEXT_TYPE] => text [~PREVIEW_TEXT_TYPE] => text [LANG_DIR] => / [~LANG_DIR] => / [EXTERNAL_ID] => 348 [~EXTERNAL_ID] => 348 [LID] => s1 [~LID] => s1 [EDIT_LINK] => [DELETE_LINK] => [DISPLAY_ACTIVE_FROM] => 29.10.2022 [FIELDS] => Array ( [ID] => 348 [CODE] => shuter-zhanr-videoigr [XML_ID] => 348 [NAME] => Шутер. Жанр видеоигр [TAGS] => [SORT] => 500 [PREVIEW_TEXT] => Шутер - жанр компьютерных игр, основой игрового процесса которого является сражение с использованием оружия.
[PREVIEW_PICTURE] => Array ( [ID] => 3948 [TIMESTAMP_X] => 23.04.2023 20:29:02 [MODULE_ID] => iblock [HEIGHT] => 190 [WIDTH] => 320 [FILE_SIZE] => 76645 [CONTENT_TYPE] => image/jpeg [SUBDIR] => iblock/6c0/i2xgi5qvc2xn57aakp656jhniq78zxke [FILE_NAME] => Anons_Max-Payne_-serii-Metal-Gear-Solid-i-Resident-Evil_cgitems.ru.jpg [ORIGINAL_NAME] => Anons_Max Payne, серии Metal Gear Solid и Resident Evil_cgitems.ru.jpg [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 0a0a490bfa9d9c49009646f291d0e9a3 [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/6c0/i2xgi5qvc2xn57aakp656jhniq78zxke/Anons_Max-Payne_-serii-Metal-Gear-Solid-i-Resident-Evil_cgitems.ru.jpg [UNSAFE_SRC] => /upload/iblock/6c0/i2xgi5qvc2xn57aakp656jhniq78zxke/Anons_Max-Payne_-serii-Metal-Gear-Solid-i-Resident-Evil_cgitems.ru.jpg [SAFE_SRC] => /upload/iblock/6c0/i2xgi5qvc2xn57aakp656jhniq78zxke/Anons_Max-Payne_-serii-Metal-Gear-Solid-i-Resident-Evil_cgitems.ru.jpg [ALT] => Шутер. Жанр видеоигр [TITLE] => Шутер. Жанр видеоигр ) [DETAIL_TEXT] =>Шутер - жанр компьютерных игр, основой игрового процесса которого является сражение с использованием оружия. На момент зарождения жанра за рубежом укрепилось слово «шутер», в России и некоторых других странах изначально жанр называли «стрелялка».
Стрельба – элемент шутеров, но в смешанных жанрах является необязательным. Как показывает практика стрельбу можно заменить какой-либо другой игровой возможностью.
Предшественниками шутеров являются Eidolon (1985) от Lucasfilm Games и Hovertank 3D (1991) и Catacomb 3D от id Software.
Популярность жанру принесла игра Wolfenstein 3D, созданная той же компанией.
Процесс стрельбы был очень медленным, псевдотрёхмерные уровни, спрайтовые персонажи, стены без текстур, оружие не отображалось. В 1993 году компания id Software создала игровую линейку Doom. Дизайн уровней стал сложнее, появились текстуры, добавилось покачивание при ходьбе.
Движок, на котором был построен Doom, был взят за основу многих игр сторонних компаний. Разработчики добавили возможность смотреть не только справа налево, но и сверху вниз, сделали элементы декораций реагирующими на движения игрока, добавили возможность прыгать.
Компания Parallax Software создала полностью трёхмерный шутер с элементами космического симулятора Descent. Игра была не очень популярной из-за того, что требовала джойстик, которым большинство игроков не владело в те годы.
В 1998 году компания Valve выпустила игру Half-Life, которая стала настоящим новшеством. На первый взгляд игра выглядела вполне обычно с точки зрения антуража, оружия и персонажей, но сюжет был полон загадок и недосказанностей. Игра включала в себя разгадывание загадок, а не только уничтожение врагов, для шутеров того времени это было удивительно.
В том же году компания Epic Games выпустила Unreal. Качество графики стало лучше, появилось два режима стрельбы одним оружием. Но в плане популярности игра уступила конкурентам.
В игре Aliens versus Predator (1999) звук улучшили настолько, что по нему можно было определять направление противника.
С развитием технологий компьютерные игры стали использовать максимально реалистичную графику. А вот в игре Team Fortress 2 (2007) разработчики намеренно используют нереалистичную, мультипликационную графику.
Шутер от первого лица
В большинстве современных шутеров от первого лица персонаж игрока частично невидим. Видно оружие в руках персонажа, но тело увидеть невозможно. Разработчики не создают полноценную трёхмерную модель героя потому что считают это тратой времени и ресурсов.
Игры-исключения: Thief: Deadly Shadows, The Chronicles of Riddick: Escape from Butcher Bay, Left 4 Dead, F.E.A.R., Crysis, Turok, Dark Messiah of Might and Magic, Operation Flashpoint.
К шутерам от первого лица можно отнести еще два поджанра видеоигр: рельсовые и кровавые шутеры.
Задача игры – безостановочное уничтожение противника. Рельсовые шутеры появились на аркадных автоматах, а позже были перенесены на игровые консоли, их также называют виртуальным тиром. Игрок должен стрелять в противника, перезаряжать оружие и прятаться за укрытие.Примеры игр: The House of the Dead и Resident Evil, серии Virtua Cop, Time Crisis и Doom, Serious Sam, Painkiller.
Шутеры от третьего лица
В шутерах от третьего лица камера показывает события со стороны, что помогает увидеть повествование другими глазами. Пример таких шутеров: Max Payne, серии Metal Gear Solid и Resident Evil.
[DETAIL_PICTURE] => Array ( [ID] => 3315 [TIMESTAMP_X] => 23.04.2023 20:29:02 [MODULE_ID] => iblock [HEIGHT] => 191 [WIDTH] => 1640 [FILE_SIZE] => 63719 [CONTENT_TYPE] => image/png [SUBDIR] => iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6 [FILE_NAME] => SHapka_2_.png [ORIGINAL_NAME] => Шапка(2).png [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 67c9266b21639f394da091e8be59819f [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [UNSAFE_SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [SAFE_SRC] => /upload/iblock/552/5xfae81wxcrb7nparn8neo1xh3kfqdd6/SHapka_2_.png [ALT] => Шутер. Жанр видеоигр [TITLE] => Шутер. Жанр видеоигр ) [DATE_ACTIVE_FROM] => 29.10.2022 [ACTIVE_FROM] => 29.10.2022 [DATE_ACTIVE_TO] => [ACTIVE_TO] => [SHOW_COUNTER] => 8483 [SHOW_COUNTER_START] => 29.10.2022 13:15:25 [IBLOCK_TYPE_ID] => articles [IBLOCK_ID] => 9 [IBLOCK_CODE] => articles [IBLOCK_NAME] => Статьи [IBLOCK_EXTERNAL_ID] => [DATE_CREATE] => 29.10.2022 13:10:11 [CREATED_BY] => 37 [CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [TIMESTAMP_X] => 23.04.2023 20:29:02 [MODIFIED_BY] => 37 [USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов ) [PROPERTIES] => Array ( [CATEGORY_ARTICLES] => Array ( [ID] => 74 [IBLOCK_ID] => 9 [NAME] => Категории статей [ACTIVE] => Y [SORT] => 500 [CODE] => CATEGORY_ARTICLES [DEFAULT_VALUE] => [PROPERTY_TYPE] => L [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => [MULTIPLE_CNT] => 5 [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 1 [USER_TYPE] => [USER_TYPE_SETTINGS] => [HINT] => [~NAME] => Категории статей [~DEFAULT_VALUE] => [VALUE_ENUM] => Array ( [0] => Индустрия ) [VALUE_XML_ID] => Array ( [0] => industry ) [VALUE_SORT] => Array ( [0] => 500 ) [VALUE] => Array ( [0] => Индустрия ) [PROPERTY_VALUE_ID] => Array ( [0] => 5611 ) [VALUE_ENUM_ID] => Array ( [0] => 69 ) [DESCRIPTION] => Array ( [0] => ) [~VALUE] => Array ( [0] => Индустрия ) [~DESCRIPTION] => Array ( [0] => ) ) [SHOW_COUNTER] => ) [DISPLAY_PROPERTIES] => Array ( [CATEGORY_ARTICLES] => Array ( [ID] => 74 [IBLOCK_ID] => 9 [NAME] => Категории статей [ACTIVE] => Y [SORT] => 500 [CODE] => CATEGORY_ARTICLES [DEFAULT_VALUE] => [PROPERTY_TYPE] => L [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => [MULTIPLE_CNT] => 5 [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 1 [USER_TYPE] => [USER_TYPE_SETTINGS] => [HINT] => [~NAME] => Категории статей [~DEFAULT_VALUE] => [VALUE_ENUM] => Array ( [0] => Индустрия ) [VALUE_XML_ID] => Array ( [0] => industry ) [VALUE_SORT] => Array ( [0] => 500 ) [VALUE] => Array ( [0] => Индустрия ) [PROPERTY_VALUE_ID] => Array ( [0] => 5611 ) [VALUE_ENUM_ID] => Array ( [0] => 69 ) [DESCRIPTION] => Array ( [0] => ) [~VALUE] => Array ( [0] => Индустрия ) [~DESCRIPTION] => Array ( [0] => ) [DISPLAY_VALUE] => Индустрия ) ) [IPROPERTY_VALUES] => Array ( [SECTION_META_TITLE] => Шутер. Жанр видеоигр [SECTION_META_KEYWORDS] => Шутер. Жанр видеоигр [SECTION_META_DESCRIPTION] => Шутер. Жанр видеоигр [SECTION_PAGE_TITLE] => Шутер. Жанр видеоигр [ELEMENT_PAGE_TITLE] => Шутер. Жанр видеоигр [ELEMENT_META_TITLE] => Шутер (Стрелялка, англ. shooter — «стрелок») — жанр компьютерных игр. [ELEMENT_META_KEYWORDS] => game, shooter [ELEMENT_META_DESCRIPTION] => Шутер - жанр компьютерных игр, основой игрового процесса которого является сражение с использованием оружия. ) )
Array ( [ID] => 419 [~ID] => 419 [CODE] => collision-stolknovenie-igroka-s-obektami-v-igrakh-chto-takoe-kolliziya [~CODE] => collision-stolknovenie-igroka-s-obektami-v-igrakh-chto-takoe-kolliziya [XML_ID] => 419 [~XML_ID] => 419 [NAME] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? [~NAME] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? [TAGS] => [~TAGS] => [SORT] => 500 [~SORT] => 500 [PREVIEW_TEXT] => Коллизия (Collision) - переводится как столкновение. Это очень широкий термин, в движках и визуализации он обозначает взаимодействие между объектами, а если точнее то их столкновение [~PREVIEW_TEXT] => Коллизия (Collision) - переводится как столкновение. Это очень широкий термин, в движках и визуализации он обозначает взаимодействие между объектами, а если точнее то их столкновение [PREVIEW_PICTURE] => Array ( [ID] => 3987 [TIMESTAMP_X] => 15.06.2023 23:02:15 [MODULE_ID] => iblock [HEIGHT] => 190 [WIDTH] => 320 [FILE_SIZE] => 128064 [CONTENT_TYPE] => image/png [SUBDIR] => iblock/8fa/np7294bih0p8xupegu2gs9p72m9z8pki [FILE_NAME] => Anons_CHto-takoe-kolliziya_cgitems.ru.png [ORIGINAL_NAME] => Anons_Что такое коллизия_cgitems.ru.png [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 749f0db4cea51abc47b338aeefadddf5 [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/8fa/np7294bih0p8xupegu2gs9p72m9z8pki/Anons_CHto-takoe-kolliziya_cgitems.ru.png [UNSAFE_SRC] => /upload/iblock/8fa/np7294bih0p8xupegu2gs9p72m9z8pki/Anons_CHto-takoe-kolliziya_cgitems.ru.png [SAFE_SRC] => /upload/iblock/8fa/np7294bih0p8xupegu2gs9p72m9z8pki/Anons_CHto-takoe-kolliziya_cgitems.ru.png [ALT] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? [TITLE] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? ) [~PREVIEW_PICTURE] => 3987 [DETAIL_TEXT] =>Взаимодействие между объектами в играх. Коллизия
Давайте разберемся с понятием коллизия и тем, какое отношение оно имеет к моделированию для игр. Это слово часто можно встретить на форумах и в разговорах на тему игр, оно довольно популярно и знакомо игрокам, так как является важной частью создания игрового процесса и во многом определяет его.
Что такое коллизия?
Коллизия (Collision) - переводится как столкновение. Это очень широкий термин, в движках и визуализации он обозначает взаимодействие между объектами, а если точнее, то их столкновение (еще можно встретить понятие пересечение) и его результат.
Существует такой процесс как определение столкновений (Collisions detection). Этот процесс - результат математических расчетов, его задача - определить общее число объектов в кадре, отсеять пересекающиеся и определить столкновения между ними, чтобы просчитать дальнейшее взаимодействие.Ещё часто можно встретить понятие коллайдер (Collider) - это некий невидимый объект, упрощенная оболочка которая присваивается объекту и задает его форму позволяя движку понять столкнулся объект в кадре с чем либо, или нет. Это более узкий термин, хотя по сути он работает с теми же функциями и по большому счету является оболочкой коллизии. Мы немного коснемся этого дальше по тексту.
Эти определения можно встретить не только в игровой индустрии. Проверка столкновений объектов применяется в инженерии, проектировании, архитектуре и других сферах, которые подразумевают визуализацию и физическую симуляцию. Это может быть тестированием объектов на пересечения, взаимодействия друг с другом, атмосферные, физические воздействия и.т.д. В общем - это набор параметров, который отвечает за симуляцию свойств объекта и того, как он реагирует через них на окружающий мир.
Если брать игровую индустрию, то там эти понятия (коллизия и коллайдер) работают несколько по разному, но по сути взаимосвязаны и отвечают за одно и тоже - столкновение с объектом. Возьмем за пример движки Unity и Unreal Engine - в них за одну и ту же функцию отвечают разные параметры. В Unity это вкладка Physics с вариантами коллайдеров (box collider, sphere collider и.т.д.) и дальнейшее присвоение свойств твердости, реакций на столкновение и.т.д. В Unreal это настройки Collision в Mesh Editor и также дальнейшая более гибкая настройка под конкретные задачи. Если кратко, то коллизия это более комплексный инструмент включающий в себя, в том числе, возможности коллайдера. Её суть в том, что она, в отличии от коллайдера, может считывать скорость воздействия, точки соприкосновения с объектом и реагировать на них (запускать события), если это предусмотрено игровым процессом (например вы наступили на плиту и она засветилась). Коллайдер имеет более базовые функции, о которых говорилось выше - задает границы объекта для проверки столкновения и является оболочкой коллизии, задает её границы. В игре, например, стена с коллайдером не позволит игроку пройти сквозь неё, так как движок определит в этом месте столкновение, но это будет его единственной функцией, если не добавить дополнительные параметры.
В случае статьи мы будем использовать Unreal Engine, поэтому остановимся на понятии коллизия и её настройках именно в этом движке.
На деле это, как и всегда, очень обширная тема, которая напрямую связана с алгеброй и геометрией, а инструменты для таких вычислений пишутся программистами. В случае с играми эти процессы интересуют нас как конечный инструмент в движке и его предстоит применять для того, чтобы модель в игре максимально корректно и верно взаимодействовала с игроком и реагировала на его воздействия. Разумеется, в играх такие функции гораздо проще и могут быть менее достоверными, чем в программах, например, для промышленного проектирования, хотя некоторые игры впечатляют детальностью проработки подобных аспектов. Тем не менее, эти инструменты имеют свои особенности и ряд правил по работе с ними. Понятие коллизия играет очень важную роль в том, каким будет игровой процесс. Как 3D художнику вам не обязательно детально знать её полный функционал, оставим это программистам, но мы все равно коснемся его в целом, для общего понимания, и в итоге сосредоточимся на аспектах, которые важны в работе именно с игровым окружением.
Коллизии в играх
Любой человек более-менее увлеченный играми не раз слышал или даже сам применял фразу “провалился в текстуры”. На деле вы проходите сквозь Asset, так как на нём либо отсутствует коллизия, либо она является неточной. Либо в процессе отрисовки кадра процессор не справился с запросами и не успел правильно отработать расчет, в результате чего определил столкновение с опозданием, или отработал некорректно, но это уже дебри и мы не станем углубляться в них. Так или иначе - на финальном кадре мы видим то, что изображено на примере ниже.
Важно понимать, что 3D модель и коллизия это разные вещи. Модель выполняет функцию визуального отображения объекта, имеет отношение к графической составляющей движка и не реагирует на воздействия. Коллизия, которая была ей назначена, имеет отношение к физической составляющей и позволяет просчитать столкновения с ним и реакцию на эти столкновения, такие как срабатывание анимации, попадание урона, спецэффекты и какие-либо механики. Это называется “запуск события”.
Звучит непросто, но главное здесь, это понять саму суть идеи - каждый объект в игре имеет "прозрачную" оболочку, которая отвечает за то, как движок будет на него реагировать и будет ли он вообще это делать. Важно всегда следить за коллизиями и не пренебрегать их настройкой, так как они крайне важны для финального результата и того, насколько игрок “будет верить в происходящее”.
Коллизии и производительность. Динамика и статика
Ранее мы говорили о таком аспекте производства игр, как Draw call, детальнее о нем можно прочесть в статье Draw call. Вызовы отрисовки, оптимизация графики и как это вообще работает. Определение столкновений в играх является важной частью этого процесса. В статье мы больше говорили о графической составляющей рендера конечного кадра - как строится изображение на базе топологии моделей, их положения в сцене и шейдеров примененных к ним. Собственно, положение в сцене имеет прямое отношение к столкновениям.
На все эти объекты было оказано воздействие, допустим взрыв. Результат мы видим ниже - часть объектов определенным образом сдвинулась и приняла новое положение.
То есть движок, благодаря коллизиям, смог проверить перемещение объектов под воздействием взрыва, их столкновения (они упали на пол и при этом не провалились, или не улетели сквозь стену, ударились друг о друга и.т.д.). Катушка осталась на своём месте - она имеет коллизию, так как коробки стояли на ней, но при этом она не подвержена воздействию взрыва (по сути это пример коллайдера, он просто определяет границы объекта без воздействий). В ином случае она могла бы сдвинуться, опрокинуться или вообще сломаться. Этот момент связан с тем, что объекты в игре могут быть статическими (недвижимыми) и динамическими (движимыми). Коробки полетели - динамика, катушка просто стоит и создает преграду - статика.
Как уже говорилось ранее - при расчете движок учитывает только эти рамки, всё остальное отображается после расчета и передачи команд видеокарте. Всё это надо успеть сделать в рамках ограниченного числа времени на отрисовку каждого кадра, чтобы не снизить FPS игрока. Определение столкновений важно в процессе рендера кадров и влияет на производительность - чем больше в сцене подобных взаимодействий, тем больше ресурсов необходимо чтобы все рассчитать и отобразить. По этой причине применяется ряд процессов по оптимизации графики, вроде сборки атласов, а объекты строго распределяются на динамические и статические, так как фиксированный в одной точке объект проще посчитать и отрисовать, чем объект подверженный воздействию физики. Коробка только выглядит простой, но если таких в кадре десятки, они имеют разные меши и запрашивают текстуры с разных атласов, да ещё и разлетаются и ломаются, то это станет испытанием для железа игрока, так как каждое такое движение необходимо рассчитать, отобразить в рамках отдельных кадров и вывести на экран, и это помимо всех остальных расчетов - стрельба, взрывы, работа техники, погода и.т.д.
Небольшой пример со статическим объектом. Это обычная стена, либо скала, либо любой другой объект призванный ограничить перемещения игрока. Она не движется под внешними воздействиями и просто имеет границы, определяющие ее столкновения.
По сути принцип такой же, как и с коробкам - персонаж это коллизия А, стена - коллизия В. А сталкивается с В, коллизии на своих местах и проверка столкновения отрабатывает правильно - персонаж упирается.
Проверка не находит столкновение, либо это происходит некорректно - персонаж проваливается. Как говорилось ранее - иногда проверка может не отработать по разным причинам и это корректируется программно, в том числе при помощи свойств коллизий - она может учесть конкретные точки и скорость воздействия, и добавить эти данные к расчету столкновения. Есть случаи, когда скорость воздействия в связке с временем на рендер кадра дают ошибки, в результате которых объект “проскакивает” сквозь коллизию - кстати такой баг, это один из инструментов спидраннеров. А теперь представьте, что эта стена еще и может разрушиться от взрыва - да, это тоже благодаря коллизии, она может получить определенное воздействие и откликом дать реакцию на него - запустить событие.
Итак, мы рассмотрели как применяется понятие коллизия в производстве игр и в целом поняли, как это работает. По сути, вышеописанные примеры это то, с чем вы наиболее часто будете сталкиваться, как художники по окружению, так как ваша задача это создание статических и динамических объектов наполняющих пространство игровых сцен, а наполнение сцены это не менее важный элемент игрового процесса, чем персонажи. От вашей внимательности будет зависеть то, насколько часто игрок будет застревать в стенах и путаться в трех ящиках. Коллизии имеют более широкую область применения. Коснемся еще одной, наиболее известной и распространенной функции просто для понимания того, насколько обширен их функционал.
Хитбоксы. Стрельба и регистрация попаданий
Хитбокс - это ещё одно расхожее определение. По сути, это примитив задача которого - участие в просчете попадания по персонажу, либо игроку. Он строится исходя из силуэта персонажа и особенностей конкретной игры. Где-то это будет просто набор кубов, где-то - точная оболочка повторяющая очертания модели.
Как видите, они достаточно просты. Это связано с тем, что часто в играх нет необходимости в точном считывании силуэта персонажей, иначе по ним будет сложно попасть. В некоторых играх точные хитбоксы напротив являются особенностью, обычно это реалистичные шутеры. Говоря о стрельбе стоит коснуться двух основных способов её реализации.
Первый способ
Это Hitscan. Его суть заключается в просчете попаданий через трассировку лучей.
Это очень старый и распространенный способ, он известен ещё со времен первых частей Wolfenstein и Doom. Это безотказная и легкая в расчете методика, её особенность заключается в том, что она срабатывает мгновенно, исключая такие моменты как время и скорость полета снаряда. При этом опытные программисты способны достаточно сильно развить эту технику и добавить к ней такие вещи как, например, рикошет - в этом случае луч будет учитывать не только пересечения с коллизией, но и получать просчет на отражение в определенном направлении.
Второй способ
Это просчет баллистики. В этом случае оружие игрока будет стрелять “честными снарядами” которые будут иметь вес и скорость. В игре они, собственно, будут иметь коллизию необходимую для просчета столкновения и, соответственно, регистрации попадания.
Всё точно также, как в примерах с ящиками - движок будет использовать для расчета упрощенные оболочки, все остальное сделает видеокарта. Берется направление оружия игрока и в момент выстрела образуется коллизия, которая движется в заданном направлении с определенной начальной скоростью. В полете она будет подвержена физике, то есть будет иметь траекторию, а в некоторых играх даже подвергаться воздействию, например, ветра. Такой тип стрельбы будет более реалистичным и сложным, в том числе для просчета во время рендера кадра. Один из ярких примеров работы с такой системой расчета стрельбы, это игра Max Payne от студии Remedy Entertainment - благодаря работе с коллизиями разработчики смогли реализовать такую механику как Bullet-Time, или замедление времени.
Как видите, коллизия при всей своей простоте имеет важное значение в процессе создания игр и может выполнять совершенно разные функции, все будет зависеть от объекта, которому она присвоена и механик конкретного проекта. Без неё игрок просто не сможет взаимодействовать с миром игры.
Итак, мы весьма детально разобрались с тем, что такое коллизия, прошлись по областям её применения и ключевым примерам того, как она может работать в играх. Самое время коснуться некоторых аспектов коллизий, которые напрямую связаны с разработкой игрового окружения, а именно - как вообще подключить её и какие настройки при этом можно добавить.
Коллизии для объектов игрового окружения
Возьмем для примера бочку с сайта Quixel. Предположим, что нам надо разместить её на игровом уровне. Для этого нам понадобится коллизия примененная к этой бочке.
Начнем с самого простого, но, тем не менее, вполне рабочего метода - присвоения стандартных коллизий при помощи инструментов движка.Ранее мы уже говорили о том, что в Unreal Engine есть отдельное меню для этих целей. И на деле с ним всё достаточно просто. Надо просто открыть его и выбрать интересующий нас вариант, а движок уже сам генерирует оболочку исходя из плоскостей модели.Sphere, Capsule, Box Simplified Collision
Первыми в списке идут сфера, капсула и бокс. Это стандартные примитивы, которые подойдут для большинства объектов окружения. Велика вероятность, что вы вряд ли будете пользоваться другими вариантами, которые предлагает движок. Тут всё зависит от особенностей проекта и технических заданий, в которых должно быть прописано в том числе то, для каких целей будет применяться объект и какую они будут иметь коллизию. Рассмотрим именно их, как фундаментальные.
Его особенность заключается в том, что она начинается и заканчивается полусферой, по этому игрок, персонажи или объекты не смогут попасть на верхнюю часть объекта и будут соскальзывать. Суть её в том, что с одной стороны игрок может подойти достаточно близко к объекту, так как прямая с боков капсула может довольно точно повторять границы объекта, в тоже время полусферы несколько ограничивают доступ сверху и снизу.
Наверняка вам попадались подобные ситуации в играх - дело в наклонных участках коллизий. Также её цилиндрическая форма позволяет более плавно передвигаться вдоль объекта не застревая на углах.При этом прямые углы будут создавать более явную преграду во время взаимодействия (например между двумя объектами с прямыми углами можно застрять). Как видите, в целом всё более чем просто - просто нужен объект и правильно подобранная коллизия исходя из задач этого объекта.
Вышеописанные способы работают с простыми объектами, либо группами объектов. Но бывают ситуации, когда вам может понадобиться уникальная коллизия с которой не справится генерация силами движка. Предположим, что мы хотим иметь более обтекаемую форму коллизии для бочки, но при этом без полусфер, как в капсуле. Проще говоря - простой цилиндр. На примере ниже посмотрим как сделать уникальную коллизию и правильно загрузить её в движок.
Custom collision
Обычно для коллизии не требуется большого числа полигонов, достаточно упрощенной формы, особенно если это элементы окружения. Чем динамичнее игра, тем меньше внимания игрок обратит на то, что в процессе он на секунду чуть-чуть влез в обод бочки. Это игровые условности и стоит помнить о них, так как сложная коллизия подразумевает более сложный расчет столкновений. При этом мы хотим, чтобы игрок более плавно обходил объект, по этому мы сделали оболочку, которая достаточно точно повторяет её форму. Но, как уже говорилось, главное без фанатизма. Стоит проверить результат в движке и при необходимости скорректировать коллизию.
Наименование Custom коллизий
Следующий важный момент коллизий сделанных в ручную, это их наименования. Для корректной работы в движке необходимо, чтобы имя коллизии соответствовало имени объекта, которому она присваивается.
Официальная документация на сайте Unreal Engine рекомендует следующие варианты:
В данный момент нас интересует UCX. Если имя самой бочки будет “SM_Barrel”, то имя коллизии будет “UCX_SM_Barrel”. А сама коллизия должна быть присвоена объекту бочки, чтобы они экспортировались вместе. Также важным условием является то, что их пивоты должны совпадать и находиться в центре координат.
Важное примечание: - у UCX коллизии есть некоторые требования к топологии - они не должны иметь разрывов и острых внутренних углов.Это приведет к тому, что движок попытается зашить их самостоятельно, а острые углы усреднить. По этому следите за целостностью сетки, а если не удается избежать угла - разбейте коллизию на несколько отдельных объектов. Также есть требование к коллизиям UBX, UCP и USP - после создания в них нельзя сдвигать вертексы, иначе они не сработают.
Теперь, когда все готово и проверено - можно загрузить новый объект в движок Unreal Engine и проверить результат.
Это очень простой, но доступный пример, который показал вам общий принцип работы. По факту для такой бочки наиболее оптимальным вариантом была бы капсульная коллизия. На деле уникальные коллизии применяются гораздо шире, хороший пример это камни, особенно камни-платформы, которые подразумевают, что по ним будет передвигаться игрок. Они являются уникальными и часто сложными по форме, при этом должны быть удобны для взаимодействия - игрок не должен застревать в них, проваливаться и.т.д. Для этого требуются правильные коллизии, которые сложно будет получить путем генерации. Понять какой формы нужна коллизия можно опытным путем, проверками в игре и исходя из специфики конкретного проекта.
Итак, коллизия создана тем или иным путем и теперь движку надо дать понять, за что конкретно она отвечает. Для этого в движке Unreal Engine имеется широкий спектр настроек, каждая из которых присвоит коллизии свои типы взаимодействия. По факту большинство из них вы вряд ли будете применять, особенно в начале работы, все они описаны в официальной документации к движку. Поэтому давайте коснемся интерфейса настройки коллизий, и основных параметров, которые стоит знать и вероятнее всего надо будет применять при работе с игровым окружением.
На деле это обширная тема требующая отдельного разговора и можно сказать, что художнику по окружению не обязательно знать досконально все эти настройки, так как многие из них имеют отношение к другим направлениям производства игр и требуют немало дополнительных знаний. Обычно вам просто скажут, какие настройки необходимо задавать объектам над которыми вы работаете, либо это будет указано в рабочей документации. C полным списком пресетов можно ознакомиться в документации к движку. Кто знает, может именно с них начнутся ваши эксперименты с “оживлением” ваших объектов в игровых уровнях.
Итак, мы разобрались с тем, как можно настроить коллизию объекта. Вы узнали много новых понятий и некоторую специфику их работы.
В целом можно сказать, что работа с коллизиями это комплексная и довольно сложная сфера, так как имеет много тонкостей и требует опыта. В некоторых студиях есть даже отдельные должности для работы исключительно с коллизиями, их размещением и настройками. Как художники по окружению вы столкнетесь с ограниченным количеством их функций, но, тем не менее понимание того как это работает не раз поможет вам и в целом сделает вас более компетентным специалистом.
[~DETAIL_TEXT] =>Давайте разберемся с понятием коллизия и тем, какое отношение оно имеет к моделированию для игр. Это слово часто можно встретить на форумах и в разговорах на тему игр, оно довольно популярно и знакомо игрокам, так как является важной частью создания игрового процесса и во многом определяет его.
Коллизия (Collision) - переводится как столкновение. Это очень широкий термин, в движках и визуализации он обозначает взаимодействие между объектами, а если точнее, то их столкновение (еще можно встретить понятие пересечение) и его результат.
Ещё часто можно встретить понятие коллайдер (Collider) - это некий невидимый объект, упрощенная оболочка которая присваивается объекту и задает его форму позволяя движку понять столкнулся объект в кадре с чем либо, или нет. Это более узкий термин, хотя по сути он работает с теми же функциями и по большому счету является оболочкой коллизии. Мы немного коснемся этого дальше по тексту.
Эти определения можно встретить не только в игровой индустрии. Проверка столкновений объектов применяется в инженерии, проектировании, архитектуре и других сферах, которые подразумевают визуализацию и физическую симуляцию. Это может быть тестированием объектов на пересечения, взаимодействия друг с другом, атмосферные, физические воздействия и.т.д. В общем - это набор параметров, который отвечает за симуляцию свойств объекта и того, как он реагирует через них на окружающий мир.
Если брать игровую индустрию, то там эти понятия (коллизия и коллайдер) работают несколько по разному, но по сути взаимосвязаны и отвечают за одно и тоже - столкновение с объектом. Возьмем за пример движки Unity и Unreal Engine - в них за одну и ту же функцию отвечают разные параметры. В Unity это вкладка Physics с вариантами коллайдеров (box collider, sphere collider и.т.д.) и дальнейшее присвоение свойств твердости, реакций на столкновение и.т.д. В Unreal это настройки Collision в Mesh Editor и также дальнейшая более гибкая настройка под конкретные задачи. Если кратко, то коллизия это более комплексный инструмент включающий в себя, в том числе, возможности коллайдера. Её суть в том, что она, в отличии от коллайдера, может считывать скорость воздействия, точки соприкосновения с объектом и реагировать на них (запускать события), если это предусмотрено игровым процессом (например вы наступили на плиту и она засветилась). Коллайдер имеет более базовые функции, о которых говорилось выше - задает границы объекта для проверки столкновения и является оболочкой коллизии, задает её границы. В игре, например, стена с коллайдером не позволит игроку пройти сквозь неё, так как движок определит в этом месте столкновение, но это будет его единственной функцией, если не добавить дополнительные параметры.
В случае статьи мы будем использовать Unreal Engine, поэтому остановимся на понятии коллизия и её настройках именно в этом движке.
На деле это, как и всегда, очень обширная тема, которая напрямую связана с алгеброй и геометрией, а инструменты для таких вычислений пишутся программистами. В случае с играми эти процессы интересуют нас как конечный инструмент в движке и его предстоит применять для того, чтобы модель в игре максимально корректно и верно взаимодействовала с игроком и реагировала на его воздействия. Разумеется, в играх такие функции гораздо проще и могут быть менее достоверными, чем в программах, например, для промышленного проектирования, хотя некоторые игры впечатляют детальностью проработки подобных аспектов. Тем не менее, эти инструменты имеют свои особенности и ряд правил по работе с ними. Понятие коллизия играет очень важную роль в том, каким будет игровой процесс. Как 3D художнику вам не обязательно детально знать её полный функционал, оставим это программистам, но мы все равно коснемся его в целом, для общего понимания, и в итоге сосредоточимся на аспектах, которые важны в работе именно с игровым окружением.
Любой человек более-менее увлеченный играми не раз слышал или даже сам применял фразу “провалился в текстуры”. На деле вы проходите сквозь Asset, так как на нём либо отсутствует коллизия, либо она является неточной. Либо в процессе отрисовки кадра процессор не справился с запросами и не успел правильно отработать расчет, в результате чего определил столкновение с опозданием, или отработал некорректно, но это уже дебри и мы не станем углубляться в них. Так или иначе - на финальном кадре мы видим то, что изображено на примере ниже.
Важно понимать, что 3D модель и коллизия это разные вещи. Модель выполняет функцию визуального отображения объекта, имеет отношение к графической составляющей движка и не реагирует на воздействия. Коллизия, которая была ей назначена, имеет отношение к физической составляющей и позволяет просчитать столкновения с ним и реакцию на эти столкновения, такие как срабатывание анимации, попадание урона, спецэффекты и какие-либо механики. Это называется “запуск события”.
Звучит непросто, но главное здесь, это понять саму суть идеи - каждый объект в игре имеет "прозрачную" оболочку, которая отвечает за то, как движок будет на него реагировать и будет ли он вообще это делать. Важно всегда следить за коллизиями и не пренебрегать их настройкой, так как они крайне важны для финального результата и того, насколько игрок “будет верить в происходящее”.
Ранее мы говорили о таком аспекте производства игр, как Draw call, детальнее о нем можно прочесть в статье Draw call. Вызовы отрисовки, оптимизация графики и как это вообще работает. Определение столкновений в играх является важной частью этого процесса. В статье мы больше говорили о графической составляющей рендера конечного кадра - как строится изображение на базе топологии моделей, их положения в сцене и шейдеров примененных к ним. Собственно, положение в сцене имеет прямое отношение к столкновениям.
На все эти объекты было оказано воздействие, допустим взрыв. Результат мы видим ниже - часть объектов определенным образом сдвинулась и приняла новое положение.
То есть движок, благодаря коллизиям, смог проверить перемещение объектов под воздействием взрыва, их столкновения (они упали на пол и при этом не провалились, или не улетели сквозь стену, ударились друг о друга и.т.д.). Катушка осталась на своём месте - она имеет коллизию, так как коробки стояли на ней, но при этом она не подвержена воздействию взрыва (по сути это пример коллайдера, он просто определяет границы объекта без воздействий). В ином случае она могла бы сдвинуться, опрокинуться или вообще сломаться. Этот момент связан с тем, что объекты в игре могут быть статическими (недвижимыми) и динамическими (движимыми). Коробки полетели - динамика, катушка просто стоит и создает преграду - статика.
Как уже говорилось ранее - при расчете движок учитывает только эти рамки, всё остальное отображается после расчета и передачи команд видеокарте. Всё это надо успеть сделать в рамках ограниченного числа времени на отрисовку каждого кадра, чтобы не снизить FPS игрока. Определение столкновений важно в процессе рендера кадров и влияет на производительность - чем больше в сцене подобных взаимодействий, тем больше ресурсов необходимо чтобы все рассчитать и отобразить. По этой причине применяется ряд процессов по оптимизации графики, вроде сборки атласов, а объекты строго распределяются на динамические и статические, так как фиксированный в одной точке объект проще посчитать и отрисовать, чем объект подверженный воздействию физики. Коробка только выглядит простой, но если таких в кадре десятки, они имеют разные меши и запрашивают текстуры с разных атласов, да ещё и разлетаются и ломаются, то это станет испытанием для железа игрока, так как каждое такое движение необходимо рассчитать, отобразить в рамках отдельных кадров и вывести на экран, и это помимо всех остальных расчетов - стрельба, взрывы, работа техники, погода и.т.д.
Небольшой пример со статическим объектом. Это обычная стена, либо скала, либо любой другой объект призванный ограничить перемещения игрока. Она не движется под внешними воздействиями и просто имеет границы, определяющие ее столкновения.
По сути принцип такой же, как и с коробкам - персонаж это коллизия А, стена - коллизия В. А сталкивается с В, коллизии на своих местах и проверка столкновения отрабатывает правильно - персонаж упирается.
Проверка не находит столкновение, либо это происходит некорректно - персонаж проваливается. Как говорилось ранее - иногда проверка может не отработать по разным причинам и это корректируется программно, в том числе при помощи свойств коллизий - она может учесть конкретные точки и скорость воздействия, и добавить эти данные к расчету столкновения. Есть случаи, когда скорость воздействия в связке с временем на рендер кадра дают ошибки, в результате которых объект “проскакивает” сквозь коллизию - кстати такой баг, это один из инструментов спидраннеров. А теперь представьте, что эта стена еще и может разрушиться от взрыва - да, это тоже благодаря коллизии, она может получить определенное воздействие и откликом дать реакцию на него - запустить событие.
Итак, мы рассмотрели как применяется понятие коллизия в производстве игр и в целом поняли, как это работает. По сути, вышеописанные примеры это то, с чем вы наиболее часто будете сталкиваться, как художники по окружению, так как ваша задача это создание статических и динамических объектов наполняющих пространство игровых сцен, а наполнение сцены это не менее важный элемент игрового процесса, чем персонажи. От вашей внимательности будет зависеть то, насколько часто игрок будет застревать в стенах и путаться в трех ящиках. Коллизии имеют более широкую область применения. Коснемся еще одной, наиболее известной и распространенной функции просто для понимания того, насколько обширен их функционал.
Хитбокс - это ещё одно расхожее определение. По сути, это примитив задача которого - участие в просчете попадания по персонажу, либо игроку. Он строится исходя из силуэта персонажа и особенностей конкретной игры. Где-то это будет просто набор кубов, где-то - точная оболочка повторяющая очертания модели.
Как видите, они достаточно просты. Это связано с тем, что часто в играх нет необходимости в точном считывании силуэта персонажей, иначе по ним будет сложно попасть. В некоторых играх точные хитбоксы напротив являются особенностью, обычно это реалистичные шутеры. Говоря о стрельбе стоит коснуться двух основных способов её реализации.
Это Hitscan. Его суть заключается в просчете попаданий через трассировку лучей.
Это очень старый и распространенный способ, он известен ещё со времен первых частей Wolfenstein и Doom. Это безотказная и легкая в расчете методика, её особенность заключается в том, что она срабатывает мгновенно, исключая такие моменты как время и скорость полета снаряда. При этом опытные программисты способны достаточно сильно развить эту технику и добавить к ней такие вещи как, например, рикошет - в этом случае луч будет учитывать не только пересечения с коллизией, но и получать просчет на отражение в определенном направлении.
Это просчет баллистики. В этом случае оружие игрока будет стрелять “честными снарядами” которые будут иметь вес и скорость. В игре они, собственно, будут иметь коллизию необходимую для просчета столкновения и, соответственно, регистрации попадания.
Всё точно также, как в примерах с ящиками - движок будет использовать для расчета упрощенные оболочки, все остальное сделает видеокарта. Берется направление оружия игрока и в момент выстрела образуется коллизия, которая движется в заданном направлении с определенной начальной скоростью. В полете она будет подвержена физике, то есть будет иметь траекторию, а в некоторых играх даже подвергаться воздействию, например, ветра. Такой тип стрельбы будет более реалистичным и сложным, в том числе для просчета во время рендера кадра. Один из ярких примеров работы с такой системой расчета стрельбы, это игра Max Payne от студии Remedy Entertainment - благодаря работе с коллизиями разработчики смогли реализовать такую механику как Bullet-Time, или замедление времени.
Как видите, коллизия при всей своей простоте имеет важное значение в процессе создания игр и может выполнять совершенно разные функции, все будет зависеть от объекта, которому она присвоена и механик конкретного проекта. Без неё игрок просто не сможет взаимодействовать с миром игры.
Итак, мы весьма детально разобрались с тем, что такое коллизия, прошлись по областям её применения и ключевым примерам того, как она может работать в играх. Самое время коснуться некоторых аспектов коллизий, которые напрямую связаны с разработкой игрового окружения, а именно - как вообще подключить её и какие настройки при этом можно добавить.
Возьмем для примера бочку с сайта Quixel. Предположим, что нам надо разместить её на игровом уровне. Для этого нам понадобится коллизия примененная к этой бочке.
Первыми в списке идут сфера, капсула и бокс. Это стандартные примитивы, которые подойдут для большинства объектов окружения. Велика вероятность, что вы вряд ли будете пользоваться другими вариантами, которые предлагает движок. Тут всё зависит от особенностей проекта и технических заданий, в которых должно быть прописано в том числе то, для каких целей будет применяться объект и какую они будут иметь коллизию. Рассмотрим именно их, как фундаментальные.
Его особенность заключается в том, что она начинается и заканчивается полусферой, по этому игрок, персонажи или объекты не смогут попасть на верхнюю часть объекта и будут соскальзывать. Суть её в том, что с одной стороны игрок может подойти достаточно близко к объекту, так как прямая с боков капсула может довольно точно повторять границы объекта, в тоже время полусферы несколько ограничивают доступ сверху и снизу.
При этом прямые углы будут создавать более явную преграду во время взаимодействия (например между двумя объектами с прямыми углами можно застрять). Как видите, в целом всё более чем просто - просто нужен объект и правильно подобранная коллизия исходя из задач этого объекта.
Вышеописанные способы работают с простыми объектами, либо группами объектов. Но бывают ситуации, когда вам может понадобиться уникальная коллизия с которой не справится генерация силами движка. Предположим, что мы хотим иметь более обтекаемую форму коллизии для бочки, но при этом без полусфер, как в капсуле. Проще говоря - простой цилиндр. На примере ниже посмотрим как сделать уникальную коллизию и правильно загрузить её в движок.
Обычно для коллизии не требуется большого числа полигонов, достаточно упрощенной формы, особенно если это элементы окружения. Чем динамичнее игра, тем меньше внимания игрок обратит на то, что в процессе он на секунду чуть-чуть влез в обод бочки. Это игровые условности и стоит помнить о них, так как сложная коллизия подразумевает более сложный расчет столкновений. При этом мы хотим, чтобы игрок более плавно обходил объект, по этому мы сделали оболочку, которая достаточно точно повторяет её форму. Но, как уже говорилось, главное без фанатизма. Стоит проверить результат в движке и при необходимости скорректировать коллизию.
Следующий важный момент коллизий сделанных в ручную, это их наименования. Для корректной работы в движке необходимо, чтобы имя коллизии соответствовало имени объекта, которому она присваивается.
В данный момент нас интересует UCX. Если имя самой бочки будет “SM_Barrel”, то имя коллизии будет “UCX_SM_Barrel”. А сама коллизия должна быть присвоена объекту бочки, чтобы они экспортировались вместе. Также важным условием является то, что их пивоты должны совпадать и находиться в центре координат.
Важное примечание: - у UCX коллизии есть некоторые требования к топологии - они не должны иметь разрывов и острых внутренних углов.Это приведет к тому, что движок попытается зашить их самостоятельно, а острые углы усреднить. По этому следите за целостностью сетки, а если не удается избежать угла - разбейте коллизию на несколько отдельных объектов. Также есть требование к коллизиям UBX, UCP и USP - после создания в них нельзя сдвигать вертексы, иначе они не сработают.
Теперь, когда все готово и проверено - можно загрузить новый объект в движок Unreal Engine и проверить результат.
Это очень простой, но доступный пример, который показал вам общий принцип работы. По факту для такой бочки наиболее оптимальным вариантом была бы капсульная коллизия. На деле уникальные коллизии применяются гораздо шире, хороший пример это камни, особенно камни-платформы, которые подразумевают, что по ним будет передвигаться игрок. Они являются уникальными и часто сложными по форме, при этом должны быть удобны для взаимодействия - игрок не должен застревать в них, проваливаться и.т.д. Для этого требуются правильные коллизии, которые сложно будет получить путем генерации. Понять какой формы нужна коллизия можно опытным путем, проверками в игре и исходя из специфики конкретного проекта.
Итак, коллизия создана тем или иным путем и теперь движку надо дать понять, за что конкретно она отвечает. Для этого в движке Unreal Engine имеется широкий спектр настроек, каждая из которых присвоит коллизии свои типы взаимодействия. По факту большинство из них вы вряд ли будете применять, особенно в начале работы, все они описаны в официальной документации к движку. Поэтому давайте коснемся интерфейса настройки коллизий, и основных параметров, которые стоит знать и вероятнее всего надо будет применять при работе с игровым окружением.
На деле это обширная тема требующая отдельного разговора и можно сказать, что художнику по окружению не обязательно знать досконально все эти настройки, так как многие из них имеют отношение к другим направлениям производства игр и требуют немало дополнительных знаний. Обычно вам просто скажут, какие настройки необходимо задавать объектам над которыми вы работаете, либо это будет указано в рабочей документации. C полным списком пресетов можно ознакомиться в документации к движку. Кто знает, может именно с них начнутся ваши эксперименты с “оживлением” ваших объектов в игровых уровнях.
Итак, мы разобрались с тем, как можно настроить коллизию объекта. Вы узнали много новых понятий и некоторую специфику их работы.
В целом можно сказать, что работа с коллизиями это комплексная и довольно сложная сфера, так как имеет много тонкостей и требует опыта. В некоторых студиях есть даже отдельные должности для работы исключительно с коллизиями, их размещением и настройками. Как художники по окружению вы столкнетесь с ограниченным количеством их функций, но, тем не менее понимание того как это работает не раз поможет вам и в целом сделает вас более компетентным специалистом.
[DETAIL_PICTURE] => [~DETAIL_PICTURE] => [DATE_ACTIVE_FROM] => 04.05.2023 [~DATE_ACTIVE_FROM] => 04.05.2023 [ACTIVE_FROM] => 04.05.2023 [~ACTIVE_FROM] => 04.05.2023 [DATE_ACTIVE_TO] => [~DATE_ACTIVE_TO] => [ACTIVE_TO] => [~ACTIVE_TO] => [SHOW_COUNTER] => 8084 [~SHOW_COUNTER] => 8084 [SHOW_COUNTER_START] => 04.05.2023 09:21:10 [~SHOW_COUNTER_START] => 04.05.2023 09:21:10 [IBLOCK_TYPE_ID] => articles [~IBLOCK_TYPE_ID] => articles [IBLOCK_ID] => 9 [~IBLOCK_ID] => 9 [IBLOCK_CODE] => articles [~IBLOCK_CODE] => articles [IBLOCK_NAME] => Статьи [~IBLOCK_NAME] => Статьи [IBLOCK_EXTERNAL_ID] => [~IBLOCK_EXTERNAL_ID] => [DATE_CREATE] => 04.05.2023 09:20:56 [~DATE_CREATE] => 04.05.2023 09:20:56 [CREATED_BY] => 37 [~CREATED_BY] => 37 [CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [~CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [TIMESTAMP_X] => 15.06.2023 23:02:15 [~TIMESTAMP_X] => 15.06.2023 23:02:15 [MODIFIED_BY] => 37 [~MODIFIED_BY] => 37 [USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [~USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [IBLOCK_SECTION_ID] => 119 [~IBLOCK_SECTION_ID] => 119 [DETAIL_PAGE_URL] => /articles/collision-stolknovenie-igroka-s-obektami-v-igrakh-chto-takoe-kolliziya/ [~DETAIL_PAGE_URL] => /articles/collision-stolknovenie-igroka-s-obektami-v-igrakh-chto-takoe-kolliziya/ [LIST_PAGE_URL] => /articles/ [~LIST_PAGE_URL] => /articles/ [DETAIL_TEXT_TYPE] => html [~DETAIL_TEXT_TYPE] => html [PREVIEW_TEXT_TYPE] => html [~PREVIEW_TEXT_TYPE] => html [LANG_DIR] => / [~LANG_DIR] => / [EXTERNAL_ID] => 419 [~EXTERNAL_ID] => 419 [LID] => s1 [~LID] => s1 [EDIT_LINK] => [DELETE_LINK] => [DISPLAY_ACTIVE_FROM] => 04.05.2023 [FIELDS] => Array ( [ID] => 419 [CODE] => collision-stolknovenie-igroka-s-obektami-v-igrakh-chto-takoe-kolliziya [XML_ID] => 419 [NAME] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? [TAGS] => [SORT] => 500 [PREVIEW_TEXT] => Коллизия (Collision) - переводится как столкновение. Это очень широкий термин, в движках и визуализации он обозначает взаимодействие между объектами, а если точнее то их столкновение [PREVIEW_PICTURE] => Array ( [ID] => 3987 [TIMESTAMP_X] => 15.06.2023 23:02:15 [MODULE_ID] => iblock [HEIGHT] => 190 [WIDTH] => 320 [FILE_SIZE] => 128064 [CONTENT_TYPE] => image/png [SUBDIR] => iblock/8fa/np7294bih0p8xupegu2gs9p72m9z8pki [FILE_NAME] => Anons_CHto-takoe-kolliziya_cgitems.ru.png [ORIGINAL_NAME] => Anons_Что такое коллизия_cgitems.ru.png [DESCRIPTION] => [HANDLER_ID] => [EXTERNAL_ID] => 749f0db4cea51abc47b338aeefadddf5 [VERSION_ORIGINAL_ID] => [META] => [SRC] => /upload/iblock/8fa/np7294bih0p8xupegu2gs9p72m9z8pki/Anons_CHto-takoe-kolliziya_cgitems.ru.png [UNSAFE_SRC] => /upload/iblock/8fa/np7294bih0p8xupegu2gs9p72m9z8pki/Anons_CHto-takoe-kolliziya_cgitems.ru.png [SAFE_SRC] => /upload/iblock/8fa/np7294bih0p8xupegu2gs9p72m9z8pki/Anons_CHto-takoe-kolliziya_cgitems.ru.png [ALT] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? [TITLE] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? ) [DETAIL_TEXT] =>Давайте разберемся с понятием коллизия и тем, какое отношение оно имеет к моделированию для игр. Это слово часто можно встретить на форумах и в разговорах на тему игр, оно довольно популярно и знакомо игрокам, так как является важной частью создания игрового процесса и во многом определяет его.
Коллизия (Collision) - переводится как столкновение. Это очень широкий термин, в движках и визуализации он обозначает взаимодействие между объектами, а если точнее, то их столкновение (еще можно встретить понятие пересечение) и его результат.
Ещё часто можно встретить понятие коллайдер (Collider) - это некий невидимый объект, упрощенная оболочка которая присваивается объекту и задает его форму позволяя движку понять столкнулся объект в кадре с чем либо, или нет. Это более узкий термин, хотя по сути он работает с теми же функциями и по большому счету является оболочкой коллизии. Мы немного коснемся этого дальше по тексту.
Эти определения можно встретить не только в игровой индустрии. Проверка столкновений объектов применяется в инженерии, проектировании, архитектуре и других сферах, которые подразумевают визуализацию и физическую симуляцию. Это может быть тестированием объектов на пересечения, взаимодействия друг с другом, атмосферные, физические воздействия и.т.д. В общем - это набор параметров, который отвечает за симуляцию свойств объекта и того, как он реагирует через них на окружающий мир.
Если брать игровую индустрию, то там эти понятия (коллизия и коллайдер) работают несколько по разному, но по сути взаимосвязаны и отвечают за одно и тоже - столкновение с объектом. Возьмем за пример движки Unity и Unreal Engine - в них за одну и ту же функцию отвечают разные параметры. В Unity это вкладка Physics с вариантами коллайдеров (box collider, sphere collider и.т.д.) и дальнейшее присвоение свойств твердости, реакций на столкновение и.т.д. В Unreal это настройки Collision в Mesh Editor и также дальнейшая более гибкая настройка под конкретные задачи. Если кратко, то коллизия это более комплексный инструмент включающий в себя, в том числе, возможности коллайдера. Её суть в том, что она, в отличии от коллайдера, может считывать скорость воздействия, точки соприкосновения с объектом и реагировать на них (запускать события), если это предусмотрено игровым процессом (например вы наступили на плиту и она засветилась). Коллайдер имеет более базовые функции, о которых говорилось выше - задает границы объекта для проверки столкновения и является оболочкой коллизии, задает её границы. В игре, например, стена с коллайдером не позволит игроку пройти сквозь неё, так как движок определит в этом месте столкновение, но это будет его единственной функцией, если не добавить дополнительные параметры.
В случае статьи мы будем использовать Unreal Engine, поэтому остановимся на понятии коллизия и её настройках именно в этом движке.
На деле это, как и всегда, очень обширная тема, которая напрямую связана с алгеброй и геометрией, а инструменты для таких вычислений пишутся программистами. В случае с играми эти процессы интересуют нас как конечный инструмент в движке и его предстоит применять для того, чтобы модель в игре максимально корректно и верно взаимодействовала с игроком и реагировала на его воздействия. Разумеется, в играх такие функции гораздо проще и могут быть менее достоверными, чем в программах, например, для промышленного проектирования, хотя некоторые игры впечатляют детальностью проработки подобных аспектов. Тем не менее, эти инструменты имеют свои особенности и ряд правил по работе с ними. Понятие коллизия играет очень важную роль в том, каким будет игровой процесс. Как 3D художнику вам не обязательно детально знать её полный функционал, оставим это программистам, но мы все равно коснемся его в целом, для общего понимания, и в итоге сосредоточимся на аспектах, которые важны в работе именно с игровым окружением.
Любой человек более-менее увлеченный играми не раз слышал или даже сам применял фразу “провалился в текстуры”. На деле вы проходите сквозь Asset, так как на нём либо отсутствует коллизия, либо она является неточной. Либо в процессе отрисовки кадра процессор не справился с запросами и не успел правильно отработать расчет, в результате чего определил столкновение с опозданием, или отработал некорректно, но это уже дебри и мы не станем углубляться в них. Так или иначе - на финальном кадре мы видим то, что изображено на примере ниже.
Важно понимать, что 3D модель и коллизия это разные вещи. Модель выполняет функцию визуального отображения объекта, имеет отношение к графической составляющей движка и не реагирует на воздействия. Коллизия, которая была ей назначена, имеет отношение к физической составляющей и позволяет просчитать столкновения с ним и реакцию на эти столкновения, такие как срабатывание анимации, попадание урона, спецэффекты и какие-либо механики. Это называется “запуск события”.
Звучит непросто, но главное здесь, это понять саму суть идеи - каждый объект в игре имеет "прозрачную" оболочку, которая отвечает за то, как движок будет на него реагировать и будет ли он вообще это делать. Важно всегда следить за коллизиями и не пренебрегать их настройкой, так как они крайне важны для финального результата и того, насколько игрок “будет верить в происходящее”.
Ранее мы говорили о таком аспекте производства игр, как Draw call, детальнее о нем можно прочесть в статье Draw call. Вызовы отрисовки, оптимизация графики и как это вообще работает. Определение столкновений в играх является важной частью этого процесса. В статье мы больше говорили о графической составляющей рендера конечного кадра - как строится изображение на базе топологии моделей, их положения в сцене и шейдеров примененных к ним. Собственно, положение в сцене имеет прямое отношение к столкновениям.
На все эти объекты было оказано воздействие, допустим взрыв. Результат мы видим ниже - часть объектов определенным образом сдвинулась и приняла новое положение.
То есть движок, благодаря коллизиям, смог проверить перемещение объектов под воздействием взрыва, их столкновения (они упали на пол и при этом не провалились, или не улетели сквозь стену, ударились друг о друга и.т.д.). Катушка осталась на своём месте - она имеет коллизию, так как коробки стояли на ней, но при этом она не подвержена воздействию взрыва (по сути это пример коллайдера, он просто определяет границы объекта без воздействий). В ином случае она могла бы сдвинуться, опрокинуться или вообще сломаться. Этот момент связан с тем, что объекты в игре могут быть статическими (недвижимыми) и динамическими (движимыми). Коробки полетели - динамика, катушка просто стоит и создает преграду - статика.
Как уже говорилось ранее - при расчете движок учитывает только эти рамки, всё остальное отображается после расчета и передачи команд видеокарте. Всё это надо успеть сделать в рамках ограниченного числа времени на отрисовку каждого кадра, чтобы не снизить FPS игрока. Определение столкновений важно в процессе рендера кадров и влияет на производительность - чем больше в сцене подобных взаимодействий, тем больше ресурсов необходимо чтобы все рассчитать и отобразить. По этой причине применяется ряд процессов по оптимизации графики, вроде сборки атласов, а объекты строго распределяются на динамические и статические, так как фиксированный в одной точке объект проще посчитать и отрисовать, чем объект подверженный воздействию физики. Коробка только выглядит простой, но если таких в кадре десятки, они имеют разные меши и запрашивают текстуры с разных атласов, да ещё и разлетаются и ломаются, то это станет испытанием для железа игрока, так как каждое такое движение необходимо рассчитать, отобразить в рамках отдельных кадров и вывести на экран, и это помимо всех остальных расчетов - стрельба, взрывы, работа техники, погода и.т.д.
Небольшой пример со статическим объектом. Это обычная стена, либо скала, либо любой другой объект призванный ограничить перемещения игрока. Она не движется под внешними воздействиями и просто имеет границы, определяющие ее столкновения.
По сути принцип такой же, как и с коробкам - персонаж это коллизия А, стена - коллизия В. А сталкивается с В, коллизии на своих местах и проверка столкновения отрабатывает правильно - персонаж упирается.
Проверка не находит столкновение, либо это происходит некорректно - персонаж проваливается. Как говорилось ранее - иногда проверка может не отработать по разным причинам и это корректируется программно, в том числе при помощи свойств коллизий - она может учесть конкретные точки и скорость воздействия, и добавить эти данные к расчету столкновения. Есть случаи, когда скорость воздействия в связке с временем на рендер кадра дают ошибки, в результате которых объект “проскакивает” сквозь коллизию - кстати такой баг, это один из инструментов спидраннеров. А теперь представьте, что эта стена еще и может разрушиться от взрыва - да, это тоже благодаря коллизии, она может получить определенное воздействие и откликом дать реакцию на него - запустить событие.
Итак, мы рассмотрели как применяется понятие коллизия в производстве игр и в целом поняли, как это работает. По сути, вышеописанные примеры это то, с чем вы наиболее часто будете сталкиваться, как художники по окружению, так как ваша задача это создание статических и динамических объектов наполняющих пространство игровых сцен, а наполнение сцены это не менее важный элемент игрового процесса, чем персонажи. От вашей внимательности будет зависеть то, насколько часто игрок будет застревать в стенах и путаться в трех ящиках. Коллизии имеют более широкую область применения. Коснемся еще одной, наиболее известной и распространенной функции просто для понимания того, насколько обширен их функционал.
Хитбокс - это ещё одно расхожее определение. По сути, это примитив задача которого - участие в просчете попадания по персонажу, либо игроку. Он строится исходя из силуэта персонажа и особенностей конкретной игры. Где-то это будет просто набор кубов, где-то - точная оболочка повторяющая очертания модели.
Как видите, они достаточно просты. Это связано с тем, что часто в играх нет необходимости в точном считывании силуэта персонажей, иначе по ним будет сложно попасть. В некоторых играх точные хитбоксы напротив являются особенностью, обычно это реалистичные шутеры. Говоря о стрельбе стоит коснуться двух основных способов её реализации.
Это Hitscan. Его суть заключается в просчете попаданий через трассировку лучей.
Это очень старый и распространенный способ, он известен ещё со времен первых частей Wolfenstein и Doom. Это безотказная и легкая в расчете методика, её особенность заключается в том, что она срабатывает мгновенно, исключая такие моменты как время и скорость полета снаряда. При этом опытные программисты способны достаточно сильно развить эту технику и добавить к ней такие вещи как, например, рикошет - в этом случае луч будет учитывать не только пересечения с коллизией, но и получать просчет на отражение в определенном направлении.
Это просчет баллистики. В этом случае оружие игрока будет стрелять “честными снарядами” которые будут иметь вес и скорость. В игре они, собственно, будут иметь коллизию необходимую для просчета столкновения и, соответственно, регистрации попадания.
Всё точно также, как в примерах с ящиками - движок будет использовать для расчета упрощенные оболочки, все остальное сделает видеокарта. Берется направление оружия игрока и в момент выстрела образуется коллизия, которая движется в заданном направлении с определенной начальной скоростью. В полете она будет подвержена физике, то есть будет иметь траекторию, а в некоторых играх даже подвергаться воздействию, например, ветра. Такой тип стрельбы будет более реалистичным и сложным, в том числе для просчета во время рендера кадра. Один из ярких примеров работы с такой системой расчета стрельбы, это игра Max Payne от студии Remedy Entertainment - благодаря работе с коллизиями разработчики смогли реализовать такую механику как Bullet-Time, или замедление времени.
Как видите, коллизия при всей своей простоте имеет важное значение в процессе создания игр и может выполнять совершенно разные функции, все будет зависеть от объекта, которому она присвоена и механик конкретного проекта. Без неё игрок просто не сможет взаимодействовать с миром игры.
Итак, мы весьма детально разобрались с тем, что такое коллизия, прошлись по областям её применения и ключевым примерам того, как она может работать в играх. Самое время коснуться некоторых аспектов коллизий, которые напрямую связаны с разработкой игрового окружения, а именно - как вообще подключить её и какие настройки при этом можно добавить.
Возьмем для примера бочку с сайта Quixel. Предположим, что нам надо разместить её на игровом уровне. Для этого нам понадобится коллизия примененная к этой бочке.
Первыми в списке идут сфера, капсула и бокс. Это стандартные примитивы, которые подойдут для большинства объектов окружения. Велика вероятность, что вы вряд ли будете пользоваться другими вариантами, которые предлагает движок. Тут всё зависит от особенностей проекта и технических заданий, в которых должно быть прописано в том числе то, для каких целей будет применяться объект и какую они будут иметь коллизию. Рассмотрим именно их, как фундаментальные.
Его особенность заключается в том, что она начинается и заканчивается полусферой, по этому игрок, персонажи или объекты не смогут попасть на верхнюю часть объекта и будут соскальзывать. Суть её в том, что с одной стороны игрок может подойти достаточно близко к объекту, так как прямая с боков капсула может довольно точно повторять границы объекта, в тоже время полусферы несколько ограничивают доступ сверху и снизу.
При этом прямые углы будут создавать более явную преграду во время взаимодействия (например между двумя объектами с прямыми углами можно застрять). Как видите, в целом всё более чем просто - просто нужен объект и правильно подобранная коллизия исходя из задач этого объекта.
Вышеописанные способы работают с простыми объектами, либо группами объектов. Но бывают ситуации, когда вам может понадобиться уникальная коллизия с которой не справится генерация силами движка. Предположим, что мы хотим иметь более обтекаемую форму коллизии для бочки, но при этом без полусфер, как в капсуле. Проще говоря - простой цилиндр. На примере ниже посмотрим как сделать уникальную коллизию и правильно загрузить её в движок.
Обычно для коллизии не требуется большого числа полигонов, достаточно упрощенной формы, особенно если это элементы окружения. Чем динамичнее игра, тем меньше внимания игрок обратит на то, что в процессе он на секунду чуть-чуть влез в обод бочки. Это игровые условности и стоит помнить о них, так как сложная коллизия подразумевает более сложный расчет столкновений. При этом мы хотим, чтобы игрок более плавно обходил объект, по этому мы сделали оболочку, которая достаточно точно повторяет её форму. Но, как уже говорилось, главное без фанатизма. Стоит проверить результат в движке и при необходимости скорректировать коллизию.
Следующий важный момент коллизий сделанных в ручную, это их наименования. Для корректной работы в движке необходимо, чтобы имя коллизии соответствовало имени объекта, которому она присваивается.
В данный момент нас интересует UCX. Если имя самой бочки будет “SM_Barrel”, то имя коллизии будет “UCX_SM_Barrel”. А сама коллизия должна быть присвоена объекту бочки, чтобы они экспортировались вместе. Также важным условием является то, что их пивоты должны совпадать и находиться в центре координат.
Важное примечание: - у UCX коллизии есть некоторые требования к топологии - они не должны иметь разрывов и острых внутренних углов.Это приведет к тому, что движок попытается зашить их самостоятельно, а острые углы усреднить. По этому следите за целостностью сетки, а если не удается избежать угла - разбейте коллизию на несколько отдельных объектов. Также есть требование к коллизиям UBX, UCP и USP - после создания в них нельзя сдвигать вертексы, иначе они не сработают.
Теперь, когда все готово и проверено - можно загрузить новый объект в движок Unreal Engine и проверить результат.
Это очень простой, но доступный пример, который показал вам общий принцип работы. По факту для такой бочки наиболее оптимальным вариантом была бы капсульная коллизия. На деле уникальные коллизии применяются гораздо шире, хороший пример это камни, особенно камни-платформы, которые подразумевают, что по ним будет передвигаться игрок. Они являются уникальными и часто сложными по форме, при этом должны быть удобны для взаимодействия - игрок не должен застревать в них, проваливаться и.т.д. Для этого требуются правильные коллизии, которые сложно будет получить путем генерации. Понять какой формы нужна коллизия можно опытным путем, проверками в игре и исходя из специфики конкретного проекта.
Итак, коллизия создана тем или иным путем и теперь движку надо дать понять, за что конкретно она отвечает. Для этого в движке Unreal Engine имеется широкий спектр настроек, каждая из которых присвоит коллизии свои типы взаимодействия. По факту большинство из них вы вряд ли будете применять, особенно в начале работы, все они описаны в официальной документации к движку. Поэтому давайте коснемся интерфейса настройки коллизий, и основных параметров, которые стоит знать и вероятнее всего надо будет применять при работе с игровым окружением.
На деле это обширная тема требующая отдельного разговора и можно сказать, что художнику по окружению не обязательно знать досконально все эти настройки, так как многие из них имеют отношение к другим направлениям производства игр и требуют немало дополнительных знаний. Обычно вам просто скажут, какие настройки необходимо задавать объектам над которыми вы работаете, либо это будет указано в рабочей документации. C полным списком пресетов можно ознакомиться в документации к движку. Кто знает, может именно с них начнутся ваши эксперименты с “оживлением” ваших объектов в игровых уровнях.
Итак, мы разобрались с тем, как можно настроить коллизию объекта. Вы узнали много новых понятий и некоторую специфику их работы.
В целом можно сказать, что работа с коллизиями это комплексная и довольно сложная сфера, так как имеет много тонкостей и требует опыта. В некоторых студиях есть даже отдельные должности для работы исключительно с коллизиями, их размещением и настройками. Как художники по окружению вы столкнетесь с ограниченным количеством их функций, но, тем не менее понимание того как это работает не раз поможет вам и в целом сделает вас более компетентным специалистом.
[DETAIL_PICTURE] => [DATE_ACTIVE_FROM] => 04.05.2023 [ACTIVE_FROM] => 04.05.2023 [DATE_ACTIVE_TO] => [ACTIVE_TO] => [SHOW_COUNTER] => 8084 [SHOW_COUNTER_START] => 04.05.2023 09:21:10 [IBLOCK_TYPE_ID] => articles [IBLOCK_ID] => 9 [IBLOCK_CODE] => articles [IBLOCK_NAME] => Статьи [IBLOCK_EXTERNAL_ID] => [DATE_CREATE] => 04.05.2023 09:20:56 [CREATED_BY] => 37 [CREATED_USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов [TIMESTAMP_X] => 15.06.2023 23:02:15 [MODIFIED_BY] => 37 [USER_NAME] => (nikolay92andrianov@gmail.com) Николай Андрианов ) [PROPERTIES] => Array ( [CATEGORY_ARTICLES] => Array ( [ID] => 74 [IBLOCK_ID] => 9 [NAME] => Категории статей [ACTIVE] => Y [SORT] => 500 [CODE] => CATEGORY_ARTICLES [DEFAULT_VALUE] => [PROPERTY_TYPE] => L [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => [MULTIPLE_CNT] => 5 [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 1 [USER_TYPE] => [USER_TYPE_SETTINGS] => [HINT] => [~NAME] => Категории статей [~DEFAULT_VALUE] => [VALUE_ENUM] => Array ( [0] => Unreal Engine [1] => Unity [2] => Документация ) [VALUE_XML_ID] => Array ( [0] => unreal [1] => unity [2] => documentation ) [VALUE_SORT] => Array ( [0] => 497 [1] => 499 [2] => 500 ) [VALUE] => Array ( [0] => Unreal Engine [1] => Unity [2] => Документация ) [PROPERTY_VALUE_ID] => Array ( [0] => 6058 [1] => 6059 [2] => 6060 ) [VALUE_ENUM_ID] => Array ( [0] => 43 [1] => 45 [2] => 68 ) [DESCRIPTION] => Array ( [0] => [1] => [2] => ) [~VALUE] => Array ( [0] => Unreal Engine [1] => Unity [2] => Документация ) [~DESCRIPTION] => Array ( [0] => [1] => [2] => ) ) [SHOW_COUNTER] => ) [DISPLAY_PROPERTIES] => Array ( [CATEGORY_ARTICLES] => Array ( [ID] => 74 [IBLOCK_ID] => 9 [NAME] => Категории статей [ACTIVE] => Y [SORT] => 500 [CODE] => CATEGORY_ARTICLES [DEFAULT_VALUE] => [PROPERTY_TYPE] => L [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => [MULTIPLE_CNT] => 5 [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 1 [USER_TYPE] => [USER_TYPE_SETTINGS] => [HINT] => [~NAME] => Категории статей [~DEFAULT_VALUE] => [VALUE_ENUM] => Array ( [0] => Unreal Engine [1] => Unity [2] => Документация ) [VALUE_XML_ID] => Array ( [0] => unreal [1] => unity [2] => documentation ) [VALUE_SORT] => Array ( [0] => 497 [1] => 499 [2] => 500 ) [VALUE] => Array ( [0] => Unreal Engine [1] => Unity [2] => Документация ) [PROPERTY_VALUE_ID] => Array ( [0] => 6058 [1] => 6059 [2] => 6060 ) [VALUE_ENUM_ID] => Array ( [0] => 43 [1] => 45 [2] => 68 ) [DESCRIPTION] => Array ( [0] => [1] => [2] => ) [~VALUE] => Array ( [0] => Unreal Engine [1] => Unity [2] => Документация ) [~DESCRIPTION] => Array ( [0] => [1] => [2] => ) [DISPLAY_VALUE] => Array ( [0] => Unreal Engine [1] => Unity [2] => Документация ) ) ) [IPROPERTY_VALUES] => Array ( [SECTION_META_TITLE] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? [SECTION_META_KEYWORDS] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? [SECTION_META_DESCRIPTION] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? [SECTION_PAGE_TITLE] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? [ELEMENT_PAGE_TITLE] => Collision. Столкновение игрока с объектами в играх. Что такое коллизия? [ELEMENT_META_TITLE] => [ГАЙД] Что такое КОЛЛИЗИЯ в играх? Как работает столкновение игрока с объектами в игровых мирах [ELEMENT_META_KEYWORDS] => Коллизия, гайд, инструкция, документация, cgitems [ELEMENT_META_DESCRIPTION] => Коллизия (Collision) - переводится как столкновение. Это очень широкий термин, в движках и визуализации он обозначает взаимодействие между объектами, а если точнее то их столкновение (еще можно встретить понятие пересечение) и его результат. ) )
Спасибо за выбор
моего курса!