feat: author resource-aware riverbank grove
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
class_name StylizedBerryPatch
|
||||
extends Node3D
|
||||
|
||||
const WIND_SHADER := preload("res://world/jajce/materials/wind.gdshader")
|
||||
const LEAF_POSITIONS := [
|
||||
Vector3(-0.52, 0.42, 0.08),
|
||||
Vector3(0.08, 0.48, -0.14),
|
||||
Vector3(0.58, 0.4, 0.18),
|
||||
Vector3(-0.18, 0.7, 0.18),
|
||||
Vector3(0.38, 0.67, -0.22),
|
||||
]
|
||||
const LEAF_SCALES := [
|
||||
Vector3(0.72, 0.38, 0.62),
|
||||
Vector3(0.78, 0.44, 0.68),
|
||||
Vector3(0.66, 0.36, 0.58),
|
||||
Vector3(0.56, 0.32, 0.52),
|
||||
Vector3(0.5, 0.28, 0.46),
|
||||
]
|
||||
const BERRY_POSITIONS := [
|
||||
Vector3(-0.7, 0.64, 0.2),
|
||||
Vector3(-0.43, 0.82, -0.34),
|
||||
Vector3(-0.14, 0.7, 0.46),
|
||||
Vector3(0.08, 0.88, -0.08),
|
||||
Vector3(0.34, 0.7, 0.42),
|
||||
Vector3(0.48, 0.86, -0.3),
|
||||
Vector3(0.74, 0.6, 0.12),
|
||||
Vector3(-0.02, 1.02, 0.22),
|
||||
]
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_build_leaves()
|
||||
_build_berries()
|
||||
|
||||
|
||||
func get_presentation_instance_count() -> int:
|
||||
return LEAF_POSITIONS.size() + BERRY_POSITIONS.size()
|
||||
|
||||
|
||||
func _build_leaves() -> void:
|
||||
var mesh := SphereMesh.new()
|
||||
mesh.radius = 1.0
|
||||
mesh.height = 2.0
|
||||
mesh.radial_segments = 9
|
||||
mesh.rings = 5
|
||||
var material := ShaderMaterial.new()
|
||||
material.shader = WIND_SHADER
|
||||
material.set_shader_parameter("albedo", Color("#426c32"))
|
||||
material.set_shader_parameter("roughness", 0.92)
|
||||
material.set_shader_parameter("wind_strength", 0.045)
|
||||
material.set_shader_parameter("wind_speed", 0.48)
|
||||
material.set_shader_parameter("wind_phase", 1.7)
|
||||
mesh.material = material
|
||||
var transforms: Array[Transform3D] = []
|
||||
for index in LEAF_POSITIONS.size():
|
||||
transforms.append(
|
||||
Transform3D(Basis.IDENTITY.scaled(LEAF_SCALES[index]), LEAF_POSITIONS[index])
|
||||
)
|
||||
$Leaves.multimesh = _create_multimesh(mesh, transforms)
|
||||
|
||||
|
||||
func _build_berries() -> void:
|
||||
var mesh := SphereMesh.new()
|
||||
mesh.radius = 0.12
|
||||
mesh.height = 0.21
|
||||
mesh.radial_segments = 8
|
||||
mesh.rings = 4
|
||||
var material := StandardMaterial3D.new()
|
||||
material.albedo_color = Color("#8f3148")
|
||||
material.roughness = 0.78
|
||||
mesh.material = material
|
||||
var transforms: Array[Transform3D] = []
|
||||
for position in BERRY_POSITIONS:
|
||||
transforms.append(Transform3D(Basis.IDENTITY, position))
|
||||
$Berries.multimesh = _create_multimesh(mesh, transforms)
|
||||
|
||||
|
||||
func _create_multimesh(mesh: Mesh, transforms: Array) -> MultiMesh:
|
||||
var multimesh := MultiMesh.new()
|
||||
multimesh.transform_format = MultiMesh.TRANSFORM_3D
|
||||
multimesh.mesh = mesh
|
||||
multimesh.instance_count = transforms.size()
|
||||
for index in transforms.size():
|
||||
multimesh.set_instance_transform(index, transforms[index])
|
||||
return multimesh
|
||||
Reference in New Issue
Block a user