Add alpha antialiasing example to 3D Antialiasing demo

- Add colored planes below some examples to make antialiasing
  differences easier to see.
- Change various textures to make antialiasing differences easier to see.
This commit is contained in:
Hugo Locurcio
2023-11-15 16:46:25 +01:00
parent 40ce32c5da
commit c76c4e8a5c
3 changed files with 149 additions and 56 deletions

View File

@@ -24,6 +24,11 @@ This project showcases the various 3D antialiasing techniques supported by Godot
the 3D framebuffer will be 3840×2160.
- SSAA can be used together with FXAA or TAA to counter the blurring added by
those algorithms, while further improving antialiasing quality.
- **Alpha antialiasing:** Applied on certain materials in the demo, available in
two modes (Alpha Edge Blend and Alpha Edge Clip). This is most effective when
MSAA is enabled, as Godot enables alpha-to-coverage rendering on the material
in this case. When MSAA is disabled, a fixed dithering pattern is applied on
the edge of transparent areas on the material.
Godot allows using multiple antialiasing techniques at the same time. This can
be useful to obtain the best possible quality, or to find a better performance

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=49 format=3 uid="uid://clyxqp0e6qemi"]
[gd_scene load_steps=55 format=3 uid="uid://clyxqp0e6qemi"]
[ext_resource type="Texture2D" uid="uid://ccgkupemr6e1q" path="res://textures/paint.png" id="3_2nulf"]
[ext_resource type="PackedScene" uid="uid://daokc0jvx7nkw" path="res://thin_lines.tscn" id="3_5ehjl"]
@@ -234,13 +234,20 @@ size = Vector2(128, 128)
[sub_resource type="BoxMesh" id="BoxMesh_gwe28"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_fiqc5"]
[sub_resource type="Gradient" id="Gradient_jyuoy"]
offsets = PackedFloat32Array(0.1, 0.768293)
[sub_resource type="FastNoiseLite" id="FastNoiseLite_kv21n"]
frequency = 0.02
fractal_type = 3
fractal_octaves = 9
fractal_gain = 1.0
fractal_gain = 0.9
fractal_ping_pong_strength = -1.2
[sub_resource type="NoiseTexture2D" id="NoiseTexture_bgiac"]
seamless = true
noise = SubResource("FastNoiseLite_fiqc5")
color_ramp = SubResource("Gradient_jyuoy")
noise = SubResource("FastNoiseLite_kv21n")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_x42ya"]
albedo_color = Color(1.2, 1, 0.7, 1)
@@ -248,60 +255,85 @@ albedo_texture = SubResource("NoiseTexture_bgiac")
uv1_scale = Vector3(3, 2, 1)
texture_filter = 5
[sub_resource type="NoiseTexture2D" id="NoiseTexture_7yxqs"]
width = 32
height = 32
seamless = true
noise = SubResource("FastNoiseLite_fiqc5")
[sub_resource type="Gradient" id="Gradient_ylwhn"]
offsets = PackedFloat32Array(0.378049, 0.408537, 0.603659, 1)
colors = PackedColorArray(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_fmnt8"]
gradient = SubResource("Gradient_ylwhn")
width = 16
height = 16
fill = 2
fill_from = Vector2(0.5, 0.5)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6yfdy"]
albedo_texture = SubResource("NoiseTexture_7yxqs")
specular_mode = 2
albedo_color = Color(0.301961, 1, 0.6, 1)
albedo_texture = SubResource("GradientTexture2D_fmnt8")
uv1_scale = Vector3(3, 2, 1)
texture_filter = 4
[sub_resource type="Gradient" id="Gradient_ekf3m"]
offsets = PackedFloat32Array(0, 0.298851, 0.609195, 0.781609, 0.873563, 1)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 0.133693, 0.238417, 0.655738, 1, 0.4, 0.47451, 0, 1, 0.364109, 0.476658, 1, 1, 1, 1, 0)
[sub_resource type="PlaneMesh" id="PlaneMesh_nllvr"]
size = Vector2(3.9, 3.9)
[sub_resource type="NoiseTexture2D" id="NoiseTexture_uv2tn"]
seamless = true
color_ramp = SubResource("Gradient_ekf3m")
noise = SubResource("FastNoiseLite_fiqc5")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_bjmm1"]
albedo_color = Color(1, 0, 0, 1)
[sub_resource type="Gradient" id="Gradient_e2xbk"]
offsets = PackedFloat32Array(0.3, 0.5, 0.699, 0.7)
colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_ufeca"]
gradient = SubResource("Gradient_e2xbk")
width = 128
height = 128
fill = 2
fill_from = Vector2(0.5, 0.5)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qcf1j"]
transparency = 1
cull_mode = 2
albedo_color = Color(1.2, 1, 0.7, 1)
albedo_texture = SubResource("NoiseTexture_uv2tn")
uv1_scale = Vector3(3, 2, 1)
albedo_texture = SubResource("GradientTexture2D_ufeca")
uv1_scale = Vector3(12, 8, 1)
texture_filter = 5
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xbqpl"]
transparency = 2
alpha_scissor_threshold = 0.72
alpha_scissor_threshold = 0.5
alpha_antialiasing_mode = 0
cull_mode = 2
albedo_color = Color(1.2, 1, 0.7, 1)
albedo_texture = SubResource("NoiseTexture_uv2tn")
uv1_scale = Vector3(3, 2, 1)
albedo_texture = SubResource("GradientTexture2D_ufeca")
uv1_scale = Vector3(12, 8, 1)
texture_filter = 5
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_txrd8"]
transparency = 2
alpha_scissor_threshold = 0.5
alpha_antialiasing_mode = 1
alpha_antialiasing_edge = 0.3
albedo_texture = SubResource("GradientTexture2D_ufeca")
uv1_scale = Vector3(12, 8, 1)
texture_filter = 5
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xhqpm"]
transparency = 2
alpha_scissor_threshold = 0.5
alpha_antialiasing_mode = 2
alpha_antialiasing_edge = 0.3
albedo_texture = SubResource("GradientTexture2D_ufeca")
uv1_scale = Vector3(12, 8, 1)
texture_filter = 5
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mjkwh"]
transparency = 3
alpha_hash_scale = 1.0
alpha_antialiasing_mode = 0
cull_mode = 2
albedo_color = Color(1.2, 1, 0.7, 1)
albedo_texture = SubResource("NoiseTexture_uv2tn")
uv1_scale = Vector3(3, 2, 1)
albedo_texture = SubResource("GradientTexture2D_ufeca")
uv1_scale = Vector3(12, 8, 1)
texture_filter = 5
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_f4l4p"]
transparency = 4
cull_mode = 2
albedo_color = Color(1.2, 1, 0.7, 1)
albedo_texture = SubResource("NoiseTexture_uv2tn")
uv1_scale = Vector3(3, 2, 1)
albedo_texture = SubResource("GradientTexture2D_ufeca")
uv1_scale = Vector3(12, 8, 1)
texture_filter = 5
[sub_resource type="SphereMesh" id="SphereMesh_kfkna"]
@@ -507,13 +539,13 @@ environment = SubResource("11")
script = ExtResource("18")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
autoplay = "move"
libraries = {
"": SubResource("AnimationLibrary_ecfcr")
}
autoplay = "move"
[node name="Plane" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -34)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -38)
layers = 2
mesh = SubResource("14")
@@ -540,18 +572,24 @@ fov = 70.0
[node name="StaticObject" type="Node3D" parent="Testers"]
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/StaticObject"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.5, 0)
mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_x42ya")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="Testers/StaticObject"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0.5, 0)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, 0)
mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_6yfdy")
[node name="ThinLines" parent="Testers" instance=ExtResource("3_5ehjl")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -4)
[node name="Plane" type="MeshInstance3D" parent="Testers/ThinLines"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.002, 0)
mesh = SubResource("PlaneMesh_nllvr")
skeleton = NodePath("../../TransparencyAlphaBlend")
surface_material_override/0 = SubResource("StandardMaterial3D_bjmm1")
[node name="TransparencyAlphaBlend" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -8)
@@ -560,6 +598,11 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.501, 0)
mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_qcf1j")
[node name="Plane" type="MeshInstance3D" parent="Testers/TransparencyAlphaBlend"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.002, 0)
mesh = SubResource("PlaneMesh_nllvr")
surface_material_override/0 = SubResource("StandardMaterial3D_bjmm1")
[node name="TransparencyAlphaScissor" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -12)
@@ -568,27 +611,73 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.501, 0)
mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_xbqpl")
[node name="TransparencyAlphaHash" type="Node3D" parent="Testers"]
[node name="Plane2" type="MeshInstance3D" parent="Testers/TransparencyAlphaScissor"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.002, 0)
mesh = SubResource("PlaneMesh_nllvr")
skeleton = NodePath("../../TransparencyAlphaBlend")
surface_material_override/0 = SubResource("StandardMaterial3D_bjmm1")
[node name="TransparencyAlphaScissorAntialiasingBlend" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -16)
[node name="MeshInstance3D3" type="MeshInstance3D" parent="Testers/TransparencyAlphaScissorAntialiasingBlend"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.501, 0)
mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_txrd8")
[node name="Plane3" type="MeshInstance3D" parent="Testers/TransparencyAlphaScissorAntialiasingBlend"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.002, 0)
mesh = SubResource("PlaneMesh_nllvr")
skeleton = NodePath("../../TransparencyAlphaBlend")
surface_material_override/0 = SubResource("StandardMaterial3D_bjmm1")
[node name="TransparencyAlphaScissorAntialiasingClip" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -20)
[node name="MeshInstance3D3" type="MeshInstance3D" parent="Testers/TransparencyAlphaScissorAntialiasingClip"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.501, 0)
mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_xhqpm")
[node name="Plane4" type="MeshInstance3D" parent="Testers/TransparencyAlphaScissorAntialiasingClip"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.002, 0)
mesh = SubResource("PlaneMesh_nllvr")
skeleton = NodePath("../../TransparencyAlphaBlend")
surface_material_override/0 = SubResource("StandardMaterial3D_bjmm1")
[node name="TransparencyAlphaHash" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -24)
[node name="MeshInstance3D3" type="MeshInstance3D" parent="Testers/TransparencyAlphaHash"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.501, 0)
mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_mjkwh")
[node name="Plane5" type="MeshInstance3D" parent="Testers/TransparencyAlphaHash"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.002, 0)
mesh = SubResource("PlaneMesh_nllvr")
skeleton = NodePath("../../TransparencyAlphaBlend")
surface_material_override/0 = SubResource("StandardMaterial3D_bjmm1")
[node name="TransparencyDepthPrepass" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -20)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -28)
[node name="MeshInstance3D3" type="MeshInstance3D" parent="Testers/TransparencyDepthPrepass"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.501, 0)
mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_f4l4p")
[node name="Plane6" type="MeshInstance3D" parent="Testers/TransparencyDepthPrepass"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.002, 0)
mesh = SubResource("PlaneMesh_nllvr")
skeleton = NodePath("../../TransparencyAlphaBlend")
surface_material_override/0 = SubResource("StandardMaterial3D_bjmm1")
[node name="ComplexObject" parent="Testers" instance=ExtResource("3_fa2bl")]
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 0.35, -24)
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 0.35, -32)
[node name="PointRendering" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -28)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -36)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/PointRendering"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
@@ -596,7 +685,7 @@ mesh = SubResource("SphereMesh_kfkna")
surface_material_override/0 = SubResource("StandardMaterial3D_rfedc")
[node name="MovingObject" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -32)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -40)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/MovingObject"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
@@ -604,7 +693,7 @@ mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_x42ya")
[node name="RotatingObject" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -36)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -44)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/RotatingObject"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
@@ -612,7 +701,7 @@ mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_x42ya")
[node name="ScalingObject" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -40)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -48)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/ScalingObject"]
transform = Transform3D(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0)
@@ -620,7 +709,7 @@ mesh = SubResource("BoxMesh_gwe28")
surface_material_override/0 = SubResource("StandardMaterial3D_x42ya")
[node name="StaticCPUParticles" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -44)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -52)
[node name="CPUParticles3D" type="CPUParticles3D" parent="Testers/StaticCPUParticles"]
amount = 100
@@ -650,7 +739,7 @@ scale_amount_max = 2.5
scale_amount_curve = SubResource("Curve_sutnd")
[node name="MovingCPUParticles" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -48)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -56)
[node name="CPUParticles3D" type="CPUParticles3D" parent="Testers/MovingCPUParticles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
@@ -681,7 +770,7 @@ initial_velocity_max = 2.5
scale_amount_curve = SubResource("Curve_sutnd")
[node name="StaticGPUParticles" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -52)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -60)
[node name="GPUParticles3D" type="GPUParticles3D" parent="Testers/StaticGPUParticles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0)
@@ -698,7 +787,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
size = Vector3(4, 2, 4)
[node name="MovingGPUParticles" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -56)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -64)
[node name="GPUParticles3D" type="GPUParticles3D" parent="Testers/MovingGPUParticles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0)
@@ -716,18 +805,18 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
size = Vector3(4, 2, 4)
[node name="MovingDecal" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -60)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -68)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/MovingDecal"]
mesh = SubResource("SphereMesh_v4x6x")
[node name="Decal" type="Decal" parent="Testers/MovingDecal"]
transform = Transform3D(-0.707104, -1.00986e-06, -0.707109, 0.183013, 0.965926, -0.183013, 0.683015, -0.258819, -0.68301, 1, 1, 1)
transform = Transform3D(-0.707104, -1.01328e-06, -0.707109, 0.183013, 0.965926, -0.183013, 0.683015, -0.258819, -0.68301, 1, 1, 1)
texture_albedo = ExtResource("3_2nulf")
texture_normal = ExtResource("4_fdfpv")
[node name="ScrollingUVAnimation" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -64)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -72)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/ScrollingUVAnimation"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
@@ -735,7 +824,7 @@ mesh = SubResource("CylinderMesh_5qy8k")
surface_material_override/0 = SubResource("StandardMaterial3D_53dqy")
[node name="ScrollingUVCustomShader" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -68)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -76)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/ScrollingUVCustomShader"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
@@ -743,7 +832,7 @@ mesh = SubResource("CylinderMesh_5qy8k")
surface_material_override/0 = SubResource("ShaderMaterial_ltvd2")
[node name="CustomShaderVertexMovement" type="Node3D" parent="Testers"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -72)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -80)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/CustomShaderVertexMovement"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
@@ -911,7 +1000,6 @@ size_flags_vertical = 4
size_flags_stretch_ratio = 3.0
max_value = 300.0
step = 10.0
value = 1.0
[node name="Value" type="Label" parent="Antialiasing/LimitFPSContainer"]
layout_mode = 2

View File

@@ -14,7 +14,7 @@ config/name="3D Anti-Aliasing"
config/description="This project showcases the various 3D antialiasing techniques supported by Godot."
config/tags=PackedStringArray("3d", "demo", "official")
run/main_scene="res://anti_aliasing.tscn"
config/features=PackedStringArray("4.1")
config/features=PackedStringArray("4.2")
config/icon="res://icon.webp"
[display]