Програмиране на шейдъри, том 4

Прозрачни и холографски шейдъри

Добре, така че сега знаем как да добавяме текстурни карти и нормални карти към шейдърите и да манипулираме техните UV. Да видим какво още можем да направим с тях.

Глава 2.6

Повърхностни шейдъри и картографиране на текстури, Създаване на прозрачен материал

Ще започнем, като направим нов шейдър и материал. Имайте под ръка изображение, което искате да използвате. Редактирайте частите от изображението, които искате да бъдат полупрозрачни, и ги маскирайте с по-тъмен цвят. Алфа каналът на изображението ще определи прозрачността на стъклото.

Кодът на вашия шейдър ще изглежда така:

В този шейдър има няколко нови концепции. Първо, Таговете се използват за добавяне на информация относно изобразяването на обекта. По-специално, тагът Queue се използва за замяна на поведението по подразбиране на Unity за сортиране на обекти вместо вас въз основа на разстоянието им от камерата - близките обекти се рисуват върху далечните.

Ето списък на вградените опашки за рендиране, които можете да използвате в шейдърите на Unity:

  • Фон:Тази опашка за изобразяване се изобразява първа. Използва се например за скайбоксове. (Стойност на опашката за изобразяване = 1000)
  • Геометрия:Това е опашката за изобразяване по подразбиране, използвана за повечето обекти. Непрозрачната геометрия използва тази опашка. (Стойност на опашката за изобразяване = 2000)
  • AlphaTest: Алфа-тестваната геометрия използва тази опашка. Различава се от опашката Geometry по това, че е по-ефективно да се рендират алфа-тествани обекти, след като всички плътни обекти са начертани. (Стойност на опашката за изобразяване = 2450)
  • Прозрачен: Тази опашка за изобразяване се изобразява след Geometryи AlphaTest Всичко, смесено с алфа (шейдъри, които не записват в буфера за дълбочина), трябва да използва тази опашка за рендиране, като ефекти на стъкло и частици. (Стойност на опашката за изобразяване = 3000)
  • Наслагване:Тази опашка за изобразяване е предназначена за ефекти на наслагване. Всичко, рендирано последно, трябва да използва тази опашка за рендиране, като отблясъци от обектив. (Стойност на опашката за изобразяване = 4000)

Тагът IgnoreProjector прави този обект незасегнат от проекторите на Unity. Етикетът RenderType играе роля при подмяната на шейдъри, което ще бъде разгледано в бъдещ раздел.

Открихме и нова директива #pragma, alpha:fade, която показва, че всички пиксели от този материал трябва да бъдат смесени според техните алфа стойности с това, което е било на екрана преди.

Когато прилагаме този нов прозрачен материал с текстура на витраж към нашата централна сфера, получаваме този резултат. Можете ясно да видите, че някои части от текстурата са по-прозрачни от други.

Глава 2.7

Повърхностни шейдъри и картографиране на текстури, Създаване на холографски шейдър

Това е нещо направо от Стар Трек и всичко, от което се нуждаете, е прозрачност и силует. Нека да стигнем до него.

Започвайки с нашия текстуриран шейдър, нека добавим ново свойство _DotProduct. Ще го видите деклариран на обичайните места в кода по-долу. Също така имайте предвид, че този път трябва да добавим повече тагове към секцията с етикети и че нашият ред #pragma забранява осветлението, използва Lambertian отразяване (много по-евтино е — не се опитваме да симулираме реалистично материал) и сигнализира на Cg, че това е прозрачен шейдър, използващ alpha:fade.

Когато този нов шейдър се приложи към прекрасно зайче, откриваме, че изглежда така.

Колкото по-ортогонален спрямо вектора на изгледа на камерата е нормалният вектор на повърхността, толкова по-непрозрачен е той.

Точно както възнамерявахме!

Сладка.

Това е всичко за днес! Нагоре След това ще научим малко за картографирането на текстури и как да подчертаем терена под обект като RTS устройство!