Question pour ceux qui pensent que les shaders c'est trop cool, ça déchire tout le reste haut la main:
Peut-on faire passer les coordonnées de textures dans le Surface Lighting Model?
A partir d'un shader Fake BRDF (mais aussi pour tout autre), je souhaiterai faire un displace de la couleur de la lumière dans la texture de gradient pour avoir un effet de grain.
Mais je n'arrive pas à envoyer les coordonnées de texture au Surface Lighting Model et je ne trouve pas l'info. Est-ce possible?
Code : Tout sélectionner
Shader "Custom/FakeBRDF" {
Properties {
_Noise ("Base (RGB)", 2D) = "grey" {}
_Ramp2D ("BRDF Ramp", 2D) = "black" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Ramp
#pragma target 2.0
sampler2D _Noise;
sampler2D _Ramp2D;
struct Input {
float2 uv_Noise;
};
half4 LightingRamp (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
{
float NdotL = dot (s.Normal, lightDir);
float NdotE = dot (s.Normal, viewDir);
//do diffuse wrap here
float diff = (NdotL * 0.45) + 0.5;
float2 brdfUV = float2((NdotE + 0.1) * 0.9, diff);
float3 noiseTex = tex2D (_Noise, uv_Noise); //ICI je souhaiterai récupérer mon uv_Noise
brdfUV.x = brdfUV.x + (noiseTex.x * 0.1f) - 0.05f;
float3 BRDF = tex2D(_Ramp2D, brdfUV.xy).rgb;
float4 c;
c.rgb = BRDF;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o) {
half4 c = float4(0.5, 0.5, 0.5, 1);
o.Emission = c.rgb * 0.25f;
o.Albedo = float4(0, 0, 0, 1);
o.Alpha = c.a;
}
ENDCG
}
FallBack "Unlit"
}