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 +1;
  }

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
  };


댓글

이 블로그의 인기 게시물

About AActor!!! "UObject" has no member "BeginPlay"

UNREAL Android build information

C++ 생성자 위임 (delegating constructor)