Skip to main content

Command Palette

Search for a command to run...

SDSL란? Stride 엔진을 위한 새로운(혹은 옛) 쉐이더 프로그래밍 언어 완전 정복

Published
•3 min read•View as Markdown

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

게임·실시간 렌더링 분야에서는 쉐이더가 그래픽 파이프라인의 핵심 역할을 합니다. 기존 HLSL, GLSL, Metal‑SL 등은 각각 플랫폼에 최적화돼 있지만, 다양한 플랫폼을 동시에 지원해야 하는 엔진 입장에서는 여러 언어를 번역·관리하는 부담이 큽니다.

Stride 엔진(이전 XNA 기반 엔진)의 개발팀은 이런 문제를 해결하고자 SDSL (Shader Description Language) 을 만들었습니다. “HLSL에 믹스‑인(Mix‑in) 형태로 확장된 언어”라는 설명처럼, SDSL은 HLSL의 친숙함을 유지하면서 Stride 전용 기능을 간결하게 추가할 수 있게 설계되었습니다.

본 글에서는 SDSL가 무엇인지, Stride 엔진과 어떤 관계가 있는지, 초보자도 바로 활용할 수 있는 기본 문법을 단계별로 살펴보겠습니다.

SEO 키워드: SDSL, 쉐이더 언어, Stride 엔진


# 본론

# 1️⃣ SDSL의 핵심 개념 – HLSL 위에 얹은 레이어

| 특징 | 기존 HLSL | SDSL에서 추가된 내용 |

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

| 문법 호환성 | DirectX 11/12 전용 | HLSL 코드 그대로 사용 가능 |

| 플랫폼 추상화 | Windows 전용 | Android, iOS, macOS까지 단일 소스 |

| 매크로·템플릿 | 제한적 | #sdl 블록을 통한 컴파일 타임 옵션 제공 |

| 리소스 바인딩 | 수동 바인딩 | @resource 어노테이션으로 자동 바인딩 |

SDSL은 컴파일러 단계에서 HLSL 코드를 그대로 파싱하고, @ 어노테이션이나 #sdl 디렉티브를 추가해 Stride 전용 최적화 정보를 삽입합니다. 따라서 기존 HLSL을 그대로 복사·붙여넣기만 해도 바로 SDSL 파일로 변환이 가능하죠.

# 2️⃣ Stride 엔진과 SDSL의 연동 구조

  1. ShaderAsset – Stride 프로젝트에 포함되는 쉐이더 파일(.sdsl)

  2. SDSL Compiler – Stride 빌드 파이프라인에 통합, HLSL → SPIR‑V / DXBC 로 변환

  3. Effect System – 변환된 바이너리를 런타임에 로드하고, 자동으로 Material에 바인딩

이 흐름을 그림으로 나타내면 다음과 같습니다.


[SDSL 파일] → (SDSL Compiler) → [바이너리] → (Effect System) → [Material] → 화면 출력

핵심은 컴파일 단계에서 플랫폼별 최적화 옵션을 자동 적용한다는 점입니다. 예를 들어, 모바일에서는 #sdl mobile { ... } 블록 안의 코드를 활성화하고, 데스크톱에서는 무시하도록 설정할 수 있습니다.

# 3️⃣ 초보자를 위한 SDSL 기본 문법

# 3.1 파일 선언 및 어노테이션

sdsl

// MyShader.sdsl

@sdl version = '1.0'

@resource Texture2D DiffuseMap : register(t0);
  • @sdl 은 메타데이터를 선언합니다.

  • @resource 로 텍스처, 버퍼 등 GPU 리소스를 자동 바인딩합니다.

# 3.2 HLSL 코드와 섞어 쓰기

sdsl

float4 main(float4 position : POSITION) : SV_POSITION

{
    // HLSL 그대로 사용

    return mul(position, WorldViewProjection);

}

# 3.3 플랫폼별 조건부 컴파일

sdsl

# sdl mobile {

    // 모바일 전용 코드

    #define MAX_LIGHTS 2

}
# sdl desktop {

    // 데스크톱 전용 코드

    #define MAX_LIGHTS 8

}

위와 같이 #sdl 블록을 사용하면 빌드 타깃에 따라 자동으로 코드가 포함·제외됩니다. 초보자도 #ifdef 대신 직관적인 디렉티브만 기억하면 됩니다.

# 3.4 매크로와 템플릿 활용

sdsl

@sdl macro LIGHT_COUNT(count) {

    static const int LightCount = count;

}
LIGHT_COUNT(4);

매크로를 통해 반복되는 상수를 한 줄로 정의하고, 필요에 따라 값만 바꾸면 됩니다.

# 4️⃣ 실제 프로젝트에 SDSL 적용하기 – 단계별 가이드

  1. Stride 프로젝트 생성 → Graphics 폴더에 .sdsl 파일 추가

  2. SDSL 컴파일러 설정 → Project Settings > Shaders > Use SDSL 활성화

  3. Material 만들기 → Material Editor에서 새 쉐이더 선택 → 자동으로 DiffuseMap 등 리소스 바인딩 확인

  4. 플랫폼 별 빌드 → Build > Build All → 모바일/데스크톱 타깃을 각각 선택해 빌드하면, #sdl 블록에 따라 최적화된 바이너리가 생성

