Unity. 3D 3. х Введение в Surface Shaders / Хабрахабр. Рано или поздно возможностей стандартных шейдеров вам станет не хватать, и тогда вам на помощь придут Surface Shaders. По сути это надстройка над обычными шейдерами, которая позволяет вам писать более понятный и компактный код. В Surface Shader вы можете управлять освещением, тенями, путями отрисовки (rendering path) используя все тот же Cg / HLSL код. Создание шейдера с нуля. Вот полная версия шейдера, откуда я буду брать куски для рассмотрения. Первая строка это путь шейдера. Shader "Agasper. Shaders/Test. Unity3D. Полезные файлы. - Texture Kit 1.0- Это более 140 пользовательских текстур в том числе природных текстур таких как: как кирпич, дерево, стекло, кожа и многое, многое другое.. Мне нужна модель осколков стекла (окна) и разбитой двери! *Желательно. А стекло и дверь одинаковые, только текстуры разные. в 9:22 . В этой статье я расскажу вам, как сделать "стеклянное" стекло в программе всем вспомогательным объектам несложные текстуры. Wood Texture Pack HQ. Содержит 12 текстур деревьев с normal, specular картами. Данный пак содержит 315 качественных фотореалестичных текстур для Unity3d разрешением 1024x1024 и форматом tga.. Запуск кода в Unity: компоненты сценария. 33 1.3.2. Программа MonoDevelop — межплатформенная среда разработки. Текстура земли для cinema 4d, для unity3d, для 3d max? для фотошоп скачать бесплатно. Бесшовная текстура земли +с травой. hd текстуры земли высокого разрешения. Как сделать стекло в Vray.. Shader" {. По этому пути он будет доступен в инспекторе. Properties. Далее идут Properties, это параметры которые вы сможете задать в инспекторе. Каждый параметр имеет название переменной, описание, тип и значение по- умолчанию. Properties {. _Color ("Main Color", Color) = (1,1,1,1). Spec. Color ("Specular Color", Color) = (0. Shininess ("Shininess", Range (0. Main. Tex ("Base (RGB) Gloss (A)", 2. D) = "white" {}. _Bump. Map ("Normalmap", 2. D) = "bump" {}. _Amount ("Extrusion Amount", Range(- 1,1)) = 0. Типы данных: name («display name», Range (min, max)) = number. Диапазон значений типа float от min до max, в инспекторе отобразится как слайдерname («display name», Color) = (number,number,number,number)Значение типа цвет, значение по- умолчанию должно быть RGBA float от 0 до 1. В инспекторе отобразится как color pickername («display name», 2. D) = «def_col» { options }Описывает текстуру. В инспекторе будет как текстураname («display name», Rect) = «def_col» { options }Описывает текстуру с размером не 2n. В инспекторе будет как текстураname («display name», Cube) = «def_col» { options }Описывает Cubemap текстуру. В инспекторе будет как текстураname («display name», Float) = number. Просто float, в инспекторе будет как поле ввода с цифройname («display name», Vector) = (number,number,number,number)Описывает вектор. Значение по- умолчанию (def_col) для типов Rect, 2. D и Cubemap может быть пустой, либо: «white», «black», «gray», «bump». Оно указывает какого цвета пиксели будут по- умолчанию внутри текстуры. Вот что мы увидим в итоге в инспекторе: Subshaders. Далее пишется Sub. Shader. Когда юнити пытается отрисовать объект, она ищет первый подходящий Sub. Shader в списке это шейдера. Если ни один Sub. Shader не найден, то произойдет ошибка. Например это бывает нужно в ситуации когда вы хотите реализовать возможности Shader Model 3. Внутри Surface Sub. Shader находятся теги Sub. Shader'а и собственно сам код. Тэг Render. Type = «Opaque» означает что мы собираемся отрисовать непрозрачный объект. Подробнее по поводу тэгов можно почитать тут и тут. Sub. Shader {. "Render. Type" = "Opaque". Собственно сам код. В коде Surface. Shader'а вы можете описать три функции (в принципе можно и больше, но редко нужно): Фукцию расчета вертексов. Фукцию отрисовки поверхности. Фукцию расчета освещения. Для примера напишем шейдер Diffuse Bumped Specular с морфингом. Функцию расчета освещения в рамках данной статьи я описывать не буду, мы созьмем стандартный Blinn. Phong. CGPROGRAM. Blinn. Phong vertex: vert. CGPROGRAM — директива объявляющая что мы пишем на языке Cg (завершается директивой ENDCG). Второй строкой мы объявляем что: процедура отрисовки поверхности называется surfв шейдере будет использоваться свет типа Blinn. Phong (еще бывает Lambert, Unlit или своя процедура)процедура изменения вертексов называется vert. Теперь объявляем переменные, которые будут использоваться в коде: sampler. D _Main. Tex. sampler. D _Bump. Map. half _Shininess. Юнити позаботится о том, чтобы данные из параметров шейдера, объявленных вверху, попали в эти переменные. Важно назвать их так же как и в параметрах шейдера. Amount . А вот и процедура вертексной части нашего шейдера. Для примера возьмем координаты текущего вертекса и прибавим к ним нормаль умноженную на текущие координаты и коэффициент из параметров шейдера. Конечно получится какая- то хрень, но для примера вполне достаточно. Слайдером Amount вы можете регулировать степень искажения объекта. Пример: В официальной документации есть пример опухшего солдата. Они просто подняли все вертексы вдоль нормали: v. Amount . Что еще есть внутри: float. UV координаты первой текстурыfloat. UV координаты второй текстурыfloat. Тут можно прочитать полную статью по вертексным шейдерам. Input {. float. 2 uv_Main. Tex. float. 2 uv_Bump. Map. В структуре Input вы можете попросить у шейдера дополнительные переменные, которые вам понадобятся для расчетов в процедуре поверхности. Мы попросили UV координаты обеих текстур. Переменная должна называться uv_Название. Текстуры для первых UV координат и uv. Название. Текстуры соответственно для вторых. Полный список того, что там можно указать вы найдете здесь. Вот и сама процедура отрисовки поверхности: void surf (Input IN, inout Surface. Output o) {. //Получаем цвет точки по текущим UV координатам. D(_Main. Tex, IN. Main. Tex). //Смешиваем с оттенком из параметров. Albedo = tex. rgb * _Color. Степень отражения будет зависеть от яркости точки. Gloss = tex. rgb. Размытие будет зависеть от параметров шейдера. Specular = _Shininess. Распаковываем нормаль из соответствующей текстуры. Normal = Unpack. Normal(tex. D(_Bump. Map, IN. Bump. Map)). В нее передается структура Input, а внутри надо заполнить структуру Surface. Output, которая имеет следующий вид: struct Surface. Output {. half. 3 Albedo; //Альбедо поверхности (Цвет). Normal; //Нормаль поверхности. Emission; //Эмиссия (используется для расчета отражения). Specular; //"Размытие" отблеска в данной точке (зависит от направления камеры (dot(view. Dir, Normal)). half Gloss; //Сила отблеска в данной точке. Alpha; //Прозрачность в данной точке (не будет использоваться в "Render. Type" = "Opaque"). Заканчиваем шейдер строкой. Fall. Back "Specular". Это значит, что если шейдер по каким- то причинам не заработает на клиентской машине, то нужно откатиться до шейдера Specular. Полная версия шейдера из примера. Материалы использованные для написания статьи: http: //unity. Components/SL- Surface. Shadershttp: //unity. Components/SL- Surface. Shader. Examples. Components/SL- Sub. Shaderhttp: //unity. Components/SL- Subshader. Tagshttp: //unity. Components/SL- Shader. Replacement. html.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
December 2016
Categories |