Наложение текстур по маске

Шейдеры и все-все-все.

Re: Наложение текстур по маске

Сообщение Guyver 11 фев 2011, 15:38

я к сожалению на вскидку не нашёл как можно выудить конкретно компоненту у элемента выражения ... (можно былоб 1й текстурой задавать маску для 4х слоёв)

но вот например из документации шейдер

Синтаксис:
Используется glsl
Shader "Examples/2 Alpha Blended Textures" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _BlendTex ("Alpha Blended (RGBA) ", 2D) = "white" {}
    }
    SubShader {
        Pass {
            // Apply base texture
            SetTexture [_MainTex] {
                combine texture
            }
            // Blend in the alpha texture using the lerp operator
            SetTexture [_BlendTex] {
                combine texture lerp (texture) previous
            }
        }
    }
}
 


таким образом можно делать 1 слой за 1 проход ... а проходов сколько угодно .. но тогда и текстур масок будет у вас вагон .. для каждого слоя по масочке с альфой

ну и + проходик всё это дело умножить на лайт мапу

т.о. для 4х слоёв порядка 5ти проходов ... 4 маски и 1 лайт мапа (мне кажется филл рейт + пропуск такого кол-ва геометрии по шине выступит в роли ботл нека ... тем более яблоки)

если кто то знает как из вершины можно выкалупать цветовую компоненту и использовать в
combine constant lerp(texture) previous - подобном выражении,
то можно маски запеч в вершины в RGBA компоненты и за каждый проход рисовать до 2х слоёв
т.о. будет всего 3 пасса ... 2 по 2 слоя + 1 лайт мап

п.с. я подобное делал давно .. под ОГЛ на комбайнерах текстурных блоков, когда пытался делать свой двиг ... а в синтаксисе [unity 3D] материалов может и не выгореть. хотя судя по всему combine это враппер установки комбайнера но чёт както скудно с аргументами.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Наложение текстур по маске

Сообщение Zaicheg 11 фев 2011, 15:44

Нет, текстуры у меня по маскам блендятся прекрасно тем последним кодом, который я тут выкладывал (24 ноя 2010, 23:48).
Я не понимаю именно как мне лайтмапу на это всё наложить.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Наложение текстур по маске

Сообщение Guyver 14 фев 2011, 09:36

добавил к вашему шейдеру текстуру + 1 проход в котором всё что получилось до этого умножается на новую текстуру

т.о. если текстура чёрно-белая - будет как раз затенение по лайт мапу (у себя попробовал из подручных текстур-похоже на правду)

Синтаксис:
Используется glsl
Shader "TerrainBlendMask"
{
        Properties
        {
                _Color ("Main Color", Color) = (1,1,1,1)
               
                _Grass ("Grass", 2D) = ""
                _Dirt ("Dirt", 2D) = ""
                _Mask ("Mask (Alpha)", 2D) = ""

                _LightMap ("LightMap texture", 2D) = "white" {}
        }

        SubShader
        {
                Tags { "RenderType"="Opaque" }
                LOD 100

                Pass
                {
                        Tags { "LightMode" = "Vertex" }
                       
                        Material
                        {
                                Diffuse [_Color]
                                Ambient [_Color]
                        }
                        Lighting On
                       
                        SetTexture [_Grass]
                        {
                                Combine texture * primary DOUBLE, texture * primary
                        }
                }      

                Pass
                {
                        Tags { "LightMode" = "Vertex" }
                       
                        Material
                        {
                                Diffuse [_Color]
                                Ambient [_Color]
                        }
                        Lighting On
                       
                        Blend SrcAlpha OneMinusSrcAlpha
                        SetTexture[_Dirt] {Combine texture * primary DOUBLE, texture * primary}
                        SetTexture[_Mask] {Combine previous, texture}
                }

                Pass {
                        Blend DstColor Zero
                        SetTexture [_LightMap] { combine texture }
                }
        }
}


п.с. правка .. в данном шейдере у вас происходит следущее:
1й проход - накладывается текстуры Grass + свет + цвет дифузный заданный
2й проход - накладывается текстура Dirt по альфе текстуры Mask
теперь 3й проход - всё что было до этого умножается на текстуру LightMap

т.о. у вас максимум блендится 2 слоя .. увы.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Наложение текстур по маске

Сообщение Zaicheg 14 фев 2011, 11:20

т.о. если текстура чёрно-белая - будет как раз затенение по лайт мапу (у себя попробовал из подручных текстур-похоже на правду)

А как мне эту текстуру получить?
Попробовал кинуть на террейн материал, принимающий тени, запёк через beast лайтмапу, накинул её на свой материал в слот _LightMap -- теней нет. Больше ничего в голову не пришло )

т.о. у вас максимум блендится 2 слоя .. увы.

Блендится и больше, если проходов добавить и масок.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Наложение текстур по маске

Сообщение Guyver 14 фев 2011, 12:03

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

соберу тест сцену, проверю у себя, выложу скриншоты если всё получится.

вообще наложение карты теней это просто .. т.к. цвет картинки у нас задаётся 0..1 и цвет из карты теней тоже 0..1 ... притом где темнее там ближе к 0, то умножив итоговую картинку на карту теней мы получим затемнение вплоть до чёрного там где тени ... и осветление вплоть до оригинала (*1.0) там где в карте теней светло.

разумеется развёртка у карты теней должна быть такая же как и например альфа_маски

такие карты легко делает какой нибудь TerraGen например.. тем более где то мелькала мысль что вы юзаете меш в качестве терейна (не компонент терейн) ... т.о. лайт мапу можно получить в том же максе..
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Наложение текстур по маске

Сообщение Zaicheg 14 фев 2011, 12:33

Да, террейн мешем, смоделенным вручную. Дело в том, что объекты, дающие тени, расставляются непосредственно в Unity и поэтому их не запечь в стороннем пакете.
Тестовый проект подготовлю в течение пары дней.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Пред.

Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2