이 과정을 따라 하면 코드 중복 없이 여러 플랫폼을 동시에 지원하는 쉐이더를 손쉽게 만들 수 있습니다.


# 결론 – 지금 바로 SDSL을 체험해 보세요!

SDSL은 HLSL의 친숙함과 Stride 엔진 전용 최적화를 하나의 파일에 담아, 멀티플랫폼 개발을 크게 단순화합니다.

  • 기존 HLSL 코드를 그대로 재사용 → 학습 비용 최소화

  • @resource, #sdl 디렉티브로 자동 바인딩·조건부 컴파일 구현

  • Stride 빌드 파이프라인에 완전 통합 → 별도 툴 없이 바로 배포

아직 SDSL을 사용해 보지 않으셨다면, 오늘 프로젝트에 하나의 간단한 쉐이더만이라도 적용해 보세요. “코드 한 줄만 바꿔도” 모바일과 데스크톱에서 동일한 시각적 퀄리티를 유지할 수 있다는 것을 직접 체감하실 수 있을 겁니다.

행동 유도: Stride 공식 GitHub(https://github.com/stride3d/stride)에서 최신 SDSL 컴파일러를 다운로드하고, 샘플 프로젝트를 실행해 보세요. 여러분의 첫 번째 SDSL 쉐이더가 곧 게임 화면에 살아 움직이는 모습을 확인할 수 있습니다!

More from this blog

개발자 vs AI: 연말에 되돌아보는 내가 되고 싶은 개발자 유형은 무엇일까?

# 서론 – 연말, 개발자의 일상이 왜 달라지는가 12월이 되면 많은 개발자들은 데드라인이 느려지고, 팀 채팅은 조용해지며, 풀 리퀘스트(PR)는 한가해지는 것을 경험합니다. “올해는 정말 바빴다”는 감회와 함께, 동시에 “다음 해에는 어떤 개발자가 되고 싶을까?” 하는 고민이 자연스럽게 떠오릅니다. 특히 최근 AI 기술이 급격히 발전하면서, “AI가 내 일을 빼앗을까?” 라는 불안감과 “AI와 협업하면 내 역량을 어떻게 강화할 수 있을까?” ...

Dec 29, 20255 min read

인사이트 부채(Insight Debt)란? 초보 개발자를 위한 쉬운 이해와 해결 방법

# 서론 – 왜 우리는 “인사이트 부채”에 주목해야 할까? 소프트웨어 개발 현장에서 인사이트 부채(Insight Debt) 라는 용어를 들어본 적이 있나요? 프로젝트를 진행하면서 “이 부분은 나중에 다시 살펴볼게” 라는 생각을 자주 하게 됩니다. 하지만 이런 미뤄진 고민이 쌓이면 결국 코드 품질 저하, 버그 증가, 팀 커뮤니케이션 비용 등 다양한 문제를 야기합니다. 이번 포스트에서는 인사이트 부채가 정확히 무엇인지, 왜 발생하는지, 그리고 초보...

Dec 29, 20253 min read

블록체인 활용: 일상 속 5가지 실생활 적용 사례와 시작 가이드

# 서론 – “블록체인, 우리 생활에 뭐가 바뀔까?” 최근 뉴스와 SNS에서 블록체인이라는 단어를 자주 보지만, 실제로 우리 주변에 어떻게 적용되고 있는지는 잘 모르는 경우가 많습니다. “복잡하고 비싸다”는 인식이 남아 있지만, 최근는 블록체인 활용이 점점 쉬워지고 비용도 낮아져 일반인도 직접 체험할 수 있는 시대가 왔습니다. 이번 글에서는 블록체인 적용 사례 5가지를 중심으로, 초보자도 바로 이해하고 시작할 수 있는 방법을 알려드립니다. #...

Dec 29, 20254 min read

스크래핑 온 더 엣지: SvelteKit으로 만든 초고속 만화 뷰어 만들기 (50자)

# 서론 – “만화 읽기가 이렇게 불편할 수 있을까?” 우리 모두가 한 번쯤 겪어본 일입니다. 만화를 읽고 싶을 땐 원하는 사이트가 로딩이 오래 걸리거나, 페이지를 넘길 때마다 광고가 끊임없이 뜨고, 이미지가 깨져서 눈이 피로해지는 경우가 있죠. 이런 불편함을 그냥 견뎌야 할까요? 개발자라면 “코드로 해결할 수 있지 않을까?” 하는 생각이 떠오릅니다. 이번 포스트에서는 SvelteKit과 웹 스크래핑을 활용해, 초고속 만화 뷰어를 직접 만드는 ...

Dec 29, 20254 min read

Tim van der Lippe가 Mockito 유지보수자를 떠나다 – Java 테스트 생태계에 미치는 영향은?

SEO 키워드: Mockito, Java 단위 테스트, 테스트 자동화 # 서론 – “왜 이 소식이 중요한가?” 최근 Reddit의 r/programming 커뮤니티에 올라온 글에서 Tim van der Lippe가 오랜 기간 담당해 온 Mockito 프로젝트의 유지보수자를 물러난다는 소식이 전해졌습니다. Mockito는 Java 개발자 사이에서 가장 널리 쓰이는 테스트 자동화 라이브러리 중 하나이며, 수많은 오픈소스 프로젝트와 기업 서비스의 ...

Dec 29, 20253 min read2
H

HA JIN-YOUNG's blog

967 posts