Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

공간 셰이더

공간 셰이더는 3D 개체를 음영 처리하는 데 사용됩니다. 이는 셰이더 Godot가 제공하는 가장 복잡한 유형입니다. 공간 셰이더는 다양한 렌더링 모드와 다양한 렌더링 옵션(예: 하위 표면 산란, 전송, 주변 폐색, 림 조명 등)으로 고도로 구성 가능합니다. 사용자는 선택적으로 정점, 조각 및 조명 프로세서 기능을 작성하여 객체가 그려지는 방식에 영향을 줄 수 있습니다.

렌더러 모드

Spatial 셰이더

렌더링 모드

설명

블렌드_믹스

혼합 혼합 모드(알파는 투명도), 기본값.

블렌드_추가

덧셈 블렌드 모드.

blend_sub

빼기 블렌드 모드.

blend_mul

곱셈 블렌드 모드.

blend_premul_alpha

미리 곱셈된 알파 블렌드 모드(완전 투명 = 추가, 완전 불투명 = 혼합).

깊이_그리기_불투명

불투명한 형상(투명하지 않음)에 대해서만 깊이를 그립니다.

깊이_그리기_항상

항상 깊이를 그립니다(불투명 및 투명).

깊이_그리기_절대로

절대 깊이를 그리지 마세요.

깊이_프리패스_알파

투명한 기하구조에 대해 불투명 깊이 사전 통과를 수행합니다.

깊이_테스트_비활성화됨

깊이 테스트를 비활성화합니다.

깊이_테스트_기본

깊이 테스트에서는 해당 픽셀이 다른 픽셀 뒤에 있으면 해당 픽셀을 삭제합니다. Forward+에서만 해당 픽셀이 다른 픽셀과 정확히 동일한 깊이에 있는 경우 해당 픽셀도 삭제됩니다.

깊이_테스트_반전

깊이 테스트에서는 픽셀이 다른 픽셀 앞에 있으면 해당 픽셀을 삭제합니다. 스텐실 효과에 유용합니다.

sss_mode_skin

피부를 위한 하위 표면 산란 모드(예: 빨간색 채널 강화 등 인간 피부의 시각적 요소 최적화)

컬백

뒷면을 발췌합니다(기본값).

컬프론트

앞면을 컬링합니다.

추출_비활성화됨

컬링이 비활성화되었습니다(양면).

음영되지 않음

결과는 알베도입니다. 머티리얼에서는 조명/음영이 발생하지 않으므로 렌더링 속도가 빨라집니다.

와이어프레임

Geometry draws using lines (useful for troubleshooting). When using the Compatibility renderer, you must call RenderingServer.set_debug_generate_wireframes(true) before the mesh is loaded for wireframe rendering to work. In the Compatibility renderer, backface culling is always disabled in wireframe mode, while in the Forward+ and Mobile renderers, the cull mode is respected.

debug_shadow_splits

방향성 그림자는 각 분할에 대해 서로 다른 색상을 사용하여 그려집니다(문제 해결에 유용함).

확산_벌리

확산을 위한 Burley(Disney PBS)(기본값).

확산_램버트

확산을 위한 램버트 쉐이딩.

확산_램버트_랩

확산을 위한 램버트 랩 셰이딩(거칠기에 따라 다름)

diffuse_toon

확산을 위한 툰 셰이딩.

specular_schlick_ggx

직접광 반사 로브용 Schlick-GGX(기본값)

specular_toon

직사광 반사 로브용 툰입니다.

반사_비활성화됨

직접광 반사 로브를 비활성화합니다. 반사광에 영향을 주지 않습니다(대신 SPECULAR = 0.0 사용).

skip_vertex_transform

VERTEX, NORMAL, TANGENTBITANGENT``는 ``vertex() 함수에서 수동으로 변환해야 합니다.

world_vertex_coords

VERTEX, NORMAL, TANGENT``BITANGENT``는 모델 공간 대신 월드 공간에서 수정됩니다.

보너스_올바른_정상

불균일 스케일이 메시에 적용될 때 사용합니다 (참고: 현재 구현되지 않음).

shadows_disabled

셰이더에서 컴퓨팅 섀도우를 비활성화합니다. 셰이더는 그림자를 수신하지 않지만 여전히 그림자를 드리울 수 있습니다.

ambient_light_disabled

주변광 및 래디언스 맵의 기여를 비활성화합니다.

shadow_to_opacity

조명은 알파를 수정하여 그림자가 있는 영역은 불투명하고 그림자가 없는 영역은 투명하게 만듭니다. AR의 카메라 피드에 그림자를 오버레이하는 데 유용합니다.

정점_조명

픽셀당 조명 대신 정점 기반 조명을 사용합니다.

particle_trails

입자 형상에 사용될 때 트레일을 활성화합니다.

alpha_to_coverage

https://github.com/godotengine/godot-demo-projects

alpha_to_coverage_and_one

https://github.com/godotengine/godot-demo-projects

스타일

깊이 기반 또는 체적 안개 수신을 비활성화합니다. 입자와 같은 blend_add 재료에 유용합니다.

블렌드 모드

참고

스텐실 지원은 실험적이므로 사용에 따른 책임은 사용자 본인에게 있습니다. 호환성을 최대한 깨지지 않도록 노력하겠지만, API에 중대한 결함이 발견될 경우 다음 마이너 버전에서 변경될 수 있습니다.

스텐실 작업은 하드웨어 가속 방식으로 효율적인 버퍼에 쓸 수 있는 작업 집합입니다. 이는 일반적으로 씬의 일부를 마스킹하거나 마스킹하는 데 사용됩니다.

가장 잘 알려진 용도는 다음과 같습니다.

  • 윤곽선: 내부 윤곽선을 피하기 위해 윤곽선을 그리는 내부 메쉬를 마스크합니다.

  • X-Ray: 다른 개체 뒤에 메시를 표시합니다.

  • 포털: 객체를 마스킹하여 일반적으로 "불가능한"(유클리드가 아닌) 형상을 그립니다.

참고

투명 패스의 스텐실 버퍼에서만 읽을 수 있습니다. 불투명 패스를 읽으려는 시도는 현재 지원되지 않는 동작이므로 실패합니다.

합성기 효과의 경우 기본 렌더러의 스텐실 버퍼를 사용자 정의 텍스처에 복사할 수 없습니다.

스케일링 모드

설명

정적 함수

스텐실 버퍼에서 읽습니다.

쓰기

스텐실 버퍼에 참조 값을 씁니다.

write_if_length_fail

깊이 테스트가 실패하면 스텐실 버퍼에 참조 값을 씁니다.

비교_항상

항상 스텐실 테스트를 통과하세요.

비교_동등

참조 값이 스텐실 버퍼 값과 같으면 스텐실 테스트를 통과합니다.

비교하지_같지 않음

참조 값이 스텐실 버퍼 값과 같지 않으면 스텐실 테스트를 통과합니다.

텍스처 압축:

참조 값이 스텐실 버퍼 값보다 작은 경우 스텐실 테스트를 통과합니다.

비교가 적거나 같음

참조 값이 스텐실 버퍼 값보다 작거나 같으면 스텐실 테스트를 통과합니다.

비교_더욱

참조 값이 스텐실 버퍼 값보다 큰 경우 스텐실 테스트를 통과합니다.

비교_더 크거나_같음

참조 값이 스텐실 버퍼 값보다 크거나 같으면 스텐실 테스트를 통과합니다.

Built-In(내장)

``in``로 표시된 값은 읽기 전용입니다. ``out``로 표시된 값은 선택적으로 쓸 수 있으며 반드시 합리적인 값을 포함하지는 않습니다. ``inout``로 표시된 값은 적절한 기본값을 제공하며 선택적으로 쓸 수 있습니다. 샘플러는 기록할 수 없으므로 표시되지 않습니다.

모든 내장 기능을 모든 처리 기능에서 사용할 수 있는 것은 아닙니다. fragment() 함수에서 내장된 정점에 액세스하려면 varying <doc_shading_언어_varyings>`을 사용할 수 있습니다. ``light()` 함수에서 내장된 조각에 액세스하는 경우에도 동일하게 적용됩니다.

벡터 내장 타입

사용자 정의 기능을 포함하여 전역 내장 기능을 어디에서나 사용할 수 있습니다.

내장

설명

부동 소수점 TIME

엔진이 시작된 이후의 전역 시간(초)입니다. 3,600``초마다 반복됩니다(:ref:`rollover<class_ProjectSettings_property_rendering/limits/time/time_rollover_secs>` 설정으로 변경 가능). :ref:`time_scale<class_Engine_property_time_scale>`의 영향을 받지만 일시 중지의 영향을 받지는 않습니다. 시간 척도의 영향을 받지 않는 ``TIME 변수가 필요한 경우 고유한 :ref:`global shader uniform<doc_shading_language_global_uniforms>`를 추가하고 각 프레임을 업데이트하세요.

