Indented plane mesh procgen
This commit is contained in:
parent
2e8c1a5562
commit
1a908d4eff
@ -1,19 +1,24 @@
|
|||||||
[gd_scene load_steps=7 format=4 uid="uid://c0ieh1abu1xne"]
|
[gd_scene load_steps=9 format=4 uid="uid://c0ieh1abu1xne"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://c8nq55glypfp8" path="res://addons/kenney_prototype_tools/textures/light/texture_07.png" id="1_dn1le"]
|
||||||
[ext_resource type="Script" uid="uid://d2bvvjsibau8c" path="res://addons/simple-portal-system/scripts/portal.gd" id="1_ksg6r"]
|
[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"]
|
[ext_resource type="PackedScene" uid="uid://d1dtxvwk86ple" path="res://procedural_mesh_maker.tscn" id="2_4vena"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dn1le"]
|
||||||
|
albedo_texture = ExtResource("1_dn1le")
|
||||||
|
|
||||||
[sub_resource type="ArrayMesh" id="ArrayMesh_4vena"]
|
[sub_resource type="ArrayMesh" id="ArrayMesh_4vena"]
|
||||||
_surfaces = [{
|
_surfaces = [{
|
||||||
"aabb": AABB(-0.75, 0, 0, 1.5, 2.25, 1e-05),
|
"aabb": AABB(-1, -1.3, -0.1, 2, 2.6, 0.1),
|
||||||
"attribute_data": PackedByteArray("AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAgD8="),
|
"attribute_data": PackedByteArray("AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAgD/NzMw9zczMPWZmZj/NzMw9zczMPWZmZj9mZmY/ZmZmPw=="),
|
||||||
"format": 34359742487,
|
"format": 34359742487,
|
||||||
"index_count": 6,
|
"index_count": 30,
|
||||||
"index_data": PackedByteArray("AAABAAIAAQADAAIA"),
|
"index_data": PackedByteArray("AAABAAQABAABAAUAAQADAAUABQADAAcAAwACAAcABwACAAYAAgAAAAYABgAAAAQABAAFAAYABgAFAAcA"),
|
||||||
|
"material": SubResource("StandardMaterial3D_dn1le"),
|
||||||
"primitive": 3,
|
"primitive": 3,
|
||||||
"uv_scale": Vector4(0, 0, 0, 0),
|
"uv_scale": Vector4(0, 0, 0, 0),
|
||||||
"vertex_count": 4,
|
"vertex_count": 8,
|
||||||
"vertex_data": PackedByteArray("AABAvwAAEEAAAAAAAABAPwAAEEAAAAAAAABAvwAAAAAAAAAAAABAPwAAAAAAAAAA/3//f/9/AID/f/9//38AgP9//3//fwCA/3//f/9/AIA=")
|
"vertex_data": PackedByteArray("AACAv2Zmpj8AAAAAAACAP2Zmpj8AAAAAAACAv2Zmpr8AAAAAAACAP2Zmpr8AAAAAZmZmv5mZmT/NzMy9ZmZmP5mZmT/NzMy9ZmZmv5mZmb/NzMy9ZmZmP5mZmb/NzMy9/3//f/9/AID/f/9//38AgP9//3//fwCA/3//f/9/AID/f/9//38AgP9//3//fwCA/3//f/9/AID/f/9//38AgA==")
|
||||||
}]
|
}]
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_82kw5"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_82kw5"]
|
||||||
@ -57,9 +62,8 @@ mesh = SubResource("ArrayMesh_4vena")
|
|||||||
script = ExtResource("1_ksg6r")
|
script = ExtResource("1_ksg6r")
|
||||||
|
|
||||||
[node name="ProceduralMeshMaker" parent="." node_paths=PackedStringArray("portal") instance=ExtResource("2_4vena")]
|
[node name="ProceduralMeshMaker" parent="." node_paths=PackedStringArray("portal") instance=ExtResource("2_4vena")]
|
||||||
height = 2.25
|
height = 2.6
|
||||||
width = 1.5
|
width = 2.0
|
||||||
indent = null
|
|
||||||
portal = NodePath("../MeshInstance3D")
|
portal = NodePath("../MeshInstance3D")
|
||||||
|
|
||||||
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
|
@ -4,7 +4,8 @@ extends Node
|
|||||||
@export_range(0.1, 10, 0.01) var height: float = 2.0
|
@export_range(0.1, 10, 0.01) var height: float = 2.0
|
||||||
@export_range(0.1, 10, 0.01) var width: float = 1.0
|
@export_range(0.1, 10, 0.01) var width: float = 1.0
|
||||||
## Player camera's NEAR clip distance
|
## Player camera's NEAR clip distance
|
||||||
@export_range(0, 0.1, 0.001) var indent: float = 0.1
|
@export_range(0, 0.2, 0.001) var indent: float = 0.1
|
||||||
|
|
||||||
@export var portal: Portal
|
@export var portal: Portal
|
||||||
|
|
||||||
func _add_inspector_buttons() -> Array:
|
func _add_inspector_buttons() -> Array:
|
||||||
@ -49,18 +50,62 @@ func generate_portal_mesh() -> void:
|
|||||||
var normals = PackedVector3Array()
|
var normals = PackedVector3Array()
|
||||||
var indices = PackedInt32Array()
|
var indices = PackedInt32Array()
|
||||||
|
|
||||||
var TOP_LEFT = Vector3(-width / 2, height, 0)
|
# Just to save some chars
|
||||||
var TOP_RIGHT = Vector3(width / 2, height, 0)
|
var w = width / 2
|
||||||
var BOTTOM_LEFT = Vector3(-width / 2, 0, 0)
|
var h = height / 2
|
||||||
var BOTTOM_RIGHT = Vector3(width / 2, 0, 0)
|
var i = indent
|
||||||
|
|
||||||
verts.append_array([TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT])
|
# Outside rect
|
||||||
uvs.append_array([Vector2(0, 0), Vector2(1, 0), Vector2(0, 1), Vector2(1, 1)])
|
var TOP_LEFT = Vector3(-w, h, 0)
|
||||||
normals.append_array([Vector3.BACK, Vector3.BACK, Vector3.BACK, Vector3.BACK])
|
var TOP_RIGHT = Vector3(w, h, 0)
|
||||||
|
var BOTTOM_LEFT = Vector3(-w, -h, 0)
|
||||||
|
var BOTTOM_RIGHT = Vector3(w, -h, 0)
|
||||||
|
# Inside rect, indented
|
||||||
|
var INDENT_TL = TOP_LEFT + Vector3(indent, -indent, -indent)
|
||||||
|
var INDENT_TR = TOP_RIGHT + Vector3(-indent, -indent, -indent)
|
||||||
|
var INDENT_BL = BOTTOM_LEFT + Vector3(indent, indent, -indent)
|
||||||
|
var INDENT_BR = BOTTOM_RIGHT + Vector3(-indent, indent, -indent)
|
||||||
|
|
||||||
indices.append_array([0, 1, 2]) # top-left triangle
|
verts.append_array([
|
||||||
indices.append_array([1, 3, 2]) # bottom-right triangle
|
TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT,
|
||||||
|
INDENT_TL, INDENT_TR, INDENT_BL, INDENT_BR
|
||||||
|
])
|
||||||
|
|
||||||
|
uvs.append_array([
|
||||||
|
Vector2(0, 0), Vector2(1, 0), Vector2(0, 1), Vector2(1, 1), # Outside UVs
|
||||||
|
Vector2(i, i), Vector2(1-i, i), Vector2(i, 1-i), Vector2(1-i, 1-i) # Indented UVs
|
||||||
|
])
|
||||||
|
|
||||||
|
# We are going for a flat-surface look here. Portals should be unshaded anyways.
|
||||||
|
normals.append_array([
|
||||||
|
Vector3.BACK, Vector3.BACK, Vector3.BACK, Vector3.BACK,
|
||||||
|
Vector3.BACK, Vector3.BACK, Vector3.BACK, Vector3.BACK
|
||||||
|
])
|
||||||
|
|
||||||
|
# 0 ----------- 1
|
||||||
|
# | \ / |
|
||||||
|
# | 4-------5 |
|
||||||
|
# | | | |
|
||||||
|
# | | | |
|
||||||
|
# | 6-------7 |
|
||||||
|
# | / \ |
|
||||||
|
# 2 ----------- 3
|
||||||
|
|
||||||
|
# Triangles are clockwise!
|
||||||
|
|
||||||
|
indices.append_array([
|
||||||
|
0, 1, 4,
|
||||||
|
4, 1, 5, # Top section done
|
||||||
|
1, 3, 5,
|
||||||
|
5, 3, 7, # right section done
|
||||||
|
3, 2, 7,
|
||||||
|
7, 2, 6, # bottom section done
|
||||||
|
2, 0, 6,
|
||||||
|
6, 0, 4, # left section done
|
||||||
|
|
||||||
|
4, 5, 6,
|
||||||
|
6, 5, 7 # middle done
|
||||||
|
])
|
||||||
|
|
||||||
surface_array[Mesh.ARRAY_VERTEX] = verts
|
surface_array[Mesh.ARRAY_VERTEX] = verts
|
||||||
surface_array[Mesh.ARRAY_TEX_UV] = uvs
|
surface_array[Mesh.ARRAY_TEX_UV] = uvs
|
||||||
|
Loading…
Reference in New Issue
Block a user