Unity Shader : 텍스쳐 입히기와 UV 좌표 활용

2024. 3. 16. 11:13·Unity
반응형
유니티 쉐이더는 게임 개발에서 다양한 시각 효과를 구현하는 데 필수적인 요소입니다. 이 글에서는 초보자부터 중급자까지 이해하기 쉽게 쉐이더의 기본 개념과 활용 방법을 설명하고자 합니다. 특히 RGB 슬라이더 제작, 텍스쳐 입히기, UV 좌표 활용, Lerp 함수 활용에 초점을 맞추어 심층적으로 다루겠습니다.

 

RGB 슬라이더 제작

(1) 프로퍼티스 설정

  • 먼저 프로퍼티스(Properties)에서 인터페이스를 만들고 Range 속성을 사용하여 슬라이더를 생성합니다.

 

(2) SubShader에서 변수 선언

  • SubShader에서 'float _Red', 'float _Green', 'float _Blue'와 같이 변수를 선언합니다.
  • 변수 선언은 텍스쳐 입히기와 같은 다른 기능을 사용하기 위한 필수적인 과정입니다.

(3) Input 구조체 선언 및 활용

    • 만약 Input 구조체를 선언하지 않고 void surf에서 매개변수 Input In을 생략하면 UV 좌표와 같은 중요한 데이터를 쉐이더 코드 내에서 사용할 수 없게 됩니다.
    • Input 구조체는 쉐이더 코드 내에서 입력 데이터를 받아오는 역할을 합니다.
struct Input
{
    float2 uv_MainTex;
};

void surf (Input IN, inout SurfaceOutputStandard o)
{
    // …
}

 

(4) void surf에서 코드 작성

  • void surf에서 슬라이더 값을 적용합니다.
  • 코드 작성 시 변수명과 연산 순서를 주의해야 합니다.
Shader "MyShader"
{
    Properties
    {
        R ("R", Range(0,1)) = 0.5
        G ("G", Range(0,1)) = 0.5
        B ("B", Range(0,1)) = 0.5
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex;

        float R,G,B;

        struct Input
        {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            o.Emission = float3(R,G,B);
        }
        ENDCG
    }
}

텍스쳐 입히기

(1) 프로퍼티스 설정

  • 텍스쳐를 입히기 위해 프로퍼티스에서 'Texture2D _MainTex'와 같이 인터페이스를 만들고 초기값을 설정합니다.
  • 옵션 부분은 현재 활용 사례가 많지 않지만 필요에 따라 설정할 수 있습니다.

 

(2) SubShader에서 변수 선언

  • SubShader에서 'sampler2D _MainTex'와 같이 텍스쳐 변수를 선언합니다.
  • 텍스쳐 변수는 'sampler2D' 타입을 사용하며, 변수명은 '_MainTex'와 같이 명확하게 지정합니다.

(3) UV 좌표 활용

  • UV 좌표는 텍스쳐의 픽셀을 2D 공간에 매핑하는 데 사용됩니다.
  • struct Input에서 'float2 uv_MainTex'와 같이 UV 변수를 선언합니다.
  • void surf에서 'tex2D(_MainTex, In.uv_MainTex)'와 같이 tex2D 함수를 사용하여 텍스쳐를 UV 좌표에 매핑합니다.
Shader "MyShader"
{
    Properties
    {
        _MainTex("텍스쳐", 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)
        {
            float4 MainTex = tex2D(_MainTex, IN.uv_MainTex);
            o.Emission = MainTex;
        }
        ENDCG
    }
}

텍스쳐에 강아지 그림을 넣었다.
큐브에 적용한 모습

(4) Lerp 함수 활용

  • Lerp 함수는 두 값 사이를 매끄럽게 보간하는 데 사용됩니다.
  • 텍스쳐 블렌딩, 컬러 변환 등 다양한 상황에 활용할 수 있습니다.
  • void surf에서 'lerp(ColorA, ColorB, _Alpha)'와 같이 Lerp 함수를 사용하여 두 컬러를 알파 값에 따라 보간합니다.
Shader "MyShader"
{
    Properties
    {
        _MainTex("텍스쳐", 2D) = "white" {}
        _MainTex2("텍스쳐2", 2D) = "white" {}
        _Blend("블렌딩", Range(0,1)) = 0
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex, _MainTex2;
        float _BV;

        struct Input
        {
            float2 uv_MainTex;
            float2 uv_MainTex2;
        };

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            float4 MainTex = tex2D(_MainTex, IN.uv_MainTex);
            float4 MainTex2 = tex2D(_MainTex2, IN.uv_MainTex2);
            o.Emission = lerp(MainTex, MainTex2, _BV);
        }
        ENDCG
    }
}

 

 

저작자표시 비영리 변경금지 (새창열림)

'Unity' 카테고리의 다른 글

Unity Shader : UV 매핑  (5) 2024.03.17
Unity Light : 조명  (0) 2024.03.15
Unity Shader : 코드 분석  (0) 2024.03.14
Unity Shader : 기초  (0) 2024.03.13
RigidbodyConstraints : 회전과 위치 제어  (1) 2024.03.09
'Unity' 카테고리의 다른 글
  • Unity Shader : UV 매핑
  • Unity Light : 조명
  • Unity Shader : 코드 분석
  • Unity Shader : 기초
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (723) N
      • 상품 추천 (223) N
      • MongoDB (4)
      • 하드웨어 (15) N
      • 일기장 (4)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • 파이썬 (13)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (41)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    쇼핑몰리뷰
    믈레코비타멸균우유
    리뷰관리
    리스트
    list
    cv2
    rtsp
    unity
    스크립트 실행
    긴유통기한우유
    상품 리뷰 크롤링
    programmerlife
    appdevelopment
    카페24리뷰
    ipcamera
    Python
    programming101
    codingcommunity
    유니티
    스크립트 실행 순서
    C#
    리뷰이관
    파이썬
    codingtips
    learntocode
    셀레니움
    스마트스토어리뷰
    라떼우유
    카페24리뷰이관
    devlife
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
Unity Shader : 텍스쳐 입히기와 UV 좌표 활용
상단으로

티스토리툴바