Indexing into mesh arrays more efficiently
This commit is contained in:
parent
2c01143579
commit
2e8c1a5562
@ -1,12 +1,74 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://c0ieh1abu1xne"]
|
||||
[gd_scene load_steps=7 format=4 uid="uid://c0ieh1abu1xne"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d2bvvjsibau8c" path="res://addons/simple-portal-system/scripts/portal.gd" id="1_ksg6r"]
|
||||
[ext_resource type="PackedScene" uid="uid://d1dtxvwk86ple" path="res://procedural_mesh_maker.tscn" id="2_4vena"]
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_4vena"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.75, 0, 0, 1.5, 2.25, 1e-05),
|
||||
"attribute_data": PackedByteArray("AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAgD8="),
|
||||
"format": 34359742487,
|
||||
"index_count": 6,
|
||||
"index_data": PackedByteArray("AAABAAIAAQADAAIA"),
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 4,
|
||||
"vertex_data": PackedByteArray("AABAvwAAEEAAAAAAAABAPwAAEEAAAAAAAABAvwAAAAAAAAAAAABAPwAAAAAAAAAA/3//f/9/AID/f/9//38AgP9//3//fwCA/3//f/9/AIA=")
|
||||
}]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_82kw5"]
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_dn1le"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-1.02429, -1.3, -0.2, 2.04857, 2.60001, 0.20001),
|
||||
"format": 34896613377,
|
||||
"index_count": 30,
|
||||
"index_data": PackedByteArray("BwAFAAQABwAEAAYAAQAHAAMAAQAFAAcAAgAEAAAAAgAGAAQAAwAGAAIAAwAHAAYAAAAFAAEAAAAEAAUA"),
|
||||
"lods": [0.156674, PackedByteArray("AwAFAAAAAQAFAAMAAwAAAAIAAAAFAAEA")],
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 8,
|
||||
"vertex_data": PackedByteArray("AAD+//v/AAAAAAAA+/8AAP///v/7/wAA/v8AAPv/AACZGWXmAAAAAJkZmRkAAAAAZeZl5gAAAABl5pkZAAAAAA==")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_u54xs"]
|
||||
resource_name = "room_Plane_001"
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-1.02429, -1.3, -0.2, 2.04857, 2.60001, 0.20001),
|
||||
"attribute_data": PackedByteArray("AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//"),
|
||||
"format": 34896613399,
|
||||
"index_count": 30,
|
||||
"index_data": PackedByteArray("EQALAAgAEQAIAA4AAgASAAYAAgAMABIABAAJAAAABAAPAAkABwAQAAUABwATABAAAQANAAMAAQAKAA0A"),
|
||||
"lods": [0.156674, PackedByteArray("BgAWAAAAAgAWAAYABgAAAAQAFAAXABUA")],
|
||||
"material": SubResource("StandardMaterial3D_82kw5"),
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 24,
|
||||
"vertex_data": PackedByteArray("AAD+//v/SGUAAP7/+/8AagAAAAD7/0hlAAAAAPv/AGr///7/+/9IZf///v/7/wBq/v8AAPv/SGX+/wAA+/8AapkZZeYAAP5/mRll5gAASGWZGWXmAAAAapkZmRkAAP5/mRmZGQAASGWZGZkZAAAAamXmZeYAAP5/ZeZl5gAASGVl5mXmAAAAamXmmRkAAP5/ZeaZGQAASGVl5pkZAAAAagAA/v/7/wBqAAAAAPv/AGqZGZkZAAD1b5kZmRkAAABqAAD/f/9/AAD///9//38AAAAA/3//f///////f/9/////f///AAD/f/9/AAD/f///////f/9/AAD/f///AAD/f/9/////f///////f/9/////fwAA/38AAP///3//fwAA")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_dn1le")
|
||||
|
||||
[node name="ProceduralPortal" type="Node3D"]
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("ArrayMesh_4vena")
|
||||
script = ExtResource("1_ksg6r")
|
||||
|
||||
[node name="ProceduralMeshMaker" parent="." node_paths=PackedStringArray("portal") instance=ExtResource("2_4vena")]
|
||||
height = 2.25
|
||||
width = 1.5
|
||||
indent = null
|
||||
portal = NodePath("../MeshInstance3D")
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.52963, 0, 1.51112)
|
||||
light_color = Color(5.0056e-06, 0.824088, 0.326623, 1)
|
||||
light_energy = 2.0
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OfficialPortal" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 0, 0)
|
||||
mesh = SubResource("ArrayMesh_u54xs")
|
||||
metadata/_edit_lock_ = true
|
||||
|
@ -3,6 +3,8 @@ extends Node
|
||||
|
||||
@export_range(0.1, 10, 0.01) var height: float = 2.0
|
||||
@export_range(0.1, 10, 0.01) var width: float = 1.0
|
||||
## Player camera's NEAR clip distance
|
||||
@export_range(0, 0.1, 0.001) var indent: float = 0.1
|
||||
@export var portal: Portal
|
||||
|
||||
func _add_inspector_buttons() -> Array:
|
||||
@ -12,6 +14,10 @@ func _add_inspector_buttons() -> Array:
|
||||
"name": "Generate Portal Mesh",
|
||||
"pressed": generate_portal_mesh
|
||||
})
|
||||
buttons.push_back({
|
||||
"name": "Remove Mesh",
|
||||
"pressed": func(): portal.mesh = null
|
||||
})
|
||||
|
||||
return buttons
|
||||
|
||||
@ -43,28 +49,18 @@ func generate_portal_mesh() -> void:
|
||||
var normals = PackedVector3Array()
|
||||
var indices = PackedInt32Array()
|
||||
|
||||
# Bottom left triangle of a rect
|
||||
verts.append(Vector3(-width/2, 0, 0))
|
||||
verts.append(Vector3(width/2, 0, 0))
|
||||
verts.append(Vector3(width/2, height, 0))
|
||||
var TOP_LEFT = Vector3(-width / 2, height, 0)
|
||||
var TOP_RIGHT = Vector3(width / 2, height, 0)
|
||||
var BOTTOM_LEFT = Vector3(-width / 2, 0, 0)
|
||||
var BOTTOM_RIGHT = Vector3(width / 2, 0, 0)
|
||||
|
||||
uvs.append(Vector2(0, 1))
|
||||
uvs.append(Vector2(1, 1))
|
||||
uvs.append(Vector2(0, 0))
|
||||
verts.append_array([TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT])
|
||||
uvs.append_array([Vector2(0, 0), Vector2(1, 0), Vector2(0, 1), Vector2(1, 1)])
|
||||
normals.append_array([Vector3.BACK, Vector3.BACK, Vector3.BACK, Vector3.BACK])
|
||||
|
||||
normals.append_array([Vector3.FORWARD, Vector3.FORWARD, Vector3.FORWARD])
|
||||
indices.append_array([0, 1, 2])
|
||||
indices.append_array([0, 1, 2]) # top-left triangle
|
||||
indices.append_array([1, 3, 2]) # bottom-right triangle
|
||||
|
||||
# Top right triangle of a rect
|
||||
verts.append(Vector3(-width/2, 0, 0))
|
||||
verts.append(Vector3(width/2, height, 0))
|
||||
verts.append(Vector3(-width/2, height, 0))
|
||||
|
||||
uvs.append(Vector2(0, 1))
|
||||
uvs.append(Vector2(1, 0))
|
||||
uvs.append(Vector2(0, 0))
|
||||
normals.append_array([Vector3.FORWARD, Vector3.FORWARD, Vector3.FORWARD])
|
||||
indices.append_array([3, 4, 5])
|
||||
|
||||
surface_array[Mesh.ARRAY_VERTEX] = verts
|
||||
surface_array[Mesh.ARRAY_TEX_UV] = uvs
|
||||
|
Loading…
Reference in New Issue
Block a user