Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Spatial(空間)シェーダー

Spatialシェーダーは、3Dオブジェクトのシェーディングに使用されます。 Godotが提供するシェーダーの中で最も複雑なタイプです。Spatialシェーダーは、さまざまなレンダリングモードとさまざまなレンダリングオプション(たとえば、サブサーフェース散乱、透過、アンビエントオクルージョン、リム照明など)で高度に構成できます。オプションで、頂点、フラグメント、ライトプロセッサ関数を記述して、オブジェクトの描画方法に影響を与えることができます。

レンダリングモード

レンダリングモード

説明

blend_mix

ミックスブレンドモード(アルファは透明度)、デフォルト。

blend_add

加算ブレンドモード。

blend_sub

減算ブレンドモード。

blend_mul

乗法ブレンドモード。

depth_draw_opaque

不透明なジオメトリに対してのみ深度を描画します(透明ではありません)。

depth_draw_always

常に深度を描画します(不透明および透明)。

depth_draw_never

深度の描画をしません。

depth_prepass_alpha

透明なジオメトリの不透明な深さの事前パスを行います。

depth_test_disabled

深度テストを無効にします。

sss_mode_skin

Subsurface Scattering mode for skin.

cull_back

背面(法線が視点と逆方向に向いている)を間引きます(デフォルト)。

cull_front

前面(法線が視点の方向に向いている)を間引きます。

cull_disabled

カリングは無効です(両面を描画)。

unshaded

結果は単なるアルベドです。マテリアルではライティング/シェーディングは発生しません。

wireframe

Geometry draws using lines.

diffuse_burley

Burley (Disney PBS) for diffuse (default).

diffuse_lambert

Lambert shading for diffuse.

diffuse_lambert_wrap

拡散をランバートラッピングに(回り込みはroughnessに依存)。

diffuse_toon

拡散をトゥーンシェーディングに。

specular_schlick_ggx

スペキュラーをSchlick-GGXに(デフォルト)。

specular_toon

スペキュラーをトゥーンに。

specular_disabled

スペキュラーを無効にします。

skip_vertex_transform

VERTEX/NORMAL/その他を、頂点関数で手動で変換する必要があります。

world_vertex_coords

頂点/法線/その他は、ローカル座標ではなくワールド座標で変更されます。

ensure_correct_normals

メッシュにuniformではないスケールを適用する場合に使用します。

shadows_disabled

シェーダーで影の計算を無効にします。

ambient_light_disabled

環境光と輝度マップからの影響を無効にします。

shadow_to_opacity

ライティングはアルファを修正し、影のある領域は不透明になり、影のない領域は透明になります。 ARのカメラフィードに影を重ねるのに便利です。

vertex_lighting

頂点ベースの照明を使用します。

particle_trails

Enables the trails when used on particles geometry.

alpha_to_coverage

Alpha antialiasing mode, see here for more.

alpha_to_coverage_and_one

Alpha antialiasing mode, see here for more.

fog_disabled

Disable receiving depth-based or volumetric fog. Useful for blend_add materials like particles.

Built-ins

"in"としてマークされた値は読み取り専用です。"out"とマークされた値はオプションの書き込み用であり、必ずしも適切な値を含むとは限りません。"inout"とマークされた値は、適切なデフォルト値を提供し、オプションで書き込むことができます。サンプラーは書込みの対象ではなく、マークされていません。

Global built-ins

Global built-ins are available everywhere, including custom functions.

ビルトイン

説明

in float TIME

秒単位のグローバル時間。

in float PI

A PI constant (3.141592). A ration of circle's circumference to its diameter and amount of radians in half turn.

in float TAU

A TAU constant (6.283185). An equivalent of PI * 2 and amount of radians in full turn.

in float E

A E constant (2.718281). Euler's number and a base of the natural logarithm.

頂点用ビルトイン

頂点データ(VERTEXNORMALTANGENTBITANGENT)はローカルモデル空間に表示されます。書き込まれていない場合、これらの値は変更されず、そのまま渡されます。

オプションで、*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);
    // same as above for binormal and tangent, if normal mapping is used
}

UV、UV2、COLORなどの他のビルトインも、変更されていない場合はフラグメント関数に渡されます。

ユーザーは、組み込みの POSITION を使用して、モデルビューと投影変換をオーバーライドできます。POSITION を使用すると、VERTEX の値は無視され、投影は行われません。ただし、フラグメントシェーダーに渡される値は、引き続き VERTEX から取得されます。

