mirror of
https://github.com/godotengine/godot-benchmarks.git
synced 2026-01-05 10:10:08 +03:00
Consolidate benchmarks and port to new API
This commit is contained in:
57
benchmarks/gdscript/array.gd
Normal file
57
benchmarks/gdscript/array.gd
Normal file
@@ -0,0 +1,57 @@
|
||||
extends Benchmark
|
||||
|
||||
const ITERATIONS = 80_000
|
||||
|
||||
|
||||
# Benchmark various array types by:
|
||||
# 1) Inserting ITERATIONS elements from the back
|
||||
# 2) Updating all ITERATIONS elements
|
||||
# 3) Popping all ITERATIONS elements from the front (non-constant complexity)
|
||||
|
||||
func benchmark_typed_int_array():
|
||||
var array: Array[int] = []
|
||||
for i in ITERATIONS:
|
||||
array.push_back(i)
|
||||
for i in ITERATIONS:
|
||||
array[i] = 0
|
||||
for i in ITERATIONS:
|
||||
array.remove_at(0)
|
||||
|
||||
func benchmark_untyped_int_array():
|
||||
var array = []
|
||||
for i in ITERATIONS:
|
||||
array.push_back(i)
|
||||
for i in ITERATIONS:
|
||||
array[i] = 0
|
||||
for i in ITERATIONS:
|
||||
array.remove_at(0)
|
||||
|
||||
|
||||
func benchmark_packed_string_array():
|
||||
var array := PackedStringArray()
|
||||
for i in ITERATIONS:
|
||||
array.push_back(str("Godot ", i))
|
||||
for i in ITERATIONS:
|
||||
array[i] = ""
|
||||
for i in ITERATIONS:
|
||||
array.remove_at(0)
|
||||
|
||||
func benchmark_typed_string_array():
|
||||
var array: Array[String] = []
|
||||
for i in ITERATIONS:
|
||||
array.push_back(str("Godot ", i))
|
||||
for i in ITERATIONS:
|
||||
array[i] = ""
|
||||
for i in ITERATIONS:
|
||||
array.remove_at(0)
|
||||
|
||||
func benchmark_untyped_string_array():
|
||||
var array = []
|
||||
for i in ITERATIONS:
|
||||
array.push_back(str("Godot ", i))
|
||||
for i in ITERATIONS:
|
||||
array[i] = ""
|
||||
for i in ITERATIONS:
|
||||
array.remove_at(0)
|
||||
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
extends Node
|
||||
|
||||
const ITERATIONS = 80_000
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var array := PackedStringArray()
|
||||
for i in ITERATIONS:
|
||||
# Insert elements.
|
||||
array.push_back(str("Godot ", i))
|
||||
|
||||
for i in ITERATIONS:
|
||||
# Update elements in order.
|
||||
array[i] = ""
|
||||
|
||||
for _i in ITERATIONS:
|
||||
# Delete elements from the front (non-constant complexity).
|
||||
array.remove_at(0)
|
||||
|
||||
Manager.end_test()
|
||||
@@ -1,13 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dyo16udaurxui"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://benchmarks/gdscript/packed_string_array.gd" id="2"]
|
||||
|
||||
[node name="PackedStringArray" type="Node"]
|
||||
script = ExtResource("2")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 14.0
|
||||
script = ExtResource("1")
|
||||
time_limit = false
|
||||
@@ -1,20 +0,0 @@
|
||||
extends Node
|
||||
|
||||
const ITERATIONS = 80_000
|
||||
|
||||
|
||||
func _ready():
|
||||
var array: Array[int] = []
|
||||
for i in ITERATIONS:
|
||||
# Insert elements.
|
||||
array.push_back(i)
|
||||
|
||||
for i in ITERATIONS:
|
||||
# Update elements in order.
|
||||
array[i] = 0
|
||||
|
||||
for i in ITERATIONS:
|
||||
# Delete elements from the front (non-constant complexity).
|
||||
array.pop_front()
|
||||
|
||||
Manager.end_test()
|
||||
@@ -1,13 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://7qhexqvebn6s"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://benchmarks/gdscript/typed_int_array.gd" id="2"]
|
||||
|
||||
[node name="TypedIntArray" type="Node"]
|
||||
script = ExtResource("2")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 14.0
|
||||
script = ExtResource("1")
|
||||
time_limit = false
|
||||
@@ -1,20 +0,0 @@
|
||||
extends Node
|
||||
|
||||
const ITERATIONS = 80_000
|
||||
|
||||
|
||||
func _ready():
|
||||
var array: Array[String] = []
|
||||
for i in ITERATIONS:
|
||||
# Insert elements.
|
||||
array.push_back(str("Godot ", i))
|
||||
|
||||
for i in ITERATIONS:
|
||||
# Update elements in order.
|
||||
array[i] = ""
|
||||
|
||||
for _i in ITERATIONS:
|
||||
# Delete elements from the front (non-constant complexity).
|
||||
array.pop_front()
|
||||
|
||||
Manager.end_test()
|
||||
@@ -1,13 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://bcrdxqm7xedqd"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://benchmarks/gdscript/typed_string_array.gd" id="2"]
|
||||
|
||||
[node name="TypedStringArray" type="Node"]
|
||||
script = ExtResource("2")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 14.0
|
||||
script = ExtResource("1")
|
||||
time_limit = false
|
||||
@@ -1,20 +0,0 @@
|
||||
extends Node
|
||||
|
||||
const ITERATIONS = 80_000
|
||||
|
||||
|
||||
func _ready():
|
||||
var array = []
|
||||
for i in ITERATIONS:
|
||||
# Insert elements.
|
||||
array.push_back(i)
|
||||
|
||||
for i in 50_000:
|
||||
# Update elements in order.
|
||||
array[i] = 0
|
||||
|
||||
for _i in ITERATIONS:
|
||||
# Delete elements from the front (non-constant complexity).
|
||||
array.pop_front()
|
||||
|
||||
Manager.end_test()
|
||||
@@ -1,13 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://b88jxheg5d2dp"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://benchmarks/gdscript/untyped_int_array.gd" id="2"]
|
||||
|
||||
[node name="UntypedIntArray" type="Node"]
|
||||
script = ExtResource("2")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 14.0
|
||||
script = ExtResource("1")
|
||||
time_limit = false
|
||||
@@ -1,20 +0,0 @@
|
||||
extends Node
|
||||
|
||||
const ITERATIONS = 80_000
|
||||
|
||||
|
||||
func _ready():
|
||||
var array = []
|
||||
for i in ITERATIONS:
|
||||
# Insert elements.
|
||||
array.push_back(str("Godot ", i))
|
||||
|
||||
for i in ITERATIONS:
|
||||
# Update elements in order.
|
||||
array[i] = ""
|
||||
|
||||
for _i in ITERATIONS:
|
||||
# Delete elements from the front (non-constant complexity).
|
||||
array.pop_front()
|
||||
|
||||
Manager.end_test()
|
||||
@@ -1,13 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://bqtiknifdkwms"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://benchmarks/gdscript/untyped_string_array.gd" id="2"]
|
||||
|
||||
[node name="UntypedStringArray" type="Node"]
|
||||
script = ExtResource("2")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 14.0
|
||||
script = ExtResource("1")
|
||||
time_limit = false
|
||||
178
benchmarks/rendering/culling.gd
Normal file
178
benchmarks/rendering/culling.gd
Normal file
@@ -0,0 +1,178 @@
|
||||
extends Benchmark
|
||||
|
||||
const NUMBER_OF_OBJECTS = 10_000
|
||||
const NUMBER_OF_OMNI_LIGHTS = 100
|
||||
|
||||
func _init() -> void:
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
|
||||
class TestScene extends Node3D:
|
||||
var objects := []
|
||||
var object_xforms := []
|
||||
var lights := []
|
||||
var light_instances := []
|
||||
var light_instance_xforms := []
|
||||
var meshes := []
|
||||
var cam := Camera3D.new()
|
||||
var dynamic_instances
|
||||
var dynamic_instances_xforms
|
||||
var time_accum := 0.0
|
||||
var unshaded := false
|
||||
var use_shadows := false
|
||||
var fill_with_objects := false
|
||||
var fill_with_omni_lights := false
|
||||
|
||||
func _init():
|
||||
cam.far = 200.0
|
||||
cam.transform.origin.z = 0.873609
|
||||
add_child(cam)
|
||||
|
||||
func _ready():
|
||||
cam.make_current()
|
||||
if fill_with_objects:
|
||||
do_fill_with_objects()
|
||||
if fill_with_omni_lights:
|
||||
do_fill_with_omni_lights()
|
||||
|
||||
func do_fill_with_objects() -> void:
|
||||
meshes.append(BoxMesh.new())
|
||||
meshes.append(SphereMesh.new())
|
||||
meshes.append(CapsuleMesh.new())
|
||||
meshes.append(CylinderMesh.new())
|
||||
meshes.append(PrismMesh.new())
|
||||
|
||||
for mesh in meshes:
|
||||
var shader := Shader.new()
|
||||
var shader_string := """
|
||||
shader_type spatial;
|
||||
%s
|
||||
void fragment() {
|
||||
ALBEDO = vec3(%s, %s, %s);
|
||||
}
|
||||
""" % [
|
||||
"render_mode unshaded;\n" if unshaded else "",
|
||||
str(randf()).pad_decimals(3),
|
||||
str(randf()).pad_decimals(3),
|
||||
str(randf()).pad_decimals(3),
|
||||
]
|
||||
shader.code = shader_string
|
||||
var material := ShaderMaterial.new()
|
||||
material.shader = shader
|
||||
mesh.material = material
|
||||
|
||||
var zn := 2
|
||||
var zextent := cam.far - zn
|
||||
var ss := get_tree().root.size
|
||||
var from := cam.project_position(Vector2(0, ss.y), zextent)
|
||||
var extents := cam.project_position(Vector2(ss.x, 0), zextent) - from
|
||||
|
||||
for i in NUMBER_OF_OBJECTS:
|
||||
var xf := Transform3D()
|
||||
xf.origin = Vector3(from.x + randf() * extents.x,from.y + randf() * extents.y, - (zn + zextent * randf()))
|
||||
var ins := RenderingServer.instance_create()
|
||||
RenderingServer.instance_set_base(ins, meshes[i % meshes.size()].get_rid())
|
||||
RenderingServer.instance_set_scenario(ins, get_world_3d().scenario)
|
||||
RenderingServer.instance_set_transform(ins, xf)
|
||||
|
||||
objects.append(ins)
|
||||
object_xforms.append(xf)
|
||||
|
||||
func do_fill_with_omni_lights() -> void:
|
||||
var zn := 2
|
||||
var zextent := cam.far - zn
|
||||
var ss := get_tree().root.size
|
||||
var from := cam.project_position(Vector2(0,ss.y),zextent)
|
||||
var extents := cam.project_position(Vector2(ss.x,0),zextent) - from
|
||||
|
||||
var light := RenderingServer.omni_light_create()
|
||||
RenderingServer.light_set_param(light, RenderingServer.LIGHT_PARAM_RANGE,10)
|
||||
RenderingServer.light_set_shadow(light, use_shadows)
|
||||
# Dual parabolid shadows are faster than cubemap shadows.
|
||||
RenderingServer.light_omni_set_shadow_mode(light, RenderingServer.LIGHT_OMNI_SHADOW_DUAL_PARABOLOID)
|
||||
lights.append(light)
|
||||
|
||||
for i in NUMBER_OF_OMNI_LIGHTS:
|
||||
var xf := Transform3D()
|
||||
xf.origin = Vector3(from.x + randf() * extents.x,from.y + randf() * extents.y, - (zn + zextent * randf()))
|
||||
var ins := RenderingServer.instance_create()
|
||||
RenderingServer.instance_set_base(ins, light)
|
||||
RenderingServer.instance_set_scenario(ins,get_world_3d().scenario)
|
||||
RenderingServer.instance_set_transform(ins,xf)
|
||||
|
||||
light_instances.append(ins)
|
||||
light_instance_xforms.append(xf)
|
||||
|
||||
func _exit_tree() -> void:
|
||||
for object in objects:
|
||||
RenderingServer.free_rid(object)
|
||||
|
||||
for light in lights:
|
||||
RenderingServer.free_rid(light)
|
||||
|
||||
for light_instance in light_instances:
|
||||
RenderingServer.free_rid(light_instance)
|
||||
|
||||
meshes.clear()
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if not (dynamic_instances and dynamic_instances_xforms):
|
||||
return
|
||||
|
||||
time_accum += delta * 4.0
|
||||
|
||||
for i in dynamic_instances.size():
|
||||
var xf = dynamic_instances_xforms[i]
|
||||
var angle = i * PI * 2.0 / dynamic_instances.size()
|
||||
xf.origin += Vector3(sin(angle), cos(angle), 0.0) * sin(time_accum) * 2.0
|
||||
RenderingServer.instance_set_transform(dynamic_instances[i], xf)
|
||||
|
||||
|
||||
func benchmark_basic_cull():
|
||||
var rv := TestScene.new()
|
||||
rv.fill_with_objects = true
|
||||
rv.unshaded = true
|
||||
return rv
|
||||
|
||||
func benchmark_directional_light_cull():
|
||||
var rv := TestScene.new()
|
||||
rv.fill_with_objects = true
|
||||
var light := DirectionalLight3D.new()
|
||||
light.shadow_enabled = true
|
||||
light.rotation = Vector3(-0.6, 0.3, -0.3)
|
||||
light.position.x = 2
|
||||
rv.add_child(light)
|
||||
return rv
|
||||
|
||||
func benchmark_dynamic_cull():
|
||||
var rv := TestScene.new()
|
||||
rv.fill_with_objects = true
|
||||
rv.dynamic_instances = rv.objects
|
||||
rv.dynamic_instances_xforms = rv.object_xforms
|
||||
return rv
|
||||
|
||||
func benchmark_dynamic_light_cull():
|
||||
var rv := TestScene.new()
|
||||
rv.fill_with_objects = true
|
||||
rv.fill_with_omni_lights = true
|
||||
rv.dynamic_instances = rv.light_instances
|
||||
rv.dynamic_instances_xforms = rv.light_instance_xforms
|
||||
return rv
|
||||
|
||||
func benchmark_dynamic_light_cull_with_shadows():
|
||||
var rv := TestScene.new()
|
||||
rv.fill_with_objects = true
|
||||
rv.fill_with_omni_lights = true
|
||||
rv.use_shadows = true
|
||||
rv.dynamic_instances = rv.light_instances
|
||||
rv.dynamic_instances_xforms = rv.light_instance_xforms
|
||||
return rv
|
||||
|
||||
func benchmark_static_light_cull():
|
||||
var rv := TestScene.new()
|
||||
rv.fill_with_objects = true
|
||||
rv.fill_with_omni_lights = true
|
||||
return rv
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
extends "res://benchmarks/rendering/culling/culling_base.gd"
|
||||
|
||||
const NUMBER_OF_OBJECTS = 10_000
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_objects(NUMBER_OF_OBJECTS, true)
|
||||
@@ -1,19 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://u718n0qh57cd"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/culling/basic_cull.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="2"]
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("2")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.873609)
|
||||
current = true
|
||||
far = 200.0
|
||||
@@ -1,93 +0,0 @@
|
||||
extends Node3D
|
||||
|
||||
var objects := []
|
||||
var object_xforms := []
|
||||
var lights := []
|
||||
var light_instances := []
|
||||
var light_instance_xforms := []
|
||||
var meshes := []
|
||||
|
||||
|
||||
func fill_with_objects(object_amount: int, unshaded: bool = false) -> void:
|
||||
meshes.append(BoxMesh.new())
|
||||
meshes.append(SphereMesh.new())
|
||||
meshes.append(CapsuleMesh.new())
|
||||
meshes.append(CylinderMesh.new())
|
||||
meshes.append(PrismMesh.new())
|
||||
|
||||
for mesh in meshes:
|
||||
var shader := Shader.new()
|
||||
var shader_string := """
|
||||
shader_type spatial;
|
||||
%s
|
||||
void fragment() {
|
||||
ALBEDO = vec3(%s, %s, %s);
|
||||
}
|
||||
""" % [
|
||||
"render_mode unshaded;\n" if unshaded else "",
|
||||
str(randf()).pad_decimals(3),
|
||||
str(randf()).pad_decimals(3),
|
||||
str(randf()).pad_decimals(3),
|
||||
]
|
||||
shader.code = shader_string
|
||||
var material := ShaderMaterial.new()
|
||||
material.shader = shader
|
||||
mesh.material = material
|
||||
|
||||
var cam := $Camera3D as Camera3D
|
||||
var zn := 2
|
||||
var zextent := cam.far - zn
|
||||
var ss := get_tree().root.size
|
||||
var from := cam.project_position(Vector2(0, ss.y), zextent)
|
||||
var extents := cam.project_position(Vector2(ss.x, 0), zextent) - from
|
||||
|
||||
for i in object_amount:
|
||||
var xf := Transform3D()
|
||||
xf.origin = Vector3(from.x + randf() * extents.x,from.y + randf() * extents.y, - (zn + zextent * randf()))
|
||||
var ins := RenderingServer.instance_create()
|
||||
RenderingServer.instance_set_base(ins, meshes[i % meshes.size()].get_rid())
|
||||
RenderingServer.instance_set_scenario(ins, get_world_3d().scenario)
|
||||
RenderingServer.instance_set_transform(ins, xf)
|
||||
|
||||
objects.append(ins)
|
||||
object_xforms.append(xf)
|
||||
|
||||
func fill_with_omni_lights(amount: int, use_shadows: bool) -> void:
|
||||
var cam := $Camera3D as Camera3D
|
||||
var zn := 2
|
||||
var zextent := cam.far - zn
|
||||
var ss := get_tree().root.size
|
||||
var from := cam.project_position(Vector2(0,ss.y),zextent)
|
||||
var extents := cam.project_position(Vector2(ss.x,0),zextent) - from
|
||||
|
||||
var light := RenderingServer.omni_light_create()
|
||||
RenderingServer.light_set_param(light, RenderingServer.LIGHT_PARAM_RANGE,10)
|
||||
RenderingServer.light_set_shadow(light, use_shadows)
|
||||
# Dual parabolid shadows are faster than cubemap shadows.
|
||||
RenderingServer.light_omni_set_shadow_mode(light, RenderingServer.LIGHT_OMNI_SHADOW_DUAL_PARABOLOID)
|
||||
lights.append(light)
|
||||
|
||||
for i in amount:
|
||||
var xf := Transform3D()
|
||||
xf.origin = Vector3(from.x + randf() * extents.x,from.y + randf() * extents.y, - (zn + zextent * randf()))
|
||||
var ins := RenderingServer.instance_create()
|
||||
RenderingServer.instance_set_base(ins, light)
|
||||
RenderingServer.instance_set_scenario(ins,get_world_3d().scenario)
|
||||
RenderingServer.instance_set_transform(ins,xf)
|
||||
|
||||
light_instances.append(ins)
|
||||
light_instance_xforms.append(xf)
|
||||
|
||||
func _exit_tree() -> void:
|
||||
for object in objects:
|
||||
RenderingServer.free_rid(object)
|
||||
|
||||
for light in lights:
|
||||
RenderingServer.free_rid(light)
|
||||
|
||||
for light_instance in light_instances:
|
||||
RenderingServer.free_rid(light_instance)
|
||||
|
||||
meshes.clear()
|
||||
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
extends "res://benchmarks/rendering/culling/culling_base.gd"
|
||||
|
||||
const NUMBER_OF_OBJECTS = 10_000
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_objects(NUMBER_OF_OBJECTS)
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://8owc7v5tw052"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/culling/directional_light_cull.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="2"]
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
theme_override_font_sizes/font_size = 16
|
||||
script = ExtResource("2")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.873609)
|
||||
current = true
|
||||
far = 200.0
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(0.933154, 0, 0.359476, -0.242196, 0.738961, 0.628711, -0.265639, -0.673748, 0.689565, 2.09069, 0, 0)
|
||||
shadow_enabled = true
|
||||
@@ -1,19 +0,0 @@
|
||||
extends "res://benchmarks/rendering/culling/culling_base.gd"
|
||||
|
||||
const NUMBER_OF_OBJECTS = 10_000
|
||||
|
||||
var time_accum := 0.0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_objects(NUMBER_OF_OBJECTS)
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
time_accum += delta * 4.0
|
||||
|
||||
for i in objects.size():
|
||||
var xf = object_xforms[i]
|
||||
var angle = i * PI * 2.0 / objects.size()
|
||||
xf.origin += Vector3(sin(angle), cos(angle), 0.0) * sin(time_accum) * 2.0
|
||||
RenderingServer.instance_set_transform(objects[i], xf)
|
||||
@@ -1,19 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://ddecopbjk0pd3"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/culling/dynamic_cull.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="2"]
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("2")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.873609)
|
||||
current = true
|
||||
far = 200.0
|
||||
@@ -1,23 +0,0 @@
|
||||
extends "res://benchmarks/rendering/culling/culling_base.gd"
|
||||
|
||||
const NUMBER_OF_OBJECTS = 10_000
|
||||
const NUMBER_OF_OMNI_LIGHTS = 100
|
||||
|
||||
@export var use_shadows := false
|
||||
|
||||
var time_accum := 0.0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_objects(NUMBER_OF_OBJECTS)
|
||||
fill_with_omni_lights(NUMBER_OF_OMNI_LIGHTS, use_shadows)
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
time_accum += delta * 4.0
|
||||
|
||||
for i in light_instances.size():
|
||||
var xf = light_instance_xforms[i]
|
||||
var angle = i * PI * 2.0 / light_instances.size()
|
||||
xf.origin += Vector3(sin(angle), cos(angle), 0.0) * sin(time_accum) * 2.0
|
||||
RenderingServer.instance_set_transform(light_instances[i], xf)
|
||||
@@ -1,19 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://caal1eu6emwn1"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/culling/dynamic_light_cull.gd" id="2"]
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
script = ExtResource("2")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("1")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.873609)
|
||||
current = true
|
||||
far = 200.0
|
||||
@@ -1,20 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://d3rchghob37sn"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/culling/dynamic_light_cull.gd" id="1_d0xom"]
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="2_txiip"]
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
script = ExtResource("1_d0xom")
|
||||
use_shadows = true
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("2_txiip")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.873609)
|
||||
current = true
|
||||
far = 200.0
|
||||
@@ -1,9 +0,0 @@
|
||||
extends "res://benchmarks/rendering/culling/culling_base.gd"
|
||||
|
||||
const NUMBER_OF_OBJECTS = 10_000
|
||||
const NUMBER_OF_OMNI_LIGHTS = 100
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_objects(NUMBER_OF_OBJECTS)
|
||||
fill_with_omni_lights(NUMBER_OF_OMNI_LIGHTS, false)
|
||||
@@ -1,19 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://bceclc3bopcwu"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/culling/static_light_cull.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="2"]
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("2")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.873609)
|
||||
current = true
|
||||
far = 200.0
|
||||
71
benchmarks/rendering/polygon_2d.gd
Normal file
71
benchmarks/rendering/polygon_2d.gd
Normal file
@@ -0,0 +1,71 @@
|
||||
extends Benchmark
|
||||
|
||||
func _init() -> void:
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
|
||||
class TestScene extends Node2D:
|
||||
var cam := Camera2D.new()
|
||||
var instances := []
|
||||
var instance_xforms := []
|
||||
var instance_amount := 0
|
||||
|
||||
func _init(_instance_amount: int):
|
||||
instance_amount = _instance_amount
|
||||
add_child(cam)
|
||||
|
||||
func _ready() -> void:
|
||||
var ss := get_tree().root.size
|
||||
var center := cam.get_screen_center_position()
|
||||
for i in instance_amount:
|
||||
var xf := Transform2D()
|
||||
xf.origin = Vector2(center.x + randf() * ss.x, center.y + randf() * ss.y)
|
||||
|
||||
var new_instance := create_instance()
|
||||
|
||||
call_deferred("add_child", new_instance)
|
||||
new_instance.set_global_transform(xf)
|
||||
instances.append(new_instance)
|
||||
instance_xforms.append(xf)
|
||||
|
||||
func create_instance() -> Node:
|
||||
return null
|
||||
|
||||
func _exit_tree() -> void:
|
||||
for instance in instances:
|
||||
instance.queue_free()
|
||||
|
||||
class TestPolygon extends TestScene:
|
||||
func create_instance() -> Node:
|
||||
var new_polygon := Polygon2D.new()
|
||||
var vertices := PackedVector2Array()
|
||||
var p_scale = randf_range(30,50)
|
||||
for i in 32:
|
||||
vertices.append(Vector2(p_scale*cos(i * PI / 16),p_scale*sin(i * PI / 16)))
|
||||
new_polygon.polygon = vertices
|
||||
return new_polygon
|
||||
|
||||
class TestSprite extends TestScene:
|
||||
var sprite_texture := preload("res://icon.png")
|
||||
func create_instance() -> Node:
|
||||
var new_sprite := Sprite2D.new()
|
||||
new_sprite.texture = sprite_texture
|
||||
return new_sprite
|
||||
|
||||
|
||||
func benchmark_10_polygon_2d():
|
||||
return TestPolygon.new(10)
|
||||
func benchmark_100_polygon_2d():
|
||||
return TestPolygon.new(100)
|
||||
func benchmark_1000_polygon_2d():
|
||||
return TestPolygon.new(1000)
|
||||
|
||||
func benchmark_50_sprite_2d():
|
||||
return TestSprite.new(50)
|
||||
func benchmark_500_sprite_2d():
|
||||
return TestSprite.new(500)
|
||||
func benchmark_5000_sprite_2d():
|
||||
return TestSprite.new(5000)
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
extends "res://benchmarks/rendering/polygon_2d/polygon_2d_base.gd"
|
||||
|
||||
const NUMBER_OF_POLYGONS := 1000
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_polygons(NUMBER_OF_POLYGONS)
|
||||
@@ -1,16 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://ch84o31eohli0"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/polygon_2d/1000_polygon_2d.gd" id="1_4vuxe"]
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1_evy4a"]
|
||||
|
||||
[node name="Node2D" type="Node2D"]
|
||||
script = ExtResource("1_4vuxe")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 34.0
|
||||
script = ExtResource("1_evy4a")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
@@ -1,7 +0,0 @@
|
||||
extends "res://benchmarks/rendering/polygon_2d/polygon_2d_base.gd"
|
||||
|
||||
const NUMBER_OF_POLYGONS := 100
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_polygons(NUMBER_OF_POLYGONS)
|
||||
@@ -1,16 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://baaw7jdfbtm21"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/polygon_2d/100_polygon_2d.gd" id="1_26bs8"]
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1_64c3n"]
|
||||
|
||||
[node name="Node2D" type="Node2D"]
|
||||
script = ExtResource("1_26bs8")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 34.0
|
||||
script = ExtResource("1_64c3n")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
@@ -1,7 +0,0 @@
|
||||
extends "res://benchmarks/rendering/polygon_2d/polygon_2d_base.gd"
|
||||
|
||||
const NUMBER_OF_POLYGONS := 10
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_polygons(NUMBER_OF_POLYGONS)
|
||||
@@ -1,16 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://3tlrhlepn5um"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1_51qmg"]
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/polygon_2d/10_polygon_2d.gd" id="1_kcy1r"]
|
||||
|
||||
[node name="Node2D" type="Node2D"]
|
||||
script = ExtResource("1_kcy1r")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 34.0
|
||||
script = ExtResource("1_51qmg")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
@@ -1,3 +0,0 @@
|
||||
[gd_scene format=3 uid="uid://bgrrel3janaoj"]
|
||||
|
||||
[node name="Polygon2D" type="Polygon2D"]
|
||||
@@ -1,28 +0,0 @@
|
||||
extends Node2D
|
||||
|
||||
var Polygon := preload("res://benchmarks/rendering/polygon_2d/_polygon_2d.tscn") as PackedScene
|
||||
var polygons := []
|
||||
var polygon_xforms := []
|
||||
|
||||
func fill_with_polygons(polygon_amount: int) -> void:
|
||||
var cam := $Camera2D as Camera2D
|
||||
var ss := get_tree().root.size
|
||||
var center := cam.get_screen_center_position()
|
||||
for polygon in polygon_amount:
|
||||
var xf := Transform2D()
|
||||
xf.origin = Vector2(center.x + randf() * ss.x, center.y + randf() * ss.y)
|
||||
var new_polygon = Polygon.instantiate() as Polygon2D
|
||||
var vertices := PackedVector2Array()
|
||||
var p_scale = randf_range(30,50)
|
||||
for i in 32:
|
||||
vertices.append(Vector2(p_scale*cos(i * PI / 16),p_scale*sin(i * PI / 16)))
|
||||
new_polygon.polygon = vertices
|
||||
call_deferred("add_child", new_polygon)
|
||||
new_polygon.set_global_transform(xf)
|
||||
|
||||
polygons.append(new_polygon)
|
||||
polygon_xforms.append(xf)
|
||||
|
||||
func _exit_tree() -> void:
|
||||
for polygon in polygons:
|
||||
polygon.queue_free()
|
||||
@@ -1,7 +0,0 @@
|
||||
extends "res://benchmarks/rendering/sprite_2d/sprite_2d_base.gd"
|
||||
|
||||
const NUMBER_OF_SPRITES = 5_000
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_sprites(NUMBER_OF_SPRITES)
|
||||
@@ -1,16 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cygi7awmf5lba"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1_hf23d"]
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/sprite_2d/5000_sprite_2d.gd" id="1_prwy7"]
|
||||
|
||||
[node name="Node2D" type="Node2D"]
|
||||
script = ExtResource("1_prwy7")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 34.0
|
||||
script = ExtResource("1_hf23d")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
@@ -1,7 +0,0 @@
|
||||
extends "res://benchmarks/rendering/sprite_2d/sprite_2d_base.gd"
|
||||
|
||||
const NUMBER_OF_SPRITES = 500
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_sprites(NUMBER_OF_SPRITES)
|
||||
@@ -1,16 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://b3lmnvs17yqrq"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="1_h5bfr"]
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/sprite_2d/500_sprite_2d.gd" id="1_jqpyn"]
|
||||
|
||||
[node name="Node2D" type="Node2D"]
|
||||
script = ExtResource("1_jqpyn")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 34.0
|
||||
script = ExtResource("1_h5bfr")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
@@ -1,7 +0,0 @@
|
||||
extends "res://benchmarks/rendering/sprite_2d/sprite_2d_base.gd"
|
||||
|
||||
const NUMBER_OF_SPRITES = 50
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
fill_with_sprites(NUMBER_OF_SPRITES)
|
||||
@@ -1,16 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dlmdxgjc64h6r"]
|
||||
|
||||
[ext_resource type="Script" path="res://benchmarks/rendering/sprite_2d/50_sprite_2d.gd" id="1_rmwpg"]
|
||||
[ext_resource type="Script" path="res://benchmark.gd" id="2_itud2"]
|
||||
|
||||
[node name="Node2D" type="Node2D"]
|
||||
script = ExtResource("1_rmwpg")
|
||||
|
||||
[node name="Benchmark" type="Label" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 34.0
|
||||
script = ExtResource("2_itud2")
|
||||
test_render_cpu = true
|
||||
test_render_gpu = true
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
@@ -1,6 +0,0 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cqyl0oui300bb"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cg50cee5knm3h" path="res://icon.png" id="1_8dwnt"]
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D"]
|
||||
texture = ExtResource("1_8dwnt")
|
||||
@@ -1,24 +0,0 @@
|
||||
extends Node2D
|
||||
|
||||
var Sprite := preload("res://benchmarks/rendering/sprite_2d/_sprite.tscn") as PackedScene
|
||||
var sprites := []
|
||||
var sprite_xforms := []
|
||||
|
||||
func fill_with_sprites(sprite_amount: int) -> void:
|
||||
var cam := $Camera2D as Camera2D
|
||||
var ss := get_tree().root.size
|
||||
var center := cam.get_screen_center_position()
|
||||
for i in sprite_amount:
|
||||
var xf := Transform2D()
|
||||
xf.origin = Vector2(center.x + randf() * ss.x, center.y + randf() * ss.y)
|
||||
var new_sprite = Sprite.instantiate() as Sprite2D
|
||||
call_deferred("add_child", new_sprite)
|
||||
new_sprite.set_global_transform(xf)
|
||||
|
||||
sprites.append(new_sprite)
|
||||
sprite_xforms.append(xf)
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
for sprite in sprites:
|
||||
sprite.queue_free()
|
||||
Reference in New Issue
Block a user