Практика 3. Текстуры и материалы
Графика в Unity
1. Модели
Создайте новую сцену. Добавьте пустой объект.
За модели в Unity отвечают два компонента Mesh (англ. Polygon Mesh - полигональная сетка) - Mesh Filter и Mesh Renderer. Mesh Filter определяет модель данного объекта. Mesh Renderer определяет материал объекта и взаимодействие со светом.
Добавьте эти два компонента к новому объекту, выбрав Mesh - Capsule.
В отличии от того, как мы бы создали объект Capsule через меню GameObject, материал установился None. Отсутствие материала отображается маджента (ярко-розовым) цветом, чтобы было заметно, что он отличается от объектов, чьи материалы правильно загрузились.
Рис. 1. Капсула без материала
В Unity нет своего редактора моделей. Для их создания нужно использовать внешний редактор, вроде Blender. Также можно найти много разных моделей на Asset Store.
2. Материалы и текстуры
Материал - поверхность модели. Это текстуры, карты, эффекты.
Создайте новый материал в панели Project и присвойте капсуле.
В Inspector можно увидеть настройки материала - цвет, блеск, матовость, карта нормалей, высот, свечение, т.д. Слева от разных параметров можно нажать на цель чтобы задать текстуры.
Видимая текстура задается вместо цвета - параметр Albedo.
Карта нормалей (Normal Map) - это текстура содержащяя информацию о нормалях - направлениях перпендикуляров в различных точках поверхности. Она меняет то, как свет взаимодействует с поверхностью объекта, отражая его не так, как на это указывает модель, создавая мнимый эффект повышенной детализации, не повышая количество полигонов.
Карта нормалей использует компоненты RGB как направления векторов XYZ, что интересно выглядит - карта нормалей по умолчанию сине-фиолетового цвета, что показывает на вектор, направленный вверх от поверхности.
Карта высот (Height Map) - текстура, смещающая остальные в зависимости от проекции, придавая эффект высоты.
Поэкспериментируйте с текстурами из Standard Assets - задайте текстуры Albedo и Normal Map.
Рис. 2. Материал с разными текстурами.
3. Основы Шейдеров
Шейдеры - это программы, выполняющиеся на видеокарте. Они работают в условиях высокой многопоточности и огромного количества входных и выходных данных.Шейдеры получают на входе определенные данные - модели, точки, пиксели и преобразуют их, передавая по конвейеру следующим шейдерам.
Для ознакомления напишем простой шейдер пост-обработки, который будет смещать красный цвет камеры в сторону для получения стереоскопо-подобного эффекта.
В Project создайте шейдер RCShift типа Image Effect Shader.
Шейдеры в Unity написаны на языке Cg (от C for Graphics) от Nvidia. Откройте шейдер в своем любимом текстовом редакторе.
Нас интересует только функция frag, отвечающая за фрагменты на экране (пиксели). На входе она получает двухмерный вектор, отвечающий за положение пикселя на экране (от -1 до 1).
Вот полный шейдер со всем что нам нужно:
Рис. 3. Шейдер RCShift
Мы взяли R от смещенного экрана, GB от оригинального, и 1 для A - alpha-канал прозрачности.
Теперь чтобы его использовать, напишем скрипт, создающий материал с шейдером и привяжем его к камере.
Рис. 4. Скрипт для шейдера
Этот скрипт берет изображение на экране и обрабатывает его материалом с шейдером для него.
Рис. 5. Результат выполнения шейдера.
Поэкспериментируйте - попробуйте написать свой простой шейдер, который может отобразить какой-либо другой эффект, например эффект виньетки (слегка затемнить по краям, в зависимости от расстояния от центра, (0, 0) - середина экрана), смещение картинки волной (с помощью тригонометрических функций, например смещение по x в зависимости от y), или что-либо свое.
Этот комментарий был удален автором.
ОтветитьУдалитьЭтот комментарий был удален автором.
Удалить