Created
December 25, 2022 04:39
-
-
Save adelriosantiago/5224c47ff5cff6c730e37693f1e8d17f to your computer and use it in GitHub Desktop.
Three basic shaders
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Water | |
# | |
Shader "Unlit/Shader1" | |
{ | |
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 addshadow vertex:vert | |
// 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; | |
static half _Frequency = 10; | |
static half _Amplitude = 0.25; | |
// 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_BUFFER_START(Props) | |
// put more per-instance properties here | |
UNITY_INSTANCING_BUFFER_END(Props) | |
void vert (inout appdata_base v) { | |
v.vertex.xyz += v.normal * sin(v.vertex.x * _Frequency + _Time.y) * _Amplitude; | |
} | |
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" | |
} | |
# | |
# Lava lamp | |
# | |
// Upgrade NOTE: upgraded instancing buffer 'Props' to new syntax. | |
// Upgrade NOTE: upgraded instancing buffer 'Props' to new syntax. | |
Shader "Unlit/Shader2" | |
{ | |
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 | |
_Outline ("2nd wave speed", Range (0, 10)) = .1 | |
} | |
SubShader { | |
Tags { "RenderType"="Opaque" } | |
LOD 200 | |
CGPROGRAM | |
// Physically based Standard lighting model, and enable shadows on all light types | |
#pragma surface surf Standard fullforwardshadows addshadow vertex:vert | |
// 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; | |
static half _Frequency = 1; | |
static half _Amplitude = 1; | |
uniform float _Outline; | |
// 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_BUFFER_START(Props) | |
// put more per-instance properties here | |
UNITY_INSTANCING_BUFFER_END(Props) | |
void vert (inout appdata_base v) { | |
v.vertex.xyz += sin(v.vertex.x * _Frequency + _Time.y) * 2 * cos(v.vertex.x * 2 * _Frequency + _Time.y * _Outline) * _Amplitude; | |
} | |
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" | |
} | |
# | |
# Toon outline | |
# | |
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' | |
// Upgrade NOTE: upgraded instancing buffer 'Props' to new syntax. | |
// Upgrade NOTE: upgraded instancing buffer 'Props' to new syntax. | |
Shader "Unlit/Shader3" | |
{ | |
Properties { | |
_Color ("Main Color", Color) = (.5,.5,.5,1) | |
_OutlineColor ("Outline Color", Color) = (0,0,0,1) | |
_Outline ("Outline width", Range (0, 10)) = .1 | |
_MainTex ("Base (RGB)", 2D) = "white" { } | |
} | |
CGINCLUDE | |
#include "UnityCG.cginc" | |
struct appdata { | |
float4 vertex : POSITION; | |
float3 normal : NORMAL; | |
}; | |
struct v2f { | |
float4 pos : POSITION; | |
float4 color : COLOR; | |
}; | |
uniform float _Outline; | |
uniform float4 _OutlineColor; | |
v2f vert(appdata v) { | |
// just make a copy of incoming vertex data but scaled according to normal direction | |
v2f o; | |
o.pos = UnityObjectToClipPos(v.vertex); | |
float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal); | |
float2 offset = TransformViewToProjection(norm.xy); | |
o.pos.xy += offset * o.pos.z * _Outline; | |
o.color = _OutlineColor; | |
return o; | |
} | |
ENDCG | |
SubShader { | |
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True"} | |
Cull Back | |
CGPROGRAM | |
#pragma surface surf Lambert | |
sampler2D _MainTex; | |
fixed4 _Color; | |
struct Input { | |
float2 uv_MainTex; | |
}; | |
void surf (Input IN, inout SurfaceOutput o) { | |
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; | |
o.Albedo = c.rgb; | |
o.Alpha = c.a; | |
} | |
ENDCG | |
Pass { | |
Name "OUTLINE" | |
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True"} | |
Cull Front | |
ZWrite Off | |
//ZTest Less | |
//Offset 1, 1 | |
CGPROGRAM | |
#pragma vertex vert | |
#pragma fragment frag | |
half4 frag(v2f i) :COLOR { return i.color; } | |
ENDCG | |
} | |
} | |
Fallback "Diffuse" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment