Три шейдера JS в Unity

Я работаю над проектом в Unity, который использует AR для размещения продуктов в реальном мире. Эти продукты (геометрия и материалы) загружаются с http-сервера и преобразуются в игровой объект в Unity.

Эти продукты изначально созданы в ThreeJS (не спрашивайте, почему) и имеют другую геометрию/структуру материала по сравнению с Геометрия/материалы Unity.

У меня работает геометрия, но у меня проблемы с материалами. Шейдер Standard в Unity не содержит всех параметров для создания материал (например: альфа-карта, карта окружающей среды, преломление, карта смещения, карта шероховатости, двойная сторона и т. д.).

Я искал различные плагины/библиотеки в Asset Store/GitHub (например, LUX, Bit2Good, Shader Sandwich или Простой физический шейдер), но кажется, что они у всех отсутствуют некоторые параметры. Я подумываю написать шейдер Phong/Physical самостоятельно, но это определенно займет у меня несколько недель.

У вас есть предложения?


person Tostifrosti    schedule 13.12.2018    source источник
comment
Написание базового Phong шейдера не займет много времени; в Интернете есть множество примеров математики, связанной с параметрами, которые вы упомянули. Я бы также посмотрел на FX Composer от NVIDIA. Это может ускорить этот процесс, так как вы можете просматривать изменения в своем шейдере в режиме реального времени, единственным недостатком этого является то, что NVIDIA больше не поддерживает его.   -  person Taco タコス    schedule 13.12.2018
comment
Шейдер Блинна-Фонга действительно должен быть прост в реализации. Меня больше беспокоит физический шейдер. Мне было интересно, есть ли у кого-то такая же идея реализовать материалы ThreeJS в Unity и разместить код на GitHub (или в AssetStore).   -  person Tostifrosti    schedule 13.12.2018
comment
Как оформлены модели? Рассматривали ли вы преобразование моделей в более стандартный формат, для которого уже есть загрузчики, такие как GLTF?   -  person Garrett Johnson    schedule 18.12.2018
comment
@GarrettJohnson Модели преобразованы в самодельный формат. После парсинга этого формата геометрическая часть будет передана самодельному загрузчику (который в будущем будет заменен на Draco, если репозиторий более стабилен). Материальная часть также будет разобрана самодельным загрузчиком, использующим «Стандартный» шейдер единства. Я хочу заменить этот шейдер, чтобы использовать больше параметров, которые я описал в своем вопросе выше. Кроме того, загрузчик GLTF, на который вы ссылается, кажется, все еще находится на пути к версии 1.0.   -  person Tostifrosti    schedule 18.12.2018


Ответы (1)


В стандартном шейдере нет альфа-карты - в качестве альфа-карты используется альфа-канал основной текстуры.

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

В стандартном шейдере нет преломления - это стандартный шейдер.

Карта смещения в стандартном шейдере называется картой высот.

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

Двусторонняя - нет.

Для всего этого вам нужно будет написать свой собственный шейдер.

Предложение:

Шаг 1. Найдите шейдер для каждого из этих свойств

Шаг 2. Объедините их, скопировав соответствующий код

person Nika Kasradze    schedule 13.12.2018
comment
Ника, спасибо за быстрый ответ! Я уже знал, что стандартный шейдер в Unity не принимает эти физические параметры (примите карту высот, спасибо!). Я надеялся, что у кого-то есть такая же идея реализовать материалы ThreeJS в Unity, и код будет доступен на GitHub. Боюсь, что мне придется самому писать эти шейдеры. - person Tostifrosti; 13.12.2018