hi all! I need to do somethings on a custom shader: I created a standard shader and looks like this: Code (CSharp): Shader "gRally/grsCarTemporary2" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; half _Glossiness; half _Metallic; fixed4 _Color; // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader. // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing. // #pragma instancing_options assumeuniformscaling UNITY_INSTANCING_CBUFFER_START(Props) // put more per-instance properties here UNITY_INSTANCING_CBUFFER_END void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; // Metallic and smoothness come from slider variables o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" } now I need to add a separate texture that contains the metallic map... is not a problem, but how can I pass to the standard pipeline to get the metallic not by _Metallic slider but by the alpha channel of the metallic texture? thanks in advance
The "real" Standard shader stores the metallic value in the red channel of the Metallic texture, and the smoothness in the alpha, btw. There's no reason you have to stick to that convention for Surface shaders though, if storing the metallic in the alpha is what you want to do. However the answer to your question is "the same way you would in any other shader". Not helpful, I know, but if that's the question you're asking then you probably need to start reading up on shaders. http://www.alanzucconi.com/2015/06/10/a-gentle-introduction-to-shaders-in-unity3d/
thank again @bgolus I've solved, using this code: Code (CSharp): // spec fixed4 cSpec = tex2D(_MetallicGlossMap, IN.uv_MainTex); o.Metallic = cSpec.rgb; o.Smoothness = _Glossiness * cSpec.a; my error was that I think that I was able to use the code inside the standard shader just adding some defines like Code (CSharp): #pragma shader_feature _METALLICGLOSSMAP but no, I needed to write the code.. thanks