Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Эффекты/Шейдеры

Ответ
 
Опции темы
Старый 06.11.2013, 14:06   #1
Alex_Witcher
Нуждающийся
 
Регистрация: 15.02.2012
Сообщений: 53
Написано одно полезное сообщение
рандомное смешивание нескольких текстур

Всем привет, пытаюсь генерировать изображение, а точнее одну текстуру для поверхности из нескольких текстур, нашел вот эту статью: http://habrahabr.ru/post/180743/, использую это для плавного смешевания 3х текстур. Может-ли кто-то подсказать, как теперь сделать что-бы на поверхности текстуры распологались именно рандомно. Я так понимаю, надо тогда рандомно создавать какую-то маску прозрачности для каждой текстуры? Т.е я хочу генерировать из 4х например текстур, каждый раз новую текстуру поверхность. Т.е есть например текстура травы, камня, песка и.т.д. И что-бы при каждой генерации создавалась рандомная красивая текстура повехрности, по этим 4м текстурам.
Наверно это не так просто, но все-же, может кто-то подсказать хотя-бы "на словах" как это делать и что читать для этого.
__________________
unity3d, 1я поделка.
https://play.google.com/store/apps/d...GVsaWNmcmVlIl0.
(Offline)
 
Ответить с цитированием
Старый 06.11.2013, 17:53   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: рандомное смешивание нескольких текстур

В примере Bootcamp есть шейдер, смешивающий 4 текстуры по маске (для модели террейна). Думаю там можно подсмотреть как устроена маска.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Alex_Witcher (06.11.2013)
Старый 06.11.2013, 20:03   #3
Alex_Witcher
Нуждающийся
 
Регистрация: 15.02.2012
Сообщений: 53
Написано одно полезное сообщение
Ответ: рандомное смешивание нескольких текстур

Я тут решил попробовать: генерирую Перлин Ноиз текстуру: http://docs.unity3d.com/Documentatio...rlinNoise.html ,
и хочу применить эту текстуру в качестве маски прозрачности в шейдере,
но для этого надо к ПерлинНоиз текстуре применить Alfa from grayscale, может быть кто-то сталкивался? Можно-ли в рантайме это сделать? Применить к текстуре Alfa from grayscale? Буду очень признателен.
__________________
unity3d, 1я поделка.
https://play.google.com/store/apps/d...GVsaWNmcmVlIl0.
(Offline)
 
Ответить с цитированием
Старый 07.11.2013, 14:34   #4
Alex_Witcher
Нуждающийся
 
Регистрация: 15.02.2012
Сообщений: 53
Написано одно полезное сообщение
Ответ: рандомное смешивание нескольких текстур

вообщем в скрипте создаю Перлин Ноиз текстуру: как тут: 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/
__________________
unity3d, 1я поделка.
https://play.google.com/store/apps/d...GVsaWNmcmVlIl0.

Последний раз редактировалось Alex_Witcher, 07.11.2013 в 16:38.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com