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

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

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

Сообщение Zaicheg 17 ноя 2010, 09:35

Нужно множить тайлы двух текстур по мешу в соответствии с чёрно-белой маской. Где чёрное -- тайлим первую, где белое -- тайлим вторую, где серое -- как-то смешиваем. Но хорошо будет даже и просто чёрно-белую маску без смешивания. Куда мне копать в шейдерах, чтобы это сделать?
Как дальнейшее развитие: держать на маске изображение в нескольких каналах и тайлить сразу несколько текстур в соответствии с каждым из этих каналов.

Гноблин согласился помочь мне :-bd , но так как самому всё равно надо в шейдерах разбираться помаленьку, то создаю тему.

Конечная цель: текстурировать ландшафт-меш (созданный в генераторе world machine) без создания для него огромной текстуры, полностью накрывающей его. Целевая платформа: iOS c нижним порогом на iPod Touch 2gen. Причина: текстуру 2048х2048 тот же айпод уже не съест (а даже на ландшафте 300х300м такой текстуры недостаточно для нормальной детализации).

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

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

Сообщение Battle Angel Alita 17 ноя 2010, 10:24

А этот айПод 2Г умеет шэйдеры, или только FFP?
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

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

Сообщение Zaicheg 17 ноя 2010, 10:41

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

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

Сообщение Battle Angel Alita 17 ноя 2010, 12:18

Посмотрела, в 2Г только FFP. Поэтому вот это вот
Как дальнейшее развитие: держать на маске изображение в нескольких каналах и тайлить сразу несколько текстур в соответствии с каждым из этих каналов.

будет сложновато сделать.

Для интерполяции п альфе есть команда lerp.
Выдержка из документации:
combine src1 lerp (src2) src3
Interpolates between src3 and src1, using the alpha of src2. Note that the interpolation is opposite direction: src1 is used when alpha is one, and src3 is used when alpha is zero.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

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

Сообщение Woolf 17 ноя 2010, 14:09

Вообще-то задача тривиальная для 4х текстур на земле. Используете текстуру с альфой, интенсивность канала - это интенсивность конкретной текстуры в данной точке. На шейдере считается простым умножением цвета текстуры на интенсивность канала. Код на юнити показать не могу, поскольку фреймворк юнити не знаю пока )

Если же задача стоит использовать больше 4 текстур на точку, то, возможно, вам лучше сделать многократный проход, каждый раз с конкретной текстурой. Это медленнее, зато гораздо универсальнее. Кроме того, можно использовать одну текстуру, которая содержит сразу много разных тайлов земли. Подобную технологию я использовал здесь:

http://forum.mirgames.ru/index.php?show ... imes&st=30

и шейдер там совсем не нужен, блендинг идёт по сетке ландшафта
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

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

Сообщение Phoenics 17 ноя 2010, 14:17

Я себе для ланшафта примерно так делал смешивание, 4-х текстур с дополнительными коэфициентами

Синтаксис:
Используется glsl
PS_OUTPUT PSmain(in VS_OUTPUT IN)
{
        PS_OUTPUT psOut; // Выходная структура для G-Buffer-а
        psOut.Normal = IN.Normal; // Нормаль, ну это нам не нужно
        psOut.Normal.w = 20.0; // кажется тут был спекуляр
        float4 MaskSample = tex2Dlod(GCMMaskMap, float4(IN.TexCoord.x, IN.TexCoord.y, 0.0, IN.LodLevel-1)); // тут просто читаем маску. Через tex2Dlod у меня сделано потому что ланшафт сделан по технологии Geo-ClipMaps
        MaskSample = MaskSample * float4(10.0, 1.0, 1.0, 100.0); // это мы задаём коэффициенты разных текстур. Например у снега тут максимальный коэфициент (w), поэтому если где-то смешивается земля,трава и снег то будет виден снег восновном, а первый коэфициент вроде для камней или песка на них травы не будет видно. Короче этот вектор надо в параметры шейдера вынести
        float MaskDevisor = 1.0 / (MaskSample.x + MaskSample.y + MaskSample.z + MaskSample.w); // нормируем коэфициенты что бы сумма прочитанных из текстур значений не была больше 1, а то всё белым цветом зальёт
        MaskSample = MaskSample * MaskDevisor;// перемноажем коэфициенты
       
        float Multiplifer = 10.0;
       
        float4 SnowSample = MaskSample.r * tex2D(SnowMap, IN.TexCoord * Multiplifer * 8);// Делаем выборки из текстур, коэфициенты на окторые умножаем
        float4 GrassSample = MaskSample.g * tex2D(GrassMap, IN.TexCoord * Multiplifer * 8);// это скорее всего наскоро сляпаны для тайлинга. Не помню точно.
        float4 StoneSample = MaskSample.b * tex2D(StoneMap, IN.TexCoord * Multiplifer);// Их кароч в параметры шейдера надо выносить
        float4 SandSample = MaskSample.a * tex2D(SandMap, IN.TexCoord * Multiplifer * 8);//
       
        float4 Diffuse = SnowSample + GrassSample + StoneSample + SandSample; // собсно складываем и получаем смешивание по маске 4-х текстур с учётом коэфициентов приоритености текстур
        psOut.Diffuse = Diffuse; // запихитваем в g-buffer
        return psOut;
}


ЗЫ. А синтаксис HLSL не поддерживается или что там ему вписать что бы он правильно отобразил?
Аватара пользователя
Phoenics
UNIт
 
Сообщения: 60
Зарегистрирован: 31 окт 2010, 22:29

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

Сообщение Zaicheg 18 ноя 2010, 14:39

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

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

Сообщение Phoenics 18 ноя 2010, 16:37

Zaicheg писал(а):Систему Woolf пока просто не понял.


А что конкретно непонятно? Если про смешивание 4 текстур по маске, то там всё очень просто в моём шейдере это как раз реализовано. Просто у тебя в первом посте чёрнобелая маска, т.е. с одним каналом, а у нас используется RGBA маска, с 4-мя каналами, каждый из окторых задаёт коэфициент видимости. Цвета прочитанные из тайловых своей текстур умножаем на соотвествующие им веса из маски и складываем - поулчаем итоговый смешанный цвет.
Аватара пользователя
Phoenics
UNIт
 
Сообщения: 60
Зарегистрирован: 31 окт 2010, 22:29

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

Сообщение Battle Angel Alita 18 ноя 2010, 16:59

Phoenics
У человека в системных требованиях значится древний айФон, который не только про шейдеры не знает, но и с FFP туго дружит.

Zaicheg
Тут мне вспомнилось что на айФонах только два текстурных юнита, т.е. внутри пасса можно только два раза сказать SetTexture... Поэтому придётся делать либо классический многопроходный блендинг, либо маску запекать в цвет вертекса.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

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

Сообщение Zaicheg 24 ноя 2010, 23:48

На данный момент выглядит так. Почему и как это работает -- не понимаю, потому что делал методом тыканья всяких кусков кода в стандартный VertexLit. Но работает, в т.ч. и на упомянутом девайсе. Сейчас буду дотыкивать для того, чтобы корректно работал на террейне, сшитом из нескольких кусков (хотя тут скорее надо uv-раскладку моделей править).
Поправка: со сшитым террейном тоже заработало, uv просто поправил.

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

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

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

Сообщение Zaicheg 30 ноя 2010, 12:04

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

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

Сообщение gnoblin 07 дек 2010, 04:30

я бы потренировался со стандартным лайтмапером и vertexlit, потом бы допилил vertexlit до нужного состояния :)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

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

Сообщение Battle Angel Alita 07 дек 2010, 21:51

А если захочется(а захочется точно) больше двух текстур, да ещё плюс лайтмап - жирный получится шейдер. Впору подумать о чём-то вроде мега-текстуры.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

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

Сообщение Zaicheg 07 дек 2010, 22:29

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

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

Сообщение Zaicheg 10 фев 2011, 20:21

Zaicheg писал(а):Теперь ещё нужно запечь тени в ландшафт. Куда пилить?
Объекты, отбрасывающие тени (деревья большей частью), расставляются непосредственно в 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