Unity에서 사용자 정의 지형 셰이더 만들기

이 튜토리얼에서는 Unity에서 사용자 지정 지형 셰이더를 만들어 지형에 더욱 사실적인 텍스처와 조명을 제공합니다. 이 접근 방식을 사용하면 지형이 조명, 그림자 및 기타 환경 효과와 상호 작용하는 방식을 더 잘 제어하고 성능을 개선할 수 있습니다. 셰이더를 설정하고 Unity의 지형 시스템과 함께 사용하고 최적의 성능을 위해 조정하는 방법을 다룹니다.

1. 지형 설정

셰이더 생성에 들어가기 전에 먼저 Unity에 지형을 설정해 보겠습니다.

  1. Unity에서 GameObject 메뉴로 가서 3D Object > Terrain을 선택하세요.
  2. 이렇게 하면 장면에 새로운 지형 객체가 추가됩니다. 지형 검사기에서 크기, 높이 및 기타 설정을 조정할 수 있습니다.
  3. 지형이 생성되면 Inspector에서 Paint Texture 도구를 사용하여 지형 위에 페인트할 수 있습니다. 하지만 지금은 사용자 지정 셰이더를 적용하므로 비워두세요.

2. 지형 셰이더 만들기

이제 사용자 지정 지형 셰이더를 만들어 보겠습니다. 다음 단계를 따르세요.

  1. Project 창에서 마우스 오른쪽 버튼을 클릭하고 Create > Shader > Standard Surface Shader를 선택합니다.
  2. 셰이더 이름을 CustomTerrainShader로 지정하고 원하는 코드 편집기에서 엽니다.

기본 셰이더 코드를 다음으로 바꾸세요.

Shader "Custom/TerrainShader"
{
    Properties
    {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _BumpMap ("Normal Map", 2D) = "bump" {}
        _Specular ("Specular", Color) = (0.2, 0.2, 0.2, 1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows

        sampler2D _MainTex;
        sampler2D _BumpMap;
        fixed4 _Specular;

        struct Input
        {
            float2 uv_MainTex;
            float3 worldNormal;
        };

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
            o.Specular = _Specular;
            o.Smoothness = 0.5;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

3. 지형에 셰이더 적용하기

셰이더를 만든 후에는 이를 지형 소재에 적용해야 합니다.

  • 프로젝트 창에서 마우스 오른쪽 버튼을 클릭하고 Create > Material을 선택합니다. 이 소재의 이름을 TerrainMaterial로 지정합니다.
  • Material Inspector에서 Shader 드롭다운을 클릭하고 Custom > TerrainShader을 선택합니다.
  • Material Inspector에서 MainTexBumpMap에 텍스처를 할당합니다.
  • 이제 지형 객체를 선택하고 지형 검사기로 가서 재료 섹션에서 지형재료을 설정하여 이 재료를 지형에 할당합니다.

4. 성능을 위한 셰이더 조정

특히 넓은 지형에서 셰이더가 원활하게 실행되도록 하려면 몇 가지 설정을 조정할 수 있습니다.

  • 일반 맵의 해상도를 낮추거나 단순화된 맵을 사용하여 GPU 부하를 줄이세요.
  • 사용하지 않는 셰이더 기능(예: 시차 매핑이나 추가 조명 효과)을 비활성화합니다.
  • Unity의 기본 제공 지형 LOD 시스템을 사용하면 지형의 먼 부분의 세부 수준을 동적으로 조정합니다.

5. 최종 조정 및 테스트

셰이더를 적용하고 지형을 설정한 후 다양한 조명 조건에서 테스트합니다. 셰이더의 SpecularSmoothness 속성을 조정하여 다양한 환경에서 지형의 전반적인 모양에 어떤 영향을 미치는지 확인할 수 있습니다.

결론

사용자 지정 지형 셰이더를 사용하면 성능을 제어하는 ​​동시에 지형의 시각적 충실도를 향상시킬 수 있습니다. 세부 텍스처, 삼면 매핑 또는 테셀레이션과 같은 추가 기능을 추가하여 이 셰이더를 자유롭게 확장하세요.