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 |
in float TAU |
A |
in float E |
A |
頂点用ビルトイン¶
頂点データ(VERTEX
、NORMAL
、TANGENT
、BITANGENT
)はローカルモデル空間に表示されます。書き込まれていない場合、これらの値は変更されず、そのまま渡されます。
オプションで、*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 |
|
in int INSTANCE_ID |
インスタンス化のためのインスタンスID。 |
in vec4 INSTANCE_CUSTOM |
インスタンスのカスタムデータ(主にパーティクル用)。 |
in int VIEW_INDEX |
The view that we are rendering.
|
in int VIEW_MONO_LEFT |
Constant for Mono or left eye, always |
in int VIEW_RIGHT |
Constant for right eye, always |
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 |
画面空間のピクセル中心の座標。 |
in bool FRONT_FACING |
|
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 |
|
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.
|
in int VIEW_MONO_LEFT |
Constant for Mono or left eye, always |
in int VIEW_RIGHT |
Constant for right eye, always |
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 |
in vec2 SCREEN_UV |
現在のピクセルのスクリーンUV座標。 |
sampler2D DEPTH_TEXTURE |
Removed in Godot 4. Use a |
out float DEPTH |
Custom depth value (0..1). If |
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 |
画面空間のピクセル中心の座標。 |
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 |
in float SPECULAR_AMOUNT |
2.0 * |
in bool LIGHT_IS_DIRECTIONAL |
|
in float ATTENUATION |
距離または影に基づく減衰。 |
in vec3 ALBEDO |
ベースアルベド。 |
in vec3 BACKLIGHT |
|
in float METALLIC |
Metallic. |
in float ROUGHNESS |
粗さ。 |
in bool OUTPUT_IS_SRGB |
|
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).