Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
- Shader "Custom/Outline"
- {
- Properties //variables
- {
- _MainTex("Main Texture (RGB)",2D) = "white" {} // allows for a texture property
- _Color("Color", Color) = (1,1,1,1) // allows for a color property
- _OutlineTex("Outline Texture", 2D) = "white" {}
- _OutlineColor("Outline Color", Color) = (1,1,1,1)
- _OutlineWidth("Outline Width", Range(1.0,10.0)) = 1.1
- }
- Subshader
- {
- Tags
- {
- "Queue" = "Transparent"
- // "DisableBatching" = "True"
- }
- Pass
- {
- Name "OUTLINE"
- ZWrite Off
- CGPROGRAM // allows talk between two languages: shader lab and nvidia C for graphics
- // Function Defines - defines the name for the vertex and fragment functions
- // Define for the building function.
- // Has information of the shape and tells program how to build it
- #pragma vertex vert
- // Define for coloring function
- #pragma fragment frag
- // Includes
- #include "UnityCG.cginc" // build in shader functions.
- // Structures - can get data like - vertices's, normal, color, uv
- //appdata basically says how the vertex function has going to get inforamtions
- struct appdata // vertex information
- {
- float4 vertex : POSITION;
- float2 uv : TEXCOORD0;
- };
- // how fragments get its data
- struct v2f // fragment inforamtion
- {
- //without SV_ this shader doesnt work on playstation and some other platforms
- float4 pos : SV_POSITION;
- float2 uv: TEXCOORD0;
- };
- // Imports - Re-import property from shader lab to nvidia cg
- // properties have to same the same name like in shader lab part
- float4 _OutlineColor;
- sampler2D _OutlineTex;
- float _OutlineWidth;
- // Vertex function - builds the object
- //vertex to fragment
- //put struct appdata (above) into IN and convert it into a v2f
- v2f vert(appdata IN)
- {
- //get all vertexes of the shape and it's going to
- //times it by the outline width
- // and so its gonna make it either the same size if its 1 or more than one
- // SO its gonna get the shape and then its goona increase it a bit bigger than the actual shape size
- IN.vertex.xyz *= _OutlineWidth;
- v2f OUT;
- // its gonna take the object form the object space and
- // put it into camera clip space so it's gonna allow it to appear
- // on the screen
- //OUT.pos = UnityObjectToClipPos(IN.vertex);
- OUT.pos = UnityObjectToClipPos(IN.vertex);
- // OUT.pos -= float4(1, 0, 0,0);
- // swapping the uvs to our uvs
- OUT.uv = IN.uv;
- return OUT;
- }
- // fragment function - color it in
- fixed4 frag(v2f IN) : SV_Target
- {
- //gets the teture and wraps it around the uvs of the objects
- float4 texColor = tex2D(_OutlineTex, IN.uv);
- return texColor * _OutlineColor;
- }
- ENDCG
- }
- Pass
- {
- Name "OBJECT"
- CGPROGRAM // allows talk between two languages: shader lab and nvidia C for graphics
- // Function Defines - defines the name for the vertex and fragment functions
- // Define for the building function.
- // Has information of the shape and tells program how to build it
- #pragma vertex vert
- // Define for coloring function
- #pragma fragment frag
- // Includes
- #include "UnityCG.cginc" // build in shader functions.
- // Structures - can get data like - vertices's, normal, color, uv
- //appdata basically says how the vertex function has going to get inforamtions
- struct appdata // vertex information
- {
- float4 vertex : POSITION;
- float2 uv : TEXCOORD0;
- };
- // how fragments get its data
- struct v2f // fragment inforamtion
- {
- //without SV_ this shader doesnt work on playstation and some other platforms
- float4 pos : SV_POSITION;
- float2 uv: TEXCOORD0;
- };
- // Imports - Re-import property from shader lab to nvidia cg
- // properties have to same the same name like in shader lab part
- float4 _Color;
- sampler2D _MainTex;
- // Vertex function - builds the object
- //vertex to fragment
- //put struct appdata (above) into IN and convert it into a v2f
- v2f vert(appdata IN)
- {
- v2f OUT;
- // its gonna take the object form the object space and
- // put it into camera clip space so it's gonna allow it to appear
- // on the screen
- OUT.pos = UnityObjectToClipPos(IN.vertex);
- // swapping the uvs to our uvs
- OUT.uv = IN.uv;
- return OUT;
- }
- // fragment function - color it in
- fixed4 frag(v2f IN) : SV_Target
- {
- //gets the teture and wraps it around the uvs of the objects
- float4 texColor = tex2D(_MainTex, IN.uv);
- return texColor * _Color;
- }
- ENDCG
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement