Unity Shader : 기초

2024. 3. 13. 14:53·Unity
반응형
Unity 쉐이더는 게임 오브젝트의 렌더링 방식을 제어하는 코드입니다. 3D 그래픽에서 쉐이더는 매우 중요한 역할을 하며, 텍스처, 색상, 조명 등을 사용하여 사실적인 이미지를 만들 수 있도록 합니다.

 

1. 쉐이더 정의

쉐이더는 Cg 또는 HLSL과 같은 프로그래밍 언어로 작성된 코드이며, 꼭지점 셰이더와 프래그먼트 셰이더로 구성됩니다.

  • 꼭지점 셰이더: 3D 공간에서 꼭지점의 위치를 변환하고 조명 계산을 수행합니다.
  • 프래그먼트 셰이더: 각 픽셀의 색상을 계산합니다.

2. 쉐이더 종류

Unity에는 다양한 종류의 쉐이더가 있으며, 일반적으로 다음과 같이 분류됩니다.

  • Standard Surface Shader: 대부분의 오브젝트에 사용되는 기본 쉐이더입니다.
  • Lit Shader: 조명 계산을 수행하는 쉐이더입니다.
  • Unlit Shader: 조명 계산을 수행하지 않고 텍스처만 표시하는 쉐이더입니다.
  • Post-processing 쉐이더: 렌더링된 이미지에 효과를 추가하는 쉐이더입니다.
  • Compute 쉐이더 : CPU에서 수행하던 계산을 GPU에서 수행하여 성능을 향상시키는 쉐이더입니다.

3. Surface Shader

Surface Shader는 Unity에서 가장 기본적인 쉐이더 유형입니다. 텍스처, 색상, 조명 등을 사용하여 오브젝트의 표면을 표현하는 데 사용됩니다. Surface Shader는 다음과 같은 주요 요소로 구성됩니다.

  • Properties: 쉐이더에 사용되는 변수를 정의합니다. 예를 들어, 텍스처, 색상, 광택 등을 정의할 수 있습니다.
  • SubShader: 렌더링 방식을 정의합니다. Surface Shader는 여러 SubShader를 가질 수 있으며, 각 SubShader는 다른 렌더링 옵션을 제공합니다.
  • Pass: SubShader 내에서 렌더링 단계를 정의합니다. 각 Pass는 특정 조건에서 렌더링되는 방식을 정의합니다.

4. Properties

Properties는 쉐이더에서 사용되는 변수를 정의하는 데 사용됩니다. 텍스처, 색상, 숫자 등 다양한 유형의 데이터를 Properties로 정의할 수 있습니다.

Properties는 다음과 같은 요소로 구성됩니다.

  • ShaderLab: 쉐이더 코드를 작성하는 언어를 선택합니다. (예: Surface Shader, Standard Shader)
  • Tags: 렌더링 순서, 렌더링 방식 등을 정의하는 키워드 목록입니다.
  • Keywords: 쉐이더 변형을 위한 키워드를 정의합니다.
  • RenderQueue: 렌더링 순서를 정의합니다.
  • LOD: Level of Detail. 오브젝트의 거리에 따라 렌더링 품질을 조절하는 설정입니다.

예를 들어, 텍스처를 Properties로 정의하려면 다음과 같이 코드를 작성합니다.

Properties {
	_MainTex ("Albedo (RGB)", 2D) = "white" {}
}

이 코드는 "_MainTex"라는 이름의 텍스처 Property를 정의하며, 기본값은 "white" 텍스처입니다.

 

5. SubShader

SubShader는 렌더링 방식을 정의하는 데 사용됩니다. Surface Shader는 여러 SubShader를 가질 수 있으며, 각 SubShader는 다른 렌더링 옵션을 제공합니다.

SubShader는 다음과 같은 요소로 구성됩니다.

  • Tags: 렌더링 순서, 렌더링 방식 등을 정의하는 키워드 목록입니다.
  • LOD: Level of Detail. 오브젝트의 거리에 따라 렌더링 품질을 조절하는 설정입니다.
  • Pass: SubShader 내에서 렌더링 단계를 정의합니다.

예를 들어, 불투명한 오브젝트를 렌더링하는 SubShader는 다음과 같이 코드를 작성합니다.

SubShader
{
    Tags { "RenderType"="Opaque" }
    LOD 200

    Pass
    {
        ...
    }
}

 

6. Pass

  • Tags: Pass에 적용되는 조건을 정의하는 키워드 목록입니다.
  • Cull: 렌더링할 면을 정의합니다.
  • ZWrite: 깊이 버퍼에 쓰기 여부를 정의합니다.
  • Blend: 렌더링된 결과를 기존 이미지와 혼합하는 방식을 정의합니다.
  • Shader: 렌더링에 사용되는 쉐이더 코드를 정의합니다.

예를 들어, 텍스처를 사용하여 오브젝트를 렌더링하는 Pass는 다음과 같이 코드를 작성합니다.

Pass
{
    Name "ForwardBase"
    Tags { "RenderType"="Opaque" }

    Cull Back

    ZWrite On

    Blend SrcAlpha OneMinusSrcAlpha

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

            Pass
            {
                CGPROGRAM
                #pragma surface surf Standard fullforwardshadows
                #pragma target 3.0

                sampler2D _MainTex;

                struct Input
                {
                    float2 uv_MainTex;
                };

                half _Glossiness;
                fixed4 _Color;

                void surf (Input IN, inout SurfaceOutputStandard o)
                {
                    // Albedo comes from a texture tinted by color
                    fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;

                    // Output
                    o.Albedo = c.rgb;
                    o.Metallic = _Glossiness;
                    o.Smoothness = _Glossiness;
                    o.Alpha = c.a;
                }
                ENDCG
            }
        }
    }
}

이 코드는 "ForwardBase"라는 이름의 Pass를 정의하며, 텍스처 "_MainTex"를 사용하여 오브젝트를 렌더링합니다.

 

 

Unity 공식 문서 및 튜토리얼: https://docs.unity3d.com/kr/2021.3/Manual/SL-VertexFragmentShaderExamples.html

 

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

'Unity' 카테고리의 다른 글

Unity Light : 조명  (0) 2024.03.15
Unity Shader : 코드 분석  (0) 2024.03.14
RigidbodyConstraints : 회전과 위치 제어  (1) 2024.03.09
Rigidbody에서 오브젝트에 힘을 가할 때 사용되는 ForceMode  (0) 2024.02.21
Unity에서 UnityWebRequest를 이용해 웹 접속하는 방법  (0) 2024.02.16
'Unity' 카테고리의 다른 글
  • Unity Light : 조명
  • Unity Shader : 코드 분석
  • RigidbodyConstraints : 회전과 위치 제어
  • Rigidbody에서 오브젝트에 힘을 가할 때 사용되는 ForceMode
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (720) N
      • 상품 추천 (220) 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)
  • 인기 글

  • 태그

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

  • hELLO· Designed By정상우.v4.10.3
코샵
Unity Shader : 기초
상단으로

티스토리툴바