부동 소수점 PI

PI 상수(3.141592). 원의 지름과 반 바퀴의 라디안 수에 대한 원주 비율입니다.

부동 TAU

TAU 상수(6.283185). PI * 2 및 1회전의 라디안 수와 동일합니다.

부동 E

E 상수(2.718281). 자연로그의 밑이 되는 오일러 수.

bool **OUTPUT_IS_SRGB**에서

출력이 sRGB 색상 공간인 경우 ``true``입니다(호환성 렌더러에서는 ``true``이고 Forward+ 및 Mobile에서는 ``false``입니다).

부동 CLIP_SPACE_FAR

클립 공간 z 값입니다. Forward+ 또는 모바일 렌더러에서는 ``0.0``입니다. 호환성 렌더러에서는 ``-1.0``입니다.

in bool IS_MULTIVIEW

true when output is stereoscopic (XR), false when output is monoscopic.

in bool IN_SHADOW_PASS

true when the shader is being rendered in a shadow mapping pass, false otherwise. This can be used to render objects differently in shadow maps compared to their regular rendering.

벡터 내장 타입

정점 데이터(VERTEX, NORMAL, TANGENTBITANGENT)는 모델 공간(로컬 공간이라고도 함)에 표시됩니다. 기록되지 않으면 이러한 값은 수정되지 않고 전달된 대로 전달된 다음 ``fragment()``에서 사용할 뷰 공간으로 변환됩니다.

world_vertex_coords 렌더링 모드를 사용하여 월드 공간에 선택적으로 표시할 수 있습니다.

사용자는 내장된 modelview 변환을 비활성화하고(프로젝션은 나중에 계속 발생함) 다음 코드를 사용하여 수동으로 수행할 수 있습니다.

shader_type spatial;
render_mode skip_vertex_transform;

void vertex() {
    VERTEX = (MODELVIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;
    NORMAL = normalize((MODELVIEW_MATRIX * vec4(NORMAL, 0.0)).xyz);
    BINORMAL = normalize((MODELVIEW_MATRIX * vec4(BINORMAL, 0.0)).xyz);
    TANGENT = normalize((MODELVIEW_MATRIX * vec4(TANGENT, 0.0)).xyz);
}

UV, UV2COLOR``와 같은 다른 내장 기능도 수정되지 않으면 ``fragment() 함수로 전달됩니다.

사용자는 내장된 ``POSITION``를 사용하여 모델 뷰 및 투영 변환을 재정의할 수 있습니다. ``POSITION``를 셰이더의 아무 곳에나 쓰면 항상 사용되므로 항상 허용 가능한 값을 갖도록 보장할 책임은 사용자에게 있습니다. ``POSITION``를 사용하는 경우 ``VERTEX``의 값은 무시되고 투영이 발생하지 않습니다. 그러나 셰이더 조각에 전달된 값은 여전히 ``VERTEX``에서 나옵니다.

인스턴스화의 경우 INSTANCE_CUSTOM 변수에는 인스턴스 사용자 정의 데이터가 포함됩니다. 입자를 사용할 때 이 정보는 일반적으로 다음과 같습니다.

  • x: 라디안 단위의 회전 각도입니다.

  • y: 수명 동안의 단계(0.0``~``1.0).

  • z: 애니메이션 프레임.

이를 통해 기본 입자 재질을 사용하여 셰이더를 입자 시스템에 쉽게 조정할 수 있습니다. 사용자 정의 입자 셰이더를 작성할 때 이 값을 원하는 대로 사용할 수 있습니다.

내장

설명

vec2 **VIEWPORT_SIZE**에서

뷰포트의 크기(픽셀 단위)입니다.

mat4 VIEW_MATRIX

공간 변화를 볼 수 있는 세계 공간.

mat4 INV_VIEW_MATRIX

보기 공간을 월드 공간으로 변환합니다.

mat4 MAIN_CAM_INV_VIEW_MATRIX

현재 뷰포트를 그리는 데 사용되는 카메라의 보기 공간을 월드 공간으로 변환합니다.

mat4 INV_PROJECTION_MATRIX

공간 변환을 보려면 공간을 클립하세요.

vec3 **NODE_POSITION_WORLD**에서

노드 위치, 월드 공간.

vec3 **NODE_POSITION_VIEW**에서

노드 위치, 뷰 공간.

vec3 **CAMERA_POSITION_WORLD**에서

월드 공간에서의 카메라 위치. 다중 뷰/스테레오 렌더링 시 두 눈의 중간점을 나타냅니다.

vec3 **CAMERA_DIRECTION_WORLD**에서

월드 공간에서의 카메라 방향.

단위 CAMERA_VISIBLE_LAYERS

현재 패스를 렌더링하는 카메라의 레이어를 컬링합니다.

int INSTANCE_ID

인스턴스화를 위한 인스턴스 ID입니다.

vec4 **INSTANCE_CUSTOM**에서

인스턴스 사용자 정의 데이터(주로 입자용)

int VIEW_INDEX

우리가 렌더링하고 있는 뷰입니다. 모노(다중 뷰 아님) 또는 왼쪽 눈의 경우 VIEW_MONO_LEFT``(``0), 오른쪽 눈의 경우 VIEW_RIGHT``(``1).

int VIEW_MONO_LEFT

모노 또는 왼쪽 눈에 대한 상수이며 항상 ``0``입니다.

int VIEW_RIGHT

오른쪽 눈에 대한 상수, 항상 1.

vec3에서 EYE_OFFSET

뷰 공간에서 렌더링되는 눈의 위치 오프셋입니다. 멀티뷰 렌더링에만 적용 가능합니다.

inout vec3 VERTEX

모형 공간에서 꼭지점의 위치입니다. ``world_vertex_coords``를 사용하는 경우 월드 공간에서.

int VERTEX_ID

정점 버퍼에 있는 현재 정점의 인덱스입니다.

inout vec3 정상

모형 공간에서는 정상입니다. ``world_vertex_coords``를 사용하는 경우 월드 공간에서.

inout vec3 탄젠트

모형 공간의 접선. ``world_vertex_coords``를 사용하는 경우 월드 공간에서.

inout vec3 바이노멀

모형 공간의 종법선. ``world_vertex_coords``를 사용하는 경우 월드 공간에서.

out vec4 포지션

If written to on any branch, overrides final vertex position in clip space.

inout vec2 UV

UV 메인 채널.

입력 vec2 UV2

UV 보조 채널.

inout vec4 색상

정점의 색상. 각 채널에 대해 0.0``에서 ``1.0 사이의 값과 채널당 8비트 정밀도(256개 레벨 가능)로 제한됩니다. 알파 채널이 지원됩니다. 허용된 범위를 벗어나는 값은 고정되며 정밀도 제한으로 인해 값이 반올림될 수 있습니다. 필요한 경우 더 정확하게 데이터를 전달하려면 CUSTOM0-``CUSTOM3``를 사용하세요.

아웃 플로트 거칠기

정점 조명의 거칠기.

부동 소수점 POINT_SIZE

포인트 렌더링을 위한 포인트 크기입니다.

inout mat4 MODELVIEW_MATRIX

공간 변환을 보기 위한 모델/로컬 공간(가능한 경우 사용)

inout mat3 MODELVIEW_NORMAL_MATRIX

mat4 MODEL_MATRIX

모델/로컬 공간을 월드 공간으로 변환합니다.

mat3 MODEL_NORMAL_MATRIX

inout mat4 PROJECTION_MATRIX

보기 공간을 클립 공간으로 변환합니다.

uvec4 BONE_INDICES

vec4 BONE_WEIGHTS

vec4 **CUSTOM0**에서

정점 기본 요소의 사용자 정의 값입니다. 추가 UV를 사용하는 경우 ``xy``는 UV3이고 ``zw``는 UV4입니다.

vec4에서 커스텀1

정점 기본 요소의 사용자 정의 값입니다. 추가 UV를 사용하는 경우 ``xy``는 UV5이고 ``zw``는 UV6입니다.

vec4 **CUSTOM2**에서

정점 기본 요소의 사용자 정의 값입니다. 추가 UV를 사용하는 경우 ``xy``는 UV7이고 ``zw``는 UV8입니다.

vec4에서 커스텀3

정점 기본 요소의 사용자 정의 값입니다.

부동 소수점 Z_CLIP_SCALE

If written to on any branch, scales the vertex towards the camera to avoid clipping into things like walls. Lighting and shadows will continue to work correctly when this is written to, but screen-space effects like SSAO and SSR may break with lower scales. Try to keep this value as close to 1.0 as possible.

참고

MODELVIEW_MATRIX``는 ``MODEL_MATRIX``와 ``VIEW_MATRIX``를 모두 결합하며 부동 소수점 문제가 발생할 있는 경우에 적합합니다. 예를 들어, 객체가 세계 원점에서 매우 멀리 떨어져 있는 경우 분리된 ``MODEL_MATRIX``VIEW_MATRIX``를 사용할 때 부동 소수점 문제가 발생할 수 있습니다.

참고

``INV_VIEW_MATRIX``는 씬의 카메라 매트릭스인 ``MAIN_CAM_INV_VIEW_MATRIX``와 달리 해당 패스에서 객체를 렌더링하는 데 사용되는 매트릭스입니다. 섀도우 패스에서 ``INV_VIEW_MATRIX``의 시야는 빛의 위치에 위치한 카메라를 기준으로 합니다.

프래그먼트 내장

Godot 조각 프로세서 기능의 기본 사용은 개체의 재료 속성을 설정하고 내장 렌더러가 최종 음영 처리를 처리하도록 하는 것입니다. 그러나 이러한 속성을 모두 사용할 필요는 없으며, 속성을 작성하지 않으면 Godot는 해당 기능을 최적화합니다.

내장

설명

vec2 **VIEWPORT_SIZE**에서

뷰포트의 크기(픽셀 단위)입니다.

vec4에서 FRAGCOORD

Coordinate of pixel center in screen space. xy specifies position in window. Upper-left of the viewport is the origin, (0.0, 0.0). Bottom-right of the viewport is (1.0, 1.0). z specifies fragment depth. It is also used as the output value for the fragment depth unless DEPTH is written to.

부울 FRONT_FACING

현재 면이 정면을 향하고 있으면 true, 그렇지 않으면 ``false``입니다.

vec3에서 보기

조각 위치에서 카메라(보기 공간)까지 정규화된 벡터입니다. 이는 투시 카메라와 직교 카메라 모두 동일합니다.

vec2 **UV**에서

vertex() 함수에서 나오는 UV입니다.

vec2 **UV2**에서

vertex() 함수에서 나오는 UV2입니다.

vec4에서 컬러

vertex() 함수에서 나오는 색상입니다.

vec2 **POINT_COORD**에서

``POINT_SIZE``로 점을 그리는 점 좌표입니다.

mat4 MODEL_MATRIX

모델/로컬 공간을 월드 공간으로 변환합니다.

mat3 MODEL_NORMAL_MATRIX

모델/로컬 공간에서 노멀을 위한 월드 공간으로 변환됩니다. 객체의 크기가 불균일하게 조정되지 않는 한 기본적으로 ``MODEL_MATRIX``와 동일합니다. 이 경우 ``transpose(inverse(mat3(MODEL_MATRIX)))``로 설정됩니다.

mat4 VIEW_MATRIX

공간 변화를 볼 수 있는 세계 공간.

mat4 INV_VIEW_MATRIX

보기 공간을 월드 공간으로 변환합니다.

mat4 PROJECTION_MATRIX

보기 공간을 클립 공간으로 변환합니다.

mat4 INV_PROJECTION_MATRIX

공간 변환을 보려면 공간을 클립하세요.

vec3 **NODE_POSITION_WORLD**에서

노드 위치, 월드 공간.

vec3 **NODE_POSITION_VIEW**에서

노드 위치, 뷰 공간.

vec3 **CAMERA_POSITION_WORLD**에서

월드 공간에서의 카메라 위치. 다중 뷰/스테레오 렌더링 시 두 눈의 중간점을 나타냅니다.

vec3 **CAMERA_DIRECTION_WORLD**에서

월드 공간에서의 카메라 방향.

단위 CAMERA_VISIBLE_LAYERS

현재 패스를 렌더링하는 카메라의 레이어를 컬링합니다.

vec3 **VERTEX**에서

보기 공간에서 조각(픽셀)의 위치입니다. 면의 정점 사이에 보간되어 뷰 공간으로 변환된 vertex()``의 ``VERTEX 값입니다. ``skip_vertex_transform``가 활성화된 경우 뷰 공간에 없을 수 있습니다.

inout vec3 LIGHT_VERTEX

빛과 그림자를 변경하는 데 사용할 수 있는 ``VERTEX``의 쓰기 가능한 버전입니다. 여기에 쓰면 조각의 위치가 변경되지 않습니다.

int VIEW_INDEX

우리가 렌더링하고 있는 뷰입니다. 멀티뷰/스테레오 렌더링에서 뷰를 구별하는 데 사용됩니다. 모노(다중 뷰 아님) 또는 왼쪽 눈의 경우 VIEW_MONO_LEFT``(``0), 오른쪽 눈의 경우 VIEW_RIGHT``(``1).

int VIEW_MONO_LEFT

모노 또는 왼쪽 눈에 대한 상수이며 항상 ``0``입니다.

int VIEW_RIGHT

오른쪽 눈에 대한 상수, 항상 1.

vec3에서 EYE_OFFSET

뷰 공간에서 렌더링되는 눈의 위치 오프셋입니다. 멀티뷰 렌더링에만 적용 가능합니다.

샘플러2D SCREEN_TEXTURE

Godot 4에서는 제거되었습니다. 대신 ``sampler2D``와 ``hint_screen_texture``를 사용하세요.

vec2에서 SCREEN_UV

현재 픽셀의 스크린 UV 좌표입니다.

샘플러2D 깊이_텍스쳐

Godot 4에서는 제거되었습니다. 대신 ``sampler2D``와 ``hint_depth_texture``를 사용하세요.

아웃 플로트 깊이

사용자 정의 깊이 값(범위 [0.0, 1.0]). ``DEPTH``가 셰이더 분기에 기록된 경우 다른 모든 분기에 대해 ``DEPTH``를 설정해야 합니다. 그렇지 않으면 그래픽 API가 초기화되지 않은 상태로 유지됩니다.

inout vec3 정상

뷰 공간에서 vertex() 함수에서 나오는 법선입니다. ``skip_vertex_transform``가 활성화된 경우 뷰 공간에 없을 수 있습니다.

inout vec3 탄젠트

뷰 공간에서 vertex() 함수에서 나오는 탄젠트입니다. ``skip_vertex_transform``가 활성화된 경우 뷰 공간에 없을 수 있습니다.

inout vec3 바이노멀

뷰 공간에서 vertex() 함수에서 나오는 종법선입니다. ``skip_vertex_transform``가 활성화된 경우 뷰 공간에 없을 수 있습니다.

out vec3 NORMAL_MAP

Set normal here in tangent space if reading normal from a texture instead of NORMAL. The blue channel is ignored, as it's reconstructed in the engine instead. This allows normal maps with RGTC compression to work.

부동 소수점 NORMAL_MAP_DEPTH

``NORMAL_MAP``의 깊이. 기본값은 ``1.0``입니다.

out vec3 BENT_NORMAL_MAP

Set bent normal map here in tangent space to enable bent normals. This is used to improve specular occlusion, and requires a specially authored bent normal map. The blue channel is ignored, as it's reconstructed in the engine instead. This allows bent normal maps with RGTC compression to work.

out vec3 알베도

알베도(기본 흰색). 기본 색상.

아웃 플로트 알파

알파(범위 [0.0, 1.0]). 읽거나 쓰면 자료가 투명 파이프라인으로 이동합니다.

부동 소수점 ALPHA_SCISSOR_THRESHOLD

If written to on any branch, values below a certain amount of alpha are discarded.

부동 소수점 ALPHA_HASH_SCALE

알파 해시 투명도 모드를 사용할 때 알파 해시 규모입니다. 기본값은 ``1.0``입니다. 값이 높을수록 디더링 패턴에서 더 많은 픽셀이 표시됩니다.

부동 소수점 ALPHA_ANTIALIASING_EDGE

알파 대 커버리지 안티앨리어싱을 사용해야 하는 임계값입니다. 기본값은 0.0``입니다. ``alpha_to_coverage 렌더링 모드가 필요합니다. ``ALPHA_SCISSOR_THRESHOLD``보다 낮은 값으로 설정해야 효과적입니다.

out vec2 ALPHA_TEXTURE_COORDINATE

알파-커버 앤티앨리어싱에 사용할 텍스처 좌표입니다. alpha_to_coverage 렌더링 모드가 필요합니다. 일반적으로 ``UV * vec2(albedo_texture_size)``로 설정됩니다. 여기서 ``albedo_texture_size``는 알베도 텍스처의 크기(픽셀)입니다.

부동 소수점 PREMUL_ALPHA_FACTOR

미리 곱해진 알파 인자. ``render_mode blend_premul_alpha;``를 사용하는 경우에만 유효합니다. 조명과의 상호작용을 위해 미리 곱해진 알파 블렌딩과 함께 음영 처리된 머티리얼을 사용할 때 이 항목을 작성해야 합니다. 음영 처리되지 않은 재료에는 이 작업이 필요하지 않습니다.

아웃 플로트 메탈릭

금속성(범위 [0.0, 1.0]).

out float 반사형

반사광(물리적으로 변경하기에 정확하지 않음). 기본값은 ``0.5``입니다. ``0.0``는 반사를 비활성화합니다.

아웃 플로트 거칠기

거칠기(범위 [0.0, 1.0]).

아웃 플로트 RIM

림(범위 [0.0, 1.0]). 사용된다면 Godot는 림 조명을 계산합니다. 림 크기는 ``ROUGHNESS``에 따라 다릅니다.

부동 소수점 RIM_TINT

림 틴트의 범위는 ``0.0``(흰색)부터 ``1.0``(알베도)까지입니다. 사용된다면 Godot는 림 조명을 계산합니다.

아웃 플로트 CLEARCOAT

기존 것 위에 작은 반사 얼룩이 추가되었습니다. 사용된다면 Godot는 클리어코트를 계산합니다.

아웃 플로트 CLEARCOAT_GLOSS

클리어코트의 광택. 사용된다면 Godot는 클리어코트를 계산합니다.

out float 이방성

접선 공간에 따라 반사 얼룩을 왜곡합니다.

out vec2 ANISOTROPY_FLOW

왜곡 방향, 플로우맵과 함께 사용합니다.

부동 소수점 SSS_STRENGTH

지하 산란의 강도. 사용하는 경우 서브서피스 스캐터링이 객체에 적용됩니다.

out vec4 SSS_TRANSMITTANCE_COLOR

지하 산란 투과율의 색상입니다. 사용하는 경우 표면하 산란 투과율이 개체에 적용됩니다.

부동 소수점 SSS_TRANSMITTANCE_DEPTH

지하 산란 투과율의 깊이입니다. 값이 높을수록 효과가 개체에 더 깊이 도달할 수 있습니다.

부동 소수점 SSS_TRANSMITTANCE_BOOST

0.0 이상으로 설정하면 지하 산란 투과율이 높아집니다. 이렇게 하면 직접 조명을 받은 표면에서도 효과가 나타납니다.

inout vec3 백라이트

백라이트 색상(직사광처럼 작동하지만 법선이 빛에서 약간 멀어져도 수신됩니다). 사용하는 경우 백라이트가 개체에 적용됩니다. 표면하 산란의 더 저렴한 근사치로 사용할 수 있습니다.

아웃 플로트 AO

주변 폐색의 강도. 사전 베이킹된 AO와 함께 사용됩니다.

부동 소수점 AO_LIGHT_AFFECT

주변 폐색이 직접 조명에 영향을 미치는 정도(범위 [0.0, 1.0], 기본값 0.0).

out vec3 배출

방출 색상(HDR의 경우 ``(1.0, 1.0, 1.0)``를 초과할 수 있음)

out vec4 FOG

If written to on any branch, blends final pixel color with FOG.rgb based on FOG.a.

out vec4 빛나는

If written to on any branch, blends environment map radiance with RADIANCE.rgb based on RADIANCE.a.

out vec4 IRRADIANCE

If written to on any branch, blends environment map irradiance with IRRADIANCE.rgb based on IRRADIANCE.a.

참고

``ALPHA``가 작성될 때 투명 파이프라인을 통과하는 셰이더는 투명도 정렬 문제를 나타낼 수 있습니다. 자세한 내용과 문제를 방지하는 방법은 :ref:`3D 렌더링 제한 사항 페이지의 투명도 정렬 섹션 <doc_3d_rendering_limitations_transparency_sorting>`를 읽어보세요.

기본 내장 타입

라이트 프로세서 기능을 작성하는 것은 전적으로 선택 사항입니다. unshaded 렌더링 모드를 사용하면 light() 기능을 건너뛸 수 있습니다. 조명 함수가 작성되지 않으면 Godot는 fragment() 함수에 작성된 재료 속성을 사용하여 조명을 계산합니다(렌더링 모드에 따라 다름).

light() 함수는 모든 픽셀의 모든 조명에 대해 호출됩니다. 각 조명 유형에 대한 루프 내에서 호출됩니다.

다음은 Lambertian 조명 모델을 사용하는 사용자 정의 light() 함수의 예입니다.

void light() {
    if (LIGHT_IS_AREA) {
        // Area light GGX shading.
        DIFFUSE_LIGHT += LIGHT_AREA_DIFFUSE_MULTIPLIER * ATTENUATION * LIGHT_COLOR;
        SPECULAR_LIGHT += LIGHT_AREA_SPECULAR_MULTIPLIER * ATTENUATION * LIGHT_COLOR * SPECULAR_AMOUNT;
    } else {
        // Used for all other light types (directional, omni, spot).
        DIFFUSE_LIGHT += clamp(dot(NORMAL, LIGHT), 0.0, 1.0) * ATTENUATION * LIGHT_COLOR / PI;
    }
}

조명을 함께 추가하려면 덮어쓰는 대신 ``+=``를 사용하여 ``DIFFUSE_LIGHT``에 조명 기여를 추가하세요.

경고

vertex_lighting 렌더링 모드가 활성화되거나 프로젝트 설정에서 Rendering > Quality > Shading > Force Vertex Shading<class_ProjectSettings_property_rendering/shading/overrides/force_vertex_shading>`가 활성화된 경우 ``light()` 기능은 실행되지 않습니다. (모바일 플랫폼에서는 기본적으로 활성화되어 있습니다.)

내장

설명

vec2 **VIEWPORT_SIZE**에서

뷰포트의 크기(픽셀 단위)입니다.

vec4에서 FRAGCOORD

Coordinate of pixel center in screen space. xy specifies position in window. Upper-left of the viewport is the origin, (0.0, 0.0). Bottom-right of the viewport is (1.0, 1.0). z specifies fragment depth. It is also used as the output value for the fragment depth unless DEPTH is written to.

mat4 MODEL_MATRIX

모델/로컬 공간을 월드 공간으로 변환합니다.

mat4 INV_VIEW_MATRIX

보기 공간을 월드 공간으로 변환합니다.

mat4 VIEW_MATRIX

공간 변화를 볼 수 있는 세계 공간.

mat4 PROJECTION_MATRIX

보기 공간을 클립 공간으로 변환합니다.

mat4 INV_PROJECTION_MATRIX

공간 변환을 보려면 공간을 클립하세요.

vec3에서 정상

뷰 공간의 법선 벡터입니다.

vec2에서 SCREEN_UV

현재 픽셀의 스크린 UV 좌표입니다.

vec2 **UV**에서

vertex() 함수에서 나오는 UV입니다.

vec2 **UV2**에서

vertex() 함수에서 나오는 UV2입니다.

vec3에서 보기

뷰 공간의 보기 벡터.

vec3에서

뷰 공간의 라이트 벡터입니다.

vec3 **LIGHT_COLOR**에서

Light color 곱하기 light energy 곱하기 PI. PI 곱셈은 물리 기반 조명 모델이 ``PI``로 나누는 것을 포함하기 때문에 존재합니다.

부동 SPECULAR_AMOUNT

OmniLight3Dclass_SpotLight3D`의 경우 ``2.0``에 :ref:`light_specular<class_Light3D_property_light_specular>`를 곱합니다. :ref:`class_DirectionalLight3D, ``1.0``의 경우.

부울 LIGHT_IS_DIRECTIONAL

이 패스가 :ref:`class_DirectionalLight3D`인 경우 ``true``입니다.

부동 감쇠

거리나 그림자에 따른 감쇠입니다.

vec3에서 알베도

베이스 알베도.

vec3에서 백라이트

플로트 메탈릭

메탈릭.

부동 거칠기

Roughness.

out vec3 DIFFUSE_LIGHT

확산광 결과.

out vec3 SPECULAR_LIGHT

반사광 결과.

아웃 플로트 알파

Alpha (range [0.0, 1.0]). If written to on any branch, the material will go through the transparent pipeline.

참고

``ALPHA``가 작성될 때 투명 파이프라인을 통과하는 셰이더는 투명도 정렬 문제를 나타낼 수 있습니다. 자세한 내용과 문제를 방지하는 방법은 :ref:`3D 렌더링 제한 사항 페이지의 투명도 정렬 섹션 <doc_3d_rendering_limitations_transparency_sorting>`를 읽어보세요.

투명한 재질은 그림자를 투사하거나 hint_screen_texturehint_depth_texture 유니폼에 나타날 수도 없습니다. 그러면 해당 재질이 화면 공간 반사나 굴절에 나타나는 것을 방지할 수 있습니다. SDFGI 선명한 반사는 투명한 재질에 표시되지 않습니다(투명 재질에는 거친 반사만 표시됩니다).