Unity Shader Study08 _ Outline
Shader "Custom/Material" {
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
_LineSize("LineSize", Range(1,2)) = 1
_LineColor("LineColor", Color) = (1,1,1,1)
[Toggle] _isOn("isOn",float) = 1
_X("X", float) = 0
_Y("Y", float) = 0
_Z("Z", float) = 0
}
SubShader{
Tags { "RenderType" = "Opaque" }
cull front
CGPROGRAM
#pragma surface surf Nolight vertex:vert noshadow noambient
float _LineSize;
float4 _LineColor;
float _X;
float _Y;
float _Z;
float _isOn;
void vert(inout appdata_full v) {
float T = _Time * 40;
float S = 1+ abs(sin(T)*0.5);
v.vertex.xyz = v.vertex.xyz + v.normal.xyz * S *_isOn*0.007;
}
struct Input {
float4 _LineColor;
};
void surf(Input IN, inout SurfaceOutput o) {
float4 Col = _LineColor + (abs(sin(_Time*2)*0.3)-0.2);
o.Emission = Col.rgb;
}
float4 LightingNolight(SurfaceOutput s, float3 lightDir, float atten) {
return float4 (0, 0, 0, 1);
}
ENDCG
cull back
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
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"
Tags {"RenderType" = "Opaque"}
cull back //백페이스 컬링 렌더링 속도를 높이기 위해 뒷면을 그리지 않는것
cull front //프론트페이스 컬링하는것
//For size up
void vert(input appdata_full v) {
}
appdata_base : position, nermal and one texture coordinate/
위치, 노멀과 하나의 텍스쳐 좌표계
appdata_tan: position, tangent, normal and one texture coordinate.
위치, 탄젠트, 노멀과 하나의 텍스쳐 좌표계
appdata_full: position, tangent, normal, four texture coordinates and color
위치, 탄젠트, 노멀, 4개의 텍스쳐 좌표계와 버텍스 컬러
//쉐이더에서는 버텍스 쉐이더에서 로컬 좌표계>월드좌표계>카메라좌표계>프로젝션 좌표계를 거쳐야 오브젝트가 모ㅌ니터에 보인다. 이때문에 메트릭스(행렬)연산부터 나오게 되는 것이다.
//appdata_full 을 인풋으로서 가져온다.
void vert(input appdata_full v) {
v.vertex.y = v.vertex.y
}
struct appdata_base{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTNACE_ID
}
struct appdata_tan {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
}
struct appdata_full {
float4 vertex : POSITION; //버텍스의 위치
float4 tangetn : TANGENT; //접선방향
float3 normal : NORMAL; //버텍스의 노멀
float4 texcoord : TEXCOORD0; //첫번째 UV의 좌표
float4 texcoord1 : TEXCOORD1; //두번째 UV의 좌표 , 라이트맵용 커스텀 UV데이터 사용할때
float4 texcoord2 : TEXCOORD2; // special occasion
float4 texcoord3 : TEXCOORD3;
float4 color : COLOR; //버텍스 컬러
UNITY_VERTEX_INPUT_INSTNCE_ID
};
댓글
댓글 쓰기