Карты, которых вам не дали
Наборы текстур редко содержат все карты, нужные PBR-материалу. Вам достаётся фотография и карта высот, или карта нормалей, запечённая под другой движок, или карта глянцевости, когда рендереру нужна шероховатость. Этот бесплатный онлайн-инструмент превращает то, что у вас есть, в то, что вам нужно, — прямо в браузере.
Из карты высот в карту нормалей
Карта высот хранит возвышение как яркость; карта нормалей хранит направление для каждого пикселя. Преобразование означает взять градиент поля высот и построить по нему нормаль поверхности: N = normalize(-dh/du, -dh/dv, 1).
Градиент оценивается ядром Собеля 3x3, а не простой разностью соседних пикселей, потому что 8-битные карты высот плохо квантуются, и грубая разность превращает это квантование в заметную огранку. Сила масштабирует градиент до нормализации: малые значения дают сдержанную поверхность, большие — утрируют рельеф. Добавьте предварительное размытие, если на пологих склонах источник идёт полосами.
Инверсия зелёного: проблема OpenGL против DirectX
Самая распространённая ошибка с картами нормалей в 3D — и правится она одной строкой. У касательного пространства ось V направлена вверх, но изображения хранятся сверху вниз, и из этого расхождения выросли две конвенции:
- OpenGL / glTF / Blender / Unity / Godot — зелёный это +Y, направлен вверх. Его же называют Y+.
- DirectX / Unreal Engine / 3ds Max — зелёный это -Y, направлен вниз. Его же называют Y-.
Выберите не ту, и никакой ошибки не возникнет. Поверхность просто освещается с противоположной вертикальной стороны: выпуклости читаются как вмятины, а шляпки винтов выглядят вдавленными. Выглядит правдоподобно — именно поэтому дефект доживает до финального рендера.
Лекарство — g = 255 - g: инвертировать только зелёный канал и ничего больше, ровно это и делает Инвертировать зелёный канал. Операция обратна самой себе, поэтому преобразует в обе стороны.
Из нормалей в высоту, честно говоря
Восстановление высоты из карты нормалей означает решение уравнения Пуассона, поэтому инструмент интегрирует поле наклонов и выполняет проходы релаксации, чтобы убрать дрейф. Увеличьте число проходов, если мягкие градиенты появляются там, где поверхность должна быть плоской. Восстановима только относительная глубина, поэтому результат нормализуется.
Шероховатость, глянцевость и затенение
Обесцветить в шероховатость использует перцептивную яркость, а не среднее по каналам; затем поправьте диапазон уровнями. Инвертировать карту переводит шероховатость в глянцевость или гладкость и обратно. Фоновое затенение из высоты сканирует наружу в нескольких направлениях от каждого пикселя и затемняет его по самому крутому найденному горизонту — ползунок масштаба высоты даёт ту глубину, которой у полутонового изображения нет.
Всё выполняется на вашем устройстве средствами собственных canvas-API браузера; ни одна текстура никуда не отправляется.
Tiny Online Tools







