forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Эффекты/Шейдеры (http://forum.boolean.name/forumdisplay.php?f=170)
-   -   рандомное смешивание нескольких текстур (http://forum.boolean.name/showthread.php?t=18678)

Alex_Witcher 06.11.2013 14:06

рандомное смешивание нескольких текстур
 
Всем привет, пытаюсь генерировать изображение, а точнее одну текстуру для поверхности из нескольких текстур, нашел вот эту статью: http://habrahabr.ru/post/180743/, использую это для плавного смешевания 3х текстур. Может-ли кто-то подсказать, как теперь сделать что-бы на поверхности текстуры распологались именно рандомно. Я так понимаю, надо тогда рандомно создавать какую-то маску прозрачности для каждой текстуры? Т.е я хочу генерировать из 4х например текстур, каждый раз новую текстуру поверхность. Т.е есть например текстура травы, камня, песка и.т.д. И что-бы при каждой генерации создавалась рандомная красивая текстура повехрности, по этим 4м текстурам.
Наверно это не так просто, но все-же, может кто-то подсказать хотя-бы "на словах" как это делать и что читать для этого.

pax 06.11.2013 17:53

Ответ: рандомное смешивание нескольких текстур
 
В примере Bootcamp есть шейдер, смешивающий 4 текстуры по маске (для модели террейна). Думаю там можно подсмотреть как устроена маска.

Alex_Witcher 06.11.2013 20:03

Ответ: рандомное смешивание нескольких текстур
 
Я тут решил попробовать: генерирую Перлин Ноиз текстуру: http://docs.unity3d.com/Documentatio...rlinNoise.html ,
и хочу применить эту текстуру в качестве маски прозрачности в шейдере,
но для этого надо к ПерлинНоиз текстуре применить Alfa from grayscale, может быть кто-то сталкивался? Можно-ли в рантайме это сделать? Применить к текстуре Alfa from grayscale? Буду очень признателен.

Alex_Witcher 07.11.2013 14:34

Ответ: рандомное смешивание нескольких текстур
 
вообщем в скрипте создаю Перлин Ноиз текстуру: как тут: http://docs.unity3d.com/Documentation/S ... Noise.html
Но использовать ее в качестве маски не получится, нужно преобразовать по альфа каналу.
Преобразовываю и накладываю маску вот этим шейдером:
Код:

Shader "Custom/mask" {

Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
_Mask ("Culling Mask", 2D) = "white" {}
_BackTex ("Culling Mask", 2D) = "white" {}
_Cutoff ("Alpha cutoff", Range (0,1)) = 0.1
}
SubShader
{
Tags {"Queue"="Transparent"}
Lighting Off
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
AlphaTest GEqual [_Cutoff]

Pass
{


CGPROGRAM
// Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it does not contain a surface program or both vertex and fragment programs.
#pragma exclude_renderers gles

#pragma fragment frag

#include "UnityCG.cginc"
sampler2D _Mask;
sampler2D _MainTex;
sampler2D _BackTex;
struct v2f {

float4 pos : POSITION;

float4 uv : TEXCOORD0;

};
half4 frag (v2f i) : COLOR

{

half4 color = tex2D(_Mask, i.uv.xy);
 half4 MainTex_color = tex2D(_MainTex,i.uv.xy);
  half4 BackTex_color = tex2D(_BackTex,i.uv.xy);
  half mask_alpha = color.w - ( (color.b * .5) + (color.b * .5));
//return half4(color.r, color.g, color.b, color.g - ( (color.r * .5) + (color.b * .5)));
return half4(MainTex_color.r,MainTex_color.g, MainTex_color.b, mask_alpha);
//return half4(0,0, 0, color.w - ( (color.b * .5) + (color.b * .5)));

// return half4(color.r, color.g, color.b, color.g);



}


ENDCG

AlphaTest Less [_Cutoff]
//SetTexture [_MainTex] {combine texture, previous}
//SetTexture [_Mask] {combine texture}
//

}
}
}

Вот что получается: https://dl.dropboxusercontent.com/u/44855747/mmm.jpg
Но текстура маски так-же отображается (серые цвета). Может кто-то подсказать: 1)как убрать отображение текстуры маски 2) как добавить например еще 1-2 текстуры и так-же по подобной маске смешивать их в этом шейдере. 3) Как смешивать эти текстуры по маскам, с применением вот этого эффекта: http://habrahabr.ru/post/180743/


Часовой пояс GMT +4, время: 18:50.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot