Куб с текстурой камня

Создание текстур при помощи простых фильтров. Часть III: каменная текстура

Это третья часть из сета уроков, посвященного созданию качественных текстур при помощи фильтров Photoshop. Первые две части находятся здесь: создание поверхности воды в Photoshop и деревянная текстура в Photoshop. В этом уроке мы создадим текстуру из камня, главным образом используя фильтры. На последнем этапе добавим детали с реальной фотографии.

1 Шаг

Первые три шага у нас уже традиционные. Создаем документ размерами 500?500px, устанавливаем белым основной цвет, фоновый — черным.

Примените фильтр Filter > Render > Clouds. Это будет базой для дальнейшей работы.

2 Шаг

Откройте окно Channels, которое обычно можно найти по вкладке в палитре Layers. Хотя, если исходя особенностей настроек вашего рабочего пространства, его там не находится — окно Channels всегда можно открыть из Window > Channels.

Кликните по кнопке Create New Channel, расположенной в нижней части окна, назовите канал по типу “Stone texture channel”. С помощью этого канала мы создадим текстуру, которую впоследствии используем для создания блика с помощью Lighting Effects.

2 Шаг

Находясь на новом канале, примените фильтр Filter > Render > Difference Clouds. Повторите его пару раз, либо может больше, до тех пор, пока не получите устраивающий результат.

3 Шаг

Теперь уберите видимость вашего нового канала, кликнув на пиктограмму с глазом напротив него.

4 Шаг

Откройте снова вкладку Layers, нажмите Ctrl + J, находясь на слое с фоном, чтобы его продублировать. Назовите новый слой “Stone texture” и удалите фоновый.

Добавим эффект освещения к нашей каменной текстуре для большей глубины и резкости картины. Вызовите Filter > Render > Lighting Effects. Для начала смените Texture Channel на канал текстуры, который мы создали ранее (Stone texture channel). Задайте Light Type равным Spotlight. В небольшом окне просмотра в левой части окна можно воспользоваться любыми из четырех ручек для управления направлением и длинной светового пятна. Я там оставил все почти как есть, только лишь немного растянул по ширине. Покрутите настройки, посмотрите, что вам больше по душе. Познакомившись с ним сейчас, скажете большое спасибо в работе с этим мощным фильтром потом — во многих своих дальнейших проектах. Иллюстрация внизу показывает, какие я использовал параметры для своей текстуры.

5 Шаг

Теперь нужно раскрасить наш проект. Вызовите Image > Adjustments > Hue/Saturation. Такие настройки использовал я:

6 Шаг

Теперь у нас есть довольно красивая текстура, но давайте сделаем ее еще более реалистичной. Я бы хотел добавить несколько трещин на камень. Это можно сделать, к примеру, какой-нибудь неплохой гранжевой кисточкой с тротуарными трещинами. Либо же наложить сверху какое-нибудь тематическое фото. Вот изображение, которое нашел я и пущу в работу.

7 Шаг

Сохраните картинку и перенесите ее поверх каменной текстуры на новый слой. Теперь нам нужно преобразовать фото так, чтобы трещины на асфальте расположились по всей плоскости рисунка. Нажмите Ctrl + T, чтобы вызвать инструмент Free Transform. Далее выберите в панели свойств в верхней части экрана инструмент Warp Tool и преобразуйте фото так, как того требует задумка (смотрим рисунок ниже). Нажимаем Enter.

8 Шаг

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

9 Шаг

Теперь смените режим наложения слоя на Darken и понизьте Opacity до 75% (либо, опять же, по вкусу).

10 Шаг

Вернитесь на слой с нашей оригинальной каменной текстурой и добавьте немного шума: Filter > Noise > Add Noise. Я использовал значение 6. Вот в итоге то, что у меня получилось:

Надеюсь, вы найдете достойное применение результатам данного урока. Всего хорошего!

Поделитесь уроком

Лучшие материалы

Правовая информация

В случае копирования урока указывайте автора и ставьте активную гиперссылку на наш сайт. Более подробную информацию вы можете получить в разделе «Правовая информация».

Переведено с сайта www.myinkblog.com, автор перевода указан в начале урока.

«Записаться.Онлайн»

Каталог развлечений и услуг с возможностью онлайн записи.

Источник

Секреты рисования камней в Photoshop.

Привет! Это мой первый текстовый урок по рисунку, и предназначен он для новичков в рисовании вообще, и в Фотошопе в частности.

Я сама сейчас прохожу тернистый путь обучения рисованию и никакого опыта или художественной школы за плечами у меня нет, поэтому я постоянно сталкиваюсь с какими-то проблемами и пытаюсь их для себя решить, разложив по полочкам.

Камни достаточно простой предмет для рисования, но сколько же проблем они у меня вызывали. Это мои камни:

1. Прежде всего создадим новый холст ( у меня чаще всего 1920 на 1080 и разрешение 72 dpi). Зальём его немного сероватым или бежевым цветом, так как на чисто белом листе труднее воспринимать рисунок и цвет.

2. Поищем несколько референсов камней в Гугле и на Пинтересте. Это могут быть фото (лучше большого размера) или даже рисунки других людей. Нам нужен подходящий референс на цвет (с него мы пипеткой возьмём палитру), хорошее фото большого разрешения с текстурой камня (мы её используем для повышения детализации) и несколько фото для вдохновения. Разместим референсы на нашем холсте. чтобы всё было перед глазами. Первое что мы сделаем — это набросок камня в линиях и начнём с общей формы камня.

4. А вот и первый секрет. Форма у нас уже есть, теперь нужно определить плоскости. И в этом главная проблема большинства людей. Многие просто чертят беспорядочные линии внутри общей формы и получается каша, где цвет потом просто создает непонятные пятна. Здесь важно просто понять, где находятся главные верхние плоскости камня, на которые и будет падать свет. Их важнее всего проработать, а всё остальное пусть просто уходит в тень.

5. Второй секрет: разнообразие цвета. Сейчас мы приступим к базовым заливкам цветом, а для этого создадим палитру для светлых и тёмных участков камня. На этом этапе вы должны четко представлять себе, откуда будет падать свет, а где будет тень. Подберём палитру для светлых и тёмных участком камня. Зальём цветом нашу форму (слой под наброском). Лучше идти в таком порядке: сначала залить весь камень базовым цветом, затем добавить цвет на свету, затем цвет в тени.

А теперь внимание! Разнообразим цвет камня: на свету добавим персиковых оттенков и жёлтого, а в тени-голубоватого, синего или фиолетового. .Можно добавить зелёного, ведь на камнях часто растёт мох. Немного сглаживаем переходы между цветами.

Слой с наброском у нас должен лежать поверх слоя с цветом. Переведём слой с наброском в режим мягкий или жёсткий цвет. Создадим новый слой над наброском и спрячем линии наброска, проработаем точнее форму камня и добавим деталей. Используем текстурную кисть.Здесь я, конечно, поленилась и можно бы получше, так что уж постарайтесь! Теперь слои можно слить. Лучше сначала сделать их не слитые копии, так, на всякий случай. Слили? Теперь можно воспользоваться Осветлителем и Затемнителем.

6. Третий секрет: фокус зрения и применение текстуры. Нам не нужно прорабатывать весь камень попиксельно. Давайте определим небольшую область на камне, куда должен смотреть зритель. Там мы проработаем какую-нибудь характерную трещину или скол.

Для этого мы возьмём небольшой фрагмент фотографии и положим её слоем сверху в режиме софт лайт (ну здесь можно поэкспериментировать, в зависимости от того какой у вас цвет камня). Подгоним её форму с помощью Свободной трансформации (Warp?).Прикрепим слои с текстурами маской к основному слою.Далее в меню Изображение-Коррекция поправим яркость/контрастность и цветовой баланс.

Нам нужно приравнять нашу текстуру по цвету к рисунку и как бы забледнить её, чтобы она не выбивалась из общей массы. Ластиком в режиме airbruch подотрём края текстуры. Теперь будем рисовать на слое сверху. Нам нужно по максимуму сделать текстуру не заметной. как бы “прорисовав” её. Острые грани камня на свету можно подчеркнуть самым светлым цветом.

7. Четвёртый секрет: светлое на тёмном, тёмное на светлом. Это достаточно размыто звучит, я знаю. Мы приступаем к проработке нашего камня и теперь секрет в том, чтобы создавать тёмные трещины на светлых поверхностях и светлые сколы там, где у нас тень. Помните, откуда падает свет, все поверхности или плоскости, обращённые к небу, должны освещаться, вертикальные части камня остаются в тени. Не возбраняется использовать инструменты Осветлитель и Затемнитель, если что-то пойдет не так. Текстурной кистью добавим разных пятнышек, выбоинок и сколов.

Источник

Накладывание текстуры на куб

Накладывание текстур на куб
Всем доброго времени суток! Обучаюсь OpenGL по урокам NeHe. После одного из уроков получил такой.

Текстуры не накладываются на куб
Добрый день! делаю лабораторную по компьютерной графике и не могу понять где ошибка. текстуры не.

Текстуры на куб и принцип наложения текстур
1. Использую VBO для отрисовки примитивов, текстурные координаты также передаются в буфер как.

Нарисовать куб, используя кубические текстуры
Не получается нарисовать куб, с кубическими текстурами. Точнее куб рисуется, но чёрный. Сначала.

Решение

Все зависит от того как ты швы пометил, как пометил так и порежет, помеченные швы выделяются красным в твоем случае все швы были помечены.
Метить швы просто, нужно представить что куб склеен из бумаги и как бы ты его порезал ножницами что бы получить развертку как я показал выше.

Решение

Это делается очень легко и быстро с помощью бесплатных редакторов Blender и GIMP Проще всего показать видео, как я это сделал за 3 минуты 40 секунд. Можно было быстрее, но я не очень торопился. Моё видео без звука: Texture Cube in Unity, Blender and GIMP

Куб — вершины, нормали, текстуры — как задать
В игре, которую я делаю, нужно нарисовать куб, задав вершины, индексы и все параметры вручную. Это.

Почему при наложении текстуры изменяется цвет фигур без текстуры
Исходный вид, когда текстура не накладывалась (рис-1). После наложения текстуры на одну из фигур.

Как побитово скопировать с текстуры на текстуры разных форматов, не прибегая к обращениям в CPU?
Если ли способ в opengl скопировать бит в бит текстуры любого формата в uint8 одноканальный, но с.

Куб смотрящий на камеру, что зрительно делает куб плоским квадратом
Здравствуйте. В общем это требуется для 3д редактора. А конкретнее, используется в виде точек.

Поворот Текстуры (не вращая полигон текстуры)
Возник такой вопрос? Как повернуть текстуру на какой то определенный градус не вращая при этом.

Накладывание картинки на картинку
Помогите решить проблему: есть 2 картинки. Нужно чтобы одна картинка была над второй картинкой. Не.

Источник

Урок 5: Текстурированный куб

Добро пожаловать на наш пятый урок. В этом уроке вы узнаете:

  • Что такое UV-координаты
  • Как самостоятельно загружать текстуры
  • Как использовать их в OpenGL
  • Что такое фильтрация и мип-маппинг и как их использовать
  • Как загружать текстуры с помощью GLFW
  • Что такое Alpha-канал

UV-координаты

Когда вы текстурируете какой-то объект, то вам необходимо как-то сообщить OpenGL, какая часть изображения прикрепляется к каждому треугольнику. Именно для этого и используются UV-координаты

Каждая вершина помимо позиции имеет несколько дополнительных полей, а также U и V. Эти координаты используются применительно к текстуре, как показано на рисунке:

