본문 바로가기
Unity/수업 내용

[게임 그래픽] Shader

by 이지훈26 2021. 11. 17.

모를 때 참고

ShaderLab: 프로퍼티 - 작성
https://docs.unity3d.com/kr/530/Manual/SL-Properties.html

서피스 쉐이더 작성 - 인풋 아웃풋
https://docs.unity3d.com/kr/530/Manual/SL-SurfaceShaders.html

표면 쉐이더의 예시
https://docs.unity3d.com/kr/530/Manual/SL-SurfaceShaderExamples.html

표면 쉐이더 라이팅의 예시
https://docs.unity3d.com/kr/530/Manual/SL-SurfaceShaderLightingExamples.html

cg 다큐
cg programming tex2D



쉐이더란?
-화면에 출력 하는 필셀의 색을 정해주는 함수(음영과 색상을)
-쉐이더 = 음영(공간감을 느끼게 해주는 것)

-RGB(레드, 그린, 블루) 가산혼합 - 픽셀
-픽셀 쉐이더 - 한 픽셀의 색을 결정하는 코드

-ex) 흰색 RGB(100%, 100%, 100%) -> Float(1, 1, 1)

-쉐이더의 문법은 c# 문법과는 다르다

-float3 이미지의 알파 채널이 포함된다면 float4로 나타낼 수 있다

-색이 더해진다는 것은 색이 밝아진다는 것이다

------------------------------------------------------------------------
float3 a = float3(1.0, 1.0, 1.0)
float3 b = float3(2.0, 0, 0)

float3 c = a + b;

(2.0, 1.0, 1.0)  -> 2, 1, 0 이지만 실제로 보이는 것은 1, 1, 0 이다
실제 데이터는 2, 1, 0 이다
*만약 최종수치가 (-)라면 0으로 보인다.
------------------------------------------------------------------------
하다가 막힐 때 -> cg프로그램 문법, ShaderLab 문법 ->찾아보기



빨강

Shader "Custom/MyShader"  // (/)경로 (반드시 같을 필요는 없다.)
{
    Properties     //inspector창
    {
        _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     //cg코드 시작
    {
        Tags { "RenderType"="Opaque" }  //불투명 
        //LOD 200  //디테일 

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows   //#pragma -> 함수로 ~하겠다  //surface surf Standard 까지는 기본   //Standard -> 조명 연산 

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

        void surf (Input IN, inout SurfaceOutputStandard o)       //surf안에 있는 것들이 색을 계산한다 //SurfaceOutputStandard -> 타입 //o -> 변수 
        {
            // Albedo comes from a texture tinted by color
            fixed4 c = _Color;  //tex2D (_MainTex, IN.uv_MainTex) * _Color;   //tex2D() -> cg의 메서드(어떤 값을 반환하는지 알아야함!) //float4 * float4라서 연산가능 
            o.Albedo = c.rgb;
            //o.Metallic = _Metallic;
            //o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG      //cg코드 종료
    }
    FallBack "Diffuse"
}




* uv매핑이란? * -> 쉽게 말해서 3D를 펼치는 것