Как сделать прозрачный материал в unity

Обновлено: 07.07.2024

Если использовать тайловые текстуры для покрытия больших поверхностей, то довольно быстро появится проблема — паттерны в изображении будут повторяться. Специалисты Unity Lab Томас Делиот и Эрик Хейц в 2019 году опубликовали метод текстурирования, который позволяет избежать этой проблемы, — процедурное стохастическое (случайное) текстурирование.

Слева — пример повторяющихся паттернов, справа — применение техники процедурного стохастического текстурирования

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

Сам плагин — это вариация Standard Shader для Unity. После импорта пакета нужно выбрать StandardStochastic shader для материала. При этом интерфейс будет таким же как у Standard shader, но с двумя новыми элементами настройки сверху.

В меню Stochastic Inputs можно выбрать оригинальную текстуру для генерации новой.

Затем достаточно нажать на кнопку Apply, чтобы материал обновился, а сам процесс был завершён.

В следующих примерах показано, как прототип работает с различными материалами, используя небольшие (256²) входные текстуры.

Всем привет! Меня зовут Григорий Дядиченко, я СТО Foxsys, и я всё ещё люблю графику. В прошлый раз я рассказывал, что неплохим упражнением является сборка различных базовых материалов для тренировки в создании интересных эффектов. Давайте сегодня проведём такое упражнение вместе и разберём, каким образом можно получить в Unity такой материал как акрил, который будет работать в AR и на мобильных платформах. Кому интересно - добро пожаловать под кат!


Результат

Для начала небольшое видео с результатом, чтобы было понятно, что мы будем делать. Так же в данном репозитории лежит всё решение с исходниками. А теперь пожалуй начнём.

Какой акрил будем делать?

Когда-то давно майкрософт выпустил ролик с замечательной дизайн концепцией Microsoft fluent design. Там показаны достаточно интересные подходы к дизайну, которые круто смотрятся в дополненной и виртуальной реальности. Базовая идея основывается на объёме, свете, моушене и реалистичных материалах. По сути то, что Microsoft называет в своих интерфейсах акрилом мы и будем реализовывать. Подобное “мутное стекло” так же используется в айос и выглядит достаточно интересно. Один из примеров интересного применения в приложениях - это приложение New Yourk Times в разделе с дополненной реальности.


В данном случае мы акрил будем рассматривать не с точки зрения физических процессов, какой-то сложной математики, а возьмём подход прямо из документации MSDN с небольшой доработкой для 3д, который допустим очень интересно использовать для проектов в дополненной реальности на Microsoft Hololens, но так же можно использовать в любых других проектах.

Данный акрил состоит по сути из:

Color Burn/Затемнение основы

Для добавления объёма мы так же добавим в этот процесс Эффект Френеля. Так как он отлично имитирует нужный нам визуал, для того, чтобы у нашей модели были видны грани. Иначе данный акрил применим только для 2д интерфейсов, так как по самой технике не имеет объёма.

Blur или размытие


Сразу стоит сказать, что сам по себе акрил конечно в этом случае получится нечестный. Так как он либо будет учитывать сам себя, либо не будет учитывать другие акриловые объекты находящиеся за ним. Так как по сути в дальнейшем мы наше размытие пробрасываем в 3д модель и используем, как текстуру на модели. Для этого мы рассчитываем uv координаты исходя из позиции вершины на экране.

Photoshop Blend Modes


По сути тут мы смешиваем наш кадр заднего фона с неким цветом и получаем необходимый нам эффект. _BurnColor можно регулировать чтобы добиваться разного визуала. Но по умолчанию его можно в целом не трогать. И мы получим эффект, как на картинке.

Эффект Френеля


Так как у нас нет рефракции и по сути 3д модель выступает сейчас, как некая маска для того, чтобы показывать нам, что же скрыто за ней в размытой текстуре экрана - нам нужно как-то добавить объём. Можно в целом реализовать преломления, но они тут необязательны, так как с таким сильным размытием визуальная разница будет незаметна. По сути акрил - это отражающий материал, поэтому мы можем задать нужный нам объём Эффектом Френеля.

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

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


С шумом всё довольно просто. У нашей модели есть развёртка. Так как в uv один мы пишем параметры пересчитанные для вершинной части, то для передачи в фрагментную часть оригинальной развёртки можно использовать uv2 (или поменять их местами, тут кому как больше нравится) А дальше мы смешиваем шум по принципу того, что чёрный - это у нас альфа канал равный нулю, а в белый - альфа равная единице. И получаем нужное нам лёгкое “напыление на материале”. Собственно всё.

Tint или задание оттенка


Так как в Unity чаще всего Tint подразумевает умножение цветов, то таким образом его и сделаем. Просто умножим нужный нам цвет, на цвет полученный в шаге Color Burn.

И всё, шейдер готов и у нас есть такой прикольный акриловый материал в Unity. По своей сути при том, что кажется что он прозрачный - он является непрозрачным материалом достаточно шустро работающим даже на слабых мобильных устройствах. Но за скорость надо платить и этот эффект не является честным акрилом и всё же обладает рядом недостатков. Но в большом числе случаев такой реализации будет достаточно, чтобы добиться нужного визуального эффекта в сцене.

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

Вот и тренировке конец

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

Все исходники вы можете найти в репозитории, и если у меня будет в обозримом будущем время я постараюсь разобрать ещё несколько материалов и добавить их в репозиторий. Спасибо за внимание!

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

Сделать возможность собрать на основе этого шейдера окно с выложенной мозаикой

Сделать возможность красить 3д модели в разные цвета в один dc без использования текстурных атласов.

Сделать шум не в виде текстуры, а рассчитываемым получив нужный мутный визуальный эффект.


Рейтинг:

| Как нарисовать плакат единства в разнообразии Индии. Пошаговое руководство по рисованию для начинающих |

Кто-нибудь знает, как сделать стеклянный материал в Unity 5?

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

Поиск в Google ничего мне не дал для Unity 5, так что это должно быть довольно легко сделать.

Это для душевой двери и плоского стекла вот так:


  • \ $ \ begingroup \ $ Вам нужно будет либо опубликовать изображение, показывающее то, что вы хотите, либо описать его более подробно. Вы хотите иметь рефракцию? Вам просто нужна в основном прозрачная панель? Совершенно непонятно, чего вы пытаетесь достичь. \ $ \ endgroup \ $
  • \ $ \ begingroup \ $ Вы используете Unity бесплатно или профессионально? \ $ \ endgroup \ $
  • \ $ \ begingroup \ $ Использование UNITY 5 Free \ $ \ endgroup \ $
  • \ $ \ begingroup \ $ Значит, вы хотите, чтобы он был прозрачным, немного темнее и имел отражения? (Просто пытаюсь уточнить.) \ $ \ Endgroup \ $
  • \ $ \ begingroup \ $ Да, это правильно \ $ \ endgroup \ $

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

  1. Glass Shader от Аластер Эйчисон
  2. Светоотражающий прозрачный "Стеклянный шейдер" производства Benoculus
  3. Поиск в магазине ресурсов Unity: Glass
  4. Бесплатный актив - Бьющееся стекло

РЕДАКТИРОВАТЬ: поскольку это привлекает внимание, я решил добавить пошаговое руководство для очень простого окна / прозрачности

  1. Создавайте PNG-изображения с прозрачностью там, где вам это нужно.
  2. Перетащите его в свои активы внутри Unity
  3. Перетащите его из ресурсов в свой игровой объект, который вы хотите использовать в качестве стекла
  4. Выберите шейдер -> Прозрачный -> Зеркальный (или любой из вариантов, мне понравился зеркальный)
  5. наслаждаться

Я создал простое изображение 64x64 с полной прозрачностью фона и добавил на него черный текст.


Затем я импортировал его в единицу (перетащил), а затем перетащил его по кубу, который у меня был там. После этого я выбрал для него прозрачный шейдер.


Результаты (игра запущена)


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

Для создания стеклянного материала в Unity 5 использовать шейдеры и материалы Unity очень просто. Тебе следует:

При желании вы можете добавить текстуры с альфа-каналом для большего контроля. например не чистое стекло.

В официальном блоге Unity опубликована ссылка на пакет .zip, в котором есть примеры скриптов и шейдер, использующий новые командные буферы Unity 5 в качестве официального решения для реализации преломления и прозрачности стекла.

В моей игре я хочу сделать объект прозрачным в течение 2 секунд, написав скрипт во время выполнения, если игрок столкнулся с определенным объектом во время игры. возможно ли это?

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

Вы заметите, что пример - это именно ваш вопрос.

Попробуйте использовать этот метод расширения:

Затем вы можете вызвать его:

объект, на который вы звоните, должен иметь шейдер, который поддерживает прозрачность. В Unity5 при использовании стандартного шейдера вы должны явно установить его в "Прозрачный", чтобы иметь возможность манипулировать альфа-значением. введите описание изображения здесь

Также должно быть ясно, что значение альфа-значения - это float, который идет от 0.0f до 1.0f, так, например, установка

сделает объект прозрачным на 50%.

в Unity 5 лучший способ, который работал у меня (TO MAKE OBJECT INVISIBLE), состоял в том, чтобы установить все материалы игрового объекта, которые я хотел бы невидимым для прозрачности в режиме рендеринга. Затем нажмите на маленькую круглую кнопку рядом с альбедо, а затем прокрутите список предметов, пока не найдете один из них, называемый UIMask. Выделите его и нажмите enter. Я новичок, поэтому спросите, нужно ли вам больше разъяснений.

* Обратите внимание, что это жесткое исправление, и я не уверен, что вы можете изменить это с помощью кода.

** это было сделано для границ в roll-a-ball с включенной функцией прыжка игрока. необходимо было сделать стены невидимыми, но также и столкновения, способные остановить объект, родившийся в воздухе,

Посмотрите другие вопросы по меткам unity3d unityscript или Задайте вопрос

Читайте также: