Как сделать cubemap в фотошопе

Обновлено: 06.07.2024

Короткий и простой урок о том, как нарисовать в Photoshop 3D-куб со сторонами из фотографий. Несмотря на простоту, он поможет понять начинающем пользователям программы основы 3D построения в Photoshop, построение элементов и придание поверхностям текстур.

Для создания куба я использовал фотографии из этого набора.

Для начала, нам придётся подготовить фотографии - форма фото, как правило, прямоугольная, необходимо сделать из них квадраты. Эту работу элементарно выполнить с помощью инструмента "Рамка" (Crop Tool), подробнее здесь.

Урок подходит для версии Photoshop CS6 и выше

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

Вот что получилось у меня в итоге:

3D куб со сторонами из фотографий в Photoshop

Давайте начнём. Создаём в Photoshop новый документ размером 640 на 640 пикселей на белом фоне. Идём по вкладке главного меню 3D --> Новая сетка из слоя --> Набор сетки --> Куб (3D --> New Mesh From Layer --> Mesh Preset --> Cube):

3d-kub

Photoshop откроет окно, где предложит Вам переключиться на 3D-рабочую среду, переключаем. Если такого окна не появляется, то переключаем вручную с помощью выпадающего меню в верхнем правом углу, подробнее об управлении рабочими средами Photoshop здесь.

Документ примет следующий вид, это куб, точно повёрнутый к нам одной своей плоскостью:

3d-kub

Нам надо его несколько развернуть. На панели инструментов, расположенной слева, выбираем инструмент "Перемещение" (Move Tool), или для выбора нажмите клавишу V. На панели параметров, справа от центра, появятся инструменты позиционирования. Берём инструмент поворота и разворачиваем куб, чтобы было видно, что это 3D куб:

3d-kub

Куб у нас есть. В панели 3D нажимаем на расположенную вверху кнопку "Фильтр по материалам", затем на вкладку "Материал_спереди" (Front_Material), затем в панели свойств нажимаем на кнопку, расположенную справа от "Рассеивание" (Diffuse):

3d-kub

Открывается меню, где выбираем "Заменить текстуру" (Replace Texture):

3d-kub-so-storonami-iz-fotografiy-5.jpg

После чего открывается окно, где надо найти файл с фотографией, которую Вы хотите разместить на кубе, и два раза кликните по файлу для его выбора:

выбор фото для 3D куба

Окно автоматически закроется, а на передней стороне куба сразу отобразится это изображение:

фото на 3d кубе

Снова переходим на панель 3D и на это раз кликаем по вкладке "Материал_слева" (Left_Material), далее на панели свойств так же кликаем по кнопке, расположенной справа от "Рассеивание" и выбираем следующую фотку. Фото добавится на левую грань.

Сделайте то же с верхней гранью (Материал_сверху или Top_Material). Результат:

3d-kub

Теперь необходимо создать фон. Переходим на панель слоёв, под 3D слоем создаём новый слой, заливаем белым цветом и добавляем к слою стиль "Наложение градиента":

3d-kub

Осталось отрегулировать освещение. В панели слоёв кликните по 3D-слою, перейдите в панель 3D, вверху панели кликните по кнопке фильтра "Освежение". Возьмите инструмент "Перемещение", в документе появится регулировка положения света, выставьте нужное положение и добавьте сглаживание тени в панели свойств:

3d-kub

3d-kub

Теперь надо визуализировать изображение (сделать рендеринг), для чего нажмите комбинацию клавиш Ctrl+Alt+Shift+R.

Вот так выглядит процесс выполнения рендаринга:

3d-kub

После чего сохраняем готовую фотографию, либо Файл --> Сохранить как, либо сохранить для web.

cubemap | Как правильно разобрать CubeMap?

Вот у меня есть собранная кубическая карта (без низа - самой крайней правой части):

Как правильно её разобрать на составляющие (positive/negative X, Y, Z). Может есть какое-то правило разбора карты (типа того, что "повернуть на 90', отразить, перевернуть. "). А то уже долго мучаюсь :)

Карта есть, осталось найти куб :)
Sergio666
где вопрос?

Adler
Вопрос в 0 :)

Как этот куб разобрать. То есть какая ориентация должна быть у граней. Проще говоря - где верх/низ, право/лево у каждой части? Есть ли какое-то правило кроме метода тыка?

Sergio666
>Проще говоря - где верх/низ, право/лево у каждой части?
В центре верх. По бокам бока, снизу пусто.
"Всё относительно"(C) эйнштейн

Sergio666
Действительно, не понятно, в чём у тебя проблема. Возьми фотошоп, да приведи её к такому виду, какой тебе будет удобен. Ты-же сам визуально видишь, где у неё какая ось.

BUzer
Adler
Автор темы, вероятно, имеет ввиду разложение и ориентацию фэйсов кубической текстуры (той самой, которая аппаратная)

Sergio666
На самом деле, возьми плагин от nVidia или MS для Photoshop`а, который DDS грузит.
Посмотри готовую cube-текстуру и сделай также (делов на 30 минут)
Кроме, того, где-то в доках об этом наверняка написано ;)

вопрос нихрена не праздный. Когда я в свое время интерисовался по какой схеме располагаются стороны мне так никто толком и не ответил.
Могу сказать что существует минимум три варианта расположения сторон.
1. DDS Cubemap - там уже все стороны повернуты правильно, остается только загрузить в видеопамять
2. 3DS Cubemap - одну сторону надо повернуть на 270 градусов, одну отразить слева направо и одну повернуть на 90 градусов.
3. Не знаю что это за формат, но у Борескова в примерах частенько встречаются дискретные кубемапы, которые не попадают ни под один из вышеперечисленных.

Demiurg-HG
>Автор темы, вероятно, имеет ввиду разложение и ориентацию фэйсов кубической текстуры (той самой, которая аппаратная)
Хоть кто-то меня понял! :))
>На самом деле, возьми плагин от nVidia или MS для Photoshop`а, который DDS грузит.
>Посмотри готовую cube-текстуру и сделай также (делов на 30 минут)
А как понять, где там какая строна? :)
>Кроме, того, где-то в доках об этом наверняка написано ;)
Вот это уже интересней. Только вот где?

g-cont
То есть, если разобраться с форматом DDS - то проблемм не будет уже

Sergio666
ты же кубемап через сэмплер используешь. А там чтобы выборку сделат - нужен 3х мерный вектор. Грань кубемапы выбирается по наибольшей из 3х координат по модулую и в зависимости от знака выбирается направление POSITIVE/NEGATIVE. А при загрузке текстуры указываешь (по крайней мере в GL), какое изображение, какой грани соответствует.

Вот отсюда и пляши: если тебе надо, чтобы по вектору выбиралась самая верхняя граниь из рисунка - грузи ее как GL_TEXTURE_CUBE_MAP_POSITIVE_X

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






Многие зеркальные и 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`ов и/или их разрешение.

Войти через uID


CubeMap.exe - утилита для преобразования текстур из цилиндрической проекции в кубическую.
Optimizer.exe - утилита для удаления "пустых" тайлов из подготовленной с помощью CubeMap кубической текстуры.
Glue.exe - утилита для склеивания тайлов в единый raw-файл.
default.ccf - файл конфигурации по умолчанию для всех утилит.
readme.txt - инструкция.

Файл конфигурации и командная строка

Все параметры программы задаются в файле default.ccf в папке программы. Он представляет собой простой текстовый файл, содержащий набор строк вида

string - строка символов без кавычек и пробелов;
int - целое число;
float - вещественное число;
bool - двоичное значение: true или 1 - истина, false или 0 - ложь.

Все утилиты могут работать с любым другим файлом конфигурации, если передать его как первый параметр командной строки:


CubeMap myconfig.ccf
Optimizer myconfig.ccf
Glue myconfig.ccf

В этом случае файл default.ccf игнорируется. Рекомендуется ассоциировать в системе файлы с расширением .ccf с программой CubeMap.exe , тогда щелчок по файлу *.ccf автоматически запустит CubeMap с параметрами из этого файла. Файлы *.ccf можно рассматривать как скрипты для обработки текстур программой CubeMap. Расширение .ccf можно заменить на любое другое, таким образом можно каждую из утилит ассоциировать со своим типом файлов.

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


CubeMap [myconfig.ccf] [-i InputFile] [-o OutFolder] [-h]
Optimizer [myconfig.ccf] [-o OutFolder] [-h]
Glue [myconfig.ccf] [-i InputFolder] [-o OutFile] [-h]

Опция -h выводит подсказку по параметрам командной строки.

Структура файлов в SpaceEngine

Путь к исходной цилиндрической текстуре задаётся параметром InputFile , и не должен содержать пробелы. Путь к выходной папке для кубической текстуры задаётся параметром OutFolder , и так же не должен содержать пробелы. Папка должна существовать. Внутри неё автоматически создаются папки с именами neg_x, neg_y, neg_z, pos_x, pos_y, pos_z .


Исходная цилиндрическая текстура должна быть в формате raw . Формат raw - это просто двумерный массив пикселей, формат которого описывается следующими параметрами конфига:

InputWidth - ширина входного изображения
InputHeight - высота входного изображения
InputChannels - количество каналов (Grayscale - 1, RGB - 3, RGBA - 4 и т.д.)
Input16bit - разрядность: 16 или 8 бит на канал
InputByteSwap - для 16-битного: обратный порядок байт (MAC)
InputUnsigned - для 16-битного: беззнаковое или знаковое значения
InputLatOffset - сдвиг по долготе, в градусах

Первые два параметра - целые числа, остальные - boolean.

Кубическая текстура представляет собой набор папок и файлов, организованных следующим образом:

Кубическая текстура состоит из 6 граней, названия им даны в соответствии с полуосями системы координат, которые они пересекают. Пусть начало координат в центре планеты. Тогда ось Y проходит через полюса планеты, направлена снизу вверх, т.е. северный полюс - грань pos_y , южный - neg_y . Ось X направлена слева направо, т.е. левая грань - neg_x , правая - pos_x . Ось Z направлена на наблюдателя, т.е. дальняя грань - neg_z , ближняя - pos_z . На исходной цилиндрической текстуре этому соответствует: верхняя граница - северный полюс, нижняя - южный, стык левой и правой границ проходят вертикально через грань neg_x , центральный меридиан проходит вертикально через грань pos_x , центр находится в центре грани pos_x . Развёртка граней кубической текстуры стандартная:


Разрешение грани вычисляется как четверть ширины исходной текстуры, округленной до ближайшей большей степени 2. Т.е. например если разрешение исходной текстуры 86400 х 43200, то разрешение грани будет 32768 х 32768 (131072 / 4).

Каждая грань организована в виде набора тайлов. Разрешение тайла определяется параметром TileWidth и должно быть не больше, чем разрешение грани. Пусть например TileWidth = 512, а разрешение грани 32768. Тогда будет 7 уровней тайлов: Log2(32768 / 512) + 1 = 7. Уровни нумеруются от 0 до 6, номер уровня - первое число в имени файла тайла ( 0_0_0.jpg , . 6_63_63.jpg ). Разрешение каждого уровня последовательно увеличивается в 2 раза, а количество тайлов - в 4. Т.о., будем иметь один тайл 0 уровня ( 0_0_0.jpg ) разрешением 512 х 512, содержащий изображение всей грани; 4 тайла 1 уровня ( 1_0_0.jpg . 1_1_1.jpg ), каждый содержит четверть изображения всей грани общим разрешением 1024 х 1024, т.о. разрешение каждого тайла будет опять 512 х 512; 16 тайлов 2 уровня, и т.д. Для самого детального 6 уровня будет 64*64 = 4096 тайлов, общее разрешение 32768 х 32768. Второе и третье числа в имени файла тайла - индексы по вертикали (v) и горизонтали (u) соответственно, индексация ведется слева-направо сверху-вниз. Пример организации первых трёх уровней (разрешение тайлов 128 x 128):


level 0


level 1


Преобразование цилиндрической текстуры в кубическую осуществляется в несколько этапов. Можно осуществить преобразование только для некоторых граней. Это контролируется следующими параметрами в конфиге (установка параметра в false отключает все этапы для соответствующей грани):


Create_NEG_X true
Create_POS_X true
Create_NEG_Y false
Create_POS_Y false
Create_NEG_Z true
Create_POS_Z true

Выполнение каждого этапа можно отключить, установив соотвестсвующий параметр в конфиге в значение false или 0 (см. ниже).

Рассмотрим все этапы по порядку.

1) Создание базовой цилиндрической текстуры

Для выполнения этой операции в конфиге должно стоять CreateBaseTex true .

SpaceEngine использует базовые цилиндрические текстуры небольшого разрешения для планет, находящихся далеко от камеры. Создание такой текстуры происходит путем простого уменьшения исходной цилиндрической текстуры усреднением пикселей в квадратных блоках. Параметр BaseTexDownSize указывает, во сколько раз уменьшать исходную текстуру, а BaseTexFormat определяет формат файла полученной базовой текстуры.

Базовая текстура должна иметь разрешение 512 х 256. Не используйте большее разрешение (это не имеет смысла!) или разрешение, не являющееся степенью двойки. BaseTexDownSize рассчитывается как ширина исходной текстуры, деленная на 512. Например, если оригинальная текстура имеет разрешение 16384 x 8192, то BaseTexDownSize = 16384/512 = 32. Это даст базовую текстура разрешением 512 х 256. Но если разрешение оригинальной текстуры не является степенью двойки, например 21600 x 10800, установка BaseTexDownSize = 21600/512 = 42 (округленное 42.1875) даст базовую текстуру разрешением 514 х 257. Так что вы должны открыть его в любом графическом редакторе и уменьшить до 512 х 256. Для повышения точности, вы можете использовать BaseTexDownSize 21 (значение вдвое меньше, чем расчитанное), что даст текстуру с разрешением 1028 х 514, а затем уменьшить её до 512 х 256.

2) Создание граней кубической текстуры из цилиндрической

Для выполнения этой операции в конфиге должно стоять DoConvert true .

Преобразование выполняется методом билинейной фильтрации: для получения цвета текущего пикселя на грани куба вычисляются вещественные координаты соответствующей точки на цилиндрической текстуре, и цвет получается линейной интерполяцией из четырех ближайших к этой точке пикселей. Такой метод дает весьма неплохой результат, артефакты могут быть заметны только у самых полюсов. Установка DoublePrecision true немного модифицирует алгоритм: результирующий цвет получается усреднением четырех значений, полученных вышеописанным образом, но с использованием вдвое меньшей сетки. На глаз отличий не заметно.

Программа использует специальный кэш в памяти для хранения участков исходной цилиндрической текстуры. Поэтому возможно преобразование текстуры без полной загрузки её в память. Это актуально для больших текстур, например текстура Земли Blue Marble Next Generation имеет размер в распакованном (raw) виде 86400 х 43200 х 3 = 10.4 Гб. Размер кэша задаётся параметром MaxMem (в Мб). В текущей версии (1.03) установка большого значения (больше 512 Мб) может снизить скорость работы из-за долгого поиска в кэше. Оптимальное значение лежит в диапазоне 64-512 Мб, и слабо зависит от размера текстуры.

Кэш может быть двух видов - Line и Quad . Выбор типа осуществляется параметрами MethodSide для боковых граней ( neg_x, neg_z, pos_x, pos_z ) и MethodPolar для полярных граней ( neg_y, pos_y ), возможные значения параметров - Line и Quad (без кавычек). Режим Line производит выборку из входного файла кусками строк некоторой длины, режим Quad - квадратными областями. По-идее, Quad должен быть более эффективен для полярных граней из-за специфики отображения строк кубической текстуры на цилиндрическую, однако в текущей версии (1.03) для большинства случаев разница не заметна или даже наоборот, Quad кэш работает медленнее, из-за более частого обращения к диску.

В нашем примере функция преобразования создаёт в папке с именем грани временный файл в формате raw , названный level6.raw (т.к. в примере 7 уровней), разрешение его 32768 х 32768.

Дополнительные пиксели позволяют устранить разрывы в ландшафте или резкие границы на стыках текстур при рендере с использованием линейной фильтрации. Для карт высот ландшафта в этом случае важно сохранение тайлов в формат без потери данных, лучше всего - 16-битный png .

Для карт высот ( InputChannels true ) можно выполнить нормализацию, т.е. приведение к полному динамическому диапазону. Например, для 16-битной карты высот gebco_bathy.21601x10801.bin минимальное и максимальное значение пикселей -10577 и 8430, что не полностью реализует динамический диапазон 16-битных целых (-32768. 32767). Установка Normalize true включет приведение диапазона. При этом, если параметр EnterNormData установлен в false , минимальное и максимальное значения ищутся просмотром всех пикселей входной текстуры. Для больших текстур это может занять существенное время, поэтому достаточно один раз осуществить поиск, а потом установить EnterNormData true и ввести данные, которые программа выдала в предыдущий раз:

3) Создание LOD-ов вплоть до нулевого

Для выполнения этой операции в конфиге должно стоять DoDownSize true .

Производится последовательное уменьшение разрешения временного файла в 2 раза, в результате для нашего примера в папке с именем грани появляются временные файлы level5.raw, level4.raw, level3.raw, level2.raw, level1.raw, level0.raw , разрешением соответственно от 16384 х 16384 до 512 х 512.

4) Обновление границ граней

Для выполнения этой операции в конфиге должно стоять DoUpdateEdges true и AddExtraData true .

В режиме AddExtraData для получения правильного значения дополнительных пикселей тайлов, находящихся на границе грани, берутся пиксели из соседних граней. Очевидно, что для этого все грани должны быть вычислены, т.е. для всех граней проделаны операции DoConvert и DoDownSize , иначе произойдёт аварийное завершение работы программы.

5) Получение тайлов из временных raw-файлов

Для выполнения этой операции в конфиге должно стоять DoTile true .

Временные файлы разрезаются на соответствующее количество тайлов разрешением TileWidth (или TileWidth + 2 в режиме AddExtraData ) и сохраняются в папку с именем грани в один из следующих форматов:

raw - 8, 16 бит, любое количество каналов
tga - 8 бит, 1, 3, 4 канала, без сжатия
dds - 8 бит, 1, 3, 4 канала, без сжатия
jpg - 8 бит, 1, 3, канала
tif - 8, 16 бит, 1, 3, 4 канала
png - 8, 16 бит, 1, 3, 4 канала

Формат тайлов контролируется следующими параметрами:

OutFormat - выходной формат (raw, tga, dds, jpg, png)
TileWidth - разрешение тайла
Out16bit - разрядность: 16 или 8 бит на канал (только raw и png)
OutByteSwap - для 16-битного: обратный порядок байт (MAC)
OutUnsigned - для 16-битного: беззнаковое или знаковое значения
OutInvertAlpha - инвертировать Альфа-канал для RGBA-изображений
OutJPEGquality - качество сохранения в JPEG (0. 100)

Если файлы тайлов уже существуют в папке, они НЕ перезаписываются.

6) Автоматическое удаление временных файлов


SpaceEngine поддерживает тайловые кубические текстуры произвольной степени детализации в произвольном месте. Это значит, что можно например иметь тексутру Земли разрешением 6 х 32768 х 32768 (полученную из Blue Marble Next Generation), но в некоторых местах, например в городах, детализация может быть увеличена путём добавления тайлов следующих уровней, или наоборот, в обширных однородных областях без деталей - океанах - можно удалить тайлы вплоть до 2-3 уровня, таким образом сэкономив место на диске и увеличив скорость загрузки. Утилита Optimizer пытается выявить такие однородные участки и удалить их.

Определение однородности производится путём вычисления вариации цвета пикселей тайла - вычисление взвешенной суммы модулей разности цвета пикселя и среднего цвета тайла. Если эта вариация окажется меньше значения, задаваемого в конфиге параметром MinVar , тайл считается однородным и перемещается во временную папку.

Временные папки создаются в папке OutFolder и имеют имена del_neg_x, del_neg_y, del_neg_z, del_pos_x, del_pos_y, del_pos_z . В них перемещаются однородные тайлы из папок neg_x, neg_y, neg_z, pos_x, pos_y, pos_z соответственно. Временные папки - это кандидаты к удалению.

Общие рекомендации по работе с утилитой таковы. Начинаем с некоторого значения MinVar и выполняем Optimizer для одной из граней, выбрав её параметрами Create_NEG_X . Create_POS_Z . Смотрим, какие тайлы оказались во временных папках, корректируем MinVar , перемещаем тайлы обратно (вручную) и повторяем этот процесс до тех пор, пока не получится приемлемый результат. Потом делаем оптимизацию остальных граней с найденным оптимальным значением MinVar .

Текущая версия (1.03) использует не очень хороший алгоритм, поэтому возможны ошибки - например тайл с небольшим островом и однородным океаном вокруг может посчитаться целиком однородным, в то время как тайл с небольшим градиентом цвета будет посчитаться неоднородным, хотя по-идее должно быть наоборот. Поэтому рекомендуется просмотреть все тайлы во временной папке и переместить назад те, которые посчитаете не пригодными к удалению. Также для больших текстур рекомендуется сохранить где-нибуть временные папки, чтоб потом можно было быстро восстановить неправильно удалённые тайлы, не запуская заново CubeMap.

InputFile - результирующий файл
OutFolder - папка, в которой ищутся тайлы
InputWidth - ширина выходного изображения
InputHeight - высота выходного изображения
InputChannels - количество каналов (Grayscale - 1, RGB - 3, RGBA - 4 и т.д.)

Обратите внимание, что InputFile и OutFolder меняются ролями: теперь первый описывает файл с результатом склеивания тайлов, а второй исходную папку с тайлами. Кроме того, используются следующие новые параметры:

TilePrefix - string, префикс перед именем тайла (номер уровня)
StartU - int, начальный индекс U
StartV - int, начальный индекс V
SwapUV - boolean, поменять местами U и V индексы

Имя файла тайла строится так: TilePrefix_v_u.* , например если TilePrefix = 3_ , StartU = 2, StartV = 1, то тайлы будут иметь имена 3_1_2.*, 3_1_3.* и т.д. Расширение .* указывает на то, что программа сама будет искать любой из поддерживаемых форматов, в следующем порядке:
.dds, .jpg, .jpg, .jpg, .tga, .raw
Т.е. например если в папке есть два файла 3_1_2.jpg и 3_1_2.tga , предпочтение отдастся первому.

1) Размещение входной и выходной текстуры на разных физических дисках может существенно увеличить производительность. Также производительность увеличивается при дефрагментированом входном файле и временных raw-файлах.

2) Пишите информацию о формате входной raw-текстуры в её названии, например: Earth-surface-32k-RGBA.raw - RGBA текстура 32768 x 16384; Mars-bump-16k-16bit.raw - 16-битная grayscale текстура 16384 x 8192. Это поможет не запутаться.

3) Преобразовать тектуру из какого-либо формата в raw можно в Photoshop, IrfanView и других программах. Там же можно просматривать временные raw-файлы (если у вас достаточно много опреативной памяти, чтобы эти программы смогли загрузить raw-файлы).

4) Сохраняйте конфиги для каждой преобразованной текстуры, они могут пригодиться в будущем. Ассоциируйте в системе файлы с расширением .ccf с программой CubeMap.exe, тогда щелчок по конфигу автоматически запустит CubeMap. Также можно использовать перетаскивание конфига на ярлык утилиты CubeMap, Optimizer или Glue для её запуска.

5) Не спешите сразу (автоматически) удалять временные raw-файлы, они могут ещё пригодиться, а удалить всегда можно вручную.

6) CubeMap может продолжать работу на прерванном месте, поэтому можно использовать комбинацию клавиш Ctrl+C для остановки. Например, вы не знаете формат 16-битной карты высот, т.е. какие значения должны быть у параметров InputByteSwap и InputUnsigned . Для этого можно сделать преобразование одной грани и посмотреть результат (тайлы). Но если текстура очень большая, такой тест займёт много времени. Поэтому можно приостановить преобразование, чтобы просмотреть готовую часть временного файла, или поставить DoConvert false и запусить снова, дождавшись генерации нескольких тайлов.

7) Рекомендуется просматривать результат работы программы для полярных областей, и при наличии заметных артефактов попробовать выставить DoublePrecision true или отредактировать полярные грани в фотошопе. Для этого надо выполнить DoConvert для полярных граней, отредактировать raw-файлы, отключить DoConvert и выполнить остальные операции.

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