Страница 1 из 1

Multitexturing. Dirt.

СообщениеДобавлено: 30 дек 2010, 16:17
Ursus
Может быть кто-нибудь встречал шейдер, работающий при версии 3.*, похожий на Lightmap-BumpSpec (два UV-set-а: UV: Диффуз, Спекуляр-Мап, Нормал-мап, UV2: Дирт-Мап ) + работа с тенями от источника света, но техника смешивания Диффуз+Дирт-Мап в итоге должна быть похожа на DiffuseDetail, и без реакции потери интенсивности Dirt на источник света.
(Планы изучения шейдерописания просто пока отложены на попозже).

Re: Multitexturing. Dirt.

СообщениеДобавлено: 30 дек 2010, 20:15
gnoblin
получается нужен bumpedspec + diffuse detail (uv2)

Re: Multitexturing. Dirt.

СообщениеДобавлено: 30 дек 2010, 22:34
Ursus
Да. И, удивительно, что такого нет в стандартной поставке; 90% контента для архитектуры в последних играх используют именно такую комбинацию.

Re: Multitexturing. Dirt.

СообщениеДобавлено: 31 дек 2010, 00:12
gnoblin
а зачем второй ув-канал если достаточно тайлинга?

Re: Multitexturing. Dirt.

СообщениеДобавлено: 31 дек 2010, 00:16
gnoblin
Синтаксис:
Используется glsl
Shader "Bumped Specular Detail" {
Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
        _Shininess ("Shininess", Range (0.03, 1)) = 0.078125
        _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
        _BumpMap ("Normalmap", 2D) = "bump" {}
        _Detail ("Detail (RGB)", 2D) = "gray" {}
}
SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 450
       
CGPROGRAM
#pragma surface surf BlinnPhong

sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _Detail;
float4 _Color;
float _Shininess;

struct Input {
        float2 uv_MainTex;
        float2 uv_BumpMap;
        float2 uv_Detail;
};

void surf (Input IN, inout SurfaceOutput o) {
        half4 tex = tex2D(_MainTex, IN.uv_MainTex);
        o.Albedo = tex.rgb * _Color.rgb * tex2D(_Detail,IN.uv_Detail).rgb * 2;
       
        o.Gloss = tex.a;
        o.Alpha = tex.a * _Color.a;
        o.Specular = _Shininess;
        o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}

FallBack "Specular"
}
 

Re: Multitexturing. Dirt.

СообщениеДобавлено: 31 дек 2010, 12:40
Ursus
Отличный шейдер в своём классе. Спасибо. Найдётся немало объектов, которые выглядят намного хуже без такого материала. Но в моём клиническом случае нужна ассоциация второго UV-seta c Detail (Dirt) #:-s
(Хотя есть недостаток: источники света в материале не должны выбелять Detail, как это же происходит с LightMap. В оригинальном DiffuseDetail
этого как раз не происходит)
gnoblin писал(а):а зачем второй ув-канал если достаточно тайлинга?

Архитектура требует проработки: первый UV-set для тайлинга (повышается плотность пикселя на кв. м), второй UV-set для создания уникальности всем плоскостям и придания эффекта реализма (скриншоты из Maya):
http://dl.dropbox.com/u/5582933/UV1_UV2.jpg

С Новым Годом!

Re: Multitexturing. Dirt.

СообщениеДобавлено: 31 дек 2010, 13:20
DbIMok
ну, в этом шейдере 3 UV используется. много? нужно именно 2?

Re: Multitexturing. Dirt.

СообщениеДобавлено: 31 дек 2010, 13:26
gnoblin
в шейдере используется только первый канал.

чтобы у dirt использовался второй, замените uv_Detail на uv2_Detail.

Всё равно не понял зачем тут второй UV, если можно для каждой текстуры и так независимо настраивать плотность и смещение текстуры.

(Хотя есть недостаток: источники света в материале не должны выбелять Detail, как это же происходит с LightMap. В оригинальном DiffuseDetail
этого как раз не происходит)

В этом шейдере Albedo смешивается как раз точно так же как в DiffuseDetail - что не так? :)

Re: Multitexturing. Dirt.

СообщениеДобавлено: 31 дек 2010, 14:08
Paul Siberdt
Именно двойная развертка позволяет при пользовании двух небольших текстур (тайла материала и маски грязи) получить большую вариативность рисунка поверхности.

Re: Multitexturing. Dirt.

СообщениеДобавлено: 31 дек 2010, 14:40
gnoblin
ок!
наверное ).

Re: Multitexturing. Dirt.

СообщениеДобавлено: 31 дек 2010, 15:33
Ursus
gnoblin писал(а):чтобы у dirt использовался второй, замените uv_Detail на uv2_Detail.
Блин. Сделал это сразу как только шейдер опубликовался здесь, но не сработало - не заметил, что этот параметр был в 2-х местах. Исправил теперь в обоих. Всё заработало! Огромное спасибо! Отличный подарок к Новому Году!
В этом шейдере Albedo смешивается как раз точно так же как в DiffuseDetail - что не так?
Ввёл в заблуждение Specular Color. Если на Color-е нет альфы со Спекуляром - канал заливается сплошным белым. Создаётся эффект пересвета. Если позаботиться о нужной текстуре Спекуляра - всё работает на отлично. Ещё раз спасибо!

Re: Multitexturing. Dirt.

СообщениеДобавлено: 31 дек 2010, 16:32
gnoblin
Ursus, см. ЛС