# SDSL란? Stride 엔진을 위한 새로운(또는 옛) 셰이더 프로그래밍 언어 소개

---

# # 서론 – 왜 새로운 셰이더 언어가 필요할까?

게임 그래픽스와 실시간 렌더링이 점점 복잡해지면서 **셰이더 프로그래밍**에 대한 요구도 높아지고 있습니다. 기존 HLSL·GLSL은 강력하지만, 엔진마다 미세한 차이를 보완하려면 매번 별도의 래퍼 코드를 작성해야 하는 번거로움이 있었습니다.

Stride 엔진 팀은 이러한 문제를 해결하고자 **SDSL (Stride Shader Description Language)** 을 만들었습니다. 이번 포스트에서는 SDSL가 무엇이며, 어떤 장점이 있는지, 그리고 초보자도 쉽게 시작할 수 있는 방법을 살펴보겠습니다.

---

# # 본론

## # 1️⃣ SDSL의 기본 개념 – HLSL과의 친숙한 조합

- **HLSL 기반**: SDSL은 HLSL 문법을 그대로 사용하면서, Stride 전용 키워드와 메타 데이터를 추가합니다. 따라서 기존 HLSL 경험이 있다면 별도 학습 비용이 거의 없습니다.

- **믹스‑인(Mix‑in) 구조**: `#pragma` 형태의 커스텀 지시문을 통해 엔진 내부 파이프라인과 직접 연결됩니다. 예를 들어, `#pragma stride:Pass('Forward')` 와 같이 작성하면 해당 셰이더가 Forward 렌더링 패스에 자동으로 바인딩됩니다.

> **핵심 포인트**: 기존 HLSL 코드를 그대로 복사·붙여넣기만 하면 SDSL 파일로 변환이 가능하므로, 기존 프로젝트를 손쉽게 마이그레이션할 수 있습니다.

## # 2️⃣ 컴파일러와 워크플로우 – 자동화된 빌드 파이프라인

Stride 엔진은 **SDSL 전용 컴파일러**를 내장하고 있어, 에디터에서 파일을 저장하면 즉시 바이너리 셰이더(.sdslc)로 변환됩니다.

| 단계 | 설명 |

|------|------|

| **1. 코드 작성** | `.sdsl` 파일에 HLSL + Stride 메타데이터 입력 |

| **2. 실시간 컴파일** | 에디터가 파일 변화를 감지하고 `sdslc` 명령어 실행 |

| **3. 캐시 관리** | 동일한 소스는 재컴파일 없이 캐시에서 재사용 |

| **4. 런타임 로드** | 엔진이 자동으로 최적화된 바이너리를 로드 |

이 워크플로우 덕분에 **핫 리로드**가 가능해, 셰이더를 수정하고 바로 결과를 확인할 수 있습니다. 초보자도 복잡한 빌드 스크립트를 작성할 필요가 없습니다.

## # 3️⃣ SDSL의 주요 기능 – 초보자를 위한 친절한 설계

| 기능 | 설명 | 활용 예시 |

|------|------|----------|

| **자동 변수 바인딩** | `float4x4 WorldViewProj` 같은 매트릭스는 엔진이 자동으로 제공 | 변환 행렬을 직접 전달할 필요 없음 |

| **플랫폼 독립성** | 동일한 SDSL 파일이 DirectX, Vulkan, OpenGL 모두에서 동작 | 멀티플랫폼 게임 개발 시 코드 중복 감소 |

| **디버깅 지원** | 컴파일러가 라인 별 경고·오류 메시지를 에디터에 표시 | 초보자도 빠르게 문제를 찾을 수 있음 |

| **커스텀 패스 정의** | `#pragma stride:Pass('Shadow')` 로 그림자 전용 셰이더 정의 | 복잡한 렌더링 파이프라인 구성 시 유용 |

## # 4️⃣ 실제 적용 사례 – Stride 엔진 프로젝트에서 SDSL 활용하기

1. **기본 라이트맵 셰이더**

   
```
hlsl

   // MyShader.sdsl

   #pragma stride:Pass('Forward')

   float4 main(float2 uv : TEXCOORD) : SV_Target

   {

       float4 albedo = tex2D(_MainTex, uv);

       return albedo * _LightColor;

   }

   
```

   위와 같이 한 줄의 `#pragma` 만으로 Forward 패스에 자동 연결됩니다.

2. **포스트 프로세싱 블러**

   `#pragma stride:Pass('PostProcess')` 로 포스트 프로세스 파이프라인에 바로 삽입 가능. 블러 강도 파라미터는 엔진 UI에서 실시간 조정 가능하게 노출됩니다.

3. **멀티패스 머티리얼**

   동일 파일에 여러 `#pragma stride:Pass` 를 선언해, 하나의 셰이더 파일이 여러 렌더링 단계(Shadow, Forward, Deferred)를 담당하도록 구성할 수 있습니다.

## # 5️⃣ 초보자를 위한 시작 가이드

1. **Stride 에디터 설치** – 공식 웹사이트에서 최신 버전 다운로드.

2. **새 프로젝트 생성 → “Shader” 폴더 만들기**

3. **.sdsl 파일 추가** – 기존 HLSL 코드를 복사하거나, 템플릿을 활용해 기본 구조를 잡는다.

4. **에디터에서 실시간 컴파일 확인** – 오류가 있으면 라인 번호와 함께 표시되니 바로 수정 가능.

5. **Material 에 셰이더 적용** – Material 에디터에서 만든 SDSL 셰이더를 선택하고 파라미터를 조정한다.

이 과정을 따라 하면 **30분 안에 첫 셰이더를 화면에 띄울 수** 있습니다.

---

# # 결론 – 지금 바로 SDSL로 셰이더 개발을 시작하세요!

SDSL은 **HLSL 친화성**, **Stride 엔진 최적화**, **자동화된 컴파일 파이프라인**이라는 세 마리 토끼를 동시에 잡은 셰이더 언어입니다. 기존 코드를 거의 그대로 재사용하면서도, 멀티플랫폼 지원과 실시간 디버깅을 제공하니 초보자부터 베테랑까지 모두에게 큰 도움이 될 것입니다.

> **행동 유도**: 아직 Stride 엔진을 사용해 보지 않으셨다면, 오늘 바로 공식 홈페이지에서 무료로 다운로드하고, 제공되는 SDSL 튜토리얼을 따라 첫 셰이더를 구현해 보세요. 여러분의 게임 그래픽 품질이 눈에 띄게 향상되는 것을 직접 확인하실 수 있습니다.

**SEO 키워드**: SDSL, 셰이더 프로그래밍, Stride 엔진

---
