본문 바로가기
Unity/Shader

1. 셰이더 기본

by 호아나트 2020. 1. 12.
반응형

- UV

텍스처 좌표, 오브젝트에 텍스처를 매핑 가능

한 정점 UV를 변경하면 Mesh에 텍스처가 표시되는 방식도 변경할 수 있음

 

- 셰이더
정점과 픽셀의 특성을 설명하는 프로그램 => 컴퓨터가 Mesh를 렌더링하는 방식을 설정하고 변경

 

- MeshInfo(Vertex, Uv etc.)
컴퓨터에서 읽은 후 Vertex Shader로 전달

 

- Vertex Shader
Vertex마다 한번씩 실행

Pixel Shader가 다음에 사용할 데이터(ex-UV)를 준비

 

- Pixel Shader
각 픽셀 당 한번씩 실행되고 객체 렌더링
텍스처 적용,색상 변경, 픽셀 제거 등 역할을 함

 

Property

속성에 표시되는 변수, 셰이더에서 사용

 Properties
    {
		_MainTex("Texture",2D)= "white"{} //인스펙터에 Texture라는 속성 생성
        								  //기본적으로 하얀색으로 설정
	}

 

#pragma vertex vert

#pragma fragment frag

//vertex shader 또는 pixel shader가 vert와 frag 함수에서 실행되도록 설정

 

 

		struct appdata//Mesh에 필요한 데이터 선언 구조체

            {

                float4 vertex : POSITION; //x,y,z,w

                float2 uv : TEXCOORD0;    //텍스처 좌표와 같은 임의의 위치 정밀도가 높은 데이터 표시

            };
            
            struct v2f	//FromVertToFrag 구조체
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION; //데이터에 각 Vertex 위치를 포함되어있음
            };

 

Vertex 배치

Vertex를 배치하기 위해서 Mesh Info가 필요함.

Vertex Method / Shader에 매개변수가 있는 이유

v2f vert (appdata v) 
            {
                v2f o; //pixel shader에 전달할 정보 초기화
                o.vertex = UnityObjectToClipPos(v.vertex); //각 Vertex를 화면에 배치
				o.uv = v.uv; //UV를 Mesh 정보(Vertex Shader)에서 Pixel Shader에 제공할 데이터에 전달
                return o;
            }
            

 

            fixed4 frag (v2f i) : SV_Target
            {
				return tex2D(_MainTex,i.uv);//텍스처에서 색상을 가져와서 반환
            }

 

 

반응형

댓글