|
@@ -106,9 +106,11 @@ public:
|
|
|
~ShaderMaterial();
|
|
|
};
|
|
|
|
|
|
-class SpatialMaterial : public Material {
|
|
|
+class StandardMaterial3D;
|
|
|
|
|
|
- GDCLASS(SpatialMaterial, Material);
|
|
|
+class BaseMaterial3D : public Material {
|
|
|
+
|
|
|
+ GDCLASS(BaseMaterial3D, Material);
|
|
|
|
|
|
public:
|
|
|
enum TextureParam {
|
|
@@ -121,31 +123,56 @@ public:
|
|
|
TEXTURE_CLEARCOAT,
|
|
|
TEXTURE_FLOWMAP,
|
|
|
TEXTURE_AMBIENT_OCCLUSION,
|
|
|
- TEXTURE_DEPTH,
|
|
|
+ TEXTURE_HEIGHTMAP,
|
|
|
TEXTURE_SUBSURFACE_SCATTERING,
|
|
|
TEXTURE_TRANSMISSION,
|
|
|
TEXTURE_REFRACTION,
|
|
|
TEXTURE_DETAIL_MASK,
|
|
|
TEXTURE_DETAIL_ALBEDO,
|
|
|
TEXTURE_DETAIL_NORMAL,
|
|
|
+ TEXTURE_ORM,
|
|
|
TEXTURE_MAX
|
|
|
|
|
|
};
|
|
|
|
|
|
+ enum TextureFilter {
|
|
|
+ TEXTURE_FILTER_NEAREST,
|
|
|
+ TEXTURE_FILTER_LINEAR,
|
|
|
+ TEXTURE_FILTER_NEAREST_WITH_MIMPAMPS,
|
|
|
+ TEXTURE_FILTER_LINEAR_WITH_MIPMAPS,
|
|
|
+ TEXTURE_FILTER_NEAREST_WITH_MIMPAMPS_ANISOTROPIC,
|
|
|
+ TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC,
|
|
|
+ TEXTURE_FILTER_MAX
|
|
|
+ };
|
|
|
+
|
|
|
enum DetailUV {
|
|
|
DETAIL_UV_1,
|
|
|
DETAIL_UV_2
|
|
|
};
|
|
|
|
|
|
+ enum Transparency {
|
|
|
+ TRANSPARENCY_DISABLED,
|
|
|
+ TRANSPARENCY_ALPHA,
|
|
|
+ TRANSPARENCY_ALPHA_SCISSOR,
|
|
|
+ TRANSPARENCY_ALPHA_DEPTH_PRE_PASS,
|
|
|
+ TRANSPARENCY_MAX,
|
|
|
+ };
|
|
|
+
|
|
|
+ enum ShadingMode {
|
|
|
+ SHADING_MODE_UNSHADED,
|
|
|
+ SHADING_MODE_PER_PIXEL,
|
|
|
+ SHADING_MODE_PER_VERTEX,
|
|
|
+ SHADING_MODE_MAX
|
|
|
+ };
|
|
|
+
|
|
|
enum Feature {
|
|
|
- FEATURE_TRANSPARENT,
|
|
|
FEATURE_EMISSION,
|
|
|
FEATURE_NORMAL_MAPPING,
|
|
|
FEATURE_RIM,
|
|
|
FEATURE_CLEARCOAT,
|
|
|
FEATURE_ANISOTROPY,
|
|
|
FEATURE_AMBIENT_OCCLUSION,
|
|
|
- FEATURE_DEPTH_MAPPING,
|
|
|
+ FEATURE_HEIGHT_MAPPING,
|
|
|
FEATURE_SUBSURACE_SCATTERING,
|
|
|
FEATURE_TRANSMISSION,
|
|
|
FEATURE_REFRACTION,
|
|
@@ -164,8 +191,6 @@ public:
|
|
|
DEPTH_DRAW_OPAQUE_ONLY,
|
|
|
DEPTH_DRAW_ALWAYS,
|
|
|
DEPTH_DRAW_DISABLED,
|
|
|
- DEPTH_DRAW_ALPHA_OPAQUE_PREPASS
|
|
|
-
|
|
|
};
|
|
|
|
|
|
enum CullMode {
|
|
@@ -175,8 +200,6 @@ public:
|
|
|
};
|
|
|
|
|
|
enum Flags {
|
|
|
- FLAG_UNSHADED,
|
|
|
- FLAG_USE_VERTEX_LIGHTING,
|
|
|
FLAG_DISABLE_DEPTH_TEST,
|
|
|
FLAG_ALBEDO_FROM_VERTEX_COLOR,
|
|
|
FLAG_SRGB_VERTEX_COLOR,
|
|
@@ -185,15 +208,16 @@ public:
|
|
|
FLAG_BILLBOARD_KEEP_SCALE,
|
|
|
FLAG_UV1_USE_TRIPLANAR,
|
|
|
FLAG_UV2_USE_TRIPLANAR,
|
|
|
- FLAG_TRIPLANAR_USE_WORLD,
|
|
|
+ FLAG_UV1_USE_WORLD_TRIPLANAR,
|
|
|
+ FLAG_UV2_USE_WORLD_TRIPLANAR,
|
|
|
FLAG_AO_ON_UV2,
|
|
|
FLAG_EMISSION_ON_UV2,
|
|
|
- FLAG_USE_ALPHA_SCISSOR,
|
|
|
FLAG_ALBEDO_TEXTURE_FORCE_SRGB,
|
|
|
FLAG_DONT_RECEIVE_SHADOWS,
|
|
|
- FLAG_ENSURE_CORRECT_NORMALS,
|
|
|
FLAG_DISABLE_AMBIENT_LIGHT,
|
|
|
FLAG_USE_SHADOW_TO_OPACITY,
|
|
|
+ FLAG_USE_TEXTURE_REPEAT,
|
|
|
+ FLAG_INVERT_HEIGHTMAP,
|
|
|
FLAG_MAX
|
|
|
};
|
|
|
|
|
@@ -244,12 +268,12 @@ private:
|
|
|
union MaterialKey {
|
|
|
|
|
|
struct {
|
|
|
- uint64_t feature_mask : 12;
|
|
|
+ uint64_t feature_mask : FEATURE_MAX;
|
|
|
uint64_t detail_uv : 1;
|
|
|
uint64_t blend_mode : 2;
|
|
|
uint64_t depth_draw_mode : 2;
|
|
|
uint64_t cull_mode : 2;
|
|
|
- uint64_t flags : 19;
|
|
|
+ uint64_t flags : FLAG_MAX;
|
|
|
uint64_t detail_blend_mode : 2;
|
|
|
uint64_t diffuse_mode : 3;
|
|
|
uint64_t specular_mode : 3;
|
|
@@ -260,8 +284,10 @@ private:
|
|
|
uint64_t proximity_fade : 1;
|
|
|
uint64_t distance_fade : 2;
|
|
|
uint64_t emission_op : 1;
|
|
|
- uint64_t texture_metallic : 1;
|
|
|
- uint64_t texture_roughness : 1;
|
|
|
+ uint64_t texture_filter : 3;
|
|
|
+ uint64_t transparency : 2;
|
|
|
+ uint64_t shading_mode : 2;
|
|
|
+ uint64_t roughness_channel : 3;
|
|
|
};
|
|
|
|
|
|
uint64_t key;
|
|
@@ -293,6 +319,10 @@ private:
|
|
|
mk.blend_mode = blend_mode;
|
|
|
mk.depth_draw_mode = depth_draw_mode;
|
|
|
mk.cull_mode = cull_mode;
|
|
|
+ mk.texture_filter = texture_filter;
|
|
|
+ mk.transparency = transparency;
|
|
|
+ mk.shading_mode = shading_mode;
|
|
|
+ mk.roughness_channel = roughness_texture_channel;
|
|
|
for (int i = 0; i < FLAG_MAX; i++) {
|
|
|
if (flags[i]) {
|
|
|
mk.flags |= ((uint64_t)1 << i);
|
|
@@ -307,8 +337,6 @@ private:
|
|
|
mk.proximity_fade = proximity_fade_enabled;
|
|
|
mk.distance_fade = distance_fade;
|
|
|
mk.emission_op = emission_op;
|
|
|
- mk.texture_metallic = textures[TEXTURE_METALLIC].is_valid() ? 1 : 0;
|
|
|
- mk.texture_roughness = textures[TEXTURE_ROUGHNESS].is_valid() ? 1 : 0;
|
|
|
|
|
|
return mk;
|
|
|
}
|
|
@@ -326,7 +354,7 @@ private:
|
|
|
StringName clearcoat;
|
|
|
StringName clearcoat_gloss;
|
|
|
StringName anisotropy;
|
|
|
- StringName depth_scale;
|
|
|
+ StringName heightmap_scale;
|
|
|
StringName subsurface_scattering_strength;
|
|
|
StringName transmission;
|
|
|
StringName refraction;
|
|
@@ -338,9 +366,9 @@ private:
|
|
|
StringName particles_anim_h_frames;
|
|
|
StringName particles_anim_v_frames;
|
|
|
StringName particles_anim_loop;
|
|
|
- StringName depth_min_layers;
|
|
|
- StringName depth_max_layers;
|
|
|
- StringName depth_flip;
|
|
|
+ StringName heightmap_min_layers;
|
|
|
+ StringName heightmap_max_layers;
|
|
|
+ StringName heightmap_flip;
|
|
|
StringName uv1_blend_sharpness;
|
|
|
StringName uv2_blend_sharpness;
|
|
|
StringName grow;
|
|
@@ -350,11 +378,10 @@ private:
|
|
|
StringName ao_light_affect;
|
|
|
|
|
|
StringName metallic_texture_channel;
|
|
|
- StringName roughness_texture_channel;
|
|
|
StringName ao_texture_channel;
|
|
|
StringName clearcoat_texture_channel;
|
|
|
StringName rim_texture_channel;
|
|
|
- StringName depth_texture_channel;
|
|
|
+ StringName heightmap_texture_channel;
|
|
|
StringName refraction_texture_channel;
|
|
|
StringName alpha_scissor_threshold;
|
|
|
|
|
@@ -362,15 +389,17 @@ private:
|
|
|
};
|
|
|
|
|
|
static Mutex *material_mutex;
|
|
|
- static SelfList<SpatialMaterial>::List *dirty_materials;
|
|
|
+ static SelfList<BaseMaterial3D>::List *dirty_materials;
|
|
|
static ShaderNames *shader_names;
|
|
|
|
|
|
- SelfList<SpatialMaterial> element;
|
|
|
+ SelfList<BaseMaterial3D> element;
|
|
|
|
|
|
void _update_shader();
|
|
|
_FORCE_INLINE_ void _queue_shader_change();
|
|
|
_FORCE_INLINE_ bool _is_shader_dirty() const;
|
|
|
|
|
|
+ bool orm;
|
|
|
+
|
|
|
Color albedo;
|
|
|
float specular;
|
|
|
float metallic;
|
|
@@ -383,7 +412,7 @@ private:
|
|
|
float clearcoat;
|
|
|
float clearcoat_gloss;
|
|
|
float anisotropy;
|
|
|
- float depth_scale;
|
|
|
+ float heightmap_scale;
|
|
|
float subsurface_scattering_strength;
|
|
|
Color transmission;
|
|
|
float refraction;
|
|
@@ -395,6 +424,10 @@ private:
|
|
|
int particles_anim_h_frames;
|
|
|
int particles_anim_v_frames;
|
|
|
bool particles_anim_loop;
|
|
|
+ Transparency transparency;
|
|
|
+ ShadingMode shading_mode;
|
|
|
+
|
|
|
+ TextureFilter texture_filter;
|
|
|
|
|
|
Vector3 uv1_scale;
|
|
|
Vector3 uv1_offset;
|
|
@@ -409,8 +442,8 @@ private:
|
|
|
bool deep_parallax;
|
|
|
int deep_parallax_min_layers;
|
|
|
int deep_parallax_max_layers;
|
|
|
- bool depth_parallax_flip_tangent;
|
|
|
- bool depth_parallax_flip_binormal;
|
|
|
+ bool heightmap_parallax_flip_tangent;
|
|
|
+ bool heightmap_parallax_flip_binormal;
|
|
|
|
|
|
bool proximity_fade_enabled;
|
|
|
float proximity_fade_distance;
|
|
@@ -442,7 +475,7 @@ private:
|
|
|
|
|
|
static const int MAX_MATERIALS_FOR_2D = 128;
|
|
|
|
|
|
- static Ref<SpatialMaterial> materials_for_2d[MAX_MATERIALS_FOR_2D]; //used by Sprite3D and other stuff
|
|
|
+ static Ref<StandardMaterial3D> materials_for_2d[MAX_MATERIALS_FOR_2D]; //used by Sprite3D and other stuff
|
|
|
|
|
|
void _validate_high_end(const String &text, PropertyInfo &property) const;
|
|
|
|
|
@@ -491,23 +524,23 @@ public:
|
|
|
void set_anisotropy(float p_anisotropy);
|
|
|
float get_anisotropy() const;
|
|
|
|
|
|
- void set_depth_scale(float p_depth_scale);
|
|
|
- float get_depth_scale() const;
|
|
|
+ void set_heightmap_scale(float p_heightmap_scale);
|
|
|
+ float get_heightmap_scale() const;
|
|
|
|
|
|
- void set_depth_deep_parallax(bool p_enable);
|
|
|
- bool is_depth_deep_parallax_enabled() const;
|
|
|
+ void set_heightmap_deep_parallax(bool p_enable);
|
|
|
+ bool is_heightmap_deep_parallax_enabled() const;
|
|
|
|
|
|
- void set_depth_deep_parallax_min_layers(int p_layer);
|
|
|
- int get_depth_deep_parallax_min_layers() const;
|
|
|
+ void set_heightmap_deep_parallax_min_layers(int p_layer);
|
|
|
+ int get_heightmap_deep_parallax_min_layers() const;
|
|
|
|
|
|
- void set_depth_deep_parallax_max_layers(int p_layer);
|
|
|
- int get_depth_deep_parallax_max_layers() const;
|
|
|
+ void set_heightmap_deep_parallax_max_layers(int p_layer);
|
|
|
+ int get_heightmap_deep_parallax_max_layers() const;
|
|
|
|
|
|
- void set_depth_deep_parallax_flip_tangent(bool p_flip);
|
|
|
- bool get_depth_deep_parallax_flip_tangent() const;
|
|
|
+ void set_heightmap_deep_parallax_flip_tangent(bool p_flip);
|
|
|
+ bool get_heightmap_deep_parallax_flip_tangent() const;
|
|
|
|
|
|
- void set_depth_deep_parallax_flip_binormal(bool p_flip);
|
|
|
- bool get_depth_deep_parallax_flip_binormal() const;
|
|
|
+ void set_heightmap_deep_parallax_flip_binormal(bool p_flip);
|
|
|
+ bool get_heightmap_deep_parallax_flip_binormal() const;
|
|
|
|
|
|
void set_subsurface_scattering_strength(float p_subsurface_scattering_strength);
|
|
|
float get_subsurface_scattering_strength() const;
|
|
@@ -521,6 +554,12 @@ public:
|
|
|
void set_point_size(float p_point_size);
|
|
|
float get_point_size() const;
|
|
|
|
|
|
+ void set_transparency(Transparency p_transparency);
|
|
|
+ Transparency get_transparency() const;
|
|
|
+
|
|
|
+ void set_shading_mode(ShadingMode p_shading_mode);
|
|
|
+ ShadingMode get_shading_mode() const;
|
|
|
+
|
|
|
void set_detail_uv(DetailUV p_detail_uv);
|
|
|
DetailUV get_detail_uv() const;
|
|
|
|
|
@@ -550,6 +589,9 @@ public:
|
|
|
// Used only for shader material conversion
|
|
|
Ref<Texture2D> get_texture_by_name(StringName p_name) const;
|
|
|
|
|
|
+ void set_texture_filter(TextureFilter p_filter);
|
|
|
+ TextureFilter get_texture_filter() const;
|
|
|
+
|
|
|
void set_feature(Feature p_feature, bool p_enabled);
|
|
|
bool get_feature(Feature p_feature) const;
|
|
|
|
|
@@ -630,23 +672,45 @@ public:
|
|
|
|
|
|
virtual Shader::Mode get_shader_mode() const;
|
|
|
|
|
|
- SpatialMaterial();
|
|
|
- virtual ~SpatialMaterial();
|
|
|
+ BaseMaterial3D(bool p_orm);
|
|
|
+ virtual ~BaseMaterial3D();
|
|
|
};
|
|
|
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::TextureParam)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::DetailUV)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::Feature)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::BlendMode)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::DepthDrawMode)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::CullMode)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::Flags)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::DiffuseMode)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::SpecularMode)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::BillboardMode)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::TextureChannel)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::EmissionOperator)
|
|
|
-VARIANT_ENUM_CAST(SpatialMaterial::DistanceFadeMode)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::TextureParam)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::TextureFilter)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::ShadingMode)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::Transparency)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::DetailUV)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::Feature)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::BlendMode)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::DepthDrawMode)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::CullMode)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::Flags)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::DiffuseMode)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::SpecularMode)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::BillboardMode)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::TextureChannel)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::EmissionOperator)
|
|
|
+VARIANT_ENUM_CAST(BaseMaterial3D::DistanceFadeMode)
|
|
|
+
|
|
|
+class StandardMaterial3D : public BaseMaterial3D {
|
|
|
+ GDCLASS(StandardMaterial3D, BaseMaterial3D)
|
|
|
+protected:
|
|
|
+#ifndef DISABLE_DEPRECATED
|
|
|
+ bool _set(const StringName &p_name, const Variant &p_value);
|
|
|
+#endif
|
|
|
+
|
|
|
+public:
|
|
|
+ StandardMaterial3D() :
|
|
|
+ BaseMaterial3D(false) {}
|
|
|
+};
|
|
|
+
|
|
|
+class ORMMaterial3D : public BaseMaterial3D {
|
|
|
+ GDCLASS(ORMMaterial3D, BaseMaterial3D)
|
|
|
+public:
|
|
|
+ ORMMaterial3D() :
|
|
|
+ BaseMaterial3D(true) {}
|
|
|
+};
|
|
|
|
|
|
//////////////////////
|
|
|
|