Space Engine | Текстуры планет
853
page-template-default,page,page-id-853,page-child,parent-pageid-680,eltd-cpt-1.0,ajax_leftright,page_not_loaded,,se-ver-2.1, vertical_menu_with_scroll,transparent_content,blog_installed,wpb-js-composer js-comp-ver-5.0.1,vc_responsive
Текстуры планет

CubeMap – пакет программ для преобразования текстур из цилиндрической проекции в кубическую. Поддерживаются входные текстуры любого разрешения, с любым количеством каналов на пиксель, 8-битные или 16-битные знаковые или беззнаковые целые. Формат входной текстуры – raw (простой несжатый массив данных). Формат выходной текстуры – raw и/или массив тайлов разного уровня детализации в форматах raw, tga, dds, jpg или png.

Скачать: CubeMap 1.06

Комплектация:

CubeMap.exe – утилита для преобразования текстур из цилиндрической проекции в кубическую
Glue.exe – утилита для склеивания тайлов в единый raw-файл
default_cub.ccf – файл конфигурации по умолчанию для утилиты CubeMap
default_glue.gcf – файл конфигурации по умолчанию для утилиты Glue

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

Все параметры программы задаются в файле default_cub.ccf в папке программы (или default_glue.gcf для Glue). Он представляет собой простой текстовый файл, содержащий набор строк вида:

var value #comment

var – имя параметра, value – значение, знаком # отделяются комментарии. Комментарий может быть либо в начале строки, тогда вся строка – комментарий, либо в конце строки, после value. Значение параметра бывает четырёх видов:

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

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


CubeMap myconfig.ccf
Glue myconfig.gcf

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

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


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

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

Формат текстур планет в SpaceEngine

Путь к исходной цилиндрической текстуре задаётся параметром InputFile, путь к выходной папке для кубической текстуры задаётся параметром OutFolder. Если путь содержит пробелы, он должен быть заключён в кавычки: “путь с пробелами”. Параметр TempFolder задаёт путь ко временной папке, в которую сохраняются временные файлы в процессе работы утилиты. Если он не задан, временные файлы сохраняются в 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-битного: true – little endian (MAC, обратный порядок байт), false – big endian
InputUnsigned – для 16-битного: true – беззнаковое, false – знаковое значения
InputLatOffset – сдвиг по долготе, в градусах

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


cubemap ———– папка, указываемая в параметре OutFolder
neg_x —– папка, содержащая тайлы грани neg_x
0_0_0.jpg —– 1 тайл 0 уровня
1_0_0.jpg –\
1_0_1.jpg –+– 4 тайла 1 уровня
1_1_0.jpg –|
1_1_1.jpg –/
2_0_0.jpg –\
2_0_1.jpg –|
2_0_2.jpg –|
2_0_3.jpg –+– 16 тайлов 2 уровня
2_1_0.jpg –|
2_1_1.jpg –|
2_1_2.jpg –|
2_1_3.jpg –|
………
neg_y —– папка, содержащая тайлы грани neg_y
neg_z —– папка, содержащая тайлы грани neg_z
pos_x —– папка, содержащая тайлы грани pos_x
pos_y —– папка, содержащая тайлы грани pos_y
pos_z —– папка, содержащая тайлы грани pos_z

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

Кубическая текстура

Некоторые карты планет созданы для другого расположения нулевого меридиана, например, по левому краю. В этом случае можно задать сдвиг по долготе на 180°, чтобы “повернуть” результирующую кубическую текстуру (и базовую текстуру) в правильное положение: InputLatOffset 180.

Разрешение грани вычисляется как четверть ширины исходной текстуры, округлённой до ближайшей большей степени 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 х 128):

level 0
Уровень 0

level 1
Уровень 1

level 2
Уровень 2

Утилита CubeMap

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

Code

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 (см. ниже):

Code

CreateBaseTex   true    # создать базовую текстуру
ComputeFaces    true    # преобразовать выбранные грани (рассчитать временные raw-файлы последнего уровня)
DownsizeFaces   true    # получить LOD-ы выбранных граней (рассчитать временные raw-файлы остальных уровней вплоть до 0)
UpdateEdges     true    # обновить границы граней (временных raw-файлов)
TileFaces       true    # получить тайлы из временных raw-файлов
OptimizeTiles   false   # удалить однородные тайлы

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

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

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

SpaceEngine использует базовые цилиндрические текстуры небольшого разрешения для планет, находящихся далеко от камеры. Создание такой текстуры происходит путём простого уменьшения исходной цилиндрической текстуры усреднением пикселей в квадратных блоках. Параметр BaseTexDownSize указывает, во сколько раз уменьшать исходную текстуру, а BaseTexFormat определяет формат файла полученной базовой текстуры. Например, уменьшение текстуры 10800 х 5400 в 4 раза даст текстуру 2700 х 1350. Для SpaceEngine лучше всего использовать базовую текстуру разрешением 512 х 256. Но CubeMap поддерживает только целые числа для BaseTexDownSize, так что не все исходные цилиндрические текстуры могут быть преобразованы в базовые текстуры разрешением 512 x 256. Например, 10800 / 512 = 21.09375, так что ближайшее значение для BaseTexDownSize – 21, что приведёт в результате в базовой текстур шириной 10800 / 21 = 514. Поэтому полученную базовую текстуру необходимо дополнительно уменьшить сторонней программой, например Photoshop. Во избежание ухудшения качества, делайте базовую текстуру размером примерно 1000 x 500, а затем уменьшайте сторонней программой до 512 x 256.

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

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

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

Программа использует специальный кэш в памяти для хранения участков исходной цилиндрической текстуры. Поэтому возможно преобразование текстуры без полной загрузки её в память. Это актуально для больших текстур, например текстура Земли Blue Marble Next Generation имеет размер в распакованном виде (в формате raw) 86400 х 43200 х 3 = 10.4 Гб. Размер кэша задаётся параметром MaxMem (в Мб). В текущей версии (1.06) установка большого значения (больше 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.06) для большинства случаев разница не заметна или даже наоборот, Quad кэш работает медленнее, из-за более частого обращения к диску.

Во временной папке TempFolder создаётся папка с именем raw, внутри неё создаются подпапки neg_x, neg_y, neg_z, pos_x, pos_y, pos_z, в которые сохраняются временные raw-файлы соответствующих граней кубической проекции. В нашем примере каждый файл грани будет иметь имя level6.raw (т.к. в примере 7 уровней, начиная с 0), разрешение его 32768 х 32768.

Если TileBorder не ноль, по периметру каждого тайла добавляется “рамка” с пикселями из соседних тайлов шириной, задаваемой этим параметром. Т.о., если в конфиге задано TileWidth 512 и TileBorder 1, то получатся тайлы размером 514 х 514, а разрешение временного файла level#.raw будет больше на 2 TileBorder * cubeFaceWidth / TileWidth, где cubeFaceWidth – исходное разрешение файла level#.raw. В нашем примере разрешение уровня 6 будет 32768 + 128 = 32896. Эти дополнительные пиксели позволяют устранить разрывы в ландшафте или резкие границы на стыках текстур при рендере планеты в SpaceEngine. Для карты высот ландшафта в этом случае важно сохранение тайлов в формат без потери данных, лучше всего – в 16-битный png. В предыдущих версиях CubeMap вместо TileBorder был boolean параметр AddExtraData (AddExtraData true было эквивалентно TileBorder 1).

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

Code

Normalize      true   # нормализовать выходное изображение (карту высот)
EnterNormData  true   # true – ввести данные для нормализации вручную, false – найти автоматически
NormMinValue  -10577  # минимальное значение
NormMaxValue   8430   # максимальное значение

3) Создание LOD-ов граней

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

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

Если TileBorder не ноль, то разрешение временных файлов level#.raw аналогично будет больше на 2 * TileBorder * cubeFaceWidth / TileWidth, где cubeFaceWidth – исходное разрешение файла level#.raw.

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

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

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

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

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

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

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)
OutFormat2 – выходной формат (raw, tga, dds, jpg, png) младшего байта или альфа-канала (см. SeparateHiLo и SeparateRGBA)
TileWidth – разрешение тайла
TileBorder – ширина рамки с дополнительными пикселями вокруг тайла
Out16bit – разрядность: 16 или 8 бит на канал (16 бит – только для raw и png)
OutByteSwap – для 16-битного: обратный порядок байт (MAC)
OutUnsigned – для 16-битного: беззнаковое или знаковое значения
OutInvertAlpha – инвертировать альфа-канал для RGBA-изображений
OutJPEGquality – качество сохранения в JPEG (0…100)
SeparateRGBA – сохранять RGBA тайлы в два отдельных файла: RGB и альфа
SeparateHiLo – сохранять 16-битные тайлы в два отдельных файла: старший байт и младший байт

Необходимо остановиться подробнее на параметрах OutFormat2, SeparateRGBA и SeparateHiLo. SpaceEngine поддерживает особый способ хранения RGBA текстур поверхности планеты в виде двух отдельных файлов – цветной для RGB компонентов и чёрно-белой для альфа-канала. Это можно использовать для экономии дискового пространства. Например, для Земли требуются RGBA текстуры с цветом поверхности, заданным в RGB каналах, и маской воды, заданной в альфа-канале. Форматы текстур, поддерживающие 4 канала (RGBA) – это только png и tif. Но размер текстур в этих форматах довольно велик, при этом цветовую информацию в принципе можно было бы сжать алгоритмом jpg с достаточно хорошим качеством, а маска воды очень хорошо сжимается в png без потери качества. Такой комбинированный вариант из двух текстур jpg + png занимает гораздо меньше места, чем один 4-канальный png. Для использования этого метода необходимо установить SeparateRGBA true, и указать формат для RGB текстуры в OutFormat, а для альфа-текстуры – в OutFormat2:

Code

OutFormat    jpg
OutFormat2   png
SeparateRGBA true


При такой настройке, утилита CubeMap сохранит по два файла на каждый тайл: RGB тайл с суффиксом _c и альфа-тайл с суффиксом _a в указанных форматах, например:
3_2_16_c.jpg
3_2_16_a.png

Для тайлов 16-битных карт высот тоже может применяться разделение на два отдельных файла: младший байт и старший байт. Иногда сохранение их отдельно в 8-битных форматах даёт преимущество в размере перед сохранением в 16-битный формат (png или tif). Для этого необходимо установить SeparateHiLo true, и указать формат текстуры старших байт в OutFormat, а младших байт – в OutFormat2:

Code

OutFormat    png
OutFormat2   jpg
SeparateHiLo true


При такой настройке, утилита CubeMap сохранит по два файла на каждый тайл: старшие байты в – файл с суффиксом _h, младшие байты в – файл с суффиксом _l, например:
3_2_16_h.png
3_2_16_l.jpg

Обратите внимание: старший байт надо обязательно сохранять в формат без потерь, например png. В противном случае на рельефе будут очень сильные артефакты! Младший байт можно сохранять в формат с сжатием с потерями, например jpg, но это тоже приведёт к артефактам. Только комбинация png + png не даёт артефактов, и иногда она даёт выигрыш в объёме файлов; именно в этом случае рекомендуется применять данный метод.

SpaceEngine автоматически распознаёт и загружает двухфайловые текстуры, никакой дополнительной настройки скрипта планеты делать не требуется.

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

6) Оптимизация тайлов

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

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

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

Во временной папке TempFolder создаётся папка с именем optimized, внутри неё создаются подпапки neg_x, neg_y, neg_z, pos_x, pos_y, pos_z, в которые перемещаются однородные тайлы из соответствующих папок граней. Это кандидаты к удалению.

Общие рекомендации по работе с оптимизацией таковы. После генерации тайлов без оптимизации (OptimizeTiles false), начинаем с некоторого значения MinVar и запускаем CubeMap c OptimizeTiles true, отключив остальные стадии (параметры от CreateBaseTex до TileBaces установить в false). Сделать это лучше только для одной из граней, выбрав её параметрами Create_NEG_X … Create_POS_Z. Смотрим, какие тайлы оказались во временной папке, и, если результат неудовлетворительный, перемещаем тайлы обратно (вручную), корректируем MinVar, и повторяем процесс до тех пор, пока не получится приемлемый результат. Потом делаем оптимизацию остальных граней с найденным оптимальным значением MinVar.

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

Оптимизация не поддерживается для двухфайловых тайлов (SeparateRGBA или SeparateHiLo).

Утилита Glue

Утилита Glue предназначена для склеивания тайлов обратно в единый raw-файл. Утилита имеет свой собственный конфиг-файл со следующими параметрами:

InputFolder – путь к папке, в которой ищутся тайлы
OutFile – путь к выходному файлу изображения
TilePrefix – string, префикс перед именем тайлов (номер уровня)
TileExt – string, расширение имени тайлов
StartU – начальный индекс U
StartV – начальный индекс V
SwapUV – поменять местами U и V индексы
TileWidth – ширина тайлов
TileHeight – высота тайлов
OutWidth – ширина выходного изображения
OutHeight – высота выходного изображения
ChannelsPerPixel – количество каналов (Grayscale – 1, RGB – 3, RGBA – 4 и т.д.)
BytesPerChannel – разрядность (1 – 8-битные, 2 – 16-битные и т.д.)
ConvertToGrayscale – преобразовать в grayscale (только для 8-битных)
MaxMem – размер кэша в мегабайтах

Имя файла тайла строится так: TilePrefix_v_u.TileExt, например для следующего конфига:

Code

TilePrefix 5_
TileExt    png
StartU     2
StartV     3
SwapUV     false

самый первый тайл будут иметь имя 5_3_2.png, имена последующих тайлов будут получены путём увеличения индексов u и v до тех пор, пока не будет достигнуто разрешение выходной текстуры, указанное в конфиге. Расширение * указывает на то, что программа сама будет искать любой из поддерживаемых форматов, в следующем порядке: dds, png, jpg, jpeg, tif, tiff, tga, raw. Т.е. например если в папке есть два файла 3_1_2.jpg и 3_1_2.tga, предпочтение отдастся первому.

Если расширение не совпадает с одним из вышеперечисленных, утилита переходит в raw-режим: входные тайлы считаются имеющими raw-формат, т.е. простые несжатые массивы пикселей без заголовка. При этом расширение может быть .raw, .img или любое другое, переименовывать тайлы в .raw не требуется. В raw-режиме количество каналов (ChannelsPerPixel) и разрядность (BytesPerChannel) ничем не ограничены. Это можно использовать для склеивания произвольных массивов данных (не обязательно текстур), как будто это прямоугольные блоки. Тайлы не обязательно должны быть квадратные – для этого введены отдельные параметры TileWidth и TileHeight.

Параметр ConvertToGrayscale преобразует многоканальные текстуры (RGB, RGBA и т.д.) в градации серого путём усреднения значений каналов. Допустим только для 8-битных текстур.

Общие рекомендации

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 и .gcf с Glue.exe, тогда двойной щелчок по конфигу автоматически запустит соответствующую утилиту. Также можно использовать перетаскивание конфига на ярлык утилиты CubeMap или Glue для её запуска.

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

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

7) Во избежание потерь точности не рекомендуется нормализовывать карты высот, динамический диапазон которых “почти реализован”, например (1…252) для 8-битных или (-32000…32000) для 16-битных.

8) Если нужно сохранить тайлы в формат, не поддерживаемый Cubemap, надо осуществить преобразование в формат без потерь, например tga, а потом произвести пакетное преобразование всех тайлов в нужный формат с помощью сторонних программ, например IrfanView или ImageMagic.