본문 바로가기

내 공부/Unity_

Unity 텍스쳐 입력과 출력

반응형

 

1.기본 텍스쳐 출력

기본텍스처를 출력하기전에 기본 쉐이더 코드에 필요없는것을 삭제하고 쓸 내용만 남겨놓는 연습을했다.

초기 Standard 쉐이더의 기본형

오로지 텍스쳐만 넣을수있는 형식으로 다 날렸다

Shader "Custom/Basic"
{
    Properties
    {
        
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        
        
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        
        #pragma surface surf Standard fullforwardshadows

        
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input
        {
            float2 uv_MainTex;
        };

        fixed4 _Color;

        
        void surf (Input IN, inout SurfaceOutputStandard o)
        {
          
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
           o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

  •  
  • _MainTex 변수
  • 인터페이스에 나타나는 이름 "Albedo(RGB)" 이다.
  • Albedo(RGB)텍스쳐는 RGB값만 받으며 2D텍스쳐를 입력받는다.
  • 텍스쳐 2D 이미지가 없을경우 기본 표출색상은 White 이다

 

 


  • UV와 결합되지않은 텍스쳐 이미지는 Sampler로 선언한다.

 

UV정보는 Vertex에게 있다.
Unity 내부 인터페이스가 아닌 vertex 내부 정보를 사용할때에는 Input 구조체 안에 선언후 사용해야함.

Vertex
: 1개의 vertext에는 여러 정보가 존재
- 좌표 (Position)
- UV
- Light UV
- 컬러
- 노말(Bump)

 

  • _MainTex 안에 들어있는 UV정보를 이용하기위해 Input 구조체 안에 선언.

 

  • float로 사용해도되나 받아오는 텍스처 컬러가 채널당 8비트 이하이므로 fixed로도 충분하기 때문에 사용
  • C에 포함된 RGB 값을 Albedo에 저장
  • C에 포함된 알파(a)값을 Alpha에 저장

 

 

 

 

출력화면

텍스쳐 삽입 이미지

 

 

 

 

 

 

 

 

2. 흑백 텍스쳐 출력

 

Shader "Custom/Basic"
{
    Properties
    {
        
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        
        
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        
        #pragma surface surf Standard fullforwardshadows

        
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input
        {
            float2 uv_MainTex;
        };
        
        void surf (Input IN, inout SurfaceOutputStandard o)
        {
          
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            o.Albedo = (c.r + c.g +c.b)/3;
           o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

 

기본 출력코드에 o.Albedo 만 수정한다.

  • 흑백 값을 설정하기 위해서는
    R/G/B 모두 동일한 숫자값으로 이루어져야한다.
  • 이 조건을 충족하기 위해 R/G/B 모두 더해 3으로 나누어준다
  • 이 방법을 그레이스 케일 방식이라하며 
    흑백 표출에 가장 기본방식이다.

 

 

 

 

출력 화면

반응형