├── .gitignore ├── LICENSE ├── Materials ├── Box.material └── Grid.material ├── README.md ├── Scenes └── Main.tscn ├── Scripts └── BasicCameraMovment.gd ├── Textures ├── grid.png └── grid.png.import ├── default_env.tres ├── docs ├── screenshot.png └── viewport_options.png ├── editor_layout.cfg ├── icon.png └── project.godot /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .import/ 3 | .vscode/ 4 | .mono/ 5 | logs/ 6 | *.log* 7 | *.import 8 | export_presets.cfg -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Jose De Gouveia 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Materials/Box.material: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hgouveia/godot-blank-starter-template-3d/fee9ab91513a5290c2fc0fd6134f91381375f738/Materials/Box.material -------------------------------------------------------------------------------- /Materials/Grid.material: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hgouveia/godot-blank-starter-template-3d/fee9ab91513a5290c2fc0fd6134f91381375f738/Materials/Grid.material -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Blank Starter Template (3D) 2 | 3 | This template aims to gives a basic starter project with some predefined settings to achieve an high quality look 4 | 5 | For Godot 3.1 and above 6 | 7 | ```diff 8 | - Warning: this template is meant to be used for hight quality look, a high end pc is required, this might not work well in a low spec machine or integrated graphics card 9 | ``` 10 | ![](docs/screenshot.png) 11 | 12 | ### Project Settings: 13 | 14 | - GLES3 Renderer 15 | - MSAA enabled 16 | - SSAO Enabled 17 | - https://docs.godotengine.org/en/3.1/tutorials/3d/environment_and_post_processing.html#screen-space-ambient-occlusion-ssao 18 | - SSR Enabled 19 | - https://docs.godotengine.org/en/3.1/tutorials/3d/environment_and_post_processing.html#screen-space-reflections-ssr 20 | - Bluish skybox changed to more neutral color 21 | - Grid texture imported with Anisotropic flag to avoid blurriness 22 | - Default directional light pointing down for uniform lighting 23 | 24 | ### Extras: 25 | 26 | - .gitignore for version control 27 | - Basic WASD camera navigation 28 | - editor_layout.cfg, to reproduce the same layout as in the screenshot, this needs to be copy into `%APPDATA%/Godot/projects/`**REPLACE_WITH_YOUR_PROJECT** 29 | 30 | ### Tips: 31 | 32 | 1. Use GIProbe to improve quality 33 | - https://docs.godotengine.org/en/3.1/tutorials/3d/gi_probes.html#gi-probes 34 | - SSAO looks best when combined with a real source of indirect light, like GIProbe: 35 | - tweet from Godot Engine Lead Developer: https://twitter.com/reduzio/status/922132171850158081 36 | - Performance requirements are higher than for lightmaps, so it may not run properly in low-end integrated GPUs (may need to reduce resolution) 37 | - GIProbes are quite demanding. It is possible to use lower quality voxel cone tracing in exchange for more performance. 38 | 39 | 2. Disable **View Grid** and **GIProbe** from the viewport options, this will hide the giprobe green box, and the grid is not needed since we have a floor mesh with grid texture (but you might need enable it for snapping) 40 | ![](docs/viewport_options.png) 41 | 42 | 3. Adjust the **Grid** material UV1 to fit better the grid, set always half of the mesh side , 43 | - ex: Mesh Size X : 128 , Grid UV1 X: 64 44 | 45 | 4. MSSA, SSAO, SSR are set at medium quality, this can be increase for better quality, or reduce for perfomance 46 | 47 | 5. You might need to diabled SSR from the enviroment settings to increased the performance if you enviroment doesnt has too much reflections 48 | 49 | 6. Remove the **docs** folder from your project and change the README.md 50 | 51 | 7. Activate Fallback to GLES2 to support older hardware but keep in mind this will change the look of the scene 52 | -------------------------------------------------------------------------------- /Scenes/Main.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=10 format=2] 2 | 3 | [ext_resource path="res://Materials/Grid.material" type="Material" id=1] 4 | [ext_resource path="res://Materials/Box.material" type="Material" id=2] 5 | [ext_resource path="res://default_env.tres" type="Environment" id=3] 6 | [ext_resource path="res://Scripts/BasicCameraMovment.gd" type="Script" id=4] 7 | 8 | [sub_resource type="SphereShape" id=1] 9 | 10 | [sub_resource type="BoxShape" id=2] 11 | 12 | [sub_resource type="PlaneMesh" id=3] 13 | 14 | [sub_resource type="CubeMesh" id=4] 15 | 16 | [sub_resource type="BoxShape" id=5] 17 | 18 | [node name="Main" type="Spatial"] 19 | 20 | [node name="DirectionalLight" type="DirectionalLight" parent="."] 21 | transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 60, 0 ) 22 | light_energy = 0.8 23 | shadow_enabled = true 24 | 25 | [node name="WorldEnvironment" type="WorldEnvironment" parent="."] 26 | environment = ExtResource( 3 ) 27 | 28 | [node name="CameraPivot" type="KinematicBody" parent="."] 29 | transform = Transform( 0.999998, -0.000862025, 0.0018319, 0, 0.904827, 0.425779, -0.00202458, -0.425778, 0.904825, 0.035, 2.829, 4.951 ) 30 | script = ExtResource( 4 ) 31 | 32 | [node name="Camera" type="Camera" parent="CameraPivot"] 33 | visible = false 34 | 35 | [node name="CollisionShape" type="CollisionShape" parent="CameraPivot"] 36 | transform = Transform( 0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0 ) 37 | shape = SubResource( 1 ) 38 | 39 | [node name="Floor" type="StaticBody" parent="."] 40 | 41 | [node name="CollisionShape" type="CollisionShape" parent="Floor"] 42 | transform = Transform( 256, 0, 0, 0, 1, 0, 0, 0, 256, 0, 0, 0 ) 43 | shape = SubResource( 2 ) 44 | 45 | [node name="FloorMesh" type="MeshInstance" parent="Floor"] 46 | transform = Transform( 256, 0, 0, 0, 1, 0, 0, 0, 256, 0, 0, 0 ) 47 | use_in_baked_light = true 48 | mesh = SubResource( 3 ) 49 | material/0 = ExtResource( 1 ) 50 | 51 | [node name="Box" type="StaticBody" parent="."] 52 | 53 | [node name="BoxMesh" type="MeshInstance" parent="Box"] 54 | transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 ) 55 | use_in_baked_light = true 56 | mesh = SubResource( 4 ) 57 | material/0 = ExtResource( 2 ) 58 | 59 | [node name="CollisionShape" type="CollisionShape" parent="Box"] 60 | shape = SubResource( 5 ) 61 | -------------------------------------------------------------------------------- /Scripts/BasicCameraMovment.gd: -------------------------------------------------------------------------------- 1 | extends KinematicBody 2 | 3 | export(float) var SPEED : float = 20 4 | export(float) var MAX_SPEED : float = 30 5 | export(float) var MOUSE_SENSIBILITY : float = 0.3 6 | 7 | func _ready(): 8 | Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) 9 | 10 | func _physics_process(delta : float): 11 | var speed : float = 0 12 | var direction : Vector3 = Vector3() 13 | 14 | # check input and change direction 15 | if Input.is_action_pressed("move_forward"): 16 | direction -= transform.basis.z 17 | if Input.is_action_pressed("move_backward"): 18 | direction += transform.basis.z 19 | if Input.is_action_pressed("move_left"): 20 | direction -= transform.basis.x 21 | if Input.is_action_pressed("move_right"): 22 | direction += transform.basis.x 23 | if Input.is_action_pressed("move_sprint"): 24 | speed = MAX_SPEED 25 | else: 26 | speed = SPEED 27 | 28 | # move 29 | direction = direction.normalized() 30 | move_and_slide(direction * speed, Vector3.UP) 31 | 32 | func _input(event): 33 | # mouse rotation 34 | if event is InputEventMouseMotion: 35 | self.rotate_y( deg2rad(-event.relative.x * MOUSE_SENSIBILITY) ) 36 | $Camera.rotate_x( deg2rad(-event.relative.y * MOUSE_SENSIBILITY) ) 37 | $Camera.rotation.x = clamp($Camera.rotation.x, deg2rad(-89), deg2rad(89)) 38 | -------------------------------------------------------------------------------- /Textures/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hgouveia/godot-blank-starter-template-3d/fee9ab91513a5290c2fc0fd6134f91381375f738/Textures/grid.png -------------------------------------------------------------------------------- /Textures/grid.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path.s3tc="res://.import/grid.png-93ed6e17ea59bb8aca71b79bf1c8b0c7.s3tc.stex" 6 | path.etc2="res://.import/grid.png-93ed6e17ea59bb8aca71b79bf1c8b0c7.etc2.stex" 7 | metadata={ 8 | "imported_formats": [ "s3tc", "etc2" ], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://Textures/grid.png" 15 | dest_files=[ "res://.import/grid.png-93ed6e17ea59bb8aca71b79bf1c8b0c7.s3tc.stex", "res://.import/grid.png-93ed6e17ea59bb8aca71b79bf1c8b0c7.etc2.stex" ] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/lossy_quality=0.7 21 | compress/hdr_mode=0 22 | compress/bptc_ldr=0 23 | compress/normal_map=0 24 | flags/repeat=true 25 | flags/filter=true 26 | flags/mipmaps=true 27 | flags/anisotropic=true 28 | flags/srgb=1 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/HDR_as_SRGB=false 32 | process/invert_color=false 33 | stream=false 34 | size_limit=0 35 | detect_3d=false 36 | svg/scale=1.0 37 | -------------------------------------------------------------------------------- /default_env.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Environment" load_steps=2 format=2] 2 | 3 | [sub_resource type="ProceduralSky" id=1] 4 | sky_top_color = Color( 1, 1, 1, 1 ) 5 | 6 | [resource] 7 | background_mode = 2 8 | background_sky = SubResource( 1 ) 9 | ss_reflections_enabled = true 10 | ssao_enabled = true 11 | -------------------------------------------------------------------------------- /docs/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hgouveia/godot-blank-starter-template-3d/fee9ab91513a5290c2fc0fd6134f91381375f738/docs/screenshot.png -------------------------------------------------------------------------------- /docs/viewport_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hgouveia/godot-blank-starter-template-3d/fee9ab91513a5290c2fc0fd6134f91381375f738/docs/viewport_options.png -------------------------------------------------------------------------------- /editor_layout.cfg: -------------------------------------------------------------------------------- 1 | [docks] 2 | 3 | dock_5="Scene" 4 | dock_6="FileSystem" 5 | dock_7="Inspector" 6 | dock_8="Import,Node" 7 | dock_filesystem_split=0 8 | dock_filesystem_display_mode=0 9 | dock_filesystem_file_list_display_mode=1 10 | dock_split_3=0 11 | dock_split_4=0 12 | dock_hsplit_1=0 13 | dock_hsplit_2=70 14 | dock_hsplit_3=-195 15 | dock_hsplit_4=120 16 | 17 | [EditorNode] 18 | 19 | open_scenes=[ "res://Scenes/Main.tscn" ] 20 | 21 | [ScriptEditor] 22 | 23 | open_scripts=[ ] 24 | open_help=[ ] 25 | split_offset=140 26 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hgouveia/godot-blank-starter-template-3d/fee9ab91513a5290c2fc0fd6134f91381375f738/icon.png -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=4 10 | 11 | _global_script_classes=[ ] 12 | _global_script_class_icons={ 13 | 14 | } 15 | 16 | [application] 17 | 18 | config/name="Blank Template" 19 | run/main_scene="res://Scenes/Main.tscn" 20 | config/icon="res://icon.png" 21 | 22 | [input] 23 | 24 | move_forward={ 25 | "deadzone": 0.5, 26 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null) 27 | ] 28 | } 29 | move_backward={ 30 | "deadzone": 0.5, 31 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null) 32 | ] 33 | } 34 | move_left={ 35 | "deadzone": 0.5, 36 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null) 37 | ] 38 | } 39 | move_right={ 40 | "deadzone": 0.5, 41 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null) 42 | ] 43 | } 44 | move_sprint={ 45 | "deadzone": 0.5, 46 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"unicode":0,"echo":false,"script":null) 47 | ] 48 | } 49 | 50 | [rendering] 51 | 52 | quality/filters/use_nearest_mipmap_filter=true 53 | quality/filters/msaa=2 54 | environment/default_environment="res://default_env.tres" 55 | --------------------------------------------------------------------------------