판 비교

이전빈 문서 (처음 만든 판)
이후#2573 · 공식 자료 2개 종합 · 문단별 AI 검수 초안 · GGWiki 자동 ·
+103줄−0줄+19,070자
1번째 줄 근처
추가: ## 개요
추가: 셰이더(Shader)는 마인크래프트에서 특정 요소의 렌더링 방식을 정의하는 데 사용된다[1]. 자바 에디션에서는 코어 셰이더(Core Shader)와 후처리 셰이더(Post-processing Shader) 두 가지 종류가 사용된다[1]. 코어 셰이더는 엔티티와 지형 등 게임의 근본적인 부분을 렌더링하는 데 쓰이며, 후처리 셰이더는 코어 셰이더가 실행된 후 화면에 시각 효과를 적용하는 데 쓰인다[1]. 후처리 셰이더의 예로는 메뉴 배경 흐림, 관전자 모드에서 보이는 특정 몹의 시야 효과, '화려함(Fabulous!)' 그래픽 설정의 반투명 객체 처리, 발광 상태 효과 등이 있다[1].
추가: 셰이더는 OpenGL 셰이딩 언어(GLSL)로 작성되며, 각 셰이더 프로그램은 버텍스 셰이더(Vertex Shader)와 프래그먼트 셰이더(Fragment Shader) 두 부분으로 구성된다[1]. 버텍스 셰이더는 개별 정점의 위치를 정의하고, 프래그먼트 셰이더는 단일 렌더 조각의 최종 색상을 정의한다[1]. 예를 들어 버텍스 셰이더는 나뭇잎과 물의 흔들림을 만드는 데 자주 쓰이며, 프래그먼트 셰이더는 블룸, 갓 레이, 블러 같은 효과를 추가하는 데 쓰일 수 있다[1]. 마인크래프트에서 버텍스 셰이더는 반드시 .vsh 확장자를, 프래그먼트 셰이더는 .fsh 확장자를 사용해야 한다[1]. 셰이더 프로그램은 client.jar의 assets/minecraft/shaders 디렉터리에 저장되며 리소스 팩으로 교체할 수 있다[1]. 셰이더 로드 중 오류가 발생하면 해당 리소스 팩이 비활성화되고 화려함 그래픽 모드가 꺼진다[1].
추가:
추가: 베드락 에디션에서는 1.18.30 버전부터 RenderDragon 구현으로 인해 모든 기기에서 리소스 팩을 통한 서드파티 셰이더 지원이 중단되었다[1]. 대신 디퍼드 렌더링 파이프라인(Deferred Rendering Pipeline)이 도입되어 리소스 팩으로 커스터마이징할 수 있으며, 이는 바닐라 게임에서 생동감 있는 비주얼(Vibrant Visuals) 그래픽 모드에 사용된다[1]. 이 파이프라인은 직접적인 커스텀 셰이더를 지원하지는 않지만, 빛, 안개, 대기, PBR 텍스처 재질 속성을 정의하여 자바 에디션의 셰이더 팩에서 볼 수 있는 것과 유사한 조명 효과를 만들 수 있다[1].
추가:
추가: ## 이름
추가: - 다른 언어 공식 이름: Shader (English) · シェーダー (日本語) · Sombreador (Español) · Shader (Português) · Filtres (Français) [2]
추가:
추가: ## 상세
추가: ### 작동 방식
추가: 마인크래프트는 렌더링 파이프라인에서 셰이더를 사용하여 특정 요소의 그리기 방식을 정의한다[1]. 자바 에디션에서는 코어 셰이더와 후처리 셰이더 두 가지 종류가 사용된다[1]. 코어 셰이더는 엔티티, 지형, GUI 요소 등 게임의 근본적인 부분을 렌더링하는 데 쓰인다[1]. 후처리 셰이더는 코어 셰이더가 실행된 뒤 화면에 시각 효과를 적용하는 데 쓰인다[1]. 후처리 셰이더의 예로는 메뉴 배경 흐림, 관전자 모드에서 특정 몹의 시야 효과, "Fabulous!" 그래픽 설정의 반투명 객체 고정 처리, 빛나는 상태 효과 등이 있다[1]. 셰이더는 OpenGL Shading Language(GLSL)로 작성된다[1]. 각 셰이더 프로그램은 버텍스 셰이더와 프래그먼트 셰이더 두 부분으로 구성된다[1]. 버텍스 셰이더는 개별 정점의 위치를 정의하고, 프래그먼트 셰이더는 단일 렌더 프래그먼트의 최종 색상을 정의한다[1]. 버텍스 셰이더는 나뭇잎과 물의 파도 애니메이션을 만드는 데 자주 쓰이며, 프래그먼트 셰이더는 블룸, 갓 레이, 블러 같은 효과를 추가하는 데 쓰일 수 있다[1]. 마인크래프트에서 버텍스 셰이더는 `.vsh` 확장자를, 프래그먼트 셰이더는 `.fsh` 확장자를 사용해야 한다[1]. 셰이더 프로그램은 `client.jar`의 `assets/minecraft/shaders` 디렉터리에 저장되며 리소스 팩으로 교체할 수 있다[1]. 셰이더 로딩 중 오류가 발생하면 해당 리소스 팩이 비활성화되고 Fabulous 그래픽 모드가 꺼진다[1]. 베드락 에디션 1.18.30부터 RenderDragon 구현으로 인해 서드파티 셰이더가 모든 기기에서 리소스 팩으로 더 이상 지원되지 않는다[1]. 대신 디퍼드 렌더링 파이프라인이 제공되며, 이는 리소스 팩으로 커스터마이징할 수 있고 바닐라 게임에서 "생동감 있는 비주얼" 그래픽 모드에 사용된다[1]. 이 파이프라인은 직접적인 커스텀 셰이더를 지원하지 않지만 빛, 안개, 대기, PBR 텍스처 재질 속성을 정의하는 방법을 제공하여 자바 에디션 셰이더 팩과 유사한 조명 효과를 만들 수 있다[1].
추가:
추가: ### 규칙
추가: 자바 에디션에서 코어 셰이더는 게임 내 거의 모든 것(지형, 엔티티, GUI 요소 등)을 렌더링하는 데 사용된다[1]. 그러나 일부 객체는 셰이더로 그려지지 않는데, 네더의 하늘과 오버월드 아래쪽 절반의 하늘이 이에 해당한다[1]. 이들은 OpenGL 클리어 색상으로 그려지며 `FogColor` 유니폼과 같은 값으로 설정된다[1]. 유니폼 블록은 std140 레이아웃을 사용한다[1]. 모든 유니폼은 지정된 순서와 올바른 타입으로 명시되어야 하며, 그렇지 않으면 이상하고 정의되지 않은 동작이 발생한다[1]. 일부 셰이더는 주어진 유니폼 블록의 모든 유니폼을 사용하지 않을 수 있으며, 이 경우 미사용 유니폼은 '기본' 값을 가진다[1]. 인클루드 셰이더(헬퍼 함수와 변수 포함)는 `.glsl`, `.vsh`, `.fsh` 확장자를 가져야 한다[1]. 인클루드 셰이더를 가져올 때 `#include` 지시자를 사용하며, 가져온 파일은 반드시 빈 줄로 끝나야 한다. 그렇지 않으면 셰이더가 로드되지 않는다[1]. 후처리 효과는 HUD와 GUI 요소가 렌더링되기 전에 적용된다[1]. GUI에서 아이템이나 엔티티를 그릴 때 다음 과정이 발생한다[1]. 아이템이나 엔티티가 내부 텍스처에 사전 렌더링된다[1]. 아이템의 경우 모델 정의에서 `oversized_in_gui` 필드 값에 따라 현재 보이는 모든 아이템의 아틀라스("GUI 아이템 아틀라스") 또는 해당 아이템의 단일 텍스처가 사용된다[1]. 엔티티는 각각 고유한 텍스처에 렌더링된다[1]. 각 아이템이나 엔티티에 대해 화면에 쿼드가 그려지며, 해당 아이템이나 엔티티의 GUI 아이템 아틀라스 또는 개별 텍스처에서 샘플링한다[1]. 게임은 필요할 때 아이템 렌더링을 건너뛰고 이전 프레임에 그려진 것을 사용할 수 있다[1]. 아이템은 다음 조건 중 하나가 충족될 때만 다시 렌더링된다[1]. 아이템 모델 어딘가에 애니메이션 텍스처가 있는 경우[1]. 아이템에 마법 부여 글린트가 있는 경우[1]. GUI 아이템 아틀라스가 가득 찬 경우(이 경우 아틀라스가 비워지고 현재 보이는 모든 GUI 아이템이 다시 그려짐)[1]. GUI 배율이 변경된 경우(이 경우 GUI 아이템 아틀라스가 비워지고 현재 보이는 모든 GUI 아이템이 다시 그려짐)[1]. 아이템 데이터가 시각적 업데이트를 유발하는 방식으로 변경된 경우(`item_model`, `custom_model_data`, `profile` 데이터 컴포넌트 변경 등 포함)[1].
추가:
추가: ### 구성 요소
추가: 코어 셰이더의 셰이더 프로그램은 리소스 팩의 `assets/<namespace>/shaders/core` 디렉터리에 위치한다[1]. 인클루드 셰이더는 `assets/<namespace>/shaders/include`에 저장되며 여러 셰이더 프로그램에서 사용할 수 있는 헬퍼 함수와 변수를 포함한다[1]. 바닐라 인클루드 셰이더는 바닐라 리소스 팩 전반에서 사용된다[1]. 가져오기 문법은 다음과 같다[1]. `#include <filepath.glsl>` → `assets/minecraft/shaders/include/<filepath>.glsl`에서 파일 가져옴[1]. `#include <namespace:path.glsl>` → `assets/<namespace>/shaders/include/<path>.glsl`에서 파일 가져옴[1]. `#include "filepath.glsl"` → `assets/minecraft/shaders/core/<filepath>.glsl`에서 파일 가져옴[1]. 가져올 때 게임은 가져오기 지시자를 인클루드 셰이더의 내용으로 대체한다[1]. 후처리 효과는 여러 패스(pass)와 렌더 타겟(render target)으로 구성된다[1]. 타겟은 읽고 쓸 수 있는 버퍼이며, 게임은 게임 월드의 특정 부분(파티클, 물 등)을 담은 내장 타겟을 제공하고 사용자가 직접 정의할 수도 있다[1]. 패스는 PNG 텍스처나 렌더 타겟에서 여러 입력을 가질 수 있다[1]. 후처리 효과는 `assets/<namespace>/post_effect/<post effect>.json`에 정의된다[1]. 현재 게임에서 사용되는 후처리 효과는 총 여섯 가지이다[1]. 일반 게임 렌더링은 매 프레임 다음 순서로 수행된다[1]. 월드(엔티티, 블록, 하늘, 아이템 등)가 코어 셰이더에 의해 렌더링됨[1]. 필요한 경우 후처리 효과 적용[1]. GUI와 HUD 요소가 코어 셰이더에 의해 렌더링됨[1]. 공통 유니폼 블록(후처리 및 코어 셰이더 모두에서 사용 가능)은 Globals이다[1]. Globals는 모든 셰이더에서 항상 바인딩되며 적절한 값을 가짐[1]. `CameraBlockPos` (ivec3): 월드 공간 좌표에서 카메라의 블록 위치[1]. `CameraOffset` (vec3): 월드 공간 좌표에서 카메라의 소수점 위치[1]. `ScreenSize` (vec2): 현재 프레임버퍼의 너비와 높이(픽셀)[1]. `GlintAlpha` (float): 접근성 설정 "글린트 강도" 값(0~1 범위)[1]. `GameTime` (float): 약 20분(24000틱) 주기로 0에서 1로 증가 후 0으로 리셋. 공식: `(월드 나이 % 24000) / 24000`[1]. `MenuBlurRadius` (int): 접근성 설정 "메뉴 배경 흐림" 값(0~10 범위)[1]. `UseRgss` (int): 텍스처 필터링 비디오 설정이 RGSS로 설정되어 있으면 1, 아니면 0[1]. 코어 유니폼 블록(코어 셰이더에서만 사용 가능)은 Fog, DynamicTransforms, Lighting, Projection, LightmapInfo, CloudInfo, ChunkSection, SpriteAnimationInfo, SkyOccluderInfo이다[1]. Fog는 항상 바인딩되나 지원하지 않는 셰이더에서는 적절한 값이 아닐 수 있음[1]. `FogColor` (vec4): 안개 색상[1]. `FogEnvironmentalStart` (float): 환경 안개 시작 거리[1]. `FogEnvironmentalEnd` (float): 환경 안개 끝 거리[1]. `FogRenderDistanceStart` (float): 렌더 거리 안개 시작 거리[1]. `FogRenderDistanceEnd` (float): 렌더 거리 안개 끝 거리[1]. `FogSkyEnd` (float): 하늘 상단 부분 안개 끝 거리[1]. `FogCloudsEnd` (float): 구름 안개 끝 거리[1]. DynamicTransforms: `ModelViewMat` (mat4): 모델-뷰 행렬[1]. `ColorModulator` (vec4): 게임 코드에서 설정하여 객체 최종 색상을 수정하는 색상 승수[1]. `ModelOffset` (vec3): 렌더링 중인 모델의 오프셋[1]. `TextureMat` (mat4): UV 변환용 4D 행렬(마법 글린트, 브리즈/풍풍 차지 바람, 월드 보더 등 애니메이션 효과에 사용)[1]. Lighting은 항상 바인딩되나 지원하지 않는 셰이더에서는 적절한 값이 아닐 수 있음[1]. `Light0_Direction` (vec3): 첫 번째 빛 방향. 방향성 엔티티 음영 계산에 사용[1]. `Light1_Direction` (vec3): 두 번째 빛 방향. 방향성 엔티티 음영 계산에 사용[1]. Projection은 항상 바인딩되나 지원하지 않는 셰이더에서는 적절한 값이 아닐 수 있음[1]. `ProjMat` (mat4): 투영 행렬[1]. LightmapInfo는 항상 바인딩되나 지원하지 않는 셰이더에서는 적절한 값이 아닐 수 있음[1]. `SkyFactor` (float): 하늘이 번쩍일 때(번개 등) 라이트맵을 얼마나 밝게 할지 지정. `minecraft:visual/sky_light_factor` 환경 속성에서 가져옴[1]. `BlockFactor` (float): 무작위로 변동하는 값. 바닐라 셰이더에서 블록 빛 깜빡임에 사용[1]. `NightVisionFactor` (float): 야간 투시 상태 효과가 라이트맵을 얼마나 밝게 할지 지정(0~1 범위)[1]. `DarknessScale` (float): 어둠 상태 효과가 라이트맵을 얼마나 어둡게 할지 지정(0~1 범위)[1]. `BossOverlayWorldDarkeningFactor` (float): 보스바가 보일 때 라이트맵을 얼마나 어둡게 할지 지정. 엔더 드래곤전에서만 쓰이는 것으로 보임[1]. `BrightnessFactor` (float): 밝기 비디오 설정 값(0~1 범위)[1]. `BlockLightTint` (vec3): 블록 빛 색상. `minecraft:visual/block_light_tint` 환경 속성에서 가져옴[1]. `SkyLightColor` (vec3): 하늘 빛 색상. `minecraft:visual/sky_light_color` 환경 속성에서 가져옴[1]. `AmbientColor` (vec3): 주변광 색상. `minecraft:visual/ambient_light_color` 환경 속성에서 가져옴[1]. `NightVisionColor` (vec3): 야간 투시 상태 효과 색상. `minecraft:visual/night_vision_color` 환경 속성에서 가져옴[1]. CloudInfo: `CloudColor` (vec4): 구름 색상[1]. `CloudOffset` (vec3): 구름 오프셋[1]. `CellSize` (vec3): 개별 구름 크기[1]. ChunkSection: `ModelViewMat` (mat4): 모델-뷰 행렬[1]. `ChunkVisibility` (float): 청크 섹션이 표시된 후 0에서 1로 증가. 소요 시간은 "청크 페이드" 비디오 설정에 의존[1]. `TextureSize` (ivec2)[1]. `ChunkPosition` (ivec3)[1]. SpriteAnimationInfo: `ProjectionMatrix` (mat4): 투영 행렬[1]. `SpriteMatrix` (mat4)[1]. `UPadding` (float)[1]. `VPadding` (float)[1]. `MipMapLevel` (int)[1]. SkyOccluderInfo: `OcclusionStartAngle` (float)[1]. `OcclusionEndAngle` (float)[1]. 후처리 유니폼 블록(후처리 셰이더에서만 사용 가능)은 SamplerInfo이다[1]. `OutSize` (vec2): 출력 버퍼의 너비와 높이(픽셀)[1]. 후처리 효과 정의와 같은 순서로 지정된 기타 모든 입력. 이름이 `<sampler_name>Size` 형식(예: "Main" 입력이면 `MainSize`)[1].
추가:
추가: ### 등장 장소·조건
추가: 자바 에디션에서 코어 셰이더는 `client.jar`의 `assets/minecraft/shaders` 디렉터리에 저장되며 리소스 팩으로 교체 가능[1]. 코어 셰이더 프로그램은 리소스 팩의 `assets/<namespace>/shaders/core`에 위치[1]. 인클루드 셰이더는 `assets/<namespace>/shaders/include`에 저장[1]. 후처리 효과 정의 파일은 `assets/<namespace>/post_effect/<post effect>.json`에 위치[1]. 후처리 효과는 메뉴 배경, 관전자 모드에서 특정 몹 관전 시 시야 효과, 빛나는 상태 효과 렌더링 시 사용됨[1]. 커스텀 후처리 효과는 `/posteffect` 명령어로 정의하고 표시할 수 있음[1]. 베드락 에디션에서는 1.18.30부터 RenderDragon 구현으로 서드파티 셰이더 지원이 중단되었으며, 디퍼드 렌더링 파이프라인이 대체 기능으로 제공됨[1]. 이 파이프라인은 "생동감 있는 비주얼" 그래픽 모드에서 사용됨[1].
추가:
추가: ## 배경·설정
추가: 셰이더는 게임이 특정 요소를 렌더링하는 방식을 정의하는 데 사용된다.[1]
추가:
추가: 자바 에디션에서는 두 가지 종류의 셰이더가 사용된다. 코어 셰이더와 후처리 셰이더이다. 코어 셰이더는 엔티티와 지형 같은 게임의 기본적인 부분을 렌더링하는 데 쓰이며, 후처리 셰이더는 코어 셰이더가 실행된 뒤 화면에 시각 효과를 적용하는 데 쓰인다.[1]
추가:
추가: 후처리 셰이더의 예로는 메뉴 배경 흐림, 관전자 모드에서 볼 수 있는 특정 몹의 시야 유형, 화려함! 그래픽 설정의 반투명 객체 고정 처리, 발광 상태 효과가 있다.[1]
추가:
추가: 셰이더는 OpenGL 셰이딩 언어(GLSL)로 작성된다. 각 셰이더 프로그램은 버텍스 셰이더와 프래그먼트 셰이더 두 부분으로 구성된다. 버텍스 셰이더는 개별 정점의 위치를 정의하고, 프래그먼트 셰이더는 단일 렌더 조각의 최종 색상을 정의한다. 예를 들어 버텍스 셰이더는 나뭇잎과 물의 흔들림을 만드는 데 자주 쓰이며, 프래그먼트 셰이더는 블룸, 갓 레이, 블러 같은 효과를 추가하는 데 쓰일 수 있다. 마인크래프트에서 버텍스 셰이더는 .vsh 확장자를, 프래그먼트 셰이더는 .fsh 확장자를 사용해야 한다.[1]
추가:
추가: 셰이더 프로그램은 client.jar의 assets/minecraft/shaders 디렉터리에 저장되며 리소스 팩으로 대체할 수 있다. 셰이더를 불러올 때 오류가 발생하면 리소스 팩이 비활성화되고 화려함 그래픽 모드가 꺼진다.[1]
추가:
추가: 코어 셰이더는 지형, 엔티티, GUI 요소 등 게임의 거의 모든 것을 렌더링하는 데 사용된다. 코어 셰이더의 셰이더 프로그램은 리소스 팩의 assets/<네임스페이스>/shaders/core 디렉터리에 위치한다.[1]
추가:
추가: 일부 객체는 셰이더를 사용해 그려지지 않는다. 여기에는 네더의 하늘과 오버월드 아래쪽 절반의 하늘이 포함된다. 이들은 FogColor 유니폼과 같은 값으로 설정된 OpenGL 지우기 색상이다.[1]
추가:
추가: 인클루드 셰이더(assets/<네임스페이스>/shaders/include에 저장)에는 여러 셰이더 프로그램에서 사용할 수 있는 도우미 함수와 변수가 들어 있다. 이들은 .glsl, .vsh, .fsh 파일 확장자를 가져야 한다. #include 지시자와 식별자를 사용해 인클루드 셰이더를 가져올 수 있다.[1]
추가:
추가: 후처리 효과는 메뉴 배경, 특정 몹 관전 시 시야 효과 생성, 발광 효과 렌더링에 사용된다. /posteffect 명령어로 사용자 정의 후처리 효과를 정의하고 표시할 수도 있다.[1]
추가:
추가: 후처리 효과는 여러 패스와 렌더 타깃으로 구성된다. 타깃은 읽고 쓸 수 있는 버퍼이다. 게임은 게임 세계의 특정 부분(입자, 물 등)을 담은 내장 타깃을 제공하며, 사용자가 직접 타깃을 정의해 데이터를 읽고 쓸 수도 있다. 패스는 PNG 텍스처나 렌더 타깃에서 여러 입력을 가질 수 있다. 후처리 효과는 assets/<네임스페이스>/post_effect/<후처리 효과>.json에 정의된다. 후처리 효과는 HUD와 GUI 요소가 렌더링되기 전에 적용된다.[1]
추가:
추가: 현재 게임에서 사용되는 후처리 효과는 여섯 가지이다.[1]
추가:
추가: 일반 게임 렌더링 시 각 프레임은 다음 순서로 렌더링된다. 월드(엔티티, 블록, 하늘, 아이템 등)가 코어 셰이더에 의해 렌더링되고, 필요한 후처리 효과가 적용된 뒤, GUI와 HUD 요소가 코어 셰이더에 의해 렌더링된다.[1]
추가:
추가: GUI에서 아이템이나 엔티티를 그릴 때는 다음 과정이 일어난다. 아이템이나 엔티티가 내부 텍스처에 사전 렌더링된다. 아이템의 경우 현재 보이는 모든 아이템의 아틀라스(GUI 아이템 아틀라스)나 해당 아이템의 단일 텍스처가 될 수 있으며, 이는 아이템 모델 정의의 oversized_in_gui 필드가 true인지 false인지에 따라 달라진다. 엔티티의 경우 각각 항상 고유한 텍스처에 렌더링된다. 각 아이템이나 엔티티에 대해 쿼드가 화면에 그려지며, 해당 아이템이나 엔티티의 GUI 아이템 아틀라스나 개별 텍스처에서 샘플링한다. 게임은 필요할 때 아이템 렌더링을 건너뛰고 이전 프레임에 그려진 것을 사용한다. 아이템은 다음 조건 중 하나가 충족될 때만 다시 렌더링된다. 모델 어딘가에 애니메이션 텍스처가 있는 경우, 마법 부여 반짝임이 있는 경우, GUI 아이템 아틀라스가 가득 찬 경우(이 경우 비워지고 현재 보이는 모든 GUI 아이템이 다시 그려짐), GUI 배율이 변경된 경우(이 경우 GUI 아이템 아틀라스가 비워지고 현재 보이는 모든 GUI 아이템이 다시 그려짐), 시각적 업데이트를 유발하는 방식으로 아이템 데이터가 변경된 경우(여기에는 item_model, custom_model_data, profile 데이터 컴포넌트 변경 등이 포함되나 이에 국한되지 않음).[1]
추가:
추가: 유니폼 블록은 std140 레이아웃을 사용한다. 모든 유니폼은 지정된 순서와 올바른 타입으로 지정되어야 하며, 그렇지 않으면 이상하고 정의되지 않은 동작이 발생한다. 편의를 위해 일부 유니폼 블록은 인클루드 셰이더에 미리 정의되어 있다. 일부 셰이더는 주어진 유니폼 블록의 모든 유니폼을 사용하지 않을 수 있으며, 이 경우 사용되지 않는 유니폼은 '기본' 값을 가진다.[1]
추가:
추가: 후처리 셰이더와 코어 셰이더 모두에서 사용 가능한 공통 유니폼 블록으로는 Globals가 있다. 이 블록은 항상 바인딩되며 모든 셰이더에서 적절한 값을 가진다. 포함되는 유니폼은 CameraBlockPos(월드 좌표계에서 카메라의 블록 위치, ivec3), CameraOffset(월드 좌표계에서 카메라의 소수부 위치, vec3), ScreenSize(현재 프레임버퍼의 너비와 높이(픽셀), vec2), GlintAlpha(접근성 설정인 반짝임 강도 값, 0~1 범위, float), GameTime(대략 20분 동안 0에서 1로 계속 증가하다가 0으로 재설정되는 값, 정확한 공식은 (월드 나이 modulo 24000) / 24000, float), MenuBlurRadius(접근성 설정인 메뉴 배경 흐림 값, 0~10 범위, int), UseRgss(텍스처 필터링 비디오 설정이 RGSS로 설정되어 있으면 1, 아니면 0인 '불리언' 값, int)이다.[1]
추가:
추가: 코어 셰이더에서만 사용 가능한 유니폼 블록으로는 Fog, DynamicTransforms, Lighting, Projection, LightmapInfo, CloudInfo, ChunkSection, SpriteAnimationInfo, SkyOccluderInfo가 있다.[1]
추가:
추가: 후처리 셰이더에서만 사용 가능한 유니폼 블록으로는 SamplerInfo가 있다. 이 블록에는 OutSize(출력 버퍼의 너비와 높이(픽셀), vec2)와 후처리 효과 정의와 같은 순서로 지정된 기타 모든 입력이 포함된다. 이들은 <샘플러_이름>Size 형식으로 이름이 지정되며, 예를 들어 이름이 "Main"인 입력의 경우 MainSize가 된다.[1]
추가:
추가: 베드락 에디션 1.18.30부터 RenderDragon 구현으로 인해 서드파티 셰이더가 모든 기기에서 리소스 팩으로 더 이상 지원되지 않는다.[1]
추가:
추가: 지연 렌더링 파이프라인은 리소스 팩으로 사용자 정의할 수 있는 대체 렌더링 파이프라인으로, 바닐라 게임에서 생동감 있는 비주얼 그래픽 모드에 사용된다. 직접적인 커스텀 셰이더를 지원하지는 않지만, 빛, 안개, 대기, PBR 텍스처 재질에 대한 속성을 정의하는 방법을 제공한다. 이를 통해 자바 에디션의 셰이더 팩에서 볼 수 있는 것과 유사한 조명 효과를 만들 수 있다.[1]
추가:
추가: ## 공략
추가: 자바 에디션에서 셰이더는 핵심 셰이더와 후처리 셰이더로 나뉜다. 핵심 셰이더는 엔티티, 지형, GUI 요소 등 게임의 근본적인 부분을 렌더링하며, 후처리 셰이더는 핵심 셰이더 실행 후 화면에 시각 효과를 적용한다. 후처리 셰이더의 예로는 메뉴 배경 흐림, 관전자 모드에서 특정 몹의 시야 효과, 화려함 그래픽 설정의 반투명 객체 처리, 발광 상태 효과가 있다. 셰이더는 OpenGL 셰이딩 언어(GLSL)로 작성되며, 정점 셰이더(.vsh)와 조각 셰이더(.fsh) 두 부분으로 구성된다. 정점 셰이더는 개별 정점의 위치를 정의하고, 조각 셰이더는 단일 렌더 조각의 최종 색상을 정의한다. 예를 들어 정점 셰이더는 나뭇잎과 물의 파도 효과를 만드는 데 쓰이고, 조각 셰이더는 블룸, 신광, 흐림 같은 효과를 추가하는 데 쓰인다. 셰이더 프로그램은 client.jar의 assets/minecraft/shaders 디렉터리에 저장되며 리소스 팩으로 교체할 수 있다. 셰이더 로딩 중 오류가 발생하면 리소스 팩이 비활성화되고 화려함 그래픽 모드가 꺼진다. [1]
추가:
추가: 핵심 셰이더는 지형, 엔티티, GUI 요소 등 게임의 거의 모든 것을 렌더링하는 데 쓰인다. 핵심 셰이더의 셰이더 프로그램은 리소스 팩의 assets/<네임스페이스>/shaders/core 디렉터리에 위치한다. 네더의 하늘과 오버월드 하반부의 하늘은 셰이더로 그려지지 않으며, 이는 FogColor 유니폼과 같은 값으로 설정된 OpenGL 클리어 색상이다. [1]
추가:
추가: 포함 셰이더(assets/<네임스페이스>/shaders/include에 저장)는 여러 셰이더 프로그램에서 사용할 수 있는 도우미 함수와 변수를 담으며, .glsl, .vsh, .fsh 확장자를 가져야 한다. #include 지시자로 가져올 수 있는데, 예를 들어 #include <filepath.glsl>은 assets/minecraft/shaders/include/<filepath>.glsl을, #include <namespace:path.glsl>은 assets/<네임스페이스>/shaders/include/<path>.glsl을, #include "filepath.glsl"은 assets/minecraft/shaders/core/<filepath>.glsl을 가져온다. 가져올 때 게임은 지시자를 포함 셰이더의 내용으로 치환하며, 가져온 파일은 빈 줄로 끝나야 한다. [1]
추가:
추가: 후처리 효과는 메뉴 배경, 특정 몹 관전 시 시야 효과, 발광 효과 렌더링에 쓰이며, /posteffect 명령어로 사용자 정의 후처리 효과를 정의하고 표시할 수 있다. 후처리 효과는 여러 패스와 렌더 타깃으로 구성된다. 타깃은 읽고 쓸 수 있는 버퍼이며, 게임은 게임 세계의 특정 부분(입자, 물 등)을 담은 내장 타깃을 제공하고 사용자가 직접 정의할 수도 있다. 패스는 PNG 텍스처나 렌더 타깃에서 여러 입력을 받을 수 있다. 후처리 효과는 assets/<네임스페이스>/post_effect/<후처리 효과>.json에 정의되며, HUD와 GUI 요소가 렌더링되기 전에 적용된다. 현재 게임에서 쓰이는 후처리 효과는 여섯 가지다. [1]
추가:
추가: 일반 게임 렌더링은 매 프레임마다 월드(엔티티, 블록, 하늘, 아이템 등)를 핵심 셰이더로 렌더링하고, 필요한 후처리 효과를 적용한 뒤, GUI와 HUD 요소를 핵심 셰이더로 렌더링하는 순서로 진행된다. GUI에서 아이템이나 엔티티를 그릴 때는 해당 아이템이나 엔티티를 내부 텍스처로 사전 렌더링한다. 아이템의 경우 모델 정의에서 oversized_in_gui 필드가 true인지 false인지에 따라 현재 보이는 모든 아이템의 아틀라스(GUI 아이템 아틀라스) 또는 해당 아이템의 단일 텍스처가 쓰인다. 엔티티는 항상 고유한 텍스처에 렌더링된다. 이후 각 아이템이나 엔티티에 대해 쿼드를 화면에 그려 GUI 아이템 아틀라스나 개별 텍스처에서 샘플링한다. 게임은 필요할 때 아이템 렌더링을 건너뛰고 이전 프레임에 그려진 것을 사용한다. 아이템은 다음 조건 중 하나가 충족될 때만 다시 렌더링된다. 모델 어딘가에 애니메이션 텍스처가 있는 경우, 마법 부여 반짝임이 있는 경우, GUI 아이템 아틀라스가 가득 차서 비워지고 현재 보이는 모든 GUI 아이템이 다시 그려지는 경우, GUI 배율이 변경되어 아틀라스가 비워지고 다시 그려지는 경우, 아이템 데이터가 시각적 업데이트를 일으키는 방식으로 변경된 경우(item_model, custom_model_data, profile 데이터 컴포넌트 변경 등). [1]
추가:
추가: 유니폼 블록은 std140 레이아웃을 사용하며, 모든 유니폼은 올바른 순서와 타입으로 지정해야 한다. 일부 유니폼 블록은 포함 셰이더에 미리 정의되어 있다. 어떤 셰이더는 주어진 유니폼 블록의 모든 유니폼을 쓰지 않을 수 있으며, 이때 쓰지 않는 유니폼은 '기본값'을 가진다. [1]
추가:
추가: 공통 블록은 후처리 셰이더와 핵심 셰이더 모두에서 사용 가능하다. Globals 블록은 모든 셰이더에서 항상 바인딩되며 올바른 값을 가진다. CameraBlockPos(ivec3)는 월드 공간 좌표에서 카메라의 블록 위치, CameraOffset(vec3)은 카메라의 소수부 위치, ScreenSize(vec2)는 현재 프레임버퍼의 너비와 높이(픽셀), GlintAlpha(float)는 접근성 설정의 반짝임 강도(0~1), GameTime(float)은 약 20분 동안 0에서 1로 증가했다가 0으로 리셋되는 값(정확한 공식: (월드 나이 modulo 24000) / 24000), MenuBlurRadius(int)는 메뉴 배경 흐림 접근성 설정(0~10), UseRgss(int)는 텍스처 필터링 비디오 설정이 RGSS면 1, 아니면 0이다. [1]
추가:
추가: 핵심 블록은 핵심 셰이더에서만 사용 가능하다. Fog 블록은 항상 바인딩되지만 지원하지 않는 셰이더에서는 올바른 값을 가지지 않을 수 있다. FogColor(vec4)는 안개 색상, FogEnvironmentalStart/End(float)는 환경 안개의 시작/끝 거리, FogRenderDistanceStart/End(float)는 렌더 거리 안개의 시작/끝 거리, FogSkyEnd(float)는 하늘 상부 안개의 끝 거리, FogCloudsEnd(float)는 구름 안개의 끝 거리다. DynamicTransforms 블록에는 ModelViewMat(mat4, 모델-뷰 행렬), ColorModulator(vec4, 게임 코드에서 설정해 객체 최종 색상을 수정하는 색상 승수), ModelOffset(vec3, 렌더링 중인 모델의 오프셋), TextureMat(mat4, 마법 부여 반짝임, 브리즈와 바람 충전 바람, 월드 보더 등 일부 애니메이션 효과를 위해 UV를 변환하는 4D 행렬)이 있다. Lighting 블록은 항상 바인딩되지만 지원하지 않는 셰이더에서는 올바른 값을 가지지 않을 수 있다. Light0_Direction(vec3, 첫 번째 빛 방향, 엔티티 방향성 음영 계산용), Light1_Direction(vec3, 두 번째 빛 방향, 엔티티 방향성 음영 계산용)이 있다. Projection 블록은 항상 바인딩되지만 지원하지 않는 셰이더에서는 올바른 값을 가지지 않을 수 있다. ProjMat(mat4, 투영 행렬)이 있다. LightmapInfo 블록에는 SkyFactor(float, 번개 발생 시 하늘이 번쩍일 때 라이트맵을 얼마나 밝게 할지 지정, minecraft:visual/sky_light_factor 환경 속성에서 옴), BlockFactor(float, 무작위로 변동, 바닐라 셰이더에서 블록 빛 깜빡임에 사용), NightVisionFactor(float, 0~1 범위, 야간 투시 상태 효과가 라이트맵을 얼마나 밝게 할지 지정), DarknessScale(float, 0~1 범위, 어둠 상태 효과가 라이트맵을 얼마나 어둡게 할지 지정), BossOverlayWorldDarkeningFactor(float, 보스바가 보일 때 라이트맵을 얼마나 어둡게 할지 지정, 엔더 드래곤전에서만 쓰이는 듯), BrightnessFactor(float, 밝기 비디오 설정 0~1), BlockLightTint(vec3, 블록 빛 색상, minecraft:visual/block_light_tint 환경 속성에서 옴), SkyLightColor(vec3, 하늘 빛 색상, minecraft:visual/sky_light_color 환경 속성에서 옴), AmbientColor(vec3, 주변광 색상, minecraft:visual/ambient_light_color 환경 속성에서 옴), NightVisionColor(vec3, 야간 투시 상태 효과 색상, minecraft:visual/night_vision_color 환경 속성에서 옴)가 있다. CloudInfo 블록에는 CloudColor(vec4, 구름 색상), CloudOffset(vec3, 구름 오프셋), CellSize(vec3, 개별 구름 크기)가 있다. ChunkSection 블록에는 ModelViewMat(mat4, 모델-뷰 행렬), ChunkVisibility(float, 청크 섹션이 표시된 후 0에서 1로 증가, 소요 시간은 '청크 페이드' 비디오 설정에 의존), TextureSize(ivec2), ChunkPosition(ivec3)가 있다. SpriteAnimationInfo 블록에는 ProjectionMatrix(mat4, 투영 행렬), SpriteMatrix(mat4), UPadding(float), VPadding(float), MipMapLevel(int)가 있다. SkyOccluderInfo 블록에는 OcclusionStartAngle(float), OcclusionEndAngle(float)가 있다. [1]
추가:
추가: 후처리 블록은 후처리 셰이더에서만 사용 가능하다. SamplerInfo 블록에는 OutSize(vec2, 출력 버퍼의 너비와 높이(픽셀)), 후처리 효과 정의와 같은 순서로 지정된 기타 모든 입력이 있다. 이들은 <샘플러_이름>Size 형식으로 이름이 붙으며, 예를 들어 이름이 "Main"인 입력은 MainSize가 된다. [1]
추가:
추가: 베드락 에디션 1.18.30부터 RenderDragon 구현으로 인해 서드파티 셰이더가 모든 기기에서 리소스 팩으로 더 이상 지원되지 않는다. 지연 렌더링 파이프라인은 리소스 팩으로 사용자 정의할 수 있는 대체 렌더링 파이프라인으로, 바닐라 게임에서 생생한 비주얼 그래픽 모드에 사용된다. 직접적인 커스텀 셰이더를 지원하지는 않지만, 빛, 안개, 대기, PBR 텍스처 재질 속성을 정의하는 방법을 제공하여 자바 에디션의 셰이더 팩에서 볼 수 있는 것과 유사한 조명 효과를 만들 수 있다. [1]
추가:
추가: ## 기타
추가: * 자바 에디션에서 셰이더는 OpenGL Shading Language(GLSL)로 작성되며, 각 셰이더 프로그램은 버텍스 셰이더(.vsh)와 프래그먼트 셰이더(.fsh) 두 부분으로 구성된다[1]
추가: * 버텍스 셰이더는 개별 정점의 위치를 정의하며 나뭇잎과 물의 흔들림 효과 등에 쓰이고, 프래그먼트 셰이더는 단일 렌더 프래그먼트의 최종 색상을 정의하며 블룸, 갓 레이, 블러 같은 효과에 쓰인다[1]
추가: * 셰이더 프로그램은 client.jar의 assets/minecraft/shaders 디렉터리에 저장되며 리소스 팩으로 교체할 수 있다[1]
추가: * 셰이더 로딩 중 오류가 발생하면 해당 리소스 팩이 비활성화되고 화려한 그래픽 모드가 꺼진다[1]
추가: * 코어 셰이더는 assets/<네임스페이스>/shaders/core 디렉터리에, 포함 셰이더(Include shaders)는 assets/<네임스페이스>/shaders/include 디렉터리에 위치한다[1]
추가: * 포함 셰이더는 .glsl, .vsh, .fsh 확장자를 가지며 #include 지시자로 가져올 수 있다. 가져올 때 파일 끝이 빈 줄로 끝나야 로드된다[1]
추가: * 포스트 프로세싱 효과는 assets/<네임스페이스>/post_effect/<효과이름>.json에 정의되며 HUD와 GUI 요소가 렌더링되기 전에 적용된다[1]
추가: * 포스트 프로세싱 효과는 여러 패스(pass)와 렌더 타겟(target)으로 구성되며, 게임은 내장 타겟(파티클, 물 등)을 제공하고 사용자 정의 타겟도 만들 수 있다[1]
추가: * 현재 게임에서 사용되는 포스트 프로세싱 효과는 총 여섯 가지이다[1]
추가: * 일반 게임 렌더링 순서는 월드(엔티티, 블록, 하늘, 아이템 등) → 포스트 이펙트 → GUI와 HUD 순이다[1]
추가: * GUI에서 아이템이나 엔티티를 그릴 때는 내부 텍스처에 미리 렌더링한 뒤 쿼드(quad)를 화면에 그리는 과정을 거친다[1]
추가: * 아이템은 애니메이션 텍스처, 인챈트 글린트, GUI 아이템 아틀라스 가득 참, GUI 스케일 변경, 아이템 데이터 시각적 변경 시에만 다시 렌더링된다[1]
추가: * 유니폼 블록은 std140 레이아웃을 사용하며 모든 유니폼을 정확한 순서와 타입으로 지정해야 한다[1]
추가: * Globals 블록은 모든 셰이더에서 항상 바인딩되며 카메라 블록 위치(CameraBlockPos), 카메라 오프셋(CameraOffset), 화면 크기(ScreenSize), 글린트 알파(GlintAlpha), 게임 시간(GameTime), 메뉴 블러 반경(MenuBlurRadius), RGSS 사용 여부(UseRgss) 등을 포함한다[1]
추가: * 코어 셰이더 전용 블록으로는 Fog, DynamicTransforms, Lighting, Projection, LightmapInfo, CloudInfo, ChunkSection, SpriteAnimationInfo, SkyOccluderInfo가 있다[1]
추가: * 포스트 프로세싱 셰이더 전용 블록으로는 SamplerInfo가 있으며 출력 버퍼 크기(OutSize)와 입력 샘플러 크기들을 제공한다[1]
추가: * 베드락 에디션은 1.18.30 버전부터 RenderDragon 구현으로 인해 모든 기기에서 서드파티 셰이더(리소스 팩 내)를 더 이상 지원하지 않는다[1]
추가: * 베드락 에디션의 디퍼드 렌더링 파이프라인은 리소스 팩으로 커스터마이징 가능하며 생생한 비주얼(Vibrant Visuals) 그래픽 모드에 사용된다. 직접적인 커스텀 셰이더는 지원하지 않지만 빛, 안개, 대기, PBR 텍스처 재질 속성을 정의해 자바 에디션 셰이더 팩과 유사한 조명 효과를 낼 수 있다[1]
추가:
추가: 이 문서는 공식 공개 자료 2개를 AI가 문단별로 새로 정리하고, 문단마다 별도의 AI 검수를 거친 초안입니다. 자료에 확인되지 않는 내용은 적지 않았습니다. 패치 내역과 관련 문서는 아래에 따로 모아 보여 줍니다. 세부 설정과 최신 수치는 출처를 확인하세요. 일부 내용은 CC BY-NC-SA 3.0 라이선스 자료를 바탕으로 새로 썼으며, 같은 조건이 이 문서의 해당 부분에 적용됩니다. [1]