Информация: Уважаемые посетители! В течение нескольких месяцев на форуме существовала проблема с регистрацией новых пользователей, о которой администрации стало известно недавно. Если вы ранее пытались зарегистрироваться на форуме, но не получили на ваш e-mail письмо с ссылкой для подтверждения регистрации, просим вас зарегистрироваться повторно. Приносим извинения за доставленные неудобства. Если вы все еще испытываете проблемы с регистрацией на форуме, обратитесь за помощью на e-mail: mr.angelo@railroadsim.net

Туториалы по Railworks 3
Аватара пользователя
ALSN
 
Сообщения: 227
Зарегистрирован: 09.08.2011, 11:35
Откуда: Москва
Играю в: Train Simulator Classic
Роль: Фотограф
Имя: Игорь
Блог: Просмотр блога (6)
Поиск в блогах

Создание альфа-каналов и карт нормалей для Railworks

Постоянная ссылка ALSN 03.07.2012, 13:57

Создание альфа-каналов и карт нормалей для Railworks
Руководство по созданию альфа-каналов и карт нормалей для Railworks.
Авторы: Радиомастер, ALSN
Версия: 1.0 от 25.07.12


§1.0 Теория карты нормалей.

Карта нормалей - рельефная карта, её предшественником был бамп, чёрно-белая рельефная карта. С помощью разных тонов, она передаёт высоты рельефа.
Пример:
Изображение
(Рельеф специально был искажён, самые высокие точки трансформированы в самые низкие, а самые низкие в самые высокие)

Результат - это плоскость из 1 полигона (= 2 фейса), а если бы мы делали не картой нормалей, а объемом, то было бы 2 млн полигонов (приблизительно = 4 млн фейсов). Основная задача карт нормалей - симулировать объемность, не затрачивая полигонов.

§2.0 Создание и применение карты нормалей.

Карту нормалей можно сделать рендерингом в 3ds max, в ручную, фильтарми в photoshop, другие программы.
Я опишу здесь способ с программой PixPlant и фильтром в photoshop "NVIDIA Normal Map Filter".

Способ 1: NVIDIA Normal Map Filter
Этот способ предпочтителен

Скачиваем этот фильтр в разделе Tools: Photoshop Plugin (32-bit) или Photoshop Plugin (64-bit)
Устанавливаем его. Сделаем лофтоый забор с картой нормалей (если не умеете делать лофтовые объекты, читайте создание лофтовых объектов для Railworks)

Вот сам забор, он состоит из 3 полигонов (= 6 фейсов), и выглядит не особо правдоподобно.
Изображение

Вот текстура забора tex_1.ace,
Изображение

Откопируем её, назовём копию tex_1_normal.ace, откроем её в photoshop.
Выбираем меню Filter (Фильтр) –> NVIDIA tools –> NormalMapFilter.

Появится вот такое окошко:
Изображение

Нам важны следующие параметры:
Scale - значение регулирует глубину, устанавливает на сколько большие будут перепады высот на каарте, чем значение больше, тем рельефнее будет текстура
Переключатели выше регулируют детализацию карты. По нажатию кнопки 3D Preview мы можем просмотреть результат в 3d сцене с источником освещения.

Нажимаем ОК, появляется карта нормалей, сохраняем её.
Изображение

Этот фильтр преобразует карту высот в карту нормалей, для него желательны текстуры с тёмными впадинами и светлыми выпуклостями, основоно на принципе Bump-а.

Способ 2: PixPlant
Для работы нужна прогрмма PixPlant.

Программой открываем изображение tex_1.ace (Сначала его нужно переконвертировать в другой формат, лучше всего TGA), выбираем вкладку 3D Materual.
Слева мы видим превью (как будет выглядить материал с картой нормалей), справа различные ползунки детальности. Настраиваем на вкус, сохраняем в .асе

Изображение

Делаем зимнюю текстуру tex_1_wi.ace:
Изображение

Теперь в 3ds max создаём материал, используем шейдер LoftBump.fx, он поддерживает карту нормалей.
Есть вкладки Slot 1 и Slot 2. Открыаем Slot 1 и назначаем стандартную текстуру - tex_1.ace, в Slot 2 назначаем tex_1_normal.ace.

Внимание! Если вы делаете карту нормалей для обычного scenery-объекта, например можно использовать шейдерTrainBumpSpec.fx
Обычно под шейдером идёт его описание, какие каналы/карты/текстуры он использует, какие эффекты даёт и как реагирует на освещение.


Экспортируем забор как лофт, пишем ему блюпринт, экспортируем в игру. Вот что у нас получается:
Изображение

Зимний вариант:
Изображение

Тут 14 полосок, значит 13 промежутков, каждая полоска в геометрии заняла бы 3 полигона, промежуток 1 полигон + обратная сторона и 1 полигон на верх.
Если бы мы делали геометрией этот забор у нас бы вышло (14*2+13)*2+1 83 полигона ( = 166 фейсов), а сделаи мы всего 3 полигона (= 6 фейсов), выгода в 80 полигонов ( = 160 фейсов).

§3.0 Теория альфа-канала.

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

Альфа-каналы делятся на 2 вида:
1-битные, в которых есть только чёрный цвет (RGB везде 225) и только белый (RGB везде 0), это как раз наш случай.
8-битные, в которых есть множество оттенков чёрного и белого (серый например)

Настройки для каналов:
Изображение

Для 1-битного канала приемлемы шейдеры BlendATex.fx, TrainBasicObjectDiffuse.fx
Для 8-битного канала приемлем шейдер BlendATexDiff.fx

Пример 1-битного альфа-канала :
Изображение

Результат - это плоскость, состоящая из 1 полигона ( = 2 фейса), с наложеной текстурой и альфа-каналом. Если бы мы делали это геометрией, мы бы затратили 2 полигона, но они бы равнялись 46 фейсам, а не двум!
Главный минус альфы- она не объемна, не стоит ей злоупотреблять.

Где же может альфа-канал пригодится? В основном в объектах окружения, сложных геометрических объектах, сетках, окнах.
Ещё один пример, с прозрачностью, здесь альфа-канал 8-битный:
Изображение

Здесь за окном распологаются примитивы разных размеров и цветов, стекло а альфа-канале представлено смесью черного и белого цвета - серого, который делает участок текстуры прозрачным. Белый цвет - 100% видимости, чёрный - 0%, в зависимости от оттенка меняется этот процент.

§4.0 Создание и применение альфа-канала.

За пример возьму депо Красная Пресня, в котором стёкла сделаны альфа-каналом.
Итак, есть текстура depo_01.ace:
Изображение

Откопируем текстуру и сделаем из неё альфа-канал (1-битный):
Изображение

Теперь открываем depo_01.ace, выбераем справа кнопку "каналы" (выделено красным), появится окошко с каналми, там будут красный, зелёный и синие каналы, так все оттенки, которые видит человек состоят из этих 3 цветов, там будет кнопка для создания нового канала (выделено красным), нажимаем и создаётся канал "Альфа 1".
Изображение

Теперь открываем ещё и текстуру с альфа каналом, выделяем её при помощи инструмента "выделени", копируем при помощи Ctrl+C. Переходим обратно в альфа канал первой текстуры и вставляем при помощи Ctrl+V.
Изображение

Сохраняем, теперь открываем 3ds max.

Назначаем материал как обычно, для обычных scenery-объектов можно использовать шейдеры 1-битой альфы BlendATex.fx, TrainBasicObjectDiffuse.fx , 8-битной шейдер BlendATexDiff.fx, для лофтов можно 1-битный LoftTexDiffTrans.fx или 8-битный LoftTexDiffAlpha.fx, шейдеров великое множество, одни годятся только для второстепенных объектов (такие как Tex), другие лучше использовать для самых важных объетов, таких как станции, депо, локомотивы. Помним про настройки.

Результат в игре:
Изображение

Ещё один минус альфы в том, что если смотреть через альфу на альфу, то возникает конфликт, бывает трудно определить какой из прозрачных объектов на первом плане, а какой на втором.

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

Приложение
Тема с вопросами и памяткой по 3ds max: forum140/topic6722.html
Для создания контента в папке автора "RailroadSim" необходимо получить разрешение от RRS Team.
Последний раз редактировалось ALSN 05.09.2012, 22:17, всего редактировалось 14 раз(а).

1 комментарий 106659 просмотров
Комментарии

Re: Создание альфа-каналов и карт нормалей для Railworks

Постоянная ссылка Skif 25.07.2012, 23:29

Карта нормалей исключительно полезна для картонных рельс. Несколько снижает их картонность и подчеркивает шпалу.
Skif
 
Сообщения: 3750
Зарегистрирован: 01.10.2009, 17:42
Имя: Дмитрий
Блог: Просмотр блога (0)

Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Google [Bot], Yandex [Bot]