インスタンス化の場合、INSTANCE_CUSTOM変数にはインスタンスのカスタムデータが含まれます。パーティクルを使用する場合、この情報は通常次のとおりです:

  • x: ラジアン単位の回転角度。

  • y: ライフタイム中のフェーズ(0〜1)。

  • z: アニメーションフレーム。

This allows you to easily adjust the shader to a particle system using default particles material. When writing a custom particle shader, this value can be used as desired.

ビルトイン

説明

in vec2 VIEWPORT_SIZE

ビューポートのサイズ (ピクセル単位)。

in mat4 VIEW_MATRIX

ワールド空間からビュー空間への変換。

in mat4 INV_VIEW_MATRIX

ビュー空間からワールド空間への変換。

in mat4 INV_PROJECTION_MATRIX

クリップ空間からビュー空間への変換。

in vec3 NODE_POSITION_WORLD

Node world space position.

in vec3 NODE_POSITION_VIEW

Node view space position.

in vec3 CAMERA_POSITION_WORLD

Camera world space position.

in vec3 CAMERA_DIRECTION_WORLD

Camera world space direction.

in bool OUTPUT_IS_SRGB

true when output is in sRGB color space (this is true in the Compatibility renderer, false in Forward+ and Forward Mobile).

in int INSTANCE_ID

インスタンス化のためのインスタンスID。

in vec4 INSTANCE_CUSTOM

インスタンスのカスタムデータ(主にパーティクル用)。

in int VIEW_INDEX

The view that we are rendering. VIEW_MONO_LEFT (0) for Mono (not multiview) or left eye, VIEW_RIGHT (1) for right eye.

in int VIEW_MONO_LEFT

Constant for Mono or left eye, always 0.

in int VIEW_RIGHT

Constant for right eye, always 1.

in vec3 EYE_OFFSET

Position offset for the eye being rendered. Only applicable for multiview rendering.

inout vec3 VERTEX

ローカル座標の頂点。

in int VERTEX_ID

The index of the current vertex in the vertex buffer.

inout vec3 NORMAL

ローカル座標での法線。

inout vec3 TANGENT

ローカル座標の接線。

inout vec3 BINORMAL

ローカル座標の従法線。

out vec4 POSITION

書き込まれた場合、最終的な頂点の位置をオーバーライドします。

inout vec2 UV

UVメインチャネル。

inout vec2 UV2

UVセカンダリチャネル。

inout vec4 COLOR

頂点からの色。

out float ROUGHNESS

頂点ライティング用の粗さ。

inout float POINT_SIZE

ポイントレンダリングのポイントサイズ。

inout mat4 MODELVIEW_MATRIX

モデル空間からビュー空間への変換(可能な場合は使用)。

inout mat3 MODELVIEW_NORMAL_MATRIX

inout mat4 MODEL_MATRIX

モデル空間からワールド空間への変換。

inout mat3 MODEL_NORMAL_MATRIX

inout mat4 PROJECTION_MATRIX

ビュー空間からクリップ空間への変換。

inout uvec4 BONE_INDICES

inout vec4 BONE_WEIGHTS

in vec4 CUSTOM0

in vec4 CUSTOM1

in vec4 CUSTOM2

in vec4 CUSTOM3

注釈

MODELVIEW_MATRIX combines both the MODEL_MATRIX and VIEW_MATRIX and is better suited when floating point issues may arise. For example, if the object is very far away from the world origin, you may run into floating point issues when using the separated MODEL_MATRIX and VIEW_MATRIX.

フラグメント用ビルトイン

Godotフラグメントプロセッサ関数のデフォルトの用途は、オブジェクトのマテリアルプロパティを設定し、組み込みレンダラーに最終シェーディングを処理させることです。ただし、これらのプロパティをすべて使用する必要はありません。これらのプロパティに書き込みを行わない場合、Godotは対応する機能を最適化します。

ビルトイン

説明

in vec2 VIEWPORT_SIZE

ビューポートのサイズ (ピクセル単位)。

in vec4 FRAGCOORD

画面空間のピクセル中心の座標。xy はウィンドウ内の位置を指定し、zDEPTH を使用しない場合のフラグメントの深さを指定します。原点は左下です。

in bool FRONT_FACING

true if current face if front face.

in vec3 VIEW

Normalized vector from fragment position to camera (in view space).

in vec2 UV

頂点関数からやって来るUV。

in vec2 UV2

頂点関数からやって来るUV2。

in vec4 COLOR

頂点関数からやって来るCOLOR。

in vec2 POINT_COORD

POINT_SIZEでポイントを描画するためのポイント座標。

in bool OUTPUT_IS_SRGB

true when output is in sRGB color space (this is true in the Compatibility renderer, false in Forward+ and Forward Mobile).

in mat4 MODEL_MATRIX

モデル空間からワールド空間への変換。

in mat3 MODEL_NORMAL_MATRIX

in mat4 VIEW_MATRIX

ワールド空間からビュー空間への変換。

in mat4 INV_VIEW_MATRIX

ビュー空間からワールド空間への変換。

in mat4 PROJECTION_MATRIX

ビュー空間からクリップ空間への変換。

in mat4 INV_PROJECTION_MATRIX

クリップ空間からビュー空間への変換。

in vec3 NODE_POSITION_WORLD

Node position, in world space.

in vec3 NODE_POSITION_VIEW

Node position, in view space.

in vec3 CAMERA_POSITION_WORLD

Camera position, in world space.

in vec3 CAMERA_DIRECTION_WORLD

Camera direction, in world space.

in vec3 VERTEX

頂点関数からの頂点(デフォルト、ビュー空間内)。

in int VIEW_INDEX

The view that we are rendering. VIEW_MONO_LEFT (0) for Mono (not multiview) or left eye, VIEW_RIGHT (1) for right eye.

in int VIEW_MONO_LEFT

Constant for Mono or left eye, always 0.

in int VIEW_RIGHT

Constant for right eye, always 1.

in vec3 EYE_OFFSET

Position offset for the eye being rendered. Only applicable for multiview rendering.

sampler2D SCREEN_TEXTURE

Removed in Godot 4. Use a sampler2D with hint_screen_texture instead.

in vec2 SCREEN_UV

現在のピクセルのスクリーンUV座標。

sampler2D DEPTH_TEXTURE

Removed in Godot 4. Use a sampler2D with hint_depth_texture instead.

out float DEPTH

Custom depth value (0..1). If DEPTH is being written to in any shader branch, then you are responsible for setting the DEPTH for all other branches. Otherwise, the graphics API will leave them uninitialized.

inout vec3 NORMAL

頂点関数からやって来る法線(デフォルト、ビュース空間内)。

inout vec3 TANGENT

頂点関数からやって来る接線。

inout vec3 BINORMAL

頂点関数からやって来る従法線。

out vec3 NORMAL_MAP

NORMALではなくテクスチャから法線を読み取る場合は、ここで法線を設定します。

out float NORMAL_MAP_DEPTH

上記の変数からの深さ。デフォルトは1.0です。

out vec3 ALBEDO

アルベド(デフォルトは白)。

out float ALPHA

アルファ(0..1); 書き込まれた場合、マテリアルはtransparentパイプラインに送られます。

out float ALPHA_SCISSOR_THRESHOLD

書き込まれた場合、一定量のアルファ以下の値は破棄されます。

out float ALPHA_HASH_SCALE

out float ALPHA_ANTIALIASING_EDGE

out vec2 ALPHA_TEXTURE_COORDINATE

out float METALLIC

メタリック(0..1)。

out float SPECULAR

スペキュラー。デフォルトは0.5で、IORを変更しない限り変更しないことをお勧めします。

out float ROUGHNESS

粗さ(0..1)。

out float RIM

リム(0..1)。使用すると、Godotはリム照明を計算します。

out float RIM_TINT

リムティントは、0(白)から1(アルベド)に移行します。使用すると、Godotはリム照明を計算します。

out float CLEARCOAT

小さな追加のスペキュラーblob。使用すると、Godotはクリアコートを計算します。

out float CLEARCOAT_GLOSS

クリアコートの光沢。使用すると、Godotはクリアコートを計算します。

out float ANISOTROPY

接線空間に応じてスペキュラーblobを歪ませます。

out vec2 ANISOTROPY_FLOW

歪みの方向。フローマップで使用します。

out float SSS_STRENGTH

サブサーフェススキャッタリングの強度。使用すると、サブサーフェススキャッタリングがオブジェクトに適用されます。

out vec4 SSS_TRANSMITTANCE_COLOR

out float SSS_TRANSMITTANCE_DEPTH

out float SSS_TRANSMITTANCE_BOOST

inout vec3 BACKLIGHT

out float AO

アンビエントオクルージョンの強度。プリベイクドAOで使用します。

out float AO_LIGHT_AFFECT

ライトに影響するAOの量(0..1; デフォルトは0)。

out vec3 EMISSION

発光色(HDRの場合は1,1,1を超えることができます)。

out vec4 FOG

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

out vec4 RADIANCE

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

out vec4 IRRADIANCE

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

注釈

Shaders going through the transparent pipeline when ALPHA is written to may exhibit transparency sorting issues. Read the transparency sorting section in the 3D rendering limitations page for more information and ways to avoid issues.

ライト用ビルトイン

ライトプロセッサ関数の記述は完全にオプションです。 render_modeを ``unshaded``に設定すると、ライト関数をスキップできます。ライト関数が記述されていない場合、Godotはフラグメント関数に書き込まれたマテリアルプロパティを使用して、ライティングを計算します(render_modeに従います)。

ライト関数を作成するには、DIFFUSE_LIGHT または SPECULAR_LIGHT に何かを割り当てます。何も割り当てないことは、ライトが処理されないことを意味します。

ライト関数は、すべてのピクセルのすべてのライトに対して呼び出されます。各ライトタイプのループ内で呼び出されます。

以下は、ランバート照明モデルを使用したカスタムライト関数の例です:

void light() {
    DIFFUSE_LIGHT += clamp(dot(NORMAL, LIGHT), 0.0, 1.0) * ATTENUATION * LIGHT_COLOR;
}

ライトを一緒に追加する場合は、上書きするのではなく、+= を使用して DIFFUSE_LIGHT にライトの関与を追加します。

警告

The light() function won't be run if the vertex_lighting render mode is enabled, or if Rendering > Quality > Shading > Force Vertex Shading is enabled in the Project Settings. (It's enabled by default on mobile platforms.)

ビルトイン

説明

in vec2 VIEWPORT_SIZE

ビューポートのサイズ (ピクセル単位)。

in vec4 FRAGCOORD

画面空間のピクセル中心の座標。xy はウィンドウ内の位置を指定し、zDEPTH を使用しない場合のフラグメントの深さを指定します。原点は左下です。

in mat4 MODEL_MATRIX

モデル空間からワールド空間への変換。

in mat4 INV_VIEW_MATRIX

ビュー空間からワールド空間への変換。

in mat4 VIEW_MATRIX

ワールド空間からビュー空間への変換。

in mat4 PROJECTION_MATRIX

ビュー空間からクリップ空間への変換。

in mat4 INV_PROJECTION_MATRIX

クリップ空間からビュー空間への変換。

in vec3 NORMAL

ビュー空間内の法線ベクトル。

in vec2 UV

頂点関数からやって来るUV。

in vec2 UV2

頂点関数からやって来るUV2。

in vec3 VIEW

ビュー空間内のビューベクトル。

in vec3 LIGHT

ビュー空間内のライトベクトル。

in vec3 LIGHT_COLOR

Color of light multiplied by energy * PI. The PI multiplication is present because physically-based lighting models include a division by PI.

in float SPECULAR_AMOUNT

2.0 * light_specular property for OmniLight3D and SpotLight3D. 1.0 for DirectionalLight3D.

in bool LIGHT_IS_DIRECTIONAL

true if this pass is a DirectionalLight3D.

in float ATTENUATION

距離または影に基づく減衰。

in vec3 ALBEDO

ベースアルベド。

in vec3 BACKLIGHT

in float METALLIC

Metallic.

in float ROUGHNESS

粗さ。

in bool OUTPUT_IS_SRGB

true when output is in sRGB color space (this is true in the Compatibility renderer, false in Forward+ and Forward Mobile).

out vec3 DIFFUSE_LIGHT

拡散光の結果。

out vec3 SPECULAR_LIGHT

スペキュラー光の結果。

out float ALPHA

アルファ(0..1); 書き込まれた場合、マテリアルはtransparentパイプラインに送られます。

注釈

Shaders going through the transparent pipeline when ALPHA is written to may exhibit transparency sorting issues. Read the transparency sorting section in the 3D rendering limitations page for more information and ways to avoid issues.

Transparent materials also cannot cast shadows or appear in hint_screen_texture and hint_depth_texture uniforms. This in turn prevents those materials from appearing in screen-space reflections or refraction. SDFGI sharp reflections are not visible on transparent materials (only rough reflections are visible on transparent materials).