Add Nearest Mipmap Anisotropic filter option to decals and projectors
This is consistent with the BaseMaterial3D filtering options. It can be used for high-quality pixel art textures that remain sharp when viewed at oblique angles, but prevents them from becoming grainy thanks to mipmaps.
This commit is contained in:
parent
3b39f00761
commit
d041ca6c02
|
@ -1962,9 +1962,11 @@
|
||||||
Lower-end override for [member rendering/shadows/positional_shadow/soft_shadow_filter_quality] on mobile devices, due to performance concerns or driver support.
|
Lower-end override for [member rendering/shadows/positional_shadow/soft_shadow_filter_quality] on mobile devices, due to performance concerns or driver support.
|
||||||
</member>
|
</member>
|
||||||
<member name="rendering/textures/decals/filter" type="int" setter="" getter="" default="3">
|
<member name="rendering/textures/decals/filter" type="int" setter="" getter="" default="3">
|
||||||
|
The filtering quality to use for [Decal] nodes. When using one of the anisotropic filtering modes, the anisotropic filtering level is controlled by [member rendering/textures/default_filters/anisotropic_filtering_level].
|
||||||
</member>
|
</member>
|
||||||
<member name="rendering/textures/default_filters/anisotropic_filtering_level" type="int" setter="" getter="" default="2">
|
<member name="rendering/textures/default_filters/anisotropic_filtering_level" type="int" setter="" getter="" default="2">
|
||||||
Sets the maximum number of samples to take when using anisotropic filtering on textures (as a power of two). A higher sample count will result in sharper textures at oblique angles, but is more expensive to compute. A value of [code]0[/code] forcibly disables anisotropic filtering, even on materials where it is enabled.
|
Sets the maximum number of samples to take when using anisotropic filtering on textures (as a power of two). A higher sample count will result in sharper textures at oblique angles, but is more expensive to compute. A value of [code]0[/code] forcibly disables anisotropic filtering, even on materials where it is enabled.
|
||||||
|
The anisotropic filtering level also affects decals and light projectors if they are configured to use anisotropic filtering. See [member rendering/textures/decals/filter] and [member rendering/textures/light_projectors/filter].
|
||||||
[b]Note:[/b] This property is only read when the project starts. There is currently no way to change this setting at run-time.
|
[b]Note:[/b] This property is only read when the project starts. There is currently no way to change this setting at run-time.
|
||||||
</member>
|
</member>
|
||||||
<member name="rendering/textures/default_filters/texture_mipmap_bias" type="float" setter="" getter="" default="0.0">
|
<member name="rendering/textures/default_filters/texture_mipmap_bias" type="float" setter="" getter="" default="0.0">
|
||||||
|
@ -1977,6 +1979,7 @@
|
||||||
[b]Note:[/b] This property is only read when the project starts. There is currently no way to change this setting at run-time.
|
[b]Note:[/b] This property is only read when the project starts. There is currently no way to change this setting at run-time.
|
||||||
</member>
|
</member>
|
||||||
<member name="rendering/textures/light_projectors/filter" type="int" setter="" getter="" default="3">
|
<member name="rendering/textures/light_projectors/filter" type="int" setter="" getter="" default="3">
|
||||||
|
The filtering quality to use for [OmniLight3D] and [SpotLight3D] projectors. When using one of the anisotropic filtering modes, the anisotropic filtering level is controlled by [member rendering/textures/default_filters/anisotropic_filtering_level].
|
||||||
</member>
|
</member>
|
||||||
<member name="rendering/textures/lossless_compression/force_png" type="bool" setter="" getter="" default="false">
|
<member name="rendering/textures/lossless_compression/force_png" type="bool" setter="" getter="" default="false">
|
||||||
If [code]true[/code], the texture importer will import lossless textures using the PNG format. Otherwise, it will default to using WebP.
|
If [code]true[/code], the texture importer will import lossless textures using the PNG format. Otherwise, it will default to using WebP.
|
||||||
|
|
|
@ -3747,14 +3747,22 @@
|
||||||
Use [Transform3D] to store MultiMesh transform.
|
Use [Transform3D] to store MultiMesh transform.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="LIGHT_PROJECTOR_FILTER_NEAREST" value="0" enum="LightProjectorFilter">
|
<constant name="LIGHT_PROJECTOR_FILTER_NEAREST" value="0" enum="LightProjectorFilter">
|
||||||
|
Nearest-neighbor filter for light projectors (use for pixel art light projectors). No mipmaps are used for rendering, which means light projectors at a distance will look sharp but grainy. This has roughly the same performance cost as using mipmaps.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS" value="1" enum="LightProjectorFilter">
|
<constant name="LIGHT_PROJECTOR_FILTER_LINEAR" value="1" enum="LightProjectorFilter">
|
||||||
|
Linear filter for light projectors (use for non-pixel art light projectors). No mipmaps are used for rendering, which means light projectors at a distance will look smooth but blurry. This has roughly the same performance cost as using mipmaps.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="LIGHT_PROJECTOR_FILTER_LINEAR" value="2" enum="LightProjectorFilter">
|
<constant name="LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS" value="2" enum="LightProjectorFilter">
|
||||||
|
Nearest-neighbor filter for light projectors (use for pixel art light projectors). Isotropic mipmaps are used for rendering, which means light projectors at a distance will look smooth but blurry. This has roughly the same performance cost as not using mipmaps.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS" value="3" enum="LightProjectorFilter">
|
<constant name="LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS" value="3" enum="LightProjectorFilter">
|
||||||
|
Linear filter for light projectors (use for non-pixel art light projectors). Isotropic mipmaps are used for rendering, which means light projectors at a distance will look smooth but blurry. This has roughly the same performance cost as not using mipmaps.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC" value="4" enum="LightProjectorFilter">
|
<constant name="LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS_ANISOTROPIC" value="4" enum="LightProjectorFilter">
|
||||||
|
Nearest-neighbor filter for light projectors (use for pixel art light projectors). Anisotropic mipmaps are used for rendering, which means light projectors at a distance will look smooth and sharp when viewed from oblique angles. This looks better compared to isotropic mipmaps, but is slower. The level of anisotropic filtering is defined by [member ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level].
|
||||||
|
</constant>
|
||||||
|
<constant name="LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC" value="5" enum="LightProjectorFilter">
|
||||||
|
Linear filter for light projectors (use for non-pixel art light projectors). Anisotropic mipmaps are used for rendering, which means light projectors at a distance will look smooth and sharp when viewed from oblique angles. This looks better compared to isotropic mipmaps, but is slower. The level of anisotropic filtering is defined by [member ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level].
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="LIGHT_DIRECTIONAL" value="0" enum="LightType">
|
<constant name="LIGHT_DIRECTIONAL" value="0" enum="LightType">
|
||||||
Is a directional (sun) light.
|
Is a directional (sun) light.
|
||||||
|
@ -3896,14 +3904,22 @@
|
||||||
<constant name="DECAL_TEXTURE_MAX" value="4" enum="DecalTexture">
|
<constant name="DECAL_TEXTURE_MAX" value="4" enum="DecalTexture">
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="DECAL_FILTER_NEAREST" value="0" enum="DecalFilter">
|
<constant name="DECAL_FILTER_NEAREST" value="0" enum="DecalFilter">
|
||||||
|
Nearest-neighbor filter for decals (use for pixel art decals). No mipmaps are used for rendering, which means decals at a distance will look sharp but grainy. This has roughly the same performance cost as using mipmaps.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="DECAL_FILTER_NEAREST_MIPMAPS" value="1" enum="DecalFilter">
|
<constant name="DECAL_FILTER_LINEAR" value="1" enum="DecalFilter">
|
||||||
|
Linear filter for decals (use for non-pixel art decals). No mipmaps are used for rendering, which means decals at a distance will look smooth but blurry. This has roughly the same performance cost as using mipmaps.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="DECAL_FILTER_LINEAR" value="2" enum="DecalFilter">
|
<constant name="DECAL_FILTER_NEAREST_MIPMAPS" value="2" enum="DecalFilter">
|
||||||
|
Nearest-neighbor filter for decals (use for pixel art decals). Isotropic mipmaps are used for rendering, which means decals at a distance will look smooth but blurry. This has roughly the same performance cost as not using mipmaps.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="DECAL_FILTER_LINEAR_MIPMAPS" value="3" enum="DecalFilter">
|
<constant name="DECAL_FILTER_LINEAR_MIPMAPS" value="3" enum="DecalFilter">
|
||||||
|
Linear filter for decals (use for non-pixel art decals). Isotropic mipmaps are used for rendering, which means decals at a distance will look smooth but blurry. This has roughly the same performance cost as not using mipmaps.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC" value="4" enum="DecalFilter">
|
<constant name="DECAL_FILTER_NEAREST_MIPMAPS_ANISOTROPIC" value="4" enum="DecalFilter">
|
||||||
|
Nearest-neighbor filter for decals (use for pixel art decals). Anisotropic mipmaps are used for rendering, which means decals at a distance will look smooth and sharp when viewed from oblique angles. This looks better compared to isotropic mipmaps, but is slower. The level of anisotropic filtering is defined by [member ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level].
|
||||||
|
</constant>
|
||||||
|
<constant name="DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC" value="5" enum="DecalFilter">
|
||||||
|
Linear filter for decals (use for non-pixel art decals). Anisotropic mipmaps are used for rendering, which means decals at a distance will look smooth and sharp when viewed from oblique angles. This looks better compared to isotropic mipmaps, but is slower. The level of anisotropic filtering is defined by [member ProjectSettings.rendering/textures/default_filters/anisotropic_filtering_level].
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="VOXEL_GI_QUALITY_LOW" value="0" enum="VoxelGIQuality">
|
<constant name="VOXEL_GI_QUALITY_LOW" value="0" enum="VoxelGIQuality">
|
||||||
</constant>
|
</constant>
|
||||||
|
|
|
@ -2265,15 +2265,18 @@ void RenderForwardClustered::_update_render_base_uniform_set() {
|
||||||
case RS::DECAL_FILTER_NEAREST: {
|
case RS::DECAL_FILTER_NEAREST: {
|
||||||
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
case RS::DECAL_FILTER_NEAREST_MIPMAPS: {
|
|
||||||
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
|
||||||
} break;
|
|
||||||
case RS::DECAL_FILTER_LINEAR: {
|
case RS::DECAL_FILTER_LINEAR: {
|
||||||
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
case RS::DECAL_FILTER_NEAREST_MIPMAPS: {
|
||||||
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
|
} break;
|
||||||
case RS::DECAL_FILTER_LINEAR_MIPMAPS: {
|
case RS::DECAL_FILTER_LINEAR_MIPMAPS: {
|
||||||
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
case RS::DECAL_FILTER_NEAREST_MIPMAPS_ANISOTROPIC: {
|
||||||
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
|
} break;
|
||||||
case RS::DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC: {
|
case RS::DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC: {
|
||||||
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
@ -2292,15 +2295,18 @@ void RenderForwardClustered::_update_render_base_uniform_set() {
|
||||||
case RS::LIGHT_PROJECTOR_FILTER_NEAREST: {
|
case RS::LIGHT_PROJECTOR_FILTER_NEAREST: {
|
||||||
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
case RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS: {
|
|
||||||
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
|
||||||
} break;
|
|
||||||
case RS::LIGHT_PROJECTOR_FILTER_LINEAR: {
|
case RS::LIGHT_PROJECTOR_FILTER_LINEAR: {
|
||||||
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
case RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS: {
|
||||||
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
|
} break;
|
||||||
case RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS: {
|
case RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS: {
|
||||||
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
case RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS_ANISOTROPIC: {
|
||||||
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
|
} break;
|
||||||
case RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC: {
|
case RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC: {
|
||||||
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_custom(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
@ -3275,12 +3281,18 @@ void RenderForwardClustered::_update_shader_quality_settings() {
|
||||||
|
|
||||||
sc.type = RD::PIPELINE_SPECIALIZATION_CONSTANT_TYPE_BOOL;
|
sc.type = RD::PIPELINE_SPECIALIZATION_CONSTANT_TYPE_BOOL;
|
||||||
sc.constant_id = SPEC_CONSTANT_DECAL_FILTER;
|
sc.constant_id = SPEC_CONSTANT_DECAL_FILTER;
|
||||||
sc.bool_value = decals_get_filter() == RS::DECAL_FILTER_NEAREST_MIPMAPS || decals_get_filter() == RS::DECAL_FILTER_LINEAR_MIPMAPS || decals_get_filter() == RS::DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC;
|
sc.bool_value = decals_get_filter() == RS::DECAL_FILTER_NEAREST_MIPMAPS ||
|
||||||
|
decals_get_filter() == RS::DECAL_FILTER_LINEAR_MIPMAPS ||
|
||||||
|
decals_get_filter() == RS::DECAL_FILTER_NEAREST_MIPMAPS_ANISOTROPIC ||
|
||||||
|
decals_get_filter() == RS::DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC;
|
||||||
|
|
||||||
spec_constants.push_back(sc);
|
spec_constants.push_back(sc);
|
||||||
|
|
||||||
sc.constant_id = SPEC_CONSTANT_PROJECTOR_FILTER;
|
sc.constant_id = SPEC_CONSTANT_PROJECTOR_FILTER;
|
||||||
sc.bool_value = light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS || light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS || light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC;
|
sc.bool_value = light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS ||
|
||||||
|
light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS ||
|
||||||
|
light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS_ANISOTROPIC ||
|
||||||
|
light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC;
|
||||||
|
|
||||||
spec_constants.push_back(sc);
|
spec_constants.push_back(sc);
|
||||||
|
|
||||||
|
|
|
@ -1214,15 +1214,18 @@ void RenderForwardMobile::_update_render_base_uniform_set() {
|
||||||
case RS::DECAL_FILTER_NEAREST: {
|
case RS::DECAL_FILTER_NEAREST: {
|
||||||
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
case RS::DECAL_FILTER_NEAREST_MIPMAPS: {
|
|
||||||
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
|
||||||
} break;
|
|
||||||
case RS::DECAL_FILTER_LINEAR: {
|
case RS::DECAL_FILTER_LINEAR: {
|
||||||
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
case RS::DECAL_FILTER_NEAREST_MIPMAPS: {
|
||||||
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
|
} break;
|
||||||
case RS::DECAL_FILTER_LINEAR_MIPMAPS: {
|
case RS::DECAL_FILTER_LINEAR_MIPMAPS: {
|
||||||
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
case RS::DECAL_FILTER_NEAREST_MIPMAPS_ANISOTROPIC: {
|
||||||
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
|
} break;
|
||||||
case RS::DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC: {
|
case RS::DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC: {
|
||||||
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
@ -1241,15 +1244,18 @@ void RenderForwardMobile::_update_render_base_uniform_set() {
|
||||||
case RS::LIGHT_PROJECTOR_FILTER_NEAREST: {
|
case RS::LIGHT_PROJECTOR_FILTER_NEAREST: {
|
||||||
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
case RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS: {
|
|
||||||
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
|
||||||
} break;
|
|
||||||
case RS::LIGHT_PROJECTOR_FILTER_LINEAR: {
|
case RS::LIGHT_PROJECTOR_FILTER_LINEAR: {
|
||||||
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
case RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS: {
|
||||||
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
|
} break;
|
||||||
case RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS: {
|
case RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS: {
|
||||||
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
case RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS_ANISOTROPIC: {
|
||||||
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
|
} break;
|
||||||
case RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC: {
|
case RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC: {
|
||||||
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
|
||||||
} break;
|
} break;
|
||||||
|
@ -2558,12 +2564,18 @@ void RenderForwardMobile::_update_shader_quality_settings() {
|
||||||
|
|
||||||
sc.type = RD::PIPELINE_SPECIALIZATION_CONSTANT_TYPE_BOOL;
|
sc.type = RD::PIPELINE_SPECIALIZATION_CONSTANT_TYPE_BOOL;
|
||||||
sc.constant_id = SPEC_CONSTANT_DECAL_USE_MIPMAPS;
|
sc.constant_id = SPEC_CONSTANT_DECAL_USE_MIPMAPS;
|
||||||
sc.bool_value = decals_get_filter() == RS::DECAL_FILTER_NEAREST_MIPMAPS || decals_get_filter() == RS::DECAL_FILTER_LINEAR_MIPMAPS || decals_get_filter() == RS::DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC;
|
sc.bool_value = decals_get_filter() == RS::DECAL_FILTER_NEAREST_MIPMAPS ||
|
||||||
|
decals_get_filter() == RS::DECAL_FILTER_LINEAR_MIPMAPS ||
|
||||||
|
decals_get_filter() == RS::DECAL_FILTER_NEAREST_MIPMAPS_ANISOTROPIC ||
|
||||||
|
decals_get_filter() == RS::DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC;
|
||||||
|
|
||||||
spec_constants.push_back(sc);
|
spec_constants.push_back(sc);
|
||||||
|
|
||||||
sc.constant_id = SPEC_CONSTANT_PROJECTOR_USE_MIPMAPS;
|
sc.constant_id = SPEC_CONSTANT_PROJECTOR_USE_MIPMAPS;
|
||||||
sc.bool_value = light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS || light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS || light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC;
|
sc.bool_value = light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS ||
|
||||||
|
light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS ||
|
||||||
|
light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS_ANISOTROPIC ||
|
||||||
|
light_projectors_get_filter() == RS::LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC;
|
||||||
|
|
||||||
spec_constants.push_back(sc);
|
spec_constants.push_back(sc);
|
||||||
|
|
||||||
|
|
|
@ -1885,9 +1885,10 @@ void RenderingServer::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("light_projectors_set_filter", "filter"), &RenderingServer::light_projectors_set_filter);
|
ClassDB::bind_method(D_METHOD("light_projectors_set_filter", "filter"), &RenderingServer::light_projectors_set_filter);
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_NEAREST);
|
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_NEAREST);
|
||||||
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS);
|
|
||||||
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_LINEAR);
|
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_LINEAR);
|
||||||
|
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS);
|
||||||
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS);
|
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS);
|
||||||
|
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS_ANISOTROPIC);
|
||||||
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC);
|
BIND_ENUM_CONSTANT(LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC);
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(LIGHT_DIRECTIONAL);
|
BIND_ENUM_CONSTANT(LIGHT_DIRECTIONAL);
|
||||||
|
@ -1989,9 +1990,10 @@ void RenderingServer::_bind_methods() {
|
||||||
BIND_ENUM_CONSTANT(DECAL_TEXTURE_MAX);
|
BIND_ENUM_CONSTANT(DECAL_TEXTURE_MAX);
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(DECAL_FILTER_NEAREST);
|
BIND_ENUM_CONSTANT(DECAL_FILTER_NEAREST);
|
||||||
BIND_ENUM_CONSTANT(DECAL_FILTER_NEAREST_MIPMAPS);
|
|
||||||
BIND_ENUM_CONSTANT(DECAL_FILTER_LINEAR);
|
BIND_ENUM_CONSTANT(DECAL_FILTER_LINEAR);
|
||||||
|
BIND_ENUM_CONSTANT(DECAL_FILTER_NEAREST_MIPMAPS);
|
||||||
BIND_ENUM_CONSTANT(DECAL_FILTER_LINEAR_MIPMAPS);
|
BIND_ENUM_CONSTANT(DECAL_FILTER_LINEAR_MIPMAPS);
|
||||||
|
BIND_ENUM_CONSTANT(DECAL_FILTER_NEAREST_MIPMAPS_ANISOTROPIC);
|
||||||
BIND_ENUM_CONSTANT(DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC);
|
BIND_ENUM_CONSTANT(DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC);
|
||||||
|
|
||||||
/* GI API (affects VoxelGI and SDFGI) */
|
/* GI API (affects VoxelGI and SDFGI) */
|
||||||
|
@ -2956,9 +2958,9 @@ void RenderingServer::init() {
|
||||||
PROPERTY_HINT_RANGE, "-2,2,0.001"));
|
PROPERTY_HINT_RANGE, "-2,2,0.001"));
|
||||||
|
|
||||||
GLOBAL_DEF("rendering/textures/decals/filter", DECAL_FILTER_LINEAR_MIPMAPS);
|
GLOBAL_DEF("rendering/textures/decals/filter", DECAL_FILTER_LINEAR_MIPMAPS);
|
||||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/textures/decals/filter", PropertyInfo(Variant::INT, "rendering/textures/decals/filter", PROPERTY_HINT_ENUM, "Nearest (Fast),Nearest+Mipmaps,Linear,Linear+Mipmaps,Linear+Mipmaps Anisotropic (Slow)"));
|
ProjectSettings::get_singleton()->set_custom_property_info("rendering/textures/decals/filter", PropertyInfo(Variant::INT, "rendering/textures/decals/filter", PROPERTY_HINT_ENUM, "Nearest (Fast),Linear (Fast),Nearest Mipmap (Fast),Linear Mipmap (Fast),Nearest Mipmap Anisotropic (Average),Linear Mipmap Anisotropic (Average)"));
|
||||||
GLOBAL_DEF("rendering/textures/light_projectors/filter", LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS);
|
GLOBAL_DEF("rendering/textures/light_projectors/filter", LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS);
|
||||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/textures/light_projectors/filter", PropertyInfo(Variant::INT, "rendering/textures/light_projectors/filter", PROPERTY_HINT_ENUM, "Nearest (Fast),Nearest+Mipmaps,Linear,Linear+Mipmaps,Linear+Mipmaps Anisotropic (Slow)"));
|
ProjectSettings::get_singleton()->set_custom_property_info("rendering/textures/light_projectors/filter", PropertyInfo(Variant::INT, "rendering/textures/light_projectors/filter", PROPERTY_HINT_ENUM, "Nearest (Fast),Linear (Fast),Nearest Mipmap (Fast),Linear Mipmap (Fast),Nearest Mipmap Anisotropic (Average),Linear Mipmap Anisotropic (Average)"));
|
||||||
|
|
||||||
GLOBAL_DEF_RST("rendering/occlusion_culling/occlusion_rays_per_thread", 512);
|
GLOBAL_DEF_RST("rendering/occlusion_culling/occlusion_rays_per_thread", 512);
|
||||||
GLOBAL_DEF_RST("rendering/occlusion_culling/bvh_build_quality", 2);
|
GLOBAL_DEF_RST("rendering/occlusion_culling/bvh_build_quality", 2);
|
||||||
|
|
|
@ -495,9 +495,10 @@ public:
|
||||||
|
|
||||||
enum LightProjectorFilter {
|
enum LightProjectorFilter {
|
||||||
LIGHT_PROJECTOR_FILTER_NEAREST,
|
LIGHT_PROJECTOR_FILTER_NEAREST,
|
||||||
LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS,
|
|
||||||
LIGHT_PROJECTOR_FILTER_LINEAR,
|
LIGHT_PROJECTOR_FILTER_LINEAR,
|
||||||
|
LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS,
|
||||||
LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS,
|
LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS,
|
||||||
|
LIGHT_PROJECTOR_FILTER_NEAREST_MIPMAPS_ANISOTROPIC,
|
||||||
LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC,
|
LIGHT_PROJECTOR_FILTER_LINEAR_MIPMAPS_ANISOTROPIC,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -557,9 +558,10 @@ public:
|
||||||
|
|
||||||
enum DecalFilter {
|
enum DecalFilter {
|
||||||
DECAL_FILTER_NEAREST,
|
DECAL_FILTER_NEAREST,
|
||||||
DECAL_FILTER_NEAREST_MIPMAPS,
|
|
||||||
DECAL_FILTER_LINEAR,
|
DECAL_FILTER_LINEAR,
|
||||||
|
DECAL_FILTER_NEAREST_MIPMAPS,
|
||||||
DECAL_FILTER_LINEAR_MIPMAPS,
|
DECAL_FILTER_LINEAR_MIPMAPS,
|
||||||
|
DECAL_FILTER_NEAREST_MIPMAPS_ANISOTROPIC,
|
||||||
DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC,
|
DECAL_FILTER_LINEAR_MIPMAPS_ANISOTROPIC,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue