Cubemaps skyrim что это

Опубликовано: 23.04.2024

Текстурирование — это технология, изобретенная уже бог знает в каком году, никогда не потеряет свою актуальность, так как это единственный способ сделать трехмерный мир на экране монитора более красивым. Самым красивым как это только можно себе представить. Поэтому, если и говорить слово «красота» в трехмерном мире, то обязательно подразумевать под этим словом — «текстура».

Что собственно представляет собой текстура? Текстура - это массив цветовых точек, образующих изображение. Текстуры бывают разного формата, есть RGB, есть с альфа каналом (RGBA), монохромные и много других. Изобретений в области текстуринга не меньше чем в любой другой области. Мультитекстурирование, сжатие текстур, полупрозрачность, прозрачность. Много было придумано способов наложения текстур: прижатие текстур, масштабирование текстур, проекционные текстуры, текстуры окружения (Environment mapping). А сколько было приложено усилий для совершенствования текстурных фильтров. Точечная выборка, линейная фильтрация, техника mip-map, билинейная фильтрация, трилинейная и анизотропная фильтрации. А также текстуры бывают одномерными(1D), двумерными(2D), трехмерными(3D), а бывают CubeMap текстуры. Вот об этом и поговорим.

Прежде чем приступим, хотелось бы напомнить, что техника CubeMap может не поддерживаться старыми видео картами. Поэтому смотрите строку glGetString(GL_EXTENSIONS); И ищите там расширение GL_ARB_texture_cube_map. (Что такое расширение для OpenGL можно узнать из статьи OpenGL: Extensions (Расширения))

Если текстура помечена как CubeMap, то она представляет собой шесть различных текстур:

Изображение

Каждой части куба соответствует своя картинка. Они могут быть и одинаковые, правда тогда уже не будет смысла в CubeMap технике. При этом идентификатор CubeMap'а всего один. Это обычная переменная типа unsigned int, которая и будет хранить id всех шести текстур. При генерации обычной 2D (или другой) текстуры OpenGL знает о том, что текстура есть 2D. При ее создании в функцию glBindTexture() передается параметр GL_TEXTURE_2D и идентификатор текстуры. В нашем случае нужно передавать в качестве первого аргумента функции glBindTexture() параметр GL_TEXTURE_CUBE_MAP_ARB. Теперь OpenGL знает о том, что мы хотим использовать CubeMap текстуры, и, разумеется, будет ждать от нас дальнейших корректных по отношению к данной технике действий.

Поэтому генерация CubeMap выглядит так:

Где CubeMap является идентификатором текстуры.
Дальше все как обычно. Настраиваем нужные нам параметры у текстуры, ставим нужные фильтры.

Теперь подошли к самому главному в процессе генерации CubeMap текстур.

Это процесс создания mip-map уровней для текстуры. Дело в том, что на этапе генерации текстур для CubeMap'а мы не знаем какими именно данными его заполнять. В нашем случае данные мы будем получать по ходу выполнения программы. Поэтому использовать обычный gluBuild2Dmipmaps() мы не можем, так как он не принимает в качестве последнего параметра значение NULL. А если так сделать, то программа вылетит с ошибкой.

Поэтому нужно использовать стандартное glTexImage2D(). А как генерировать mip-map спросите вы? В данном случае за генерацию mip-map будет отвечать параметр GL_GENERATE_MIPMAP_SGIS. Также стоит заметить, что первым аргументов в функции glTexImage2D() идет значение "target". Так вот при генерации каждой пары шести текстур нужен разный параметр target.

У первых двух он равен GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB.
У вторых двух он равен GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB
У третьих двух он равен GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB

А теперь весь процесс генерации CubeMap:

После того как OpenGL получил все необходимые сведенья о будущей CubeMap текстуре, он будет ждать от вас дальнейших не менее корректных действий. Процесс инициализации всего, что нам было нужно уже закончен. А что идет после этого? Правильно, после этого или программа вылетает с ошибкой, или программа переходит в цикл обработки сообщений.

Если все прошло успешно, то давайте говорить о том, как заполнить CubeMap данными.

Фишка CubeMap'а заключается в том, что путем получения всех шести текстур, OpenGL может генерировать текстурные координаты для любого объекта, который будет использовать CubeMap. Так как получить эти шесть текстур?

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

Чтобы запечатлеть все шесть изображений можно воспользоваться известным методом под названием "рендер в текстуру". Суть его состоит в том, что мы рисуем нашу сцену в маленькую текстуру (допустим 256x256), а затем снимаем полученное изображение и записываем его в видеопамять. Для того чтобы рендер в текстуру имел силу нужно установить новый ViewPort, который будет равен размеру CubeMap текстуры. Также желательно делать сдвиг ViewPort'а, так как в противном случае на текстурах начинают появляться нежелательные артефакты, а исправно будет работать только полноэкранный режим. Затем устанавливаем перспективу. Желательно zNear в параметрах перспективы делать больше единицы.

Затем мы пробегаемся по всем шести текстурам и заполняем их.

А делается это так:
1. Чистим буфер цвета и буфер глубины (glClear).
2. Устанавливаем единичную матрицу (glLoadIdentity).
3. Затем мы должны выполнить повороты камеры во все шесть направлений. Еще раз повторю снизу, сверху, слева, справа, впереди, сзади. Делается это обычным glRotate(). Сразу же нужно перенестись в точку соответствующую центру куба.
4. Рисуем ВСЮ сцену.
5. Активизируем работу с CubeMap'ами glEnable ( GL_TEXTURE_CUBE_MAP_ARB ). Затем нужно сделать текстурный идентификатор CubeMap'а активным через glBindTexture(). Снимаем все данные с frame buffer'а и заносим их в видеопамять активной текстуры через glCopyTexSubImage2D(). Заканчиваем работу с CubeMap'ами вызвав glDisable ( GL_TEXTURE_CUBE_MAP_ARB ).
6. Восстанавливаем перспективу для камеры.

Данные получены и OpenGL готов к дальнейшей работе.

Для того чтобы нарисовать наш CubeMap, нужно воспользоваться одним из двух способов генерации текстурных координат.

Первый способ это Reflection map (карта отражения). Прекрасно подходит для создания эффекта окружения (Environment mapping). Другими словами аля GL_SPHERE_MAP, но только жутко продвинутый вариант. Второй способ это Normal map (карта нормали). Более строгий вариант Reflection map. В данном случае будет обычное отражение без эффекта искажения.

При генерации текстурных координат OpenGL использует специальные s, t и r текстурные координаты. Которые в свою очередь обрабатываются программой как векторы направления (direction vector), которые берут начало в центре куба. То есть другими словами каждая модель, которая будет использовать Cube Map представляется OpenGL как некий куб из центра, которого идут вектора направления rx, ry и rz. Далее OpenGL использует выражение для нахождения текстурных координат:

Значения s и t это есть те самые текстурные координаты которые нужно посчитать. Значение sc, tc и ma берется по таблице:

major axis
direction
targetsctcma
+rx GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT -rz -ry rx
-rx GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT +rz -ry rx
+ry GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT +rx +rz ry
-ry GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT +rx -rz ry
+rz GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT +rx -ry rz
-rz GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT -rx -ry rz

То есть для каждого
POSITIVE_X, NEGATIVE_X,
POSITIVE_Y, NEGATIVE_Y,
POSITIVE_Z, NEGATIVE_Z
берется выражение и считаются текстурные координаты.

Стоит заметить, что при рисовании CubeMap'а нужно немного порыться в их текстурных координатах. Если оставить "все как есть", то наша сфера (в примере к этой статье на сферу накладывается CubeMap) будет похожа на спрайт все время поворачивающийся к камере. Но мы проделывали такие усилия не для того, чтобы создать спрайт таким извращенским методом. Поэтому будем добиваться своего. А чтобы этого добиться, нужно получить матрицу модели, транспонировать ее и поместить в текстурную матрицу для текстурных координат нашей сферы, делается это через glLoadMatrixf().

Вот что получилось:

Изображение

Более подробно об использовании CubeMap'ов можно узнать из примера прилагаемого к этой статье. Все как обычно, VC++7.0, glut приложение. Также пример базируется на моей предыдущей статье Вершинное освещение совместно с LightMaps. Но объектов на сцене теперь четыре. Текстуры взяты из UT2003.

Ну вот и все. Пора закругляться.
Если есть комментарии, пишите
Всем спасибо за внимание.

English

Env cubemap.jpg


Чтобы движок Source правильно показывал многочисленные отражающие материалы, они должны быть объединены с внешними данными. Эти данные хранятся в виде карты-куба (cubemap), то есть кубической текстуры, которая представляет собой трехмерное изображение определенной области. Для этого движок Source использует точечные сущности env_cubemap в качестве образцов, с помощью которых создает текстуры и сохраняет их в файл с расширением .bsp. При обработке зеркальных и других окружающих материалов он использует кубы для получения более точного окружения. Другими словами, куб создаёт текстуры, которые будут моделировать отражающую поверхность.

Note.jpg
Примечание: Для создания карты-куба (cubemap) в Counter-Strike: Global Offensive в параметрах запуска игры необходимо добавлять -insecure. Note.jpg
Примечание: Portal 2 и Team Fortress 2 имеют проблемы с построением кубов. Они описаны в конце статьи.

Contents

  • 1 Размещение
  • 2 Построение кубов
    • 2.1 HDR
    • 2.2 Игры Team Fortress 2 / Source 2012+
    • 2.3 Кубы после обновления SteamPipe
    • 2.4 Source Filmmaker
    • 2.5 Portal 2
  • 3 Тестирование
  • 4 Производительность
  • 5 Баги
  • 6 См. также

Размещение

Чтобы обозначить область, которую охватит куб, просто вставьте на карту сущность env_cubemap. Когда карта скомпилируется программой VBSP, поверхности геометрии мира автоматически свяжут себя с ближайшей env_cubemap, и будут использовать рожденный ей куб. Поверхности связывают себя с ближайшей env_cubemap (однако, в Свойствах куба можно задать любую привязываемую поверхность); движущиеся сущности будут автоматически выбирать нужный куб. Важно, чтобы положение env_cubemap было эстетичным и производительным.

Карты-кубы используются для разных ситуаций, и должны располагаться соответствующе. Одни нужны для отображения статической геометрии мира. Другие - для отображения сущностей игроков, включая ботов (NPC). Третьи нужны для отображения всевозможных неигровых энтить. Каждой из этих целей соответствует оптимальное расположение env_cubemap, дабы обеспечить максимальную отдачу. Вот несколько простых эвристических правил, которым необходимо следовать:

  • Если куб предназначен для NPC или игрока, env_cubemap следует размещать на уровне головы (как правило, 64 единицы программы Hammer). Таким образом, она наиболее точно передаст мир с точки зрения стоящего.
  • Если куб предназначен для статичной геометрии мира, то справедливым, как правило, будет расстояние в 16 единиц от всех поверхностей.
  • В каждой зоне с визуальным контрастом должна быть своя карта-куб. Коридор с ярко-желтым светом требует своей env_cubemap, особенно, если она расположена рядом с комнатой, где горит тускло-голубой свет. Если в одном их этих мест не будет env_cubemap, то отражения и блики на сущностях и геометрии будут моделироваться неправильно.

Построение кубов

Когда карта будет скомпилирована и освещена VBSP и VRAD (соответственно), можно создавать кубы. После загрузки карты, введите в консоли команду buildcubemaps . Начнётся процесс построения, который займёт некоторое время, в течение которого вы сможете увидеть каждую из шести граней кубов. После завершения, карту или игру нужно перезагрузить, чтобы кубы правильно применились ко всем поверхностям.

Note.jpg
Note: До запуска команды buildcubemaps , установите значение mat_specular в 0, иначе это приведёт к неправильным отражениям! Note.jpg
Note: Созданные кубы сохраняются в файл bsp, который помещается в папку игры, а не в то место, где вы скомпилировали карту. Note.jpg
Note: Если после создания кубов вы переименуете файл bsp, то их нужно строить заново.

Если карта скомпилирована с включённой опцией HDR в программе VRAD, кубы необходимо построить как в режиме HDR, так и LDR (не-HDR). Создание кубов только в одном из этих режимов будет означать, что кубы не представлены в другом режиме. Информацию о том, как строить кубы под HDR см. в Основах освещения HDR.

Кубы должны быть построены для карт LDR и HDR. Предположим, вы уже находитесь в режиме HDR и загрузили свежескомпилированную карту (в программе VRAD должен быть включен параметр ' -both '). Перейдите в консоль и выполните следующие команды:

Note.jpg
Note: Это не относится к CS:GO, т.к. HDR не может быть отключен.

Игры Team Fortress 2 / Source 2012+

Team Fortress 2 по-умолчанию не применяет кубы к отражающим поверхностям. (Аналогичные проблемы также имеются и в некоторых установках Portal 2, когда кубы просто не появляются). Все текстуры светятся чёрно-розовыми шашечками. Если вы построите кубы, и один из них увидит большую сверкающую поверхность, то зафиксирует её в 6 изображениях. Это значит, что некоторые объекты будут бликовать так, будто рядом с ними находится розовая и чёрная сверкающая текстура. Для решения проблемы, кубы нужно строить с отключенной зеркальностью. Чтобы построить кубы для карты TF2, загрузите её через "Create Server". Затем, откройте консоль и выполните следующие команды:

Создание кубов только для LDR или HDR:

При создании кубов для HDR требуется, чтобы вы повторили эти шаги после загрузки карты с включённым HDR.

Note.jpg
Note: Если при постройке кубов игра вылетает, то скорее всего вы установили слишком низкое разрешение экрана. Убедитесь, что высота и ширина экрана игры более 512 пикселей. Это означает, что минимальное стандартное разрешение должно составлять 800X600. Разрешение можно поменять на кладке Видео в меню игры Параметры. Note.jpg
Note: Если после построения кубов вы переименуете файл .bsp, они перестанут работать и куб неба сбросится в стандартные настройки. Каждый раз после переименования карты кубы нужно создавать заново. Однако, в этом случае старые кубы не удаляются, что приводит к разрастанию размера файла. Если вы желаете избежать проблем с загрузкой вашей карты, не переименовывайте её после компиляции. Note.jpg
Note: В некоторых играх на многопользовательских картах перед запуском команды buildcubemaps потребуется включить читы ( sv_cheats 1 ).

Кубы после обновления SteamPipe

В связи с обновлением SteamPipe, возникла проблема построения кубов без видимых результатов. Согласно ветке форума, проблему можно решить следующим образом:

Bug.jpg
Баг: Редактирование непосредственно файла карты имеет неприятные последствия! Включая глюки графики и потери теней от статичных моделей! данный метод может предотвратить это.

  1. Поместите энтити env_cubemap в доступных местах вашей карты, и скомпилируйте её. Важно: Название карты должно быть не длиннее 30 символов, (включая расширение .bsp), иначе .bsp не запишется! Также, не меняйте название карты после создания кубов, иначе они не будут работать!
  2. Возьмите ваш любимый редактор файлов .bsp (Например, VIDE или Pakrat. Работа с этими инструментами не входит в данную статью.), и загрузите ваш .bsp.
  3. Удалите все файлы "Texture" или "Texture (HDR) ". (Не файлы "Material", только .vtf!)
  4. Сохраните отредактированный .bsp.
  5. Скопируйте эту карту назад в каталог карт вашей игры.
  6. Откройте консоль и введите: "map -название карты-". (В моём случае, "ttt_mars_colony_cubemap".)
  7. В игре, снова откройте консоль и введите это: "mat_specular 0" и "buildcubemaps".
  8. Подождите, пока построятся кубы, и снова включите зеркальность с помощью "mat_specular 1", а затем перезагрузите ваши материалы командой "mat_reloadallmaterials".

Source Filmmaker

Сегодня создание кубов в Source Filmmaker не работает, и отрисовывает только одну поверхность с одним кубом. Чтобы правильно создавать кубы в Source Filmmaker, скопируйте файл карты вместе с принадлежностями (текстурами, моделями, и т.д.) в Alien Swarm. Движок не требует перекомпиляции карты, достаточно её перенести. Загрузите вашу карту в Alien Swarm и введите в консоль команду "buildcubemaps". После отрисовки поверхностей, ваша карта будет содержать кубы, которые можно скопировать обратно в Source Filmmaker. Это работает только с новыми версиями карт, при загрузке карт из TF2 или Garry's Mod игра будет вылетать.

Откройте 'не скопированную' версию в Хаммер и постройте её с помощью дополнительного режима поиска 'чужих' (относительных) путей содержимого sfm. todo: абсолютные пути.

Пример для 'общего' расположения:

Portal 2

Если вы хотите создавать кубы для карт, расположенных в "Portal 2/portal2/maps" (Hammer копирует карты туда по-умолчанию), Portal 2 вылетит, потому что ищет карты в разделе "portal2_dlc2/maps". Так что, если вы хотите избежать сбоя, скопируйте вашу карту в "Portal 2/portal2_dlc2/maps" (или каталог карт вашего мода), перезагрузите её и создайте кубы снова. Это должно работать.

Тестирование

Лучше всего карты-кубы тестировать с помощью консольной команды impulse 81 . Введите её в консоль. Затем, впишите give weapon_cubemap.

Note.jpg
Note: Можно привязать эти команды на разные клавиши, чтобы не вводить их каждый раз.

Это заменит текущую модель оружия с "cubemap weapon" на несколько сфер, каждая со своей отражающей поверхностью. Путешествуя по карте, вы увидите, где и как применяются кубы в пространстве, а также, на сколько верно куб описывает зону освещения и цвета.

Note.jpg
Note: Вы можете скопировать cubemap weapon из Steam\SteamApps\common\Half-Life 2\hl2\models\shadertest\envballs.mdl и добавить в свой мод, если он этого не имеет. Note.jpg
Note: Если перекомпилировать карту без перезапуска игры, кубы от предыдущей версии останутся в кэше, создавая иллюзию, что их не надо создавать заново. Этих кубов нет в карте, что покажет запуск карты на другом компьютере или её перезагрузка. Каждая новая компиляция стирает упакованные материалы, включая кубы.

Производительность

Сущность env_cubemap позволяет задавать разрешение связываемой с ней текстуры. С одной стороны, чем больше разрешение, тем точнее и “резче” результат, но с другой – сильнее расход памяти. В основном, кубы должны иметь разрешение по умолчанию (32x32 пикселя для каждой поверхности). Обычно это дает удовлетворительный результат. Некоторые исключения возможны для областей с высокой отражающей способностью или, например, для детализации определенных частей действия.

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

Чтобы определить вес кубов в той или иной зоне, загляните в категорию World Rendering с помощью консольной команды +showbudget . Если категория регистрирует необычайно высокую загрузку, значит в зоне слишком много кубов. Простой сценарий решения проблемы – скрыть все кубы в программе Hammer, перекомпилировать и запустить карту. Если производительность стала заметно лучше, значит надо уменьшить плотность или разрешение кубов. Наконец, проверить загрузку можно, отключая кубы командой mat_specular 0 , но это требует подтверждения.

Note.jpg
Note: Для некоторых игр (L4D " src="https://developer.valvesoftware.com/w/images/c/c0/L4D-16px.jpg" width="16" height="16" data-file-width="16" data-file-height="16" />
/L4D2 " src="https://developer.valvesoftware.com/w/images/9/93/L4D2-16px.jpg" width="16" height="16" data-file-width="16" data-file-height="16" />
) после построения кубов требуется полный перезапуск игры. Bug.jpg
Bug: В Team Fortress 2 по-умолчанию нет кубов, поэтому все отражающие поверхности будут показывать отсутствующий материал текстур, напоминающих чёрно-розовые шашечки. Во избежание проблемы, создавайте кубы вручную. Bug.jpg
Bug: Создание кубов в Portal 2 вызовет ошибку игры, если карта будет загружаться из папки по-умолчанию common/portal 2/portal2/maps. Этот сбой возникнет при перезапуске карты после создания кубов. Во избежание ошибки, в строке 'Place compiled maps' закладки Build Programs впишите 'common/portal 2/portal2_dlc2/maps', затем перекомпилируйте карту, после чего создайте кубы.

Моды для Скайрим и справочные материалы для модмейкеров.

  • Главная
    • Группа "ГЕБО"
    • Поддержать сайт
  • Моды
    • В разработке
    • Броня и одежда
    • Дома и локации
    • Геймплей
    • Квесты
    • Украшения
    • Оружие
    • Спутники
    • Разное
  • Статьи
    • Инструментарий
    • Уроки
      • Creation Kit
      • Моделирование
      • Текстурирование
  • Форум
    • Последнее
  • Скриншоты
    • Самые новые
    • Самые популярные
    • По оценкам
    • Комментарии галереи
  • Пользователи
    • STEAM
  • Правила
  • Главная >
  • Статьи >
  • Уроки >
  • Текстурирование >
  • Как создать текстурную карту Cube Map

В Данстаре все спокойно

Комментарии галереи

Дебют.
EVA последний мод
Не смотри в глаза вампиру.
так бывает
так бывает
Silence

На Форуме

С Днём Великой Победы!
Уж давно отгремела война, Снова синее небо над нами. Только память о прошлом жива, Эту боль не забыть нам с годами. Не забыть молодых тех ребят, Что победу для нас приближали. Не имея дороги назад, Ли.
Вопросы по Creation Kit
, давным давно уже не заходил в редактор, могу лишь сделать предположения. Установлен ли ENB для игры и/или MSI Afterburner или аналогичные мониторинги? ЕНБ поставил давненько на кой-то черт, удалить?
Предложения принимаются
Ай , по старости как-то запутался, куда и где писАть (( Есть предложение (идея) на создание Вами мода ! Интересует ? По дружески, рухнул мой HDD с ним улетела старая версия на мод "Непослушная Нал" мо.
Вопросы по моделированию
Здравствуйте ! У меня вопрос по поводу установки nif плагина для Maya 2016 чтобы с его помощью открыть файлы игры Skyrim. Описание путей установки есть,я перепробовал их все но ничего не получается,пл.
Черные квадраты в СК и игре
Здравствуйте ,помогите пожалуйста решить эту проблему с черными квадратами . Может подскажите из за чего может быть .

Как создать текстурную карту Cube Map


Итак здравствуйте, сегодня мы научимся создавать так называемую текстурную карту
Cube Map при помощи таких программ как Photoshop dds плагина и утилиты Pano2VR.

Вот как выглядит текстурная карта Cube Map на модели оружия
в совокупности вместе с другими типами карт _s _n и _m и т.д.

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


Cube Map - для меня это обычная картинка которая используется в игре скайрим в качестве имитации отражения, это карта назначается в утилите Nif Scope в слот шейдера под номером 5, узнать карту можно как правило по окончанию в имени файла, модмейкеры обычно добавляют к концу названия текстуры буквы _e или _c означающие соответственно _E nvironment, либо _C ube Map.

В 3d графике Cube map называют ещё просто как HDRI, картинка Cube Map будет показано в отражении если её выбрать, при этом используя лишь карту цвета _D iffuse и _E nvironment мы получим вот такой результат ↓ по умолчанию если вы будите использовать лишь одну карту _E nvironment вместе с _D iffuse влияние карты _E nvironment будет распространяться на всю поверхность 3d модели с полной силой.

Ведь как я уже говорил ранее карта _E nvironment это то, что будет отражаться, а не где и как, сила отражение и область отражение указывается с помощью уже других карт, таких к примеру как _S pecular но это уже тема отдельного урока, сейчас же просто предлагаю вам просмотреть как 3d объект молота будет выглядеть если мы добавим поочередно и другие текстурные карты, вот как выглядит оружие после указания карты _N ormap Map:

Видите на сколько сильно изменился внешний вид модели ? карта _N ormap Map сделала текстуру более рельефной а альфа канал карты в _N ormap Map определил силу отражения _E nvironment.

А вот и заключительная часть применяем и карту _m в слот под номером 6 и получаем:

Карта _m по моему является маской по типу масок в фотошопе, она определяет на место отображения карты _E nvironment а также возможно и её силу, если я не ошибаюсь ?

На этом пожалуй с описанием карты _E nvironment я закончу, помните что уже сейчас даже не создав своей собственной Cube Map вы можете использовать стандартные доступные карты окружения из архива Textures.bsa папки CubeMaps.

Попробуйте ! просто извлеките папку с картами CubeMaps из архива Textures.bsa утилитой FAM, откройте любую модель из игры в утилите Nif Scope и назначьте карту Cube Map в слот 5 так как показано на изображении снизу, выберите карту ore_gold_e .

Возможно вы уже знали что из себя представляет карта Cube Map, так или иначе теперь нам нужно не теряя времени перейти к созданию нашей первой текстурной карты данного типа.

1. Сперва найдите в сети любое изображение панораму в расширении .hdri и разрешении 3000 Х 1500 px или 2048 х 1024 px соответственно - которое мы переделаем в Cube Map - просто напишите в поиске Google - HDRI карты , далее скачайте утилиту Pano2VR установите её себе на компьютер и запустите Pano2VR.


В программу Pano2VR переместите HDRI панораму в окно проекта так как показано на изображении снизу ↓ затем кликните по кнопке изменить и в окне Преобразование текстуры смените тип преобразования на горизонтальный стрип.

Далее смените формат на jpg передвиньте ползунок качества картинки до максимума 100 и нажмите по кнопке Process этим действием вы сгенерируете карту в нужном виде.

Теперь нам нужно открыть полученную картинку в программе Photoshop изменить её разрешение на 768 x 126 px и сохранить в расширении dds которое понимает игра скайрим с указанными параметрами, посмотрите параметры на скриншоте снизу ↓

На этом пожалуй все ! поздравляю ! вы только что научились создавать свои собственные текстурные карты окружения _e _ c для игры скайрим, теперь в заключении нам остается лишь открыть утилиту Nif Scope выбрать нужный 3d объект для теста и назначить для него нашу карту на слот 5 шейдера, вот что получилось у меня в итоге ↓

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

Расставляем cubemap'ы - создаем правильные отражения

Cubemaps






Многие зеркальные и environment материалы берут информацию о сових отражениях в игре из внешних источников. Этими внешними источниками могут быть Cubemap`ы - текстуры, которые представляют собой 360-градусный рендеринг окружающей местности. Используя Cubemap`ы, зеркальные и environment материалы будут более точно отражать окружающие пространства. Ставить Cubemap`ы и располагать их в пространстве очень просто, но очень важно расположить их правильно, как в эстетическом плане, так и в плане производительности .

Расположение

Чтобы поставить Cubemap`ы на карте, нужно использовать env_cubemap ентитю. Когда карта откомпилирована с помощью VBSP, все видимые фэйсы автоматически связывают себя с ближайшими Cubemap`ами.

Нужно обратить внимание на то, что Cubemap`ы могут выполнять несколько задач в зависимости от того, как они расположены на карте. Некоторые Cubemap`ы будут использоваться для отражения окружающего пространства на геометрии карты. Другие Cubemap`ы будут использоваться для отражения окружающего пространства на различных ентитях, таких как NPC или сам игрок. Располагая Cubemap`ы на карте, нужно следовать нескольким простым правилам, чтобы получить от них максимальную пользу:

Если Cubemap`ы предназначены для NPC или игрока, то они должны быть расположены на высоте в 64 юнита, чтобы лучше всего отражать мир для находящихся рядом объектов.

Если Cubemap`ы предназначены для отражения окружающего пространства на геометрии, то они должны быть удалены на 16 юнитов от всех брашей.

Cubemap`ы должны быть размещены во всех зонах с визуальным контрастом. У коридора с ярким жёлтым светом должен быть свой Cubemap, особенно, если рядом будет комната с темно-синим светом. Без двух отдельных Cubemap`ов оражения и зеркальные эффекты будут отображаться неправильно на ентитях и геометрии карты.

Компиляция

Cubemap`ы могут быть построены только после компиляции карты VBSP`ом и VRAD`ом (соответственно). Запустите вашу карту и включите какой-нибудь из графиков(showbudget, net_graph), затем наберите в консоли buildcubemaps для построения Cubemap`ов . В верхнем левом углу вы сможете увидеть каждую грань Cubemap`а(по 6 на один Cubemap) во время рендеринга. В зависимости от вашей видеокарты, драйвера и сложности вашей карты процесс может занять от пары секунд до нескольких минут. После построения Cubemap`ов должна быть перезапущена, чтобы они правильно были применены ко всем граням объектов.

Тестирование

Правильность применения Cubemap`ов лучше всего проверять с помощью консольной команды impulse 81. Она заменяет текущую модель оружия на несколько сфер с различной отражающей способностью. Двигаясь по карте, вы сможете увидеть, какие Cubemap`ы поставлены в данную точку, правильно ли они применены. Это лучший способ проверить правильность применения Cubemap`ов.

Производительность

Ентитя env_cubemap позволяет пользователю выбирать размер отображаемой текстуры. С одной стороны увеличение текстуры делает результаты работы Cubemap`ов более лучшими, чем обычно, но с другой - увеличивает требования к текстурной памяти видеокарты. Для большинства Cubemap`ов следует использовать настройки по умолчанию относительно текстур. Некоторые исключения возможны для карт с большим количеством зеркальных поверхностей или очень детализированных карт.

Следует также отметить, что использование большого числа Cubemap`ов на маленьких пространствах может привести к визуальному несоответствию отражений. Для пространств с большим числом зеркальных поверхностей обычно рекомендуется ставить по одному Cubemap`у на центр фейса и всё. Это поможет избежать возникновения различных несостыковок и трещин(. ) во время движения в игре.

Чтобы определить, насколько загружают систему Cubemap`ы, посмотрите в графу World Rendering, набрав в консоли +showbudget. Если эта категория расходует на себя слишком много системных ресурсов, возможно, виной этому большое количество Cubemap`ов на карте. Чтобы быть точно уверенным в этом, уберите в Хаммере все Cubemap`ы и откомпилируйте карту заново, если производительность в игре заметно увеличится, то вам следует уменьшить количество Cubemap`ов и/или их разрешение.

Программа позволяет легко и быстро создавать текстуры CubeMap для Fallout 4. (В игровых архивах эти файлы можно найти по пути Textures\Shared). Что нового: оптимизирован код программы (линейная функция заменена циклом).

Эти текстуры имеют вид довольно экзотического файла: 6-тистраничного DDS. Открывать его могут без проблем большинство просмотровщиков изображений, многие из них могут даже листать страницы в них (XnViewer и IrfanVeiw точно могут, другими не пробовал). Но сохранить и\или изменить все проги могут только одну страницу.
Программа Fallout 4 CubeMap Creator сможет объединить 6 обычных DDS-файлов в один многостраничный.

////ИСПОЛЬЗОВАНИЕ\\\

  1. Поместить 6 исходных файлов в корень программы
  2. Переименовать исходные файлы следующим образом: 1-я стр.=1.dds; 2-я стр.=2.dds; 3-я стр.=3.dds; 4-я=4.dds; 5-я = 5.dds; 6-я стр.=6.dds
  3. Запустить программу 2хЛКМ
  4. Если все было сделано правильно, то в папке появятся файл out.dds, его можно переименовать нужным именем, и использовать в игре.


ВНИМАНИЕ. - Все 6 файлов должны иметь одинаковые параметры! Такие как тип DDS, разрешение, глубину цвета, наличие\отсутствие альфа-канала и прочие. Программа берет все параметры из первого файла, и если последующие будут отличными от первого, то другие страницы будут отображаться не правильно, или не отображаться вовсе.

В игре все многостраничные DDS имеют следующие параметры:
Тип DDS: ARGB8888 (A8R8G8B8)
Разрешение: 128x128
Глубина цвета: 32 бит
Файлы с другими параметрами в игре могут не работать!


В Skyrim параметры должны быть другими:
Тип DDS: DX1
Разрешение: от 32х32 до 1024х1024
Глубина цвета: 32 бит


Программа может также создавать кубмапы для любой другой игры, но, разумеется, параметры исходных DDS должны соответствовать параметрам DDS игры.

Примечание: если при запуске программы в ее папке не будет 6-ти DDS-файлов с нужными названиями, то программа выдаст сообщение с инструкцией использования. Сообщение может быть на русском и английском. На каком из языков выводить это сообщение, программа определяет по стандартной системной раскладке клавиатуры.


Исходник программы (на языке AutoIt) лежит в папке Data.
Репозиторий на GitHub: https://github.com/gmh4589/Cube-map-creator


PS: Сделал эту прогу в процессе создания мода Pip-Boy Skin Pack

Читайте также: