Текстуры планет

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

Актуальная версия: 1.15

Скачать: CubeMap 1.15

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

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

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


Все параметры программы задаются в файле 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):

Уровень 0
Уровень 0

Уровень 1
Уровень 1

Уровень 2
Уровень 2

Утилита CubeMap

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

Code

Create_NEG_X 1
Create_POS_X 1
Create_NEG_Y 0 # эта грань будет пропущена
Create_POS_Y 0 # эта грань будет пропущена
Create_NEG_Z 1
Create_POS_Z 1

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

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

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

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

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

SpaceEngine использует базовые цилиндрические текстуры небольшого разрешения для планет, находящихся далеко от камеры. Создание такой текстуры происходит путём простого уменьшения исходной цилиндрической текстуры усреднением пикселей в квадратных блоках. Разрешение базовой текстуры – такое же, как у тайлов (TileWidth). Параметр BaseTexFormat задаёт формат файла базовой текстуры.

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

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

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

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

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

Если установлено TileBorder 2, по периметру каждого тайла добавляются граница из пикселей от соседних тайлов, шириной 2 пикселя. При этом разрешение тайла не меняется, т.е. остаётся таким, как задано параметром TileWidth (т.е. пиксели границы добавляются “изнутри”, с соответствующим масштабированием внутренней части текстуры). Разрешение временного файла leveli.raw тоже остается прежним. В нашем примере это будет 32768 x 32768.

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

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

Code
Normalize       true   # нормализовать выходное изображение (карту высот)
EnterNormData   true   # ввести данные для нормализации вручную
NormMinValue    -10577 # минимальное значение
NormMaxValue    8430   # максимальное значение
NormIgnoreValue -32768 # игнорировать это значение при чтении данных

Некоторые карты имеют специальное значение высоты для пометки пикселей, для которых отсутствуют данные. Это может нарушить определение данных нормализации. Например, если карта 16-битная целая со знаком, вы можете обнаружить, что на этапе чтения данных нормализации для минимальных высот всегда получается значение -32768, тогда как вы знаете, что реальные высоты на этой карте начинаются с -10000. В этом случае установите параметра NormIgnoreValue -32768. Это укажет программе игнорировать данное значение на этапе чтения данных нормализации.

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

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

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

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

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

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

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-битные тайлы в два отдельных файла: старший байт и младший байт
MaxOversampling – не сохранять тайлы последнего уровня, его его величина передискретизации выше, чем данное значение

Параметр MaxOversampling позволяет избежать генерации тайлов с избыточным разрешением. Это экономит время работы и дисковое пространство. Например, если исходная текстура имел разрешение 36000×18000, она будет эффективно увеличена до ближайшей степени двойки вверх, т.е. 65536х32768. Это приведёт к тому, что последний уровень будет выглядеть довольно размытым; его величина передискретизации будет равна 65536/36000 = 1,82. Если она выше значения MaxOversampling, raw-файлы и тайлы этого уровня не будут создаваться (хотя внутренне CubeMap будет работать в разрешении 65536).

Другой возможный сценарий использования этой опции – преобразование текстуры разрешением ровно степень двойки, например 32768×16384, с использованием ненулевого TileBorder. В этом случае CubeMap немного растянет исходную текстуру до разрешения 32768 + 4 * (32768/256) = 33280, чтобы учесть небольшое сжатие видимой в SpaceEngine области тайлов (256 – 2 * 2 = 252 пикселя). Поэтому рабочее разрешение будет 65536 (ближайшая бОльшая степень двойки), и величина передискретизации составит 65536/33280 = 1,969. Без использования MaxOversampling эти привело бы к созданию последнего уровня тайлов, которые выглядели бы очень размытыми.

Для отключения этого ограничения и сохранения тайлов всех уровней просто установите MaxOversampling 2.

Необходимо остановиться подробнее на параметрах 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 1.

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.

Параметр MinOptLevel указывает, с какого уровня должен начаться процесс оптимизации. SpaceEngine требует как минимум 2-3 уровня текстур даже в плоских областях, таких как океаны, для поддержания тесселяции сферы планеты на достаточном уровне для предотвращения визуальных артефактов.

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

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

Утилита Glue

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

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

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

Code
TilePrefix 5_
TileExt    png
StartU     2
StartV     3
SwapUV     false

Самый первый тайл будут иметь имя 5_3_2.png, имена последующих тайлов будут получены путём увеличения индексов u и v до тех пор, пока они не достигнуто значений EndU/EndV. Расширение * указывает на то, что программа сама будет искать любой из поддерживаемых форматов, в следующем порядке: 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.

Glue может пропускать пиксели на краях тайлов (подходит для обратного склеивания тайлов карты, ранее созданной с помощью Cubemap). Параметр TileBorderWidth задаёт ширину бордюра, который будет пропущен с левого и правого края тайла; TileBorderHeight делает то же самое для верхнего и нижнего края.

Утилита RawConv

Утилита RawConv – это простой инструмент, предназначенный для предварительной обработки raw файлов. Использование:

RawConv [опции] -i input_file -o out_file [-a alpha_file]

Опции определяют, какие операции выполняются над файлом input_file:

-t: вставить 8-битное изображение в градациях серого alpha_file в 8-битное RGB-изображение input_file в качестве альфа-канала.
-s: преобразовать 16-битное изображение со знаком в 16-битное без знака или наоборот.
-b: сменить порядок байтов в 16-битном изображении (преобразование между форматами Mac и Windows).

Результат сохраняется в out_file. Входные и выходные файлы – в формате raw. Опции -s и -b могут использоваться вместе; их порядок определяет порядок операций, выполняемых над каждым 16-битным словом входного файла.

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

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-файлы). Графические редакторы не понимают изображения в формате 16-бит со знаком, поэтому есть смысл предварительно преобразовать такие текстуры в 16-битные без знака с помощью RawConv.

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

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

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

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