--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[TSL (Three Shader Language)|TSL (Three Shader Language]] last_updated: 2026-05-02 --- # [[TSL (Three Shader Language)|TSL (Three Shader Language]] ## πŸ“Œ Brief Summary > TSL (Three Shader Language)은 Three.js의 λ…Έλ“œ 기반 머티리얼 μ‹œμŠ€ν…œμž…λ‹ˆλ‹€ [1]. 셰이더λ₯Ό ν•œ 번 μž‘μ„±ν•˜λ©΄ [[WebGPU|WebGPU]]용 WGSLκ³Ό [[WebGL|WebGL]]용 GLSL둜 μžλ™ μ»΄νŒŒμΌλ˜μ–΄ 싀행될 수 있게 ν•΄μ€λ‹ˆλ‹€ [1, 2]. 둜우 레벨(Raw) 셰이더λ₯Ό 직접 μž‘μ„±ν•˜λŠ” 것을 λŒ€μ²΄ν•˜λ©°, ν–₯ν›„ Three.jsμ—μ„œ μ»€μŠ€ν…€ 셰이더λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ ꢌμž₯ λ°©μ‹μž…λ‹ˆλ‹€ [1, 3]. --- > TSL(Three Shader Language)은 [[WebGPU|WebGPU]]의 WGSLκ³Ό [[WebGL|WebGL]]의 GLSL둜 λͺ¨λ‘ 컴파일될 수 μžˆλŠ” Three.js의 λ…Έλ“œ 기반 머티리얼 및 셰이더 μ‹œμŠ€ν…œμž…λ‹ˆλ‹€ [1]. κ°œλ°œμžκ°€ 셰이더 μ½”λ“œλ₯Ό ν•œ 번만 μž‘μ„±ν•˜λ©΄ μ—¬λŸ¬ ν”Œλž«νΌμ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•˜λ„λ‘ μžλ™ ꡐ차 μ»΄νŒŒμΌμ„ μ§€μ›ν•˜μ—¬ μ½”λ“œ 쀑볡을 λ°©μ§€ν•©λ‹ˆλ‹€ [1-3]. μœ λ‹ˆνΌ 및 속성 관리λ₯Ό μžλ™μœΌλ‘œ μ²˜λ¦¬ν•΄μ£Όλ©°, ν–₯ν›„ Three.jsμ—μ„œ μ»€μŠ€ν…€ 셰이더λ₯Ό κ°œλ°œν•˜κΈ° μœ„ν•œ ꢌμž₯ λ°©μ‹μœΌλ‘œ 평가받고 μžˆμŠ΅λ‹ˆλ‹€ [1, 2, 4]. ## πŸ“– Core Content - **ꡐ차 컴파일 및 μžλ™ν™”**: TSL은 GLSLκ³Ό WGSL 두 개의 별도 μ½”λ“œλ² μ΄μŠ€λ₯Ό μœ μ§€ν•  ν•„μš”κ°€ 없도둝 ꡐ차 μ»΄νŒŒμΌμ„ μ§€μ›ν•©λ‹ˆλ‹€ [3]. λ˜ν•œ, μœ λ‹ˆνΌ(Uniform)κ³Ό 속성(Attribute) 데이터 처리λ₯Ό μžλ™μœΌλ‘œ ν•Έλ“€λ§ν•˜μ—¬ 개발 λ³΅μž‘λ„λ₯Ό μ€„μ—¬μ€λ‹ˆλ‹€ [3]. - **동적 λ…Έλ“œ 머티리얼(Node Materials) μ œμ–΄**: TSL 기반의 λ…Έλ“œ 머티리얼은 ν•©μ„±(Composable)이 κ°€λŠ₯ν•˜λ©°, `positionNode`, `colorNode`, `normalNode`와 같은 속성을 톡해 ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μœΌλ‘œ μ œμ–΄ν•  수 μžˆμ–΄ κΈ°μ‘΄ WebGLμ—μ„œλŠ” μ»€μŠ€ν…€ 셰이더가 ν•„μš”ν–ˆλ˜ νš¨κ³Όλ“€μ„ λ™μ μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3, 4]. - **μž¬μ‚¬μš© κ°€λŠ₯ν•œ 셰이더 둜직(Fn νŒ¨ν„΄)**: `Fn` νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ μž¬μ‚¬μš© κ°€λŠ₯ν•œ 셰이더 ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5]. μ΄λ ‡κ²Œ μž‘μ„±λœ ν•¨μˆ˜λŠ” ν•œ 번 컴파일된 ν›„ μ—¬λŸ¬ 머티리얼에 걸쳐 μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€ [5]. - **λ‚΄μž₯ λ…Έμ΄μ¦ˆ ν•¨μˆ˜**: TSLμ—λŠ” MaterialX λ…Έμ΄μ¦ˆ ν•¨μˆ˜κ°€ 기본적으둜 λ‚΄μž₯λ˜μ–΄ μžˆμ–΄, μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³ λ„ λ…Έμ΄μ¦ˆ 효과λ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5]. - **WebGPU λ„€μ΄ν‹°λΈŒ 포슀트 ν”„λ‘œμ„Έμ‹±**: WebGPU 기반의 ν”„λ‘œμ νŠΈμ—μ„œλŠ” `pmndrs/post[[Processing|Processing]]` 라이브러리 λŒ€μ‹  TSL λ…Έλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” Three.js λ‚΄μž₯ 포슀트 ν”„λ‘œμ„Έμ‹±μ„ μ‚¬μš©ν•˜λŠ” 것이 μ»΄ν“¨νŠΈ 셰이더λ₯Ό μ™„λ²½νžˆ μ§€μ›ν•˜λŠ” λ„€μ΄ν‹°λΈŒ ν•΄κ²°μ±…μž…λ‹ˆλ‹€ [6]. --- * **단일 μ½”λ“œλ² μ΄μŠ€μ™€ μžλ™ ꡐ차 컴파일:** TSL은 μ›μ‹œ(raw) GLSL λ˜λŠ” WGSL을 직접 μž‘μ„±ν•˜μ—¬ 두 개의 셰이더 μ½”λ“œλ² μ΄μŠ€λ₯Ό μœ μ§€ν•΄μ•Ό ν•˜λŠ” 수고λ₯Ό λœμ–΄μ€λ‹ˆλ‹€ [2]. μž‘μ„±λœ μ½”λ“œλŠ” WebGPU 및 WebGL ν™˜κ²½ λͺ¨λ‘μ— 맞좰 μžλ™μœΌλ‘œ ꡐ차 컴파일되며, μœ λ‹ˆνΌ(uniforms) 및 속성(attributes) 처리 μ—­μ‹œ TSL이 μžλ™μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€ [2, 4]. * **λ…Έλ“œ 기반 머티리얼 μ œμ–΄:** TSL의 λ…Έλ“œ 머티리얼은 쑰합이 κ°€λŠ₯(composable)ν•˜λ©°, `positionNode`, `colorNode`, `normalNode`와 같은 속성을 μˆ˜μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μ˜ μ œμ–΄λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€ [2, 5]. 이λ₯Ό 톡해 κΈ°μ‘΄ WebGL ν™˜κ²½μ—μ„œλŠ” λ³„λ„μ˜ λ³΅μž‘ν•œ μ»€μŠ€ν…€ 셰이더λ₯Ό μž‘μ„±ν•΄μ•Όλ§Œ ν–ˆλ˜ 동적인 λ Œλ”λ§ 효과λ₯Ό 더 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5]. * **μ½”λ“œ μž¬μ‚¬μš©μ„± 및 λ‚΄μž₯ ν•¨μˆ˜:** κ°œλ°œμžλŠ” `Fn` νŒ¨ν„΄μ„ ν™œμš©ν•˜μ—¬ μž¬μ‚¬μš© κ°€λŠ₯ν•œ TSL ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 있으며, 이 ν•¨μˆ˜λ“€μ€ ν•œ 번 컴파일된 ν›„ μ—¬λŸ¬ 머티리얼에 걸쳐 자유둭게 μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6]. λ˜ν•œ, MaterialX λ…Έμ΄μ¦ˆ ν•¨μˆ˜μ™€ 같은 μœ μš©ν•œ κΈ°λŠ₯듀이 λ‚΄μž₯λ˜μ–΄ μžˆμ–΄ μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³ λ„ λ…Έμ΄μ¦ˆ κ΄€λ ¨ 셰이더 λ‘œμ§μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6]. * **WebGPU 포슀트 ν”„λ‘œμ„Έμ‹± 지원:** WebGPU 기반 ν”„λ‘œμ νŠΈμ˜ 경우, TSL λ…Έλ“œμ™€ κ²°ν•©λœ Three.js의 λ‚΄μž₯(native) 포슀트 ν”„λ‘œμ„Έμ‹± κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [7]. μ΄λŠ” 전체 μ»΄ν“¨νŠΈ 셰이더([[Compute Shader|Compute Shader]]) 지원이 ν†΅ν•©λœ WebGPU용 λ„€μ΄ν‹°λΈŒ μ†”λ£¨μ…˜μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€ [7]. ## βš–οΈ Trade-offs & Caveats - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Graphics & Performance λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. --- - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Graphics & Performance λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— Knowledge Connections - **Related Topics:** [[WebGPU|WebGPU]], [[WebGL|WebGL]], WGSL, GLSL, Node Material - **Projects/Contexts:** Three.js - **Contradictions/Notes:** μ†ŒμŠ€ κ°„μ˜ λͺ¨μˆœμ μ€ μ—†μœΌλ‚˜, μ΄μ „μ˜ λ Œλ”λ§ 방식과 달리 λ³„λ„μ˜ GLSL/WGSL μ½”λ“œλ₯Ό 직접 μž‘μ„±ν•˜λŠ” 것보닀 TSL을 μ‚¬μš©ν•˜λŠ” 것이 μ½”λ“œ μœ μ§€λ³΄μˆ˜ 및 ꡐ차 ν˜Έν™˜μ„± μΈ‘λ©΄μ—μ„œ λͺ…λ°±νžˆ μš°μ›”ν•˜λ‹€κ³  κ°•μ‘°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [3]. --- *Last updated: 2026-04-19* --- --- - **Related Topics:** [[WebGPU|WebGPU]], [[WebGL|WebGL]], WGSL, GLSL, Node Material - **Projects/Contexts:** Three.js 크둜슀 ν”Œλž«νΌ μ»€μŠ€ν…€ 셰이더 및 포슀트 ν”„λ‘œμ„Έμ‹± 개발 - **Contradictions/Notes:** κΈ°μ‘΄ WebGL ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ™ΈλΆ€ 라이브러리인 `pmndrs/post[[Processing|Processing]]`이 μ—¬μ „νžˆ ν›Œλ₯­ν•œ μ„ νƒμ§€λ‘œ ν‰κ°€λ˜μ§€λ§Œ, WebGPU ν”„λ‘œμ νŠΈ ν™˜κ²½μ—μ„œλŠ” TSL λ…Έλ“œ 기반의 Three.js λ„€μ΄ν‹°λΈŒ 포슀트 ν”„λ‘œμ„Έμ‹±μ„ μ‚¬μš©ν•˜λŠ” κ²ƒμœΌλ‘œ 개발 방식이 μ „ν™˜λ  것을 ꢌμž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [7]. --- *Last updated: 2026-04-19* ---