Показать сообщение отдельно
Старый 12.03.2011, 14:52   #359
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Фак по Юнити.

самый простой способ - сделать у текстуры альфаканал (если конечно он не используется) и значение альфы использовать для интерполирования цвета от цвета текстуры до указанного цвета. Если альфаканал используется, то можно взять еще одну текстуру, и использовать какой-то ее канал для данной задачи. Писал как-то похожий шейдер:
Shader "Masked/Diffuse" {
    
Properties {
        
_Color ("Color", Color) = (1,1,1,1) 
        
_MainTex ("Base (RGB)", 2D) = "white" {}
        
_Mask ("Mask (Grayscale)", 2D) = "black" {}
    }
    
SubShader {
        
Tags { "RenderType"="Opaque" }
        
LOD 200
        
        CGPROGRAM
        
#pragma surface surf Lambert

        
sampler2D _MainTex;
        
sampler2D _Mask;
        
float4 _Color;

        
struct Input {
            
float2 uv_MainTex;
            
float2 uv_Mask;
        };

        
void surf (Input IN, inout SurfaceOutput o) {
            
half4 c = tex2D (_MainTex, IN.uv_MainTex);
            
float m = tex2D (_Mask, IN.uv_Mask).r;
            
o.Albedo =  (1-m)*c.rgb + m*_Color.rgb;
            
o.Alpha = c.a;
        }
        
ENDCG
    
} 
    
FallBack "Diffuse"
} 
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Evgen (12.03.2011)