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

Я уже не раз сталкиваюсь с такой проблемой на форумах о компьютерной графике: кто-то сделал хорошую текстуру при помощи альфа-маски, но переход между объектом и фоном выглядит немного странно. Давайте возьмем, к примеру, этот листок (цветная текстура и альфа-канал рядом):

1alphabg

Хороший чистый альфа-канал должен отлично смотреться в 3D. Но посмотрите, что происходит, когда он применен к плоскости в вашем любимом 3D-приложении:

2alphabg

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

3alphabg

К счастью, есть довольно простое решение: достаточно залить фон тем же цветом, что и листья, таким образом, если альфа-канал наложить на полигон, прозрачность цвета не изменится:

4alphabg

Теперь переход идеально гладкий:

5alphabg

Все довольно просто, но как быть с разноцветными текстурами? (простите за отвратительную текстуру)

6alphabg

Чтобы границы смешивались красиво, фон должен быть в одном месте синего цвета, в другом — оранжевого, а в третьем месте он должен быть зеленым! Вы конечно можете нарисовать все вручную, но это очень трудоемкая работа, ко всему прочему еще и скучная. К счастью, существует быстрый способ решить данную проблему.

Во-первых, сделайте копию цвета своей текстуры, который мы будем маскировать. (Если у вас много слоев, то вы можете сделать это без выравнивания документа. Нажмите клавишу CTRL на вашей альфа-маске, а затем нажмите сочетание клавиш Ctrl-Shift-C . Это горячие клавиши для инструмента «Copy Merged», скопируйте выбранный холст как он есть, и после этого все слои объединятся.)

Вставьте эту копию в новый слой.

7alphabg

Теперь примените инструмент Gaussian Blur размером около 2 пикселей к этому слою:

8alphabg

Скопируйте слой, перетащив его на иконку «New Layer»:

10alphabg

А потом объедините со слоем ниже, нажав сочетание клавиш CTRL-E. Повторите эту процедуру несколько раз: копировать, объединить, копировать, объединить… каждый раз, когда вы будете это делать, вы увидите, что слой расширится и получится менее прозрачным по краям. Скорее всего, четыре — пять раз будет достаточно, чтобы ваша картинка выглядела следующим образом:

11alphabg

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

12alphabg

Как вы видите, пиксели по краям листа в основном такого же цвета, как и силуэт альфа-канала: там, где лист оранжевый, цвет фона тоже оранжевый, где пиксели синие, фон синий. Больше нет проблем с прозрачностью! Возможно, это выглядит поморочено, но на самом деле вам потребуется не более 15 секунд, чтобы все сделать, и вполне вероятно, что вы автоматизируйте процесс, записав экшен.

Источник: www.cgtextures.com
Перевод: RAIT.kz — статьи о компьютерной графике