- Home /
How can I add the emission property to Unity's built-in Standard Surface Shader?
I added a "Standard Surface Shader" by doing the following: Right click in Assets folder (or subfolder) > Create > Shader > Standard Surface Shader. This shader is built-in with Unity and the CG code for this shader pretty much had everything that I needed for the basic texturing, color, smoothness and metallic properties.
But I want to know how to add the basic emission property that you usually find in the Standard shader whenever you create a new material. I want the shader to have all the functions that the emission property of the Standard shader has. So it needs the boolean variable to turn emission on and off, the color and intensity of the emission, the G.I. option and the Tiling and Offset variables:
Here's the code for the built-in Standard Surface Shader:
Shader "Custom/NewSurfaceShader" {
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"
}
I already checked the built-in shader files from Unity's download archive. I didn't find it very useful for this matter.
Your answer
Follow this Question
Related Questions
How to add Emission to my custom shader? 2 Answers
why can a array that must be declared by 'static' be read correctly 0 Answers
Multiple Vectors in shader/CGINC 0 Answers
Dissolve Shader Problem 1 Answer