Add Sprite3D and AnimatedSprite3D demo (#1191)
3
.gitignore
vendored
@@ -24,3 +24,6 @@ mono_crash.*.json
|
||||
|
||||
# Jetbrains IDE files
|
||||
.idea/
|
||||
|
||||
# Ignore addon plugins
|
||||
3d/sprite3d/addons
|
||||
|
||||
670
3d/sprites/3d_sprites.tscn
Normal file
@@ -0,0 +1,670 @@
|
||||
[gd_scene load_steps=27 format=3 uid="uid://b15ro0v2x7n5t"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://v0e1avxpe8n7" path="res://scripts/3d_sprites.gd" id="1_omy0v"]
|
||||
[ext_resource type="Texture2D" uid="uid://chjqieyps5n5r" path="res://textures/checker.png" id="2_013ql"]
|
||||
[ext_resource type="Texture2D" uid="uid://cj6jj2qp2y3j0" path="res://textures/icon.svg" id="3_lk0vd"]
|
||||
[ext_resource type="Script" uid="uid://bmij60kwbx48u" path="res://scripts/sprite_rotate.gd" id="4_osfvf"]
|
||||
[ext_resource type="Shader" uid="uid://dfk1vupanuypi" path="res://shaders/negative.gdshader" id="5_013ql"]
|
||||
[ext_resource type="Texture2D" uid="uid://chpmjfw7bwnpu" path="res://player/player_white.png" id="6_unyd2"]
|
||||
[ext_resource type="PackedScene" uid="uid://b2inrhxoc37g7" path="res://player/player.tscn" id="7_unyd2"]
|
||||
[ext_resource type="Shader" uid="uid://b5ee04rjhppn4" path="res://shaders/paper.gdshader" id="8_ht5yh"]
|
||||
[ext_resource type="Shader" uid="uid://bbv8bmi15e7i0" path="res://shaders/paper_rainbow.gdshader" id="8_unyd2"]
|
||||
[ext_resource type="Texture2D" uid="uid://cptljgccd1ike" path="res://player/player.png" id="9_wqw3d"]
|
||||
[ext_resource type="Shader" uid="uid://2o41hrodgn04" path="res://shaders/paper_material.gdshader" id="10_omy0v"]
|
||||
[ext_resource type="Shader" uid="uid://beecufb7fv40i" path="res://shaders/paper_emission.gdshader" id="11_8ak7l"]
|
||||
[ext_resource type="Texture2D" uid="uid://cbb4xesensj5l" path="res://textures/paper_material.png" id="11_013ql"]
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="9"]
|
||||
|
||||
[sub_resource type="Sky" id="10"]
|
||||
sky_material = SubResource("9")
|
||||
|
||||
[sub_resource type="Environment" id="11"]
|
||||
background_mode = 2
|
||||
sky = SubResource("10")
|
||||
tonemap_mode = 4
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="13"]
|
||||
diffuse_mode = 1
|
||||
albedo_texture = ExtResource("2_013ql")
|
||||
uv1_scale = Vector3(32, 32, 1)
|
||||
texture_filter = 5
|
||||
|
||||
[sub_resource type="PlaneMesh" id="14"]
|
||||
material = SubResource("13")
|
||||
size = Vector2(128, 128)
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_ddk2o"]
|
||||
script/source = "extends Node3D
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lk0vd"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("5_013ql")
|
||||
shader_parameter/texture_albedo = ExtResource("3_lk0vd")
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_juuw1"]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_wsjfy"]
|
||||
radial_segments = 32
|
||||
rings = 64
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_omy0v"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("8_ht5yh")
|
||||
shader_parameter/texture_albedo = ExtResource("9_wqw3d")
|
||||
shader_parameter/outline_thickness = 0.1
|
||||
shader_parameter/outline_color = Color(1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_osfvf"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("10_omy0v")
|
||||
shader_parameter/texture_albedo = ExtResource("9_wqw3d")
|
||||
shader_parameter/normal_map = ExtResource("11_013ql")
|
||||
shader_parameter/outline_thickness = 0.1
|
||||
shader_parameter/outline_color = Color(1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_unyd2"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("11_8ak7l")
|
||||
shader_parameter/texture_albedo = ExtResource("9_wqw3d")
|
||||
shader_parameter/normal_map = ExtResource("11_013ql")
|
||||
shader_parameter/outline_thickness = 0.05
|
||||
shader_parameter/outline_color = Color(0.301961, 1, 1, 1)
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_013ql"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("8_unyd2")
|
||||
shader_parameter/texture_albedo = ExtResource("9_wqw3d")
|
||||
shader_parameter/normal_map = ExtResource("11_013ql")
|
||||
shader_parameter/outline_thickness = 0.043
|
||||
shader_parameter/outline_color = Color(1, 1, 1, 1)
|
||||
|
||||
[node name="Sprite_3D" type="WorldEnvironment"]
|
||||
environment = SubResource("11")
|
||||
script = ExtResource("1_omy0v")
|
||||
|
||||
[node name="Plane" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00027895, -0.00270161, -22)
|
||||
layers = 2
|
||||
mesh = SubResource("14")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(0.677773, -0.484673, 0.552915, -0.0842485, 0.695844, 0.713235, -0.730428, -0.529994, 0.430791, 4.57578, 4.43873, 3.54442)
|
||||
light_energy = 1.941
|
||||
shadow_enabled = true
|
||||
shadow_bias = 0.04
|
||||
shadow_blur = 1.5
|
||||
directional_shadow_mode = 0
|
||||
directional_shadow_fade_start = 1.0
|
||||
directional_shadow_max_distance = 24.0
|
||||
|
||||
[node name="CameraHolder" type="Node3D" parent="."]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.6, 0.9, 0)
|
||||
|
||||
[node name="RotationX" type="Node3D" parent="CameraHolder"]
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="CameraHolder/RotationX"]
|
||||
fov = 70.0
|
||||
|
||||
[node name="Testers" type="Node3D" parent="."]
|
||||
|
||||
[node name="Basic" type="Node3D" parent="Testers"]
|
||||
transform = Transform3D(1.00002, 0, 0, 0, 1.00002, 0, 0, 0, 1.00002, 0, 0, 4.31099)
|
||||
script = SubResource("GDScript_ddk2o")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="Testers/Basic"]
|
||||
transform = Transform3D(-4.37263e-08, 0, 1.00034, 0, 1.00034, 0, -1.00034, 0, -4.37263e-08, 0, 0.746, 0)
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="UnshadedTwoSided" type="Node3D" parent="Testers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.155091)
|
||||
|
||||
[node name="Back" type="Sprite3D" parent="Testers/UnshadedTwoSided"]
|
||||
transform = Transform3D(1.1933e-08, 0, -1.00068, 0, 1.00068, 0, 1.00068, 0, 1.1933e-08, 0, 0.746, 0)
|
||||
material_override = SubResource("ShaderMaterial_lk0vd")
|
||||
double_sided = false
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="Front" type="Sprite3D" parent="Testers/UnshadedTwoSided"]
|
||||
transform = Transform3D(-4.37263e-08, 0, 1.00034, 0, 1.00034, 0, -1.00034, 0, -4.37263e-08, -0.0109167, 0.746, 0)
|
||||
double_sided = false
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="Alpha" type="Node3D" parent="Testers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -5.43396)
|
||||
|
||||
[node name="LabelOpaquePrepass" type="Label3D" parent="Testers/Alpha"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0.004, 3.66124, -0.782)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
modulate = Color(1, 0.631373, 0.588235, 1)
|
||||
text = "Opaque Pre-pass:
|
||||
Cast and receive shadows
|
||||
"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
horizontal_alignment = 0
|
||||
|
||||
[node name="OpaquePrepass" type="Sprite3D" parent="Testers/Alpha"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 3.60818, 0.234)
|
||||
transparency = 0.32
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="LabelDiscard" type="Label3D" parent="Testers/Alpha"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0.004, 2.2416, -0.782)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
modulate = Color(1, 0.988235, 0.470588, 1)
|
||||
text = "Alpha Cut (discard):
|
||||
Cast and receive shadows,
|
||||
no partial transparency
|
||||
"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
horizontal_alignment = 0
|
||||
|
||||
[node name="Disscard" type="Sprite3D" parent="Testers/Alpha"]
|
||||
transform = Transform3D(-4.37068e-08, 0, 0.999894, 0, 0.999894, 0, -0.999894, 0, -4.37068e-08, 0, 2.17861, 0.234)
|
||||
transparency = 0.32
|
||||
shaded = true
|
||||
alpha_cut = 1
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="LabelAlphaBlend" type="Label3D" parent="Testers/Alpha"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0.004, 0.75187, -0.782)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
text = "Alpha (blend):
|
||||
Only receive shadows
|
||||
"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
horizontal_alignment = 0
|
||||
|
||||
[node name="AlphaBlend" type="Sprite3D" parent="Testers/Alpha"]
|
||||
transform = Transform3D(-4.37068e-08, 0, 0.999894, 0, 0.999894, 0, -0.999894, 0, -4.37068e-08, 0, 0.75163, 0.234)
|
||||
shaded = true
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/Alpha"]
|
||||
transform = Transform3D(1, 0, 0, 0, 2.78523, 0, 0, 0, 1.24119, 1, 3.52522, 2.0058)
|
||||
transparency = 0.58
|
||||
mesh = SubResource("BoxMesh_juuw1")
|
||||
|
||||
[node name="TextureFilter" type="Node3D" parent="Testers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -13.7283)
|
||||
|
||||
[node name="nearest" type="Label3D" parent="Testers/TextureFilter"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0.004, 3.50693, 1.67099)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
text = "Nearest
|
||||
"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
horizontal_alignment = 0
|
||||
|
||||
[node name="Sprite3D_nearest" type="Sprite3D" parent="Testers/TextureFilter"]
|
||||
transform = Transform3D(-3.03794e-07, 0, 6.95, 0, 6.95, 0, -6.95, 0, -3.03794e-07, 0, 2.64618, 1.07946)
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("6_unyd2")
|
||||
|
||||
[node name="nearestMipmap" type="Label3D" parent="Testers/TextureFilter"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0.004, 1.34682, 2.09971)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
text = "Nearest Mipmap
|
||||
|
||||
"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
horizontal_alignment = 0
|
||||
|
||||
[node name="Sprite3D_nearestMipmap" type="Sprite3D" parent="Testers/TextureFilter"]
|
||||
transform = Transform3D(-3.03794e-07, 0, 6.95, 0, 6.95, 0, -6.95, 0, -3.03794e-07, 2.13163e-14, 0.582538, 1.07946)
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 2
|
||||
texture = ExtResource("6_unyd2")
|
||||
|
||||
[node name="linear" type="Label3D" parent="Testers/TextureFilter"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0.004, 3.50068, -0.669133)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
text = "Linear
|
||||
"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
horizontal_alignment = 0
|
||||
|
||||
[node name="Sprite3D_linear" type="Sprite3D" parent="Testers/TextureFilter"]
|
||||
transform = Transform3D(-3.03794e-07, 0, 6.95, 0, 6.95, 0, -6.95, 0, -3.03794e-07, 0, 2.64618, -1.13312)
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 1
|
||||
texture = ExtResource("6_unyd2")
|
||||
|
||||
[node name="linearMipmap" type="Label3D" parent="Testers/TextureFilter"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0.004, 1.4937, -0.200834)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
text = "Linear Mipmap
|
||||
"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
horizontal_alignment = 0
|
||||
|
||||
[node name="Sprite3D_linearMipmap" type="Sprite3D" parent="Testers/TextureFilter"]
|
||||
transform = Transform3D(-3.03794e-07, 0, 6.95, 0, 6.95, 0, -6.95, 0, -3.03794e-07, 0, 0.582538, -1.13312)
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture = ExtResource("6_unyd2")
|
||||
|
||||
[node name="Billboard" type="Node3D" parent="Testers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -21.3081)
|
||||
|
||||
[node name="Disabled" type="Label3D" parent="Testers/Billboard"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 1.57302, 1.55512)
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
modulate = Color(0.996078, 1, 0.333333, 1)
|
||||
text = "Disabled"
|
||||
font_size = 50
|
||||
outline_size = 3
|
||||
|
||||
[node name="Sprite3D_Bill_Disable" type="Sprite3D" parent="Testers/Billboard"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0.6874, 1.55132)
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="Enabled" type="Label3D" parent="Testers/Billboard"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 1.54264, -1.58877)
|
||||
billboard = 1
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
modulate = Color(0.607843, 1, 0.505882, 1)
|
||||
text = "Enabled"
|
||||
font_size = 50
|
||||
outline_size = 3
|
||||
|
||||
[node name="Sprite3D_Bill_Enable" type="Sprite3D" parent="Testers/Billboard"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0.67836, -1.57819)
|
||||
billboard = 1
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="YBillboard" type="Label3D" parent="Testers/Billboard"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 1.58263, -0.00695992)
|
||||
billboard = 2
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
modulate = Color(1, 0.392157, 0.454902, 1)
|
||||
text = "Y-Billboard"
|
||||
font_size = 50
|
||||
outline_size = 3
|
||||
|
||||
[node name="Sprite3D_Bill_YBillboard" type="Sprite3D" parent="Testers/Billboard"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0.67303, -0.0113411)
|
||||
billboard = 2
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="DistanceFade" type="Node3D" parent="Testers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -28.9605)
|
||||
|
||||
[node name="NoDistanceFade" type="Label3D" parent="Testers/DistanceFade"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 1.70137, 1.54533)
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
modulate = Color(1, 0.741176, 0.831373, 1)
|
||||
text = "No
|
||||
Distance Fade"
|
||||
font_size = 50
|
||||
outline_size = 4
|
||||
|
||||
[node name="Sprite3D_N_Dis_Fade" type="Sprite3D" parent="Testers/DistanceFade"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0.6569, 1.5008)
|
||||
billboard = 1
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="DistanceFade" type="Label3D" parent="Testers/DistanceFade"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 1.69938, -1.53823)
|
||||
visibility_range_end = 5.0
|
||||
visibility_range_end_margin = 2.5
|
||||
visibility_range_fade_mode = 1
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
modulate = Color(0.32549, 1, 0.858824, 1)
|
||||
text = "With
|
||||
Distance Fade"
|
||||
font_size = 50
|
||||
outline_size = 4
|
||||
|
||||
[node name="Sprite3D_Dis_Fade" type="Sprite3D" parent="Testers/DistanceFade"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 3.55271e-15, 0.65325, -1.47058)
|
||||
visibility_range_end = 5.0
|
||||
visibility_range_end_margin = 2.5
|
||||
visibility_range_fade_mode = 1
|
||||
billboard = 1
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="DistanceFadeFixedSize" type="Label3D" parent="Testers/DistanceFade"]
|
||||
transform = Transform3D(-4.36914e-08, 0.0302419, 0.999543, 1.32192e-09, 0.999543, -0.0302419, -1, 0, -4.37114e-08, -0.000778437, 1.70739, -1.90735e-05)
|
||||
visibility_range_end = 5.0
|
||||
visibility_range_end_margin = 2.5
|
||||
visibility_range_fade_mode = 1
|
||||
pixel_size = 0.001
|
||||
billboard = 1
|
||||
fixed_size = true
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
modulate = Color(0.760784, 0.690196, 1, 1)
|
||||
text = "With
|
||||
Distance Fade
|
||||
(Billboard + Fixed Size)"
|
||||
font_size = 50
|
||||
outline_size = 4
|
||||
|
||||
[node name="Sprite3D_Fx_size_bill" type="Sprite3D" parent="Testers/DistanceFade"]
|
||||
transform = Transform3D(-8.74228e-09, 0, 0.2, 0, 0.2, 0, -0.2, 0, -8.74228e-09, 0, 0.64401, -0.0236607)
|
||||
visibility_range_end = 5.0
|
||||
visibility_range_end_margin = 2.5
|
||||
visibility_range_fade_mode = 1
|
||||
billboard = 1
|
||||
shaded = true
|
||||
fixed_size = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="DepthTest" type="Node3D" parent="Testers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -37.2639)
|
||||
|
||||
[node name="WithDepthTest" type="Label3D" parent="Testers/DepthTest"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -2.21939, 0.405061, 2.68913)
|
||||
texture_filter = 5
|
||||
modulate = Color(1, 0.607843, 0.290196, 1)
|
||||
text = "With Depth Test"
|
||||
font_size = 50
|
||||
outline_size = 4
|
||||
|
||||
[node name="Sprite3D_dep" type="Sprite3D" parent="Testers/DepthTest"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -2.218, 1.62187, 2.77824)
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="NoDepthTest" type="Label3D" parent="Testers/DepthTest"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -2.21939, 0.433499, 0.199995)
|
||||
no_depth_test = true
|
||||
texture_filter = 5
|
||||
modulate = Color(1, 0.607843, 0.290196, 1)
|
||||
text = "No Depth Test"
|
||||
font_size = 50
|
||||
outline_size = 4
|
||||
|
||||
[node name="Sprite3D_N_dep" type="Sprite3D" parent="Testers/DepthTest"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -2.218, 1.59785, 0.118614)
|
||||
shaded = true
|
||||
no_depth_test = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="DepthTestXray" type="Label3D" parent="Testers/DepthTest"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -2.21771, 0.371057, -2.91263)
|
||||
texture_filter = 5
|
||||
modulate = Color(1, 0.607843, 0.290196, 1)
|
||||
text = "No Depth Test
|
||||
(X-Ray with second Sprite3D)"
|
||||
font_size = 50
|
||||
outline_size = 4
|
||||
|
||||
[node name="NoDepthTestXray" type="Label3D" parent="Testers/DepthTest"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -2.21771, 0.371057, -2.91263)
|
||||
no_depth_test = true
|
||||
texture_filter = 5
|
||||
modulate = Color(1, 0.607843, 0.290196, 0.25098)
|
||||
outline_modulate = Color(0, 0, 0, 0.25098)
|
||||
text = "No Depth Test
|
||||
(X-Ray with second Sprite3D)"
|
||||
font_size = 50
|
||||
outline_size = 4
|
||||
|
||||
[node name="Sprite3D_XRay" type="Sprite3D" parent="Testers/DepthTest"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -2.218, 1.566, -2.70613)
|
||||
modulate = Color(1, 1, 1, 0.388235)
|
||||
shaded = true
|
||||
no_depth_test = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="Sprite3D_N_dep_XRay" type="Sprite3D" parent="Testers/DepthTest"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -2.218, 1.566, -2.70613)
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_lk0vd")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Testers/DepthTest"]
|
||||
transform = Transform3D(0.619559, 0, 0, 0, 5.36089, 0, 0, 0, 6.64597, 0.0491439, 0.288069, 0.000623703)
|
||||
mesh = SubResource("SphereMesh_wsjfy")
|
||||
|
||||
[node name="AnimatedSprite3D" type="Node3D" parent="Testers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -47.7324)
|
||||
|
||||
[node name="Enable" type="Label3D" parent="Testers/AnimatedSprite3D"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0, 1.5, 0)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
text = "Use WASD to move"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
|
||||
[node name="Player" parent="Testers/AnimatedSprite3D" instance=ExtResource("7_unyd2")]
|
||||
transform = Transform3D(-2.75382e-08, 0, 0.63, 0, 0.63, 0, -0.63, 0, -2.75382e-08, 0, 0.688345, 0)
|
||||
|
||||
[node name="ShaderEffects" type="Node3D" parent="Testers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -57.9529)
|
||||
|
||||
[node name="d1" type="Label3D" parent="Testers/ShaderEffects"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0.004, 1.4, 3.48974)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
text = "Outline"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
|
||||
[node name="Sprite3D_Paper" type="Sprite3D" parent="Testers/ShaderEffects"]
|
||||
transform = Transform3D(-5.74368e-07, 0, 13.14, 0, 13.14, 0, -13.14, 0, -5.74368e-07, 0, 0.491784, 3.44599)
|
||||
material_override = SubResource("ShaderMaterial_omy0v")
|
||||
pixel_size = 0.005
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("9_wqw3d")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="d2" type="Label3D" parent="Testers/ShaderEffects"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0.004, 1.4, 1.12742)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
text = "Paper Wrinkling
|
||||
"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
|
||||
[node name="Sprite3D_Paper_material" type="Sprite3D" parent="Testers/ShaderEffects"]
|
||||
transform = Transform3D(-5.74368e-07, 0, 13.14, 0, 13.14, 0, -13.14, 0, -5.74368e-07, 0, 0.491784, 1.10744)
|
||||
material_override = SubResource("ShaderMaterial_osfvf")
|
||||
pixel_size = 0.005
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("9_wqw3d")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="d3" type="Label3D" parent="Testers/ShaderEffects"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, -0.0808217, 1.4, -1.25668)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
text = "Emission Edge
|
||||
"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
|
||||
[node name="Sprite3D_Paper_emission" type="Sprite3D" parent="Testers/ShaderEffects"]
|
||||
transform = Transform3D(-5.74368e-07, 0, 13.14, 0, 13.14, 0, -13.14, 0, -5.74368e-07, 0, 0.491784, -1.3107)
|
||||
material_override = SubResource("ShaderMaterial_unyd2")
|
||||
pixel_size = 0.005
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("9_wqw3d")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="d4" type="Label3D" parent="Testers/ShaderEffects"]
|
||||
transform = Transform3D(-4.49386e-08, 0, 1.02807, 0, 1.02807, 0, -1.02807, 0, -4.49386e-08, 0.004, 1.5, -3.44756)
|
||||
cast_shadow = 1
|
||||
shaded = true
|
||||
texture_filter = 5
|
||||
render_priority = 1
|
||||
outline_render_priority = 0
|
||||
text = "Rainbow
|
||||
Animated Edge
|
||||
"
|
||||
font_size = 50
|
||||
outline_size = 5
|
||||
|
||||
[node name="Sprite3D_Paper_rainbow" type="Sprite3D" parent="Testers/ShaderEffects"]
|
||||
transform = Transform3D(-5.74368e-07, 0, 13.14, 0, 13.14, 0, -13.14, 0, -5.74368e-07, 0, 0.491784, -3.52359)
|
||||
material_override = SubResource("ShaderMaterial_013ql")
|
||||
pixel_size = 0.005
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("9_wqw3d")
|
||||
script = ExtResource("4_osfvf")
|
||||
|
||||
[node name="TestName" type="Label" parent="."]
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -192.0
|
||||
offset_top = -58.0
|
||||
offset_right = 192.0
|
||||
offset_bottom = -24.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 7
|
||||
theme_override_font_sizes/font_size = 24
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Previous" type="Button" parent="."]
|
||||
anchors_preset = 2
|
||||
anchor_top = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 24.0
|
||||
offset_top = -55.0
|
||||
offset_right = 135.0
|
||||
offset_bottom = -24.0
|
||||
grow_vertical = 0
|
||||
text = "« Previous"
|
||||
|
||||
[node name="Next" type="Button" parent="."]
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -107.0
|
||||
offset_top = -55.0
|
||||
offset_right = -24.0
|
||||
offset_bottom = -24.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
text = "Next »"
|
||||
|
||||
[connection signal="pressed" from="Previous" to="." method="_on_previous_pressed"]
|
||||
[connection signal="pressed" from="Next" to="." method="_on_next_pressed"]
|
||||
34
3d/sprites/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
># 3D Sprites and Animated Sprites
|
||||
|
||||
This project demonstrates the usage of Sprite3D and AnimatedSprite3D in 3D
|
||||
space.
|
||||
|
||||
Both Sprite3D and AnimatedSprite3D are nodes that allow 2D textures or
|
||||
animations to exist within a 3D world. They are particularly useful for stylized
|
||||
or lightweight 3D effects using traditional 2D assets.
|
||||
|
||||
- **Sprite3D:** A node that renders a single 2D texture or frame in 3D space. It
|
||||
can be rotated, scaled, and positioned like any 3D node. Optionally, it can
|
||||
behave as a billboard to always face the camera.
|
||||
- **AnimatedSprite3D:** Extends Sprite3D by supporting frame-based animation. You
|
||||
can assign a SpriteFrames resource to play sequences of textures, making it
|
||||
suitable for character sprites, visual effects, or flipbook-style animations in
|
||||
3D.
|
||||
|
||||
Both types can be combined with custom shaders to simulate outlines, lighting
|
||||
effects, or other visual enhancements. In most scenarios, Sprite3D is used for
|
||||
static images or simple animations, while AnimatedSprite3D is preferred for more
|
||||
complex animations or when you need to manage multiple frames efficiently.
|
||||
|
||||
This demo includes examples of basic rotation animation and showcases how
|
||||
shaders can be applied to Sprite3D and AnimatedSprite3D for stylized results.
|
||||
The shaders demostration also shows how to create paper-like effects, which can
|
||||
be useful for creating a unique visual style in most of the game.
|
||||
|
||||
Language: GDScript
|
||||
|
||||
Renderer: Forward+
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||
BIN
3d/sprites/icon.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
34
3d/sprites/icon.webp.import
Normal file
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://brwp8bimc75uu"
|
||||
path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://icon.webp"
|
||||
dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
3d/sprites/player/player.png
Normal file
|
After Width: | Height: | Size: 422 B |
34
3d/sprites/player/player.png.import
Normal file
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cptljgccd1ike"
|
||||
path="res://.godot/imported/player.png-1ad27fc2a62fa126eae918723933dd6f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/player.png"
|
||||
dest_files=["res://.godot/imported/player.png-1ad27fc2a62fa126eae918723933dd6f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
17
3d/sprites/player/player.tscn
Normal file
@@ -0,0 +1,17 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://b2inrhxoc37g7"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c7bu02ppdx1v5" path="res://scripts/player.gd" id="1_rkbax"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://4hw8gouu8yqs" path="res://player/player_frames.tres" id="2_4ntmi"]
|
||||
|
||||
[node name="Player" type="Node3D"]
|
||||
script = ExtResource("1_rkbax")
|
||||
|
||||
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 12.7616, 0, 0, 0)
|
||||
gi_mode = 2
|
||||
pixel_size = 0.125
|
||||
shaded = true
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
sprite_frames = ExtResource("2_4ntmi")
|
||||
animation = &"idle"
|
||||
122
3d/sprites/player/player_frames.tres
Normal file
@@ -0,0 +1,122 @@
|
||||
[gd_resource type="SpriteFrames" load_steps=15 format=3 uid="uid://4hw8gouu8yqs"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://ddok6ds70nvl1" path="res://textures/small_8_direction_characters.png" id="1_76ojn"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_5dgwc"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(64, 48, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_l3c4j"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(64, 24, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_pk5se"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(64, 48, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_35o62"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(64, 72, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_kav2d"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(96, 24, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_jalj5"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(96, 48, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_lgiew"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(96, 72, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_7rhvb"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(32, 24, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_4cbp7"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(32, 48, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_2f26o"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(32, 72, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_v2fg8"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(0, 24, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_6lyn2"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(0, 48, 16, 24)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_dv105"]
|
||||
atlas = ExtResource("1_76ojn")
|
||||
region = Rect2(0, 72, 16, 24)
|
||||
|
||||
[resource]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_5dgwc")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"idle",
|
||||
"speed": 10.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_l3c4j")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_pk5se")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_35o62")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"walk_down",
|
||||
"speed": 10.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_kav2d")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_jalj5")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_lgiew")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"walk_left",
|
||||
"speed": 10.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_7rhvb")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_4cbp7")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_2f26o")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"walk_right",
|
||||
"speed": 10.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_v2fg8")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_6lyn2")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_dv105")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"walk_up",
|
||||
"speed": 10.0
|
||||
}]
|
||||
BIN
3d/sprites/player/player_white.png
Normal file
|
After Width: | Height: | Size: 400 B |
34
3d/sprites/player/player_white.png.import
Normal file
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://chpmjfw7bwnpu"
|
||||
path="res://.godot/imported/player_white.png-c6b013391b1feeb9d4ff0d9b35793b80.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://player/player_white.png"
|
||||
dest_files=["res://.godot/imported/player_white.png-c6b013391b1feeb9d4ff0d9b35793b80.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
96
3d/sprites/project.godot
Normal file
@@ -0,0 +1,96 @@
|
||||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=5
|
||||
|
||||
[application]
|
||||
|
||||
config/name="3D Sprites and Animated Sprites"
|
||||
config/description="This project showcases the use of Sprite3D and AnimatedSprite3D in a 3D environment.
|
||||
Additionally, it demonstrates several possible shader effects applied to Sprite3D and AnimatedSprite3D."
|
||||
config/tags=PackedStringArray("3d", "demo", "official", "rendering")
|
||||
run/main_scene="uid://b15ro0v2x7n5t"
|
||||
config/features=PackedStringArray("4.4")
|
||||
config/icon="res://icon.webp"
|
||||
|
||||
[debug]
|
||||
|
||||
gdscript/warnings/untyped_declaration=1
|
||||
|
||||
[display]
|
||||
|
||||
window/stretch/mode="canvas_items"
|
||||
window/stretch/aspect="expand"
|
||||
|
||||
[editor_plugins]
|
||||
|
||||
enabled=PackedStringArray()
|
||||
|
||||
[gui]
|
||||
|
||||
theme/default_font_multichannel_signed_distance_field=true
|
||||
theme/default_font_generate_mipmaps=true
|
||||
|
||||
[input]
|
||||
|
||||
ui_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
ui_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
ui_up={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
ui_down={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_forward={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_back={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_left={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=3
|
||||
textures/default_filters/anisotropic_filtering_level=4
|
||||
anti_aliasing/quality/msaa_3d=2
|
||||
0
3d/sprites/screenshots/.gdignore
Normal file
BIN
3d/sprites/screenshots/3d_sprites.webp
Normal file
|
After Width: | Height: | Size: 221 KiB |
70
3d/sprites/scripts/3d_sprites.gd
Normal file
@@ -0,0 +1,70 @@
|
||||
extends Node
|
||||
|
||||
const ROT_SPEED = 0.003
|
||||
const ZOOM_SPEED = 0.125
|
||||
const MAIN_BUTTONS = MOUSE_BUTTON_MASK_LEFT | MOUSE_BUTTON_MASK_RIGHT | MOUSE_BUTTON_MASK_MIDDLE
|
||||
|
||||
var tester_index := 0
|
||||
var rot_x := -TAU / 16 # This must be kept in sync with RotationX.
|
||||
var rot_y := TAU / 6 # This must be kept in sync with CameraHolder.
|
||||
var camera_distance := 3.4
|
||||
var base_height := int(ProjectSettings.get_setting("display/window/size/viewport_height"))
|
||||
|
||||
@onready var testers: Node3D = $Testers
|
||||
@onready var camera_holder: Node3D = $CameraHolder # Has a position and rotates on Y.
|
||||
@onready var rotation_x: Node3D = $CameraHolder/RotationX
|
||||
@onready var camera: Camera3D = $CameraHolder/RotationX/Camera3D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
camera_holder.transform.basis = Basis.from_euler(Vector3(0, rot_y, 0))
|
||||
rotation_x.transform.basis = Basis.from_euler(Vector3(rot_x, 0, 0))
|
||||
update_gui()
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed(&"ui_left"):
|
||||
_on_previous_pressed()
|
||||
if event.is_action_pressed(&"ui_right"):
|
||||
_on_next_pressed()
|
||||
|
||||
if event is InputEventMouseButton:
|
||||
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
|
||||
camera_distance -= ZOOM_SPEED
|
||||
if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
|
||||
camera_distance += ZOOM_SPEED
|
||||
camera_distance = clamp(camera_distance, 1.5, 6)
|
||||
|
||||
if event is InputEventMouseMotion and event.button_mask & MAIN_BUTTONS:
|
||||
# Compensate motion speed to be resolution-independent (based on the window height).
|
||||
var relative_motion: Vector2 = event.relative * DisplayServer.window_get_size().y / base_height
|
||||
rot_y -= relative_motion.x * ROT_SPEED
|
||||
rot_x -= relative_motion.y * ROT_SPEED
|
||||
rot_x = clamp(rot_x, -1.57, 0)
|
||||
camera_holder.transform.basis = Basis.from_euler(Vector3(0, rot_y, 0))
|
||||
rotation_x.transform.basis = Basis.from_euler(Vector3(rot_x, 0, 0))
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
var current_tester: Node3D = testers.get_child(tester_index)
|
||||
# This code assumes CameraHolder's X and Y coordinates are already correct.
|
||||
var current_position := camera_holder.global_transform.origin.z
|
||||
var target_position := current_tester.global_transform.origin.z
|
||||
camera_holder.global_transform.origin.z = lerpf(current_position, target_position, 3 * delta)
|
||||
camera.position.z = lerpf(camera.position.z, camera_distance, 10 * delta)
|
||||
|
||||
|
||||
func _on_previous_pressed() -> void:
|
||||
tester_index = max(0, tester_index - 1)
|
||||
update_gui()
|
||||
|
||||
|
||||
func _on_next_pressed() -> void:
|
||||
tester_index = min(tester_index + 1, testers.get_child_count() - 1)
|
||||
update_gui()
|
||||
|
||||
|
||||
func update_gui() -> void:
|
||||
$TestName.text = str(testers.get_child(tester_index).name).capitalize()
|
||||
$Previous.disabled = tester_index == 0
|
||||
$Next.disabled = tester_index == testers.get_child_count() - 1
|
||||
1
3d/sprites/scripts/3d_sprites.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://v0e1avxpe8n7
|
||||
27
3d/sprites/scripts/player.gd
Normal file
@@ -0,0 +1,27 @@
|
||||
extends Node3D
|
||||
|
||||
@onready var sprite: AnimatedSprite3D = $AnimatedSprite3D
|
||||
@export var move_speed: float = 5.0
|
||||
|
||||
var velocity: Vector3 = Vector3.ZERO
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
var input_vector: Vector2 = Vector2.ZERO
|
||||
|
||||
input_vector.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
|
||||
input_vector.y = Input.get_action_strength("move_back") - Input.get_action_strength("move_forward")
|
||||
|
||||
if input_vector.length() > 0:
|
||||
input_vector = input_vector.normalized()
|
||||
# Update player's position in 3D space.
|
||||
velocity = Vector3(input_vector.x, 0, input_vector.y) * move_speed
|
||||
translate(velocity * delta)
|
||||
|
||||
# Play corresponding animation.
|
||||
if abs(input_vector.x) > abs(input_vector.y):
|
||||
sprite.play("walk_right" if input_vector.x > 0 else "walk_left")
|
||||
else:
|
||||
sprite.play("walk_down" if input_vector.y > 0 else "walk_up")
|
||||
else:
|
||||
sprite.stop()
|
||||
1
3d/sprites/scripts/player.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c7bu02ppdx1v5
|
||||
7
3d/sprites/scripts/sprite_rotate.gd
Normal file
@@ -0,0 +1,7 @@
|
||||
extends Sprite3D
|
||||
|
||||
@export var speed_deg: float = 90.0
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
rotate_y(deg_to_rad(speed_deg * delta))
|
||||
1
3d/sprites/scripts/sprite_rotate.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bmij60kwbx48u
|
||||
14
3d/sprites/shaders/negative.gdshader
Normal file
@@ -0,0 +1,14 @@
|
||||
shader_type spatial;
|
||||
render_mode depth_prepass_alpha, unshaded;
|
||||
|
||||
uniform sampler2D texture_albedo : filter_nearest;
|
||||
|
||||
void fragment() {
|
||||
vec4 albedo = texture(texture_albedo, UV);
|
||||
float alpha = albedo.a;
|
||||
|
||||
vec4 albedo_negative = vec4(1.0) - albedo;
|
||||
|
||||
ALBEDO = vec3(albedo_negative.rgb);
|
||||
ALPHA = alpha;
|
||||
}
|
||||
1
3d/sprites/shaders/negative.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dfk1vupanuypi
|
||||
29
3d/sprites/shaders/paper.gdshader
Normal file
@@ -0,0 +1,29 @@
|
||||
shader_type spatial;
|
||||
render_mode depth_draw_opaque, cull_disabled, depth_prepass_alpha;
|
||||
|
||||
uniform sampler2D texture_albedo : source_color, filter_nearest;
|
||||
uniform float outline_thickness : hint_range(0.001, 0.05) = 0.1;
|
||||
uniform vec4 outline_color : source_color = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
|
||||
void fragment() {
|
||||
vec2 uv = UV;
|
||||
vec4 center = texture(texture_albedo, uv);
|
||||
|
||||
float threshold = 0.1;
|
||||
float outline = 0.0;
|
||||
|
||||
vec2 offset = vec2(outline_thickness, 0.0);
|
||||
|
||||
outline += step(threshold, texture(texture_albedo, uv + offset).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv - offset).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv + vec2(0.0, outline_thickness)).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv - vec2(0.0, outline_thickness)).a);
|
||||
|
||||
if (center.a < threshold && outline > 0.0) {
|
||||
ALBEDO = outline_color.rgb;
|
||||
ALPHA = 1.0;
|
||||
} else {
|
||||
ALBEDO = center.rgb;
|
||||
ALPHA = center.a;
|
||||
}
|
||||
}
|
||||
1
3d/sprites/shaders/paper.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b5ee04rjhppn4
|
||||
34
3d/sprites/shaders/paper_emission.gdshader
Normal file
@@ -0,0 +1,34 @@
|
||||
shader_type spatial;
|
||||
render_mode depth_draw_opaque, cull_disabled, depth_prepass_alpha;
|
||||
|
||||
uniform sampler2D texture_albedo : source_color, filter_nearest;
|
||||
uniform sampler2D normal_map : hint_normal;
|
||||
uniform float outline_thickness : hint_range(0.001, 0.05) = 0.1;
|
||||
uniform vec4 outline_color : source_color = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
|
||||
void fragment() {
|
||||
vec2 uv = UV;
|
||||
vec4 center = texture(texture_albedo, uv);
|
||||
|
||||
float threshold = 0.1;
|
||||
float outline = 0.0;
|
||||
|
||||
vec2 offset = vec2(outline_thickness, 0.0);
|
||||
|
||||
outline += step(threshold, texture(texture_albedo, uv + offset).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv - offset).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv + vec2(0.0, outline_thickness)).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv - vec2(0.0, outline_thickness)).a);
|
||||
|
||||
if (center.a < threshold && outline > 0.0) {
|
||||
ALBEDO = outline_color.rgb;
|
||||
ALPHA = 1.0;
|
||||
EMISSION = outline_color.rgb * 4.0;
|
||||
} else {
|
||||
ALBEDO = center.rgb;
|
||||
ALPHA = center.a;
|
||||
vec3 normal_tex = texture(normal_map, UV).rgb;
|
||||
normal_tex = -(normal_tex * 2.0 - 1.0);
|
||||
NORMAL = normalize(TANGENT * normal_tex.x + BINORMAL * normal_tex.y + NORMAL * normal_tex.z);
|
||||
}
|
||||
}
|
||||
1
3d/sprites/shaders/paper_emission.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://beecufb7fv40i
|
||||
34
3d/sprites/shaders/paper_material.gdshader
Normal file
@@ -0,0 +1,34 @@
|
||||
shader_type spatial;
|
||||
render_mode depth_draw_opaque, cull_disabled, depth_prepass_alpha;
|
||||
|
||||
uniform sampler2D texture_albedo : source_color, filter_nearest;
|
||||
uniform sampler2D normal_map : hint_normal;
|
||||
uniform float outline_thickness : hint_range(0.001, 0.05) = 0.1;
|
||||
uniform vec4 outline_color : source_color = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
|
||||
void fragment() {
|
||||
vec2 uv = UV;
|
||||
vec4 center = texture(texture_albedo, uv);
|
||||
|
||||
float threshold = 0.1;
|
||||
float outline = 0.0;
|
||||
|
||||
vec2 offset = vec2(outline_thickness, 0.0);
|
||||
|
||||
outline += step(threshold, texture(texture_albedo, uv + offset).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv - offset).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv + vec2(0.0, outline_thickness)).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv - vec2(0.0, outline_thickness)).a);
|
||||
|
||||
vec3 normal_tex = texture(normal_map, UV).rgb;
|
||||
normal_tex = -(normal_tex * 2.0 - 1.0);
|
||||
NORMAL = normalize(TANGENT * normal_tex.x + BINORMAL * normal_tex.y + NORMAL * normal_tex.z);
|
||||
|
||||
if (center.a < threshold && outline > 0.0) {
|
||||
ALBEDO = outline_color.rgb;
|
||||
ALPHA = 1.0;
|
||||
} else {
|
||||
ALBEDO = center.rgb;
|
||||
ALPHA = center.a;
|
||||
}
|
||||
}
|
||||
1
3d/sprites/shaders/paper_material.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://2o41hrodgn04
|
||||
39
3d/sprites/shaders/paper_rainbow.gdshader
Normal file
@@ -0,0 +1,39 @@
|
||||
shader_type spatial;
|
||||
render_mode depth_draw_opaque, cull_disabled, depth_prepass_alpha;
|
||||
|
||||
uniform sampler2D texture_albedo : source_color, filter_nearest;
|
||||
uniform sampler2D normal_map : hint_normal;
|
||||
uniform float outline_thickness : hint_range(0.001, 0.05) = 0.1;
|
||||
uniform vec4 outline_color : source_color = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
|
||||
void fragment() {
|
||||
vec2 uv = UV;
|
||||
vec4 center = texture(texture_albedo, uv);
|
||||
|
||||
float threshold = 0.1;
|
||||
float outline = 0.0;
|
||||
|
||||
vec2 offset = vec2(outline_thickness, 0.0);
|
||||
|
||||
outline += step(threshold, texture(texture_albedo, uv + offset).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv - offset).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv + vec2(0.0, outline_thickness)).a);
|
||||
outline += step(threshold, texture(texture_albedo, uv - vec2(0.0, outline_thickness)).a);
|
||||
|
||||
if (center.a < threshold && outline > 0.0) {
|
||||
float t = TIME * 2.0 + uv.x * 10.0 + uv.y * 10.0;
|
||||
vec3 rainbow = vec3(
|
||||
0.5 + 0.5 * sin(t),
|
||||
0.5 + 0.5 * sin(t + 2.0),
|
||||
0.5 + 0.5 * sin(t + 4.0)
|
||||
);
|
||||
ALBEDO = rainbow;
|
||||
ALPHA = 1.0;
|
||||
} else {
|
||||
ALBEDO = center.rgb;
|
||||
ALPHA = center.a;
|
||||
vec3 normal_tex = texture(normal_map, UV).rgb;
|
||||
normal_tex = -(normal_tex * 2.0 - 1.0);
|
||||
NORMAL = normalize(TANGENT * normal_tex.x + BINORMAL * normal_tex.y + NORMAL * normal_tex.z);
|
||||
}
|
||||
}
|
||||
1
3d/sprites/shaders/paper_rainbow.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bbv8bmi15e7i0
|
||||
7
3d/sprites/textures/checker.LICENSE.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# License for `checker.png`
|
||||
|
||||
Copyright (c) 2020 Kenney
|
||||
|
||||
Licensed under CC0 1.0 Universal.
|
||||
|
||||
Downloaded from https://kenney.nl/assets/prototype-textures
|
||||
BIN
3d/sprites/textures/checker.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
34
3d/sprites/textures/checker.png.import
Normal file
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://chjqieyps5n5r"
|
||||
path="res://.godot/imported/checker.png-d334a8ae07de292fd4162f184b9dd7bc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://textures/checker.png"
|
||||
dest_files=["res://.godot/imported/checker.png-d334a8ae07de292fd4162f184b9dd7bc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
1
3d/sprites/textures/icon.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
|
||||
|
After Width: | Height: | Size: 995 B |
37
3d/sprites/textures/icon.svg.import
Normal file
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cj6jj2qp2y3j0"
|
||||
path="res://.godot/imported/icon.svg-3540dd99eafb6c4e602e8c59cee418fa.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://textures/icon.svg"
|
||||
dest_files=["res://.godot/imported/icon.svg-3540dd99eafb6c4e602e8c59cee418fa.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=1
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
BIN
3d/sprites/textures/paper_material.png
Normal file
|
After Width: | Height: | Size: 98 KiB |
34
3d/sprites/textures/paper_material.png.import
Normal file
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cbb4xesensj5l"
|
||||
path="res://.godot/imported/paper_material.png-988da716602184231e5af32a07b98b55.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://textures/paper_material.png"
|
||||
dest_files=["res://.godot/imported/paper_material.png-988da716602184231e5af32a07b98b55.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=1
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
@@ -0,0 +1,7 @@
|
||||
# License for `Small-8-Direction-Characters_by_AxulArt.png`
|
||||
|
||||
Copyright (c) AxulArt
|
||||
|
||||
Licensed under CC BY 4.0 International.
|
||||
|
||||
Downloaded from https://axulart.itch.io/small-8-direction-characters
|
||||
BIN
3d/sprites/textures/small_8_direction_characters.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
34
3d/sprites/textures/small_8_direction_characters.png.import
Normal file
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ddok6ds70nvl1"
|
||||
path="res://.godot/imported/small_8_direction_characters.png-af6d8bf8c330945769034bf0c0715f89.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://textures/small_8_direction_characters.png"
|
||||
dest_files=["res://.godot/imported/small_8_direction_characters.png-af6d8bf8c330945769034bf0c0715f89.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||