Unity Shader : UV 매핑

2024. 3. 17. 10:05·Unity
반응형
이 글에서는 텍스쳐를 자유롭게 조작하고 다양한 시각 효과를 만들 수 있는 UV 매핑 심화 개념을 다룹니다. 텍스쳐 타일링, 오프셋, 애니메이션, 불 쉐이더 제작 과정을 예시와 함께 자세하게 설명하며,  텍스쳐 래핑 모드, 셰이더 변수, 시간 기반 애니메이션 등 관련 개념들을 심층적으로 이해할 수 있도록 돕습니다.

 

텍스쳐 타일링

텍스쳐 타일링은 텍스쳐를 반복적으로 표현하여 더 넓은 영역에 적용하는 기술입니다. 벽돌, 타일, 천, 바닥 등 여러 표면에 텍스쳐를 자연스럽게 적용하는 데 사용됩니다.

텍스쳐 타일링을 하기 위해서는 Wrap Mode를 Repeat로 변경해야 합니다.

 

예시

  • 벽돌 벽: 벽돌 텍스쳐를 타일링하여 벽 전체를 채웁니다.
  • 바닥 타일: 타일 텍스쳐를 타일링하여 바닥 전체를 채웁니다.
  • 천: 구름 텍스쳐를 타일링하여 하늘을 표현합니다.
  • 옷: 천 텍스쳐를 타일링하여 옷감을 표현합니다.

코드 

Shader "MyShader"
{
    Properties
    {
        _MainTex("텍스쳐" , 2D) = "white" {}
        _U ("오프셋 U", Float) = 1
        _V ("오프셋 V", Float) = 1
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex;
        float _U, _V;

        struct Input
        {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 mainTex = tex2D(_MainTex, float2(IN.uv_MainTex.x * _U, IN.uv_MainTex.y * _V));
            o.Emission = mainTex;
        }
        ENDCG
    }
}

 

텍스쳐 오프셋

텍스쳐 오프셋은 텍스쳐를 이동시켜 원하는 위치에 표현하는 기술입니다. 텍스쳐 전체를 보여주지 않고 특정 부분만 선택적으로 표현하거나, 여러 텍스쳐를 조합하여 새로운 효과를 만들 수 있습니다.

 

예시

  • 벽돌 벽: 벽돌 텍스쳐를 오프셋하여 특정 벽돌만 강조합니다.
  • 바닥 타일: 타일 텍스쳐를 오프셋하여 패턴을 만듭니다.
  • 천: 구름 텍스쳐를 오프셋하여 구름의 흐름을 표현합니다.
  • 옷: 천 텍스쳐를 오프셋하여 옷의 무늬를 조절합니다.

코드

// ...
void surf (Input IN, inout SurfaceOutputStandard o)
{
    fixed4 mainTex = tex2D(_MainTex, IN.uv_MainTex + float2(_U, _V));

    o.Emission = mainTex;
}
//...

 

텍스쳐 애니메이션

텍스쳐 애니메이션은 시간에 따라 텍스쳐를 변화시켜 동적인 효과를 만드는 기술입니다. 물결, 불꽃, 나뭇잎 흔들림 등 자연적인 움직임을 표현하거나, 게임 캐릭터의 옷이나 무기 등에 애니메이션 효과를 적용하는 데 사용됩니다.

 

예시

  • 물결: 물 텍스쳐를 애니메이션하여 물결의 움직임을 표현합니다.
  • 불꽃: 불 텍스쳐를 애니메이션하여 불꽃의 타오르는 모습을 표현합니다.
  • 나뭇잎: 나뭇잎 텍스쳐를 애니메이션하여 나뭇잎이 바람에 흔들리는 모습을 표현합니다.
  • 게임 캐릭터: 캐릭터 옷 텍스쳐를 애니메이션하여 옷이 펄럭이는 모습을 표현합니다.

빌트인 쉐이더 변수

  • Unity의 Shader에는 미리 선언되어 있는 변수인 빌트인 쉐이더 변수가 있습니다. 
  • 자세한 내용은 https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html 에서 확인해보세요.
  • 현재 포스팅에서는 현재 프레임 이후 경과된 시간을 초 단위로 반환하는 _Time 변수를 활용하겠습니다.

코드

// ...
void surf (Input IN, inout SurfaceOutputStandard o)
{
    fixed4 mainTex = tex2D(_MainTex, float2(IN.uv_MainTex.x + _Time.y, IN.uv_MainTex.y));

    o.Emission = mainTex;
}
//...

 

 

불 쉐이더 제작

불 쉐이더는 텍스쳐 애니메이션과 컬러 블렌딩을 활용하여 불꽃의 움직임과 색상을 표현하는 쉐이더입니다. 불꽃의 불규칙한 움직임, 타오르는 모습, 연기 효과 등을 사실적으로 표현하는 데 사용됩니다.

 

예시

  • 모닥불: 여러 텍스쳐를 조합하여 불꽃의 다양한 색상과 형태를 표현합니다.
  • 촛불: 텍스쳐 애니메이션을 사용하여 촛불의 흔들림과 연기 효과를 표현합니다.
  • 용암: 텍스쳐 래핑 모드를 사용하여 용암의 흐르는 모습을 표현합니다.
  • 게임 캐릭터: 캐릭터 스킬 효과로 불꽃을 표현합니다.

투명 렌더링 설정

  • 유니티 셰이더에서 알파값을 활용하여 투명 효과를 표현하기 위해서는 렌더 타입을 불투명에서 투명으로 변경해야 합니다.
  • 표면 셰이더 컴파일 지시자의 파라미터를 알파-블렌딩으로 변경합니다.

 

코드

Shader "MyShader"
{
    Properties
    {
        _MainTex("텍스쳐" , 2D) = "white" {}
        _Mask("마스킹", 2D) = "white" {}
    }
    SubShader
    {
    Tags { "RenderType"="Transparent"}
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard alpha:blend
        #pragma target 3.0

        sampler2D _MainTex, _Mask;
        struct Input
        {
            float2 uv_MainTex, uv_Mask;
        };

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            float4 mask = tex2D(_Mask, float2(IN.uv_Mask.x, IN.uv_Mask.y - _Time.y));
            float4 mainTex = tex2D(_MainTex, IN.uv_MainTex + mask.r * 0.2);

            o.Emission = mainTex.rgb;
            o.Alpha = mainTex.a;
        }
        ENDCG
    }
}

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

'Unity' 카테고리의 다른 글

Unity Shader : 텍스쳐 입히기와 UV 좌표 활용  (0) 2024.03.16
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 : 기초
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • 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)
  • 인기 글

  • 태그

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

  • hELLO· Designed By정상우.v4.10.3
코샵
Unity Shader : UV 매핑
상단으로

티스토리툴바