Обратите внимание, как текстура искажается на треугольнике.

Загрузка Bitmap-изображений

Знание формата файлов BMP не является критичным, так как многие библиотеки могут сделать загрузку за вас. Однако, чтобы лучше понимать то, что происходит в таких библиотеках мы разберем ручную загрузку.

Объявляем функцию для загрузки изображений:

Теперь перейдем непосредственно к чтению файла.

Для начала, нам необходимы некоторые данные. Эти переменные будут установлены когда мы будем читать файл:

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

Заголовок всегда начинается с букв BM. Вы можете открыть файл в HEX-редакторе и убедиться в этом самостоятельно, а можете посмотреть на наш скриншот:

Итак, мы проверяем первые два байта и если они не являются буквами “BM”, то файл не является BMP-файлом или испорчен:

Теперь мы читаем размер изображения, смещение данных изображения в файле и т. п.:

Проверим и исправим полученные значения:

Теперь, так как мы знаем размер изображения, то можем выделить область памяти, в которую поместим данные:

Следует отметить, что приведенный код может быть использован только для загрузки 24-битных изображений (т. е. где на каждый пиксель изображения отводится 3 байта). С другими форматами BMP-файла вам следует познакомиться самостоятельно.

Мы вплотную подошли к части, касающейся OpenGL. Создание текстур очень похоже на создание вершинных буферов:

  • Создайте текстуру
  • Привяжите ее
  • Заполните
  • Сконфигурируйте

GL_RGB в glTextImage2D указывает на то, что мы работает с 3х компонентным цветом. А GL_BGR указывает на то, как данные представлены в памяти. На самом деле в BMP-файлах цветовые данные хранятся не в RGB, а в BGR (если быть точным, то это связано с тем, как хранятся числа в памяти), поэтому необходимо сообщить об этом OpenGL:

Последние две строки мы поясним позднее, а пока в части C++ мы должны использовать нашу функцию для загрузки текстуры:

**Очень важное замечание: **используйте текстуры с шириной и высотой степени двойки! То есть:

  • Хорошие: 128128, 256256, 10241024, 2*2…
  • Плохие: 127128, 35, …
  • Приемлемые: 128*256

Использование текстуры в OpenGL

Что же, давайте посмотрим на наш Фрагментный шейдер:

  • Фрагментному шейдеру требуются UV-координаты. Это понятно.
  • Также, ему необходим “sampler2D”, чтобы знать, с какой текстурой работать (вы можете получить доступ к нескольким текстурам в одном шейдере т. н. мультитекстурирование)
  • И наконец, доступ к текстуре завершается вызовом texture(), который возвращает vec4 (R, G, B, A). A-компоненту мы разберем немного позднее.

Вершинный шейдер также прост. Все, что мы делаем — это передаем полученные UV-координаты в фрагментный шейдер:

Помните “layout(location = 1) in vec3 vertexColor” из Урока 4? Здесь мы делаем абсолютно тоже самое, только вместо передачи буфера с цветом каждой вершины мы будем передавать буфер с UV-координатами каждой вершины:

Указанные UV-координаты относятся к такой модели:

Остальное очевидно. Мы создаем буфер, привязываем его, заполняем, настраиваем и выводим Буфер Вершин как обычно. Только будьте осторожны, так как в glVertexAttribPointer для буфера текстурных координат второй параметр (размер) будет не 3, а 2.

И вот такой результат мы получим:

Фильтрация и мип-маппинг.

Как вы можете видеть на скриншоте выше, качество текстуры не очень хорошее. Это потому, что в нашей процедуре загрузки BMP-изображения (loadBMP_custom) мы указали:

Это означает, что в нашем фрагментном шейдере, texture() возвращает строго тексель, который находится по указанным текстурным координатам:

Есть несколько решений, которые позволят улучшить ситуацию.

При помощи линейной фильтрации texture() будет смешивать цвета находящихся рядом текселей в зависимости от дистанции до их центра, что позволит предотвратить резкие границы, которые вы видели выше:

Это будет выглядить значительно лучше и используется часто, но если вы хотите очень высокого качества, то вам понадобится анизотропная фильтрация, которая работает несколько медленнее.

Аппроксимирует часть изображения, которая действительно видна через фрагмент. К примеру, если указанная текстура просматривается сбоку и немного повернута, то анизотропная фильтрация будет вычислять цвет, который находится в синем прямоугольнике, с помощью фиксированного количество сэмплов (Уровень анизотропии) вдоль его направления:

И линейная, и анизотропная фильтрация имеют недостаток. Если текстура просматривается с большого расстояния, то смешивать 4 текселя будет недостаточно. То есть, если ваша 3D модель находится так далеко, что занимает на экране всего 1 фрагмент, то фильный цвет фрагмента будет являться средним всех текселей текстуры. Естественно, это не реализовано из-за соображений производительности. Для этой цели существует так называемый мип-маппинг:

  • При инициализации вы уменьшаете масштаб текстуры до тех пор, пока не получите изображение 1х1 (которое по сути будет являться средним значением всех текселей текстуры)
  • Когда вы выводите объект, то вы выбираете тот мип-мап, который наиболее приемлем в данной ситуации.
  • Вы применяете к этому мип-мапу фильтрацию
  • А для большего качества вы можете использовать 2 мип-мапа и смешать результат.

К счастью для нас, все это делается очень просто с помощью OpenGL:

Загрузка текстур с помощью GLFW

Наша процедура loadBMP_custom великолепна, так как мы сделали ее сами, но использование специальных библиотек может быть предпочтительнее (в конечном итоге мы в своей процедуре многое не учли). GLFW может сделать это лучше (но только для TGA-файлов):

Сжатые текстуры

На этом шаге вы наверное хотите узнать, как же все-таки загружать JPEG файлы вместо TGA?

Короткий ответ: даже не думайте об этом. Есть идея получше.

  • Скачайте The Compressonator, утилита от ATI
  • Загрузите в нее текстуру, размер которой является степенью двойки
  • Сожмите ее в DXT1, DXT3 или в DXT5 (о разнице между форматами можете почитать на Wikipedia)

  • Создайте мипмапы, чтобы не создавать их во время выполнения программы.
  • Экспортируйте это как .DDS файл

После этих шагов вы имеете сжатое изображение, которое прямо совместимо с GPU. И когда вы вызовите texture() в шейдере, то текстура будет распакована на лету. Это может показаться более медленным, однако это требует гораздо меньше памяти, а значит пересылаемых данных будет меньше. Пересылка данных всегда будет дорогой операцией, в то время как декомпрессия является практически бесплатной. Как правило, использование сжатия текстур повышает быстродействие на 20%.

##Использование сжатой текстуры

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

После заголовку идут данные, в которые входят все уровни мип-мап. К слову, мы можем прочитать их все сразу:

Сделано. Так как мы можем использовать 3 разных формата (DXT1, DXT3, DXT5), то необходимо в зависимости от флага “fourCC”, сказать OpenGL о формате данных.

Создание текстуры выполняется как обычно:

Следующим шагом мы загружаем мип-мапы:

DXT компрессия пришла к нам из DirectX, где координатная текстура V является инвертированной по сравнению с OpenGL. Поэтому, если вы используете сжатые текстуры, то вам необходимо использовать (coord.u, 1.0 — coord.v), чтобы исправить тексель. Вы можете выполнять это как при экспорте текстуры, так и в загрузчике или в шейдере.

Заключение

В данном уроке вы узнали как создавать, загружать и использовать текстуры в OpenGL.

Стоит отметить, что в своих проектах мы настоятельно рекомендуем вам использовать только сжатые текстуры, так как они занимают меньше места, быстрее загружаются и используются. Для этих целей можете также использовать The Compressonator.

Источник

Оцените статью
Юридический портал
Adblock
detector