Full Code of outobugi/Terrain3D for AI

main 2d732fb0e363 cached
356 files
2.2 MB
589.0k tokens
465 symbols
1 requests
Download .txt
Showing preview only (2,354K chars total). Download the full file or copy to clipboard to get everything.
Repository: outobugi/Terrain3D
Branch: main
Commit: 2d732fb0e363
Files: 356
Total size: 2.2 MB

Directory structure:
gitextract_y8dts4rh/

├── .clang-format
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── actions/
│   │   ├── base-deps/
│   │   │   └── action.yml
│   │   └── build-cache/
│   │       └── action.yml
│   └── workflows/
│       ├── android.yml
│       ├── build.yml
│       ├── ios.yml
│       ├── linux.yml
│       ├── macos.yml
│       ├── web.yml
│       └── windows.yml
├── .gitignore
├── .gitmodules
├── .readthedocs.yaml
├── AUTHORS.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── SConstruct
├── Terrain3D.sln
├── Terrain3D.vcxproj
├── Terrain3D.vcxproj.filters
├── Terrain3D.vcxproj.user
├── doc/
│   ├── Makefile
│   ├── _static/
│   │   └── theme_overrides.css
│   ├── api/
│   │   ├── class_terrain3d.rst
│   │   ├── class_terrain3dassets.rst
│   │   ├── class_terrain3dcollision.rst
│   │   ├── class_terrain3ddata.rst
│   │   ├── class_terrain3deditor.rst
│   │   ├── class_terrain3dinstancer.rst
│   │   ├── class_terrain3dmaterial.rst
│   │   ├── class_terrain3dmeshasset.rst
│   │   ├── class_terrain3dregion.rst
│   │   ├── class_terrain3dtextureasset.rst
│   │   ├── class_terrain3dutil.rst
│   │   └── index.rst
│   ├── build_docs.sh
│   ├── conf.py
│   ├── doc_classes/
│   │   ├── Terrain3D.xml
│   │   ├── Terrain3DAssets.xml
│   │   ├── Terrain3DCollision.xml
│   │   ├── Terrain3DData.xml
│   │   ├── Terrain3DEditor.xml
│   │   ├── Terrain3DInstancer.xml
│   │   ├── Terrain3DMaterial.xml
│   │   ├── Terrain3DMeshAsset.xml
│   │   ├── Terrain3DRegion.xml
│   │   ├── Terrain3DTextureAsset.xml
│   │   └── Terrain3DUtil.xml
│   ├── docs/
│   │   ├── authors.rst
│   │   ├── building_from_source.md
│   │   ├── collision.md
│   │   ├── contributing.rst
│   │   ├── controlmap_format.md
│   │   ├── data_format.md
│   │   ├── displacement.md
│   │   ├── double_precision.md
│   │   ├── games.md
│   │   ├── generating_csharp_bindings.md
│   │   ├── getting_help.md
│   │   ├── heightmaps.md
│   │   ├── import_export.md
│   │   ├── installation.md
│   │   ├── instancer.md
│   │   ├── introduction.md
│   │   ├── keyboard_shortcuts.md
│   │   ├── license.rst
│   │   ├── navigation.md
│   │   ├── nightly_builds.md
│   │   ├── occlusion_culling.md
│   │   ├── platforms.md
│   │   ├── press.md
│   │   ├── programming_languages.rst
│   │   ├── shader_design.md
│   │   ├── system_architecture.md
│   │   ├── texture_painting.md
│   │   ├── texture_prep.md
│   │   ├── tips_environment.md
│   │   ├── tips_technical.md
│   │   ├── troubleshooting.md
│   │   ├── tutorial_videos.md
│   │   └── user_interface.md
│   ├── dump_contributors.py
│   ├── index.rst
│   ├── make.bat
│   └── requirements.txt
├── project/
│   ├── Terrain3D.csproj
│   ├── Terrain3D.sln
│   ├── addons/
│   │   └── terrain_3d/
│   │       ├── brushes/
│   │       │   ├── .gdignore
│   │       │   ├── acrylic1.exr
│   │       │   ├── circle0.exr
│   │       │   ├── circle1.exr
│   │       │   ├── circle2.exr
│   │       │   ├── circle3.exr
│   │       │   ├── circle4.exr
│   │       │   ├── hill1.exr
│   │       │   ├── hill2.exr
│   │       │   ├── mountain1.exr
│   │       │   ├── mountain2.exr
│   │       │   ├── mountain3.exr
│   │       │   ├── mountain4.exr
│   │       │   ├── peak1.exr
│   │       │   ├── peak2.exr
│   │       │   ├── peak3.exr
│   │       │   ├── ring1.exr
│   │       │   ├── smoke.exr
│   │       │   ├── square1.exr
│   │       │   ├── square2.exr
│   │       │   ├── square3.exr
│   │       │   ├── square4.exr
│   │       │   ├── square5.exr
│   │       │   ├── stones.exr
│   │       │   ├── terrain1.exr
│   │       │   ├── terrain2.exr
│   │       │   ├── terrain3.exr
│   │       │   ├── terrain4.exr
│   │       │   ├── terrain5.exr
│   │       │   ├── terrain6.exr
│   │       │   ├── texture1.exr
│   │       │   ├── texture2.exr
│   │       │   ├── texture3.exr
│   │       │   ├── texture4.exr
│   │       │   ├── texture5.exr
│   │       │   └── vegetation1.exr
│   │       ├── csharp/
│   │       │   ├── Terrain3D.cs
│   │       │   ├── Terrain3D.cs.uid
│   │       │   ├── Terrain3DAssets.cs
│   │       │   ├── Terrain3DAssets.cs.uid
│   │       │   ├── Terrain3DCollision.cs
│   │       │   ├── Terrain3DCollision.cs.uid
│   │       │   ├── Terrain3DData.cs
│   │       │   ├── Terrain3DData.cs.uid
│   │       │   ├── Terrain3DEditor.cs
│   │       │   ├── Terrain3DEditor.cs.uid
│   │       │   ├── Terrain3DInstancer.cs
│   │       │   ├── Terrain3DInstancer.cs.uid
│   │       │   ├── Terrain3DMaterial.cs
│   │       │   ├── Terrain3DMaterial.cs.uid
│   │       │   ├── Terrain3DMeshAsset.cs
│   │       │   ├── Terrain3DMeshAsset.cs.uid
│   │       │   ├── Terrain3DRegion.cs
│   │       │   ├── Terrain3DRegion.cs.uid
│   │       │   ├── Terrain3DTextureAsset.cs
│   │       │   ├── Terrain3DTextureAsset.cs.uid
│   │       │   ├── Terrain3DUtil.cs
│   │       │   └── Terrain3DUtil.cs.uid
│   │       ├── extras/
│   │       │   ├── 3rd_party/
│   │       │   │   ├── import_sgt.gd
│   │       │   │   ├── import_sgt.gd.uid
│   │       │   │   ├── project_on_terrain3d.gd
│   │       │   │   └── project_on_terrain3d.gd.uid
│   │       │   ├── particle_example/
│   │       │   │   ├── Terrain3DParticles.tscn
│   │       │   │   ├── grass.gdshader
│   │       │   │   ├── grass.gdshader.uid
│   │       │   │   ├── grass_material.tres
│   │       │   │   ├── particles.gdshader
│   │       │   │   ├── particles.gdshader.uid
│   │       │   │   ├── process_material.tres
│   │       │   │   ├── terrain_3D_particles.gd
│   │       │   │   └── terrain_3D_particles.gd.uid
│   │       │   └── shaders/
│   │       │       ├── M_ocean.tres
│   │       │       ├── hex_grid.gdshaderinc
│   │       │       ├── hex_grid.gdshaderinc.uid
│   │       │       ├── lightweight.gdshader
│   │       │       ├── lightweight.gdshader.uid
│   │       │       ├── minimum.gdshader
│   │       │       ├── minimum.gdshader.uid
│   │       │       ├── ocean_shader.gdshader
│   │       │       └── ocean_shader.gdshader.uid
│   │       ├── icons/
│   │       │   ├── autoshader.svg.import
│   │       │   ├── color_paint.svg.import
│   │       │   ├── height_add.svg.import
│   │       │   ├── height_div.svg.import
│   │       │   ├── height_flat.svg.import
│   │       │   ├── height_mul.svg.import
│   │       │   ├── height_slope.svg.import
│   │       │   ├── height_smooth.svg.import
│   │       │   ├── height_sub.svg.import
│   │       │   ├── holes.svg.import
│   │       │   ├── layers.svg.import
│   │       │   ├── multimesh.svg.import
│   │       │   ├── navigation.svg.import
│   │       │   ├── picker_checked.svg.import
│   │       │   ├── region_add.svg.import
│   │       │   ├── region_remove.svg.import
│   │       │   ├── terrain3d.svg.import
│   │       │   ├── texture_paint.svg.import
│   │       │   ├── texture_spray.svg.import
│   │       │   └── wetness.svg.import
│   │       ├── menu/
│   │       │   ├── bake_lod_dialog.gd
│   │       │   ├── bake_lod_dialog.gd.uid
│   │       │   ├── bake_lod_dialog.tscn
│   │       │   ├── baker.gd
│   │       │   ├── baker.gd.uid
│   │       │   ├── channel_packer.gd
│   │       │   ├── channel_packer.gd.uid
│   │       │   ├── channel_packer.tscn
│   │       │   ├── channel_packer_dragdrop.gd
│   │       │   ├── channel_packer_dragdrop.gd.uid
│   │       │   ├── channel_packer_import_template.txt
│   │       │   ├── directory_setup.gd
│   │       │   ├── directory_setup.gd.uid
│   │       │   ├── directory_setup.tscn
│   │       │   ├── terrain_menu.gd
│   │       │   └── terrain_menu.gd.uid
│   │       ├── plugin.cfg
│   │       ├── src/
│   │       │   ├── asset_dock.gd
│   │       │   ├── asset_dock.gd.uid
│   │       │   ├── asset_dock.tscn
│   │       │   ├── double_slider.gd
│   │       │   ├── double_slider.gd.uid
│   │       │   ├── editor_plugin.gd
│   │       │   ├── editor_plugin.gd.uid
│   │       │   ├── gradient_operation_builder.gd
│   │       │   ├── gradient_operation_builder.gd.uid
│   │       │   ├── multi_picker.gd
│   │       │   ├── multi_picker.gd.uid
│   │       │   ├── operation_builder.gd
│   │       │   ├── operation_builder.gd.uid
│   │       │   ├── tool_settings.gd
│   │       │   ├── tool_settings.gd.uid
│   │       │   ├── toolbar.gd
│   │       │   ├── toolbar.gd.uid
│   │       │   ├── ui.gd
│   │       │   └── ui.gd.uid
│   │       ├── terrain.gdextension
│   │       ├── terrain.gdextension.uid
│   │       ├── tools/
│   │       │   ├── importer.gd
│   │       │   ├── importer.gd.uid
│   │       │   ├── importer.tscn
│   │       │   ├── region_mover.gd
│   │       │   └── region_mover.gd.uid
│   │       └── utils/
│   │           ├── terrain_3d_objects.gd
│   │           ├── terrain_3d_objects.gd.uid
│   │           ├── transform_changed_notifier.gd
│   │           └── transform_changed_notifier.gd.uid
│   ├── demo/
│   │   ├── CodeGeneratedDemo.tscn
│   │   ├── Demo.tscn
│   │   ├── NavigationDemo.tscn
│   │   ├── assets/
│   │   │   ├── materials/
│   │   │   │   ├── M_crystal_blue.tres
│   │   │   │   ├── M_crystal_purple.tres
│   │   │   │   ├── M_crystal_red.tres
│   │   │   │   ├── M_rock23_black_tp.tres
│   │   │   │   └── M_rock23_tp.tres
│   │   │   ├── models/
│   │   │   │   ├── CrystalC.tscn
│   │   │   │   ├── LOD10Example.tscn
│   │   │   │   ├── LOD5Example.tscn
│   │   │   │   ├── RockA.glb
│   │   │   │   ├── RockA.glb.import
│   │   │   │   ├── RockA.tscn
│   │   │   │   ├── RockB.glb
│   │   │   │   ├── RockB.glb.import
│   │   │   │   ├── RockB.tscn
│   │   │   │   ├── RockC.glb
│   │   │   │   ├── RockC.glb.import
│   │   │   │   ├── RockC.tscn
│   │   │   │   ├── Tunnel.glb
│   │   │   │   ├── Tunnel.glb.import
│   │   │   │   └── Tunnel.tscn
│   │   │   └── textures/
│   │   │       ├── asset_licenses.txt
│   │   │       ├── ground037_alb_ht.png.import
│   │   │       ├── ground037_nrm_rgh.png.import
│   │   │       ├── rock023_alb_ht.png.import
│   │   │       └── rock023_nrm_rgh.png.import
│   │   ├── components/
│   │   │   ├── DemoBenchmark.tscn
│   │   │   ├── Enemy.tscn
│   │   │   ├── Environment.tscn
│   │   │   ├── Player.tscn
│   │   │   ├── Tunnel.tscn
│   │   │   └── UI.tscn
│   │   ├── csharp/
│   │   │   ├── CodeGenerated.cs
│   │   │   ├── CodeGenerated.cs.uid
│   │   │   └── CodeGeneratedCSDemo.tscn
│   │   ├── data/
│   │   │   ├── M_terrain.tres
│   │   │   ├── assets.tres
│   │   │   ├── nav_mesh.res
│   │   │   ├── terrain3d_00-01.res
│   │   │   ├── terrain3d_00-02.res
│   │   │   └── terrain3d_00_00.res
│   │   └── src/
│   │       ├── CameraManager.gd
│   │       ├── CameraManager.gd.uid
│   │       ├── CaveEntrance.gd
│   │       ├── CaveEntrance.gd.uid
│   │       ├── CodeGenerated.gd
│   │       ├── CodeGenerated.gd.uid
│   │       ├── DemoScene.gd
│   │       ├── DemoScene.gd.uid
│   │       ├── Enemy.gd
│   │       ├── Enemy.gd.uid
│   │       ├── Player.gd
│   │       ├── Player.gd.uid
│   │       ├── RuntimeNavigationBaker.gd
│   │       ├── RuntimeNavigationBaker.gd.uid
│   │       ├── UI.gd
│   │       └── UI.gd.uid
│   ├── icon.png.import
│   └── project.godot
├── src/
│   ├── constants.h
│   ├── generated_texture.cpp
│   ├── generated_texture.h
│   ├── logger.h
│   ├── register_types.cpp
│   ├── register_types.h
│   ├── shaders/
│   │   ├── auto_shader.glsl
│   │   ├── backgrounds.glsl
│   │   ├── debug_views.glsl
│   │   ├── displacement.glsl
│   │   ├── displacement_buffer.glsl
│   │   ├── dual_scaling.glsl
│   │   ├── editor_functions.glsl
│   │   ├── gpu_depth.glsl
│   │   ├── macro_variation.glsl
│   │   ├── main.glsl
│   │   ├── overlays.glsl
│   │   ├── pbr_views.glsl
│   │   ├── projection.glsl
│   │   └── samplers.glsl
│   ├── target_node_3d.h
│   ├── terrain_3d.cpp
│   ├── terrain_3d.h
│   ├── terrain_3d_asset_resource.h
│   ├── terrain_3d_assets.cpp
│   ├── terrain_3d_assets.h
│   ├── terrain_3d_collision.cpp
│   ├── terrain_3d_collision.h
│   ├── terrain_3d_data.cpp
│   ├── terrain_3d_data.h
│   ├── terrain_3d_editor.cpp
│   ├── terrain_3d_editor.h
│   ├── terrain_3d_instancer.cpp
│   ├── terrain_3d_instancer.h
│   ├── terrain_3d_material.cpp
│   ├── terrain_3d_material.h
│   ├── terrain_3d_mesh_asset.cpp
│   ├── terrain_3d_mesh_asset.h
│   ├── terrain_3d_mesher.cpp
│   ├── terrain_3d_mesher.h
│   ├── terrain_3d_region.cpp
│   ├── terrain_3d_region.h
│   ├── terrain_3d_texture_asset.cpp
│   ├── terrain_3d_texture_asset.h
│   ├── terrain_3d_util.cpp
│   ├── terrain_3d_util.h
│   ├── unit_testing.cpp
│   └── unit_testing.h
└── tools/
    ├── build_release.sh
    ├── hooks/
    │   ├── asmessage.applescript
    │   ├── canonicalize_filename.sh
    │   ├── pre-commit
    │   ├── pre-commit-clang-format
    │   └── winmessage.ps1
    └── install-hooks.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .clang-format
================================================
# Commented out parameters are those with the same value as base LLVM style.
# We can uncomment them if we want to change their value, or enforce the
# chosen value in case the base style changes (last sync: Clang 14.0).
---
### General config, applies to all languages ###
BasedOnStyle:  LLVM
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign
# AlignArrayOfStructures: None
# AlignConsecutiveMacros: None
# AlignConsecutiveAssignments: None
# AlignConsecutiveBitFields: None
# AlignConsecutiveDeclarations: None
# AlignEscapedNewlines: Right
AlignOperands:   DontAlign
AlignTrailingComments: false
# AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
# AllowShortEnumsOnASingleLine: true
# AllowShortBlocksOnASingleLine: Never
# AllowShortCaseLabelsOnASingleLine: false
# AllowShortFunctionsOnASingleLine: All
# AllowShortLambdasOnASingleLine: All
# AllowShortIfStatementsOnASingleLine: Never
# AllowShortLoopsOnASingleLine: false
# AlwaysBreakAfterDefinitionReturnType: None
# AlwaysBreakAfterReturnType: None
# AlwaysBreakBeforeMultilineStrings: false
# AlwaysBreakTemplateDeclarations: MultiLine
# AttributeMacros:
#   - __capability
# BinPackArguments: true
# BinPackParameters: true
# BraceWrapping:
#   AfterCaseLabel:  false
#   AfterClass:      false
#   AfterControlStatement: Never
#   AfterEnum:       false
#   AfterFunction:   false
#   AfterNamespace:  false
#   AfterObjCDeclaration: false
#   AfterStruct:     false
#   AfterUnion:      false
#   AfterExternBlock: false
#   BeforeCatch:     false
#   BeforeElse:      false
#   BeforeLambdaBody: false
#   BeforeWhile:     false
#   IndentBraces:    false
#   SplitEmptyFunction: true
#   SplitEmptyRecord: true
#   SplitEmptyNamespace: true
# BreakBeforeBinaryOperators: None
# BreakBeforeConceptDeclarations: true
# BreakBeforeBraces: Attach
# BreakBeforeInheritanceComma: false
# BreakInheritanceList: BeforeColon
# BreakBeforeTernaryOperators: true
# BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: AfterColon
# BreakStringLiterals: true
ColumnLimit:     0
# CommentPragmas:  '^ IWYU pragma:'
# QualifierAlignment: Leave
# CompactNamespaces: false
ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 8
Cpp11BracedListStyle: false
# DeriveLineEnding: true
# DerivePointerAlignment: false
# DisableFormat:   false
# EmptyLineAfterAccessModifier: Never
# EmptyLineBeforeAccessModifier: LogicalBlock
# ExperimentalAutoDetectBinPacking: false
# PackConstructorInitializers: BinPack
ConstructorInitializerAllOnOneLineOrOnePerLine: true
# AllowAllConstructorInitializersOnNextLine: true
# FixNamespaceComments: true
# ForEachMacros:
#   - foreach
#   - Q_FOREACH
#   - BOOST_FOREACH
# IfMacros:
#   - KJ_IF_MAYBE
# IncludeBlocks:   Preserve
IncludeCategories:
  - Regex:           '".*"'
    Priority:        1
  - Regex:           '^<.*\.h>'
    Priority:        2
  - Regex:           '^<.*'
    Priority:        3
# IncludeIsMainRegex: '(Test)?$'
# IncludeIsMainSourceRegex: ''
# IndentAccessModifiers: false
IndentCaseLabels: true
# IndentCaseBlocks: false
# IndentGotoLabels: true
# IndentPPDirectives: None
# IndentExternBlock: AfterExternBlock
# IndentRequires:  false
IndentWidth:     4
# IndentWrappedFunctionNames: false
# InsertTrailingCommas: None
# JavaScriptQuotes: Leave
# JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
# LambdaBodyIndentation: Signature
# MacroBlockBegin: ''
# MacroBlockEnd:   ''
# MaxEmptyLinesToKeep: 1
# NamespaceIndentation: None
# PenaltyBreakAssignment: 2
# PenaltyBreakBeforeFirstCallParameter: 19
# PenaltyBreakComment: 300
# PenaltyBreakFirstLessLess: 120
# PenaltyBreakOpenParenthesis: 0
# PenaltyBreakString: 1000
# PenaltyBreakTemplateDeclaration: 10
# PenaltyExcessCharacter: 1000000
# PenaltyReturnTypeOnItsOwnLine: 60
# PenaltyIndentedWhitespace: 0
# PointerAlignment: Right
# PPIndentWidth:   -1
# ReferenceAlignment: Pointer
# ReflowComments:  true
# RemoveBracesLLVM: false
# SeparateDefinitionBlocks: Leave
# ShortNamespaceLines: 1
# SortIncludes:    CaseSensitive
# SortJavaStaticImport: Before
# SortUsingDeclarations: true
# SpaceAfterCStyleCast: false
# SpaceAfterLogicalNot: false
# SpaceAfterTemplateKeyword: true
# SpaceBeforeAssignmentOperators: true
# SpaceBeforeCaseColon: false
# SpaceBeforeCpp11BracedList: false
# SpaceBeforeCtorInitializerColon: true
# SpaceBeforeInheritanceColon: true
# SpaceBeforeParens: ControlStatements
# SpaceBeforeParensOptions:
#   AfterControlStatements: true
#   AfterForeachMacros: true
#   AfterFunctionDefinitionName: false
#   AfterFunctionDeclarationName: false
#   AfterIfMacros:   true
#   AfterOverloadedOperator: false
#   BeforeNonEmptyParentheses: false
# SpaceAroundPointerQualifiers: Default
# SpaceBeforeRangeBasedForLoopColon: true
# SpaceInEmptyBlock: false
# SpaceInEmptyParentheses: false
# SpacesBeforeTrailingComments: 1
# SpacesInAngles:  Never
# SpacesInConditionalStatement: false
# SpacesInContainerLiterals: true
# SpacesInCStyleCastParentheses: false
## Godot TODO: We'll want to use a min of 1, but we need to see how to fix
## our comment capitalization at the same time.
SpacesInLineCommentPrefix:
  Minimum:         0
  Maximum:         -1
# SpacesInParentheses: false
# SpacesInSquareBrackets: false
# SpaceBeforeSquareBrackets: false
# BitFieldColonSpacing: Both
# StatementAttributeLikeMacros:
#   - Q_EMIT
# StatementMacros:
#   - Q_UNUSED
#   - QT_REQUIRE_VERSION
TabWidth:        4
# UseCRLF:         false
UseTab:          Always
# WhitespaceSensitiveMacros:
#   - STRINGIZE
#   - PP_STRINGIZE
#   - BOOST_PP_STRINGIZE
#   - NS_SWIFT_NAME
#   - CF_SWIFT_NAME
---
### C++ specific config ###
Language:        Cpp
Standard:        c++17
---
### ObjC specific config ###
Language:        ObjC
# ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 4
# ObjCBreakBeforeNestedBlockParam: true
# ObjCSpaceAfterProperty: false
# ObjCSpaceBeforeProtocolList: true
---
### Java specific config ###
Language:        Java
# BreakAfterJavaFieldAnnotations: false
JavaImportGroups: ['org.godotengine', 'android', 'androidx', 'com.android', 'com.google', 'java', 'javax']
...


================================================
FILE: .gitattributes
================================================
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: [TokisanGames] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Report a technical issue
description: Report a potential bug or technical issue in Terrain3D
body:

- type: markdown
  attributes:
    value: |
      Has your issue already been addressed in [Installation](https://terrain3d.readthedocs.io/en/latest/docs/installation.html), [Preparing textures](https://terrain3d.readthedocs.io/en/latest/docs/texture_prep.html), [Troubleshooting](https://terrain3d.readthedocs.io/en/latest/docs/troubleshooting.html), or [Tips](https://terrain3d.readthedocs.io/en/latest/docs/tips_technical.html)?

- type: input
  attributes:
    label: Terrain3D version
    description: >
      Release version or the commit string of a development build. No -dev versions, provide the commit shown in `git log`.
    placeholder: v1.0.0
  validations:
    required: true

- type: input
  attributes:
    label: System information
    description: |
      - Specify the version of Godot and your OS, GPU and rendering backend (Vulkan Forward+, Mobile, Compatibility/WebGL).
      - You can copy this information to your clipboard by using *Help > Copy System Info* at the top of the editor window.
    placeholder: Godot v4.1.3.stable - Windows 10/64 - Vulkan (Forward+) - dedicated NVIDIA GeForce RTX 3070 Laptop GPU (NVIDIA; 31.0.15.4633)
  validations:
    required: true

- type: dropdown
  id: demo
  attributes:
    label: Is the issue reproducable in the demo?
    description: |
      Try to isolate the problem. E.g. If you're having issues with a texture, put it in the demo and see if it causes the same issue.
    options:
      - ''
      - 'Yes'
      - 'No'
      - 'Not applicable'
  validations:
    required: true

- type: textarea
  attributes:
    label: Issue description
    description: |
      Briefly describe the issue. What doesn't work, what are you expecting, and what have you done to troubleshooting it?
      You can paste or drag in screenshots or videos. Format code with <code>```</code> before and after on their own lines.
  validations:
    required: true
    
- type: textarea
  attributes:
    label: Logs
    description: |
      Terrain3D has [extensive logging](https://terrain3d.readthedocs.io/en/latest/docs/troubleshooting.html#debug-logs). Enable it and attach a text file, or copy the logs here. Format logs with <code>```</code> before and after on their own lines.
  validations:
    required: false
    


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false

contact_links:
  - name: Documentation
    url: https://terrain3d.readthedocs.io/
    about: Many questions and issues have already been answered, including status, tips, and troubleshooting.
  - name: Ask questions on Discord
    url: https://tokisan.com/discord
    about: Just have a question about features? Please use discord.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature request
description: Suggest an idea for Terrain3D, or something else that isn't a technical issue
body:

- type: markdown
  attributes:
    value: |
      Have you reviewed the [status of current and pending features](https://terrain3d.readthedocs.io/en/latest/docs/tips_technical.html#are-certain-features-supported)?
- type: textarea
  attributes:
    label: Description
    description: |
      Please describe the feature you would like to see in Terrain3D, how it might work, and why it's helpful.
      Include examples of other terrain systems, GDC talks, white papers, and links to blogs or code that will be good reference info.
  validations:
    required: true


================================================
FILE: .github/actions/base-deps/action.yml
================================================
name: Setup Base Dependencies
description: Setup base dependencies
inputs:
  platform:
    required: true
    description: Target platform.
runs:
  using: "composite"
  steps:
    - name: Setup Python 3.x
      uses: actions/setup-python@v5
      with:
        python-version: 3.x

    - name: Setup SCons 4.4
      shell: bash
      run: |
        python -c "import sys; print(sys.version)"
        python -m pip install scons==4.4.0
        scons --version

    - name: Setup Android Dependencies
      if: inputs.platform == 'android'
      uses: nttld/setup-ndk@v1
      with:
        ndk-version: r28b
        link-to-sdk: true

    - name: Setup Windows Dependencies
      if: inputs.platform == 'windows'
      shell: sh
      run: |
          sudo apt-get install mingw-w64
          sudo update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix
          sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix

    - name: Setup Web Dependencies
      if: inputs.platform == 'web'
      uses: mymindstorm/setup-emsdk@v14
      with:
        version: 3.1.64
        no-cache: true

    - name: Verify Emscripten setup
      if: inputs.platform == 'web'
      shell: bash
      run: |
        emcc -v


================================================
FILE: .github/actions/build-cache/action.yml
================================================
name: Setup Build Cache
description: Setup build cache.
inputs:
  cache-name:
    description: The cache base name (job name by default).
    default: "${{ github.job }}"
  scons-cache:
    description: The scons cache path.
    default: "${{ github.workspace }}/.scons-cache/"
runs:
  using: "composite"
  steps:
    # Upload cache on completion and check it out now
    - name: Load .scons_cache directory
      uses: actions/cache@v4
      with:
        path: ${{ inputs.scons-cache }}
        key: ${{ inputs.cache-name }}-${{ github.ref }}

        # We try to match an existing cache to restore from it. Each potential key is checked against
        # all existing caches as a prefix. E.g. 'linux-template-minimal' would match any cache that
        # starts with "linux-template-minimal", such as "linux-template-minimal-master-refs/heads/master-6588a4a29af1621086feac0117d5d4d37af957fd".
        #
        # We check these prefixes in this order:
        #
        #   1. The exact match, including the base branch, the commit reference, and the SHA hash of the commit.
        #   2. A partial match for the same base branch and the same commit reference.
        #   3. A partial match for the same base branch and the base branch commit reference.
        #   4. A partial match for the same base branch only (not ideal, matches any PR with the same base branch).

        restore-keys: |
          ${{ inputs.cache-name }}-${{ github.ref }}
          ${{ inputs.cache-name }}-refs/heads/main
          ${{ inputs.cache-name }}

================================================
FILE: .github/workflows/android.yml
================================================
name: 🤖 Android Builds
on: [ workflow_call, workflow_dispatch ]

jobs:
  build:
    name: 🤖 Android ${{ matrix.arch }} ${{ matrix.target }}
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        platform: [android]
        target: [debug, release]
        arch: [arm64, arm32]

    steps:
      - name: Checkout Terrain3D
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Setup Base Dependencies
        uses: ./.github/actions/base-deps
        with:
            platform: ${{ matrix.platform }}

      - name: Setup Build Cache
        uses: ./.github/actions/build-cache
        with:
          cache-name: ${{ matrix.platform }}-${{ matrix.arch }}-${{ matrix.target }}
        continue-on-error: true

      - name: Build Terrain3D
        env:
            SCONS_CACHE: "${{ github.workspace }}/.scons-cache/"
            TARGET: 'template_${{ matrix.target }}'
            ARCH: '${{ matrix.arch }}'
        shell: sh
        run: |
          scons target=$TARGET platform='${{ matrix.platform }}' arch=$ARCH debug_symbols=no -j2

      - name: Include Files
        shell: sh
        run: |
          ls -l project/addons/terrain_3d/bin/
          cp '${{ github.workspace }}/README.md' '${{ github.workspace }}/LICENSE.txt' ${{ github.workspace }}/project/addons/terrain_3d/

      - name: Upload Package
        uses: actions/upload-artifact@v4
        with:
          include-hidden-files: true
          name: t3d-${{ matrix.platform }}-${{ matrix.arch }}-${{ matrix.target }}
          path: |
            ${{ github.workspace }}/project/

  merge:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Merge Artifacts
        uses: actions/upload-artifact/merge@v4
        with:
          include-hidden-files: true
          name: ${{ github.event.repository.name }}
          pattern: t3d-*
          delete-merged: true

================================================
FILE: .github/workflows/build.yml
================================================
# Modeled off of godot-cpp https://github.com/godotengine/godot-cpp/blob/master/.github/workflows/ci.yml

name: 🛠️ Build All
on: 
    push:
        branches: [ main, 1.1-godot4.4 ]
    pull_request:
        paths: [ '**' ]
    workflow_dispatch:

concurrency:
  group: ${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    name: ${{ matrix.name }} ${{ matrix.target }}
    runs-on: ${{ matrix.runner }}
    strategy:
      fail-fast: false
      matrix:
        identifier: [linux, windows, macos, ios, android-arm32, android-arm64, web-nothreads]
        target: [debug, release]
        include:
          - identifier: linux
            platform: linux
            name: 🐧 Linux
            runner: ubuntu-22.04
            flags: arch=x86_64
            
          - identifier: windows
            platform: windows
            name: 🪟 Windows
            runner: ubuntu-22.04
            flags: arch=x86_64

          - identifier: macos
            platform: macos
            name: 🍎 macOS
            runner: macos-latest
            flags: arch=universal

          - identifier: ios
            platform: ios
            name: 🍏 iOS
            runner: macos-latest
            flags: arch=universal

          - identifier: android-arm32
            platform: android
            name: 🤖 Android Arm32
            runner: ubuntu-22.04
            flags: arch=arm32

          - identifier: android-arm64
            platform: android
            name: 🤖 Android Arm64
            runner: ubuntu-22.04
            flags: arch=arm64

          - identifier: web-nothreads
            platform: web
            name: 🌐 Web No-threads
            runner: ubuntu-22.04
            flags: threads=no

    steps:
      - name: Checkout Terrain3D
        env:
            FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
        uses: actions/checkout@v4
        with:
          submodules: recursive
        
      - name: Setup Base Dependencies
        env:
            FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
        uses: ./.github/actions/base-deps
        with:
            platform: ${{ matrix.platform }}

      - name: Setup Build Cache
        env:
            FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
        uses: ./.github/actions/build-cache
        with:
          cache-name: ${{ matrix.identifier }}-${{ matrix.target }}
        continue-on-error: true

      - name: Build Terrain3D
        env:
            SCONS_CACHE: "${{ github.workspace }}/.scons-cache/"
            TARGET: 'template_${{ matrix.target }}'
        shell: sh
        run: |
            scons target=$TARGET platform='${{ matrix.platform }}' ${{ matrix.flags }} debug_symbols=no -j2

      - name: Strip Libraries (Windows/Linux)
        if: ${{ matrix.platform == 'windows' || matrix.platform == 'linux' }}
        shell: sh
        run: |
          ls -l project/addons/terrain_3d/bin/
          strip project/addons/terrain_3d/bin/libterrain.*
          ls -l project/addons/terrain_3d/bin/

      - name: Include Files
        shell: sh
        run: |
          cp '${{ github.workspace }}/README.md' '${{ github.workspace }}/LICENSE.txt' ${{ github.workspace }}/project/addons/terrain_3d/

      - name: Upload Package
        env:
            FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
        uses: actions/upload-artifact@v4
        with:
          include-hidden-files: true
          name: t3d-${{ matrix.identifier }}-${{ matrix.target }}
          path: |
            ${{ github.workspace }}/project/

  merge:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Merge Artifacts
        env:
            FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
        uses: actions/upload-artifact/merge@v4
        with:
          include-hidden-files: true
          name: ${{ github.event.repository.name }}
          pattern: t3d-*
          delete-merged: true

================================================
FILE: .github/workflows/ios.yml
================================================
name: 🍏 iOS Builds
on: [ workflow_call, workflow_dispatch ]

jobs:
  build:
    name: 🍏 iOS ${{ matrix.arch }} ${{ matrix.target }}
    runs-on: macos-latest
    strategy:
      fail-fast: false
      matrix:
        platform: [ios]
        target: [debug, release]
        arch: [universal]

    steps:
      - name: Checkout Terrain3D
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Setup Base Dependencies
        uses: ./.github/actions/base-deps
        with:
            platform: ${{ matrix.platform }}

      - name: Setup Build Cache
        uses: ./.github/actions/build-cache
        with:
          cache-name: ${{ matrix.platform }}-${{ matrix.target }}
        continue-on-error: true

      - name: Build Terrain3D
        env:
            SCONS_CACHE: "${{ github.workspace }}/.scons-cache/"
            TARGET: 'template_${{ matrix.target }}'
            ARCH: '${{ matrix.arch }}'
        shell: sh
        run: |
            scons target=$TARGET platform='${{ matrix.platform }}' arch=$ARCH debug_symbols=no -j2

      - name: Include Files
        shell: sh
        run: |
          ls -l project/addons/terrain_3d/bin/*
          cp '${{ github.workspace }}/README.md' '${{ github.workspace }}/LICENSE.txt' ${{ github.workspace }}/project/addons/terrain_3d/

      - name: Upload Package
        uses: actions/upload-artifact@v4
        with:
          include-hidden-files: true
          name: t3d-${{ matrix.platform }}-${{ matrix.arch }}-${{ matrix.target }}
          path: |
            ${{ github.workspace }}/project/

  merge:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Merge Artifacts
        uses: actions/upload-artifact/merge@v4
        with:
          include-hidden-files: true
          name: ${{ github.event.repository.name }}
          pattern: t3d-*
          delete-merged: true

================================================
FILE: .github/workflows/linux.yml
================================================
name: 🐧 Linux Builds
on: [ workflow_call, workflow_dispatch ]

jobs:
  build:
    name: 🐧 Linux ${{ matrix.arch }} ${{ matrix.target }}
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        platform: [linux]
        target: [debug, release]
        arch: [x86_64]

    steps:
      - name: Checkout Terrain3D
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Setup Base Dependencies
        uses: ./.github/actions/base-deps
        with:
            platform: ${{ matrix.platform }}

      - name: Setup Build Cache
        uses: ./.github/actions/build-cache
        with:
          cache-name: ${{ matrix.platform }}-${{ matrix.target }}
        continue-on-error: true

      - name: Build Terrain3D
        env:
            SCONS_CACHE: "${{ github.workspace }}/.scons-cache/"
            TARGET: 'template_${{ matrix.target }}'
            ARCH: '${{ matrix.arch }}'
        shell: sh
        run: |
          scons target=$TARGET platform='${{ matrix.platform }}' arch=$ARCH debug_symbols=no -j2

      - name: Prepare Files
        shell: sh
        run: |
          ls -l project/addons/terrain_3d/bin/
          strip project/addons/terrain_3d/bin/libterrain.*
          ls -l project/addons/terrain_3d/bin/
          cp '${{ github.workspace }}/README.md' '${{ github.workspace }}/LICENSE.txt' ${{ github.workspace }}/project/addons/terrain_3d/

      - name: Upload Package
        uses: actions/upload-artifact@v4
        with:
          include-hidden-files: true
          name: t3d-${{ matrix.platform }}-${{ matrix.arch }}-${{ matrix.target }}
          path: |
            ${{ github.workspace }}/project/
  
  merge:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Merge Artifacts
        uses: actions/upload-artifact/merge@v4
        with:
          include-hidden-files: true
          name: ${{ github.event.repository.name }}
          pattern: t3d-*
          delete-merged: true

================================================
FILE: .github/workflows/macos.yml
================================================
name: 🍎 macOS Builds
on: [ workflow_call, workflow_dispatch ]

jobs:
  build:
    name: 🍎 macOS ${{ matrix.arch }} ${{ matrix.target }}
    runs-on: macos-latest
    strategy:
      fail-fast: false
      matrix:
        platform: [macos]
        target: [debug, release]
        arch: [universal]

    steps:
      - name: Checkout Terrain3D
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Setup Base Dependencies
        uses: ./.github/actions/base-deps
        with:
            platform: ${{ matrix.platform }}

      - name: Setup Build Cache
        uses: ./.github/actions/build-cache
        with:
          cache-name: ${{ matrix.platform }}-${{ matrix.target }}
        continue-on-error: true

      - name: Build Terrain3D
        env:
            SCONS_CACHE: "${{ github.workspace }}/.scons-cache/"
            TARGET: 'template_${{ matrix.target }}'
            ARCH: '${{ matrix.arch }}'
        shell: sh
        run: |
            scons target=$TARGET platform='${{ matrix.platform }}' arch=$ARCH debug_symbols=no -j2

      - name: Include Files
        shell: sh
        run: |
          ls -l project/addons/terrain_3d/bin/*/
          cp '${{ github.workspace }}/README.md' '${{ github.workspace }}/LICENSE.txt' ${{ github.workspace }}/project/addons/terrain_3d/

      - name: Upload Package
        uses: actions/upload-artifact@v4
        with:
          include-hidden-files: true
          name: t3d-${{ matrix.platform }}-${{ matrix.arch }}-${{ matrix.target }}
          path: |
            ${{ github.workspace }}/project/

  merge:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Merge Artifacts
        uses: actions/upload-artifact/merge@v4
        with:
          include-hidden-files: true
          name: ${{ github.event.repository.name }}
          pattern: t3d-*
          delete-merged: true

================================================
FILE: .github/workflows/web.yml
================================================
name: 🌐 Web Builds
on: [ workflow_call, workflow_dispatch ]

jobs:
  build:
    name: 🌐 Web ${{ matrix.arch }} ${{ matrix.target }}
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        platform: [web]
        target: [debug, release]
        #threads: [yes, no]

    steps:
      - name: Checkout Terrain3D
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Setup Base Dependencies
        uses: ./.github/actions/base-deps
        with:
          platform: ${{ matrix.platform }}

      - name: Setup Build Cache
        uses: ./.github/actions/build-cache
        with:
          cache-name: ${{ matrix.platform }}-nothreads-${{ matrix.target }}
        continue-on-error: true

      - name: Build Terrain3D
        env:
            SCONS_CACHE: "${{ github.workspace }}/.scons-cache/"
            TARGET: 'template_${{ matrix.target }}'
        shell: sh
        run: |
          scons target=$TARGET platform='${{ matrix.platform }}' threads=no debug_symbols=no -j2

      - name: Prepare Files
        shell: sh
        run: |
          ls -l project/addons/terrain_3d/bin/
          cp '${{ github.workspace }}/README.md' '${{ github.workspace }}/LICENSE.txt' ${{ github.workspace }}/project/addons/terrain_3d/

      - name: Upload Package
        uses: actions/upload-artifact@v4
        with:
          include-hidden-files: true
          name: t3d-${{ matrix.platform }}-nothreads-${{ matrix.target }}
          path: |
            ${{ github.workspace }}/project/
  
  merge:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Merge Artifacts
        uses: actions/upload-artifact/merge@v4
        with:
          include-hidden-files: true
          name: ${{ github.event.repository.name }}
          pattern: t3d-*
          delete-merged: true

================================================
FILE: .github/workflows/windows.yml
================================================
name: 🪟 Windows Builds
on: [ workflow_call, workflow_dispatch ]

jobs:
  build:
    name: 🪟 Windows ${{ matrix.arch }} ${{ matrix.target }}
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        platform: [windows]
        target: [debug, release]
        arch: [x86_64]

    steps:
      - name: Checkout Terrain3D
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Setup Base Dependencies
        uses: ./.github/actions/base-deps
        with:
            platform: ${{ matrix.platform }}

      - name: Setup Build Cache
        uses: ./.github/actions/build-cache
        with:
          cache-name: ${{ matrix.platform }}-${{ matrix.target }}
        continue-on-error: true

      - name: Build Terrain3D
        env:
            SCONS_CACHE: "${{ github.workspace }}/.scons-cache/"
            TARGET: 'template_${{ matrix.target }}'
            ARCH: '${{ matrix.arch }}'
        shell: sh
        run: |
            scons target=$TARGET platform='${{ matrix.platform }}' arch=$ARCH debug_symbols=no -j2

      - name: Prepare Files
        shell: sh
        run: |
          ls -l project/addons/terrain_3d/bin/
          strip project/addons/terrain_3d/bin/libterrain.*
          ls -l project/addons/terrain_3d/bin/
          cp '${{ github.workspace }}/README.md' '${{ github.workspace }}/LICENSE.txt' ${{ github.workspace }}/project/addons/terrain_3d/

      - name: Upload Package
        uses: actions/upload-artifact@v4
        with:
          include-hidden-files: true
          name: t3d-${{ matrix.platform }}-${{ matrix.arch }}-${{ matrix.target }}
          path: |
            ${{ github.workspace }}/project/

  merge:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Merge Artifacts
        uses: actions/upload-artifact/merge@v4
        with:
          include-hidden-files: true
          name: ${{ github.event.repository.name }}
          pattern: t3d-*
          delete-merged: true

================================================
FILE: .gitignore
================================================
# Terrain3D
project/addons/terrain_3d/bin/
project/addons/explore-editor-theme/
project/_dev/
project/_export/
project/_tests/
project/test/
src/_archive/
src/gen/
_misc/
_patches/
*.zip

# Docs
doc/_build
doc/art/

# Godot-specific ignores (Include script cache. See godot issue #75388)
/project/.import/
/project/.godot/
export.cfg
export_presets.cfg

# Objects
.scons-cache/
*.os
*.obj
*.o

# SConstruct
.sconf_temp
.sconsign.dblite
*.pyc

# MacOS
.DS_Store

# Editors
.vscode/
.vs/


================================================
FILE: .gitmodules
================================================
[submodule "godot-cpp"]
	path = godot-cpp
	url = https://github.com/godotengine/godot-cpp.git
	branch = master


================================================
FILE: .readthedocs.yaml
================================================
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

version: 2

build:
  os: "ubuntu-22.04"
  tools:
    python: "3.11"

python:
  install:
    - requirements: doc/requirements.txt

sphinx:
  configuration: doc/conf.py

# Possible options: htmlzip, pdf, epub
formats: []

================================================
FILE: AUTHORS.md
================================================
# Terrain3D Authors

The creation of this plugin is thanks to the following contributors.

## Core Team
* Cory Petkovsek [@TokisanGames](https://github.com/TokisanGames)
* Roope Palmroos [@outobugi](https://github.com/outobugi)
* Emerson Rowland [@Xtarsia](https://github.com/Xtarsia)

## MVPs
* Tom Coxon [@tcoxon](https://github.com/tcoxon)
* Aidan Davey [@aidandavey](https://github.com/aidandavey)

## Contributors
* Lorenz [@lw64](https://github.com/lw64)
* Loic Chen [@painfulexistence](https://github.com/painfulexistence)
* [@Dekker3D](https://github.com/Dekker3D)
* Laurent Senta [@laurentsenta](https://github.com/laurentsenta)
* Ryan [@Ryan-000](https://github.com/Ryan-000)
* Jacob Coughenour [@jacobcoughenour](https://github.com/jacobcoughenour)
* Slashscreen [@SlashScreen](https://github.com/SlashScreen)
* Roman Shapiro [@rds1983](https://github.com/rds1983)
* Malido [@Malidos](https://github.com/Malidos)
* Bruno Meneguello [@bkmeneguello](https://github.com/bkmeneguello)
* xht [@xanhast](https://github.com/xanhast)
* [@wenqiangwang](https://github.com/wenqiangwang)
* [@k1r4n8](https://github.com/k1r4n8)
* [@jesus-g20](https://github.com/jesus-g20)
* [@jeffercize](https://github.com/jeffercize)
* [@artoonu](https://github.com/artoonu)
* [@Zennii](https://github.com/Zennii)
* Sven Cannivy [@svencan](https://github.com/svencan)
* StAkira [@stakira](https://github.com/stakira)
* Sean Otto [@seanj29](https://github.com/seanj29)
* Scott Davis [@scottdavis](https://github.com/scottdavis)
* Rose [@az-raven](https://github.com/az-raven)
* [@OzelotVanilla](https://github.com/OzelotVanilla)
* Matt [@FishOfTheNorthStar](https://github.com/FishOfTheNorthStar)
* L [@lfxu](https://github.com/lfxu)
* Joyless [@Joy-less](https://github.com/Joy-less)
* Johan Frohlander [@pew-jfrohlander](https://github.com/pew-jfrohlander)
* [@GabrielPlante](https://github.com/GabrielPlante)
* Furq [@Furqit](https://github.com/Furqit)
* Feiyun Wang [@feiyunw](https://github.com/feiyunw)
* Brian [@epitaque](https://github.com/epitaque)
* Dissonant Void [@DissonantVoid](https://github.com/DissonantVoid)
* [@directedchaossoftware](https://github.com/directedchaossoftware)
* [@CrowhopTech](https://github.com/CrowhopTech)
* Benjamin Wolff [@benjiwolff](https://github.com/benjiwolff)

================================================
FILE: CONTRIBUTING.md
================================================
# Contributing To Terrain3D

We need your help to make this the best terrain plugin for Godot.

Please see [System Architecture](https://terrain3d.readthedocs.io/en/stable/docs/system_architecture.html) to gain an understanding of how the system works. Then review the [roadmap](https://github.com/users/TokisanGames/projects/3) for priority of issues.

If you wish to take on a major component, it's best to join our [discord server](https://tokisan.com/discord) and discuss your plans in #terrain3d-dev to make sure your efforts are aligned with other plans.

**Table of Contents**
* [Important Directories](#important-directories)
* [Setup Your System](#setup-your-system)
* [PR Workflow](#pr-workflow)
* [Code Style](#code-style)
* [Documentation](#documentation)
* [Maintainers](#maintainers)

 
## Important Directories

* `src` - C++ source for the library
* `src/shaders` - GLSL source for the default shader
* `doc/doc_classes` - XML docs for C++ classes
* `doc/docs` - MD tutorial docs
* `project/addons/terrain_3d`
  * `src` - GDScript for the editor plugin: the user interface for hand editing
  * `menu` - GDScript for the tools menu: bakers, channel packer
  * `tools` - GDScript for the importer, which will eventually be merged into the menu
  * `utils` - GDScript for other objects, eg. terrain_3d_objects.gd
  * `extras` - GDScript examples for users


## Setup Your System

Make sure you are setup to [build the plugin from source](https://terrain3d.readthedocs.io/en/stable/docs/building_from_source.html). 

### Install clang-format

clang-format will adjust the style of your code to a consistent standard. Once you install it you can manually run it on all of your code to see or apply changes, and you can set it up to run automatically upon each commit.

#### Installing clang-format binary onto your system.
* Download version 13 or later
* Make sure the LLVM binary directory where `clang-format` is stored gets added to the `PATH` during installation
* Linux/OSX: Install the `clang-format` package, or all of `LLVM` or `clang` if your distribution doesn't provide the standalone tool
* Windows: Download LLVM for Windows from <https://releases.llvm.org/download.html>

#### Using clang-format automatically

We use Godot's clang-format hooks that will format your code upon making a commit. Install the hooks into your repo after cloning.

* Copy `tools/hooks/*` into `.git/hooks` or run `python tools/install-hooks.py`

#### Using clang-format manually

* View a formatted file, no changes on disk: `clang-format <filenames>`
* See what changes would be made: `git-clang-format --diff <filenames>`
* Change the files in place: `clang-format -i <filenames>`

 
## PR Workflow

We use the standard [Godot PR workflow](https://contributing.godotengine.org/en/latest/organization/pull_requests/creating_pull_requests.html). Please submit PRs according to the same process Godot uses.

This includes: 
* Creating a new branch (not main) before submitting the PR.
* Never using git merge, or the `sync` button. Only fetch, push, pull.
* To update your PR to the latest main, rebase it then force push into your branch.
  * `git pull --rebase upstream main`
  * `git push -f`

Read the guide above for more details.


## Code Style

### GDScript

In general, follow the [Godot GDScript style guidelines](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_styleguide.html). 
In addition:
* All variables and functions are static typed, with a colon then space (eg. `var state: int = 3`)
* Auto static typing can be used *only* when the type is specifically assigned (eg. `var point := Vector2(1, 1)`)
* Two blank lines between functions

### GLSL

* Similar to C++ formatting below, except use `float` and no clang-format
* Private uniforms are prefaced with `_` and are hidden from the inspector and not accessible via set/get_shader_param()

### C++

In general, follow the [Godot C++ style guidelines](https://contributing.godotengine.org/en/latest/engine/guidelines/code_style.html).
In addition:

Use const correctness:
* Function parameters that won't be changed (almost all) should be marked const. Exceptions are pointers, or where passing a variable the function is supposed to modify, eg. Terrain3D::_generate_triangles
* Functions that won't change the object should be marked const (e.g. most get_ functions)

Pass by reference:
* Pass everything larger than 4 bytes by reference, including Ref<> and arrays, dictionaries, RIDs. e.g. `const Transform3D &xform`

* Floats:
* Use `real_t` instead of `float`
* Format float literals like `0.0f` or `0.f`
* Float literals and `real_t` variables can share operations (e.g. `mydouble += 1.0f`) unless the compiler complains. e.g. `Math::lerp(mydouble, real_t(0.0f), real_t(1.0f))`

* Standard Library & Godot Functions:
* Use `std::abs`, not `Math::abs` (same), and definitely not `abs` (broken on mingw)
* Use `std::isnan`, not `Math::is_nan` (same)

Braces:
* Everything braced - no if/for one-liners. Including switch cases
* One line setters/getters can go in the header file
* Opening brace on the initial line (eg. `if (condition) {`), and ending brace at the same tab stop as the initial line

Private & Public:
* Private variables/functions prefaced with `_`
* One initial public section for constants
* Private/public/protected for members and functions in that order, in header and cpp files
* Functions in h and cpp files in same order

Other formatting:
* One blank line between functions
* All code passed through clang-format. See above


## Documentation

All PRs that include new methods and features or changed functionality should include documentation updates. This could be in the form of a tutorial page for the user manual, or API changes to the XML Class Reference.

### User Manual

Tutorials and usage documentation lives in [doc/docs](https://github.com/TokisanGames/Terrain3D/tree/main/doc/docs) and is written in Markdown (*.md). Images are stored in `images` and videos are stored [_static/video](https://github.com/TokisanGames/Terrain3D/tree/main/doc/_static/video). 

Pages also need to be included in the table of contents `doc/index.rst`. Readthedocs will then be able to find everything it needs to build the html documentation upon a commit.

### Class Reference

The class reference documentation that contributors edit is stored in [XML files](https://github.com/TokisanGames/Terrain3D/tree/main/doc/classes). These files are used as the source for generated documentation.

Edit the class reference according to the [Godot class reference primer](https://docs.godotengine.org/en/stable/engine_details/class_reference/index.html).

Godot's doc-tool is used to extract or update the class structure from the compiled addon. See below for instructions.

### Using the Documentation Generation Tools

This step isn't required for contributors. You may ask for help generating the XML class structure so you can edit it, or generating the resulting RST files. 

#### To setup your system

1. Use a bash shell available in linux, [gitforwindows](https://gitforwindows.org), or [Microsoft's WSL](https://learn.microsoft.com/en-us/windows/wsl/install).
2. Install the following modules using python's pip: `pip install docutils myst-parser sphinx sphinx-rtd-theme sphinx-rtd-dark-mode`.
3. Edit `doc/build_docs.sh` and adjust the paths to your Godot executable and `make_rst.py`, found in the Godot repository.

#### To edit the documentation

1. Build Terrain3D with your updated code.
2. Within the `doc` folder, run `./build_docs.sh`. The following will occur:
  - The Godot executable dumps the XML structure for all classes, including those of installed addons.
  - Any existing XML files (eg Terrain3D*) will be updated with the new structure, leaving prior written documentation.
  - Sphinx RST files are generated from the XML files.
  - All non-Terrain3D XML files are removed.
  - A local html copy of the docs are generated from the Markdown and RST files, and a browser is open to view them.
3. Fill in the XML files with documentation of the new generated structure and make any other changes to the Markdown files.
4. Run the script again to update the RST files. This isn't necessary for Markdown updates, except to view the changes locally.
5. Push your updates to the Markdown, XML, and RST files to the repository. Due to the nature of generation scripts, carefully review the changes so you only push those you intend.
6. Readthedocs will detect commits to the main tree and will build the online html docs from the Markdown and RST files.

Doc generation via Sphinx is configured by conf.py and requirements.txt. Readthedocs also reads .readthedocs.yaml. The website is configured to automatically build based on specifically chosen branches and tags. `latest` is `main`. `stable` is a tag that we must manually update to point to the latest stable commit.


## Maintainers

There are various responsibilities and processes maintainers need to do to update Terrain3D.

1. Ensure PR builds are successful, and occasionally make changes to the build scripts when Github makes changes.
2. Ensure PRs are up to code standards and include XML documentation. You may need to generate the XML for them first.
3. [Update docs](#using-the-documentation-generation-tools) to generate the XML and RST files. Readthedocs will update automatically once PRs are merged. Though if it fails, you may need to log in and figure out why. It can be a bit finicky. They have automatic tags.
4. [Update C# bindings](generating_csharp_bindings.md) as the API changes.
5. Update versions and tags as indicated below.


## Updating New Versions and Releases of Terrain3D

Edit the following files on new releases and versions.

### New Terrain3D Release Version
* Set src/terrain_3d.h : _version
* Set project/addons/terrain_3d/plugin.cfg : version
* Set doc/conf.py : version
* Rebuild the docs with doc/build_docs.sh
* Review minimum version in terrain.gdextension
* Create a new tag for github
* Create a new branch for new milestones (1.0) so readthedocs will create a new version. You may need to enable it on their website.
* Reassign the `stable` tag for readthedocs to update that doc build. `latest` automatically builds off of `main`.


### New Terrain3DRegion Data Format Version
* Update src/terrain_3d_data.h : CURRENT_DATA_VERSION
* Update docs/data_format.md


### New Year:
* Update Copyright header in all source files and conf.py


## Maintaining multiple versions

Occasionally we might maintain two builds of the same version, such as `1.1-godot4.4` and `1.1` for Godot 4.5+. In this case the difference was the former used the godot-cpp 4.4 API, the latter used the 4.5 API. There was a minor but important difference in our code. I wanted all commits from one branch to be in the other branch, except for the few that changed the godot-cpp API. Here's how that process worked.

1. At the time, `main` was 1.1-dev and I had made a separate `1.1-godot4.4` branch. I made a commit changing godot-cpp to the 4.5 API.
2. Then after some commits, I cherry-picked all of the new ones from `main` into `1.1-godot4.4`.
3. On `main`, I created a tag called `_last-cherry-pick` so that when I periodically updated the 4.4 branch I knew where I left off.
4. Bulk cherry-picking is easy to do with the following:

```
git checkout 1.1-godot4.4                              # Start in the destination branch
git cherry-pick --no-merges _last-cherry-pick..main    # Use any two hashes or tags
git diff main                                          # Ensure the only difference is the 4.5 API change in this example
git push                                               # Upload all bulk cherry-picked commits
```




================================================
FILE: LICENSE.txt
================================================
MIT License

Copyright (c) 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.



================================================
FILE: README.md
================================================
![Terrain3D Logo](/doc/docs/images/terrain3d.jpg)

# Terrain3D
A high performance, editable terrain system for Godot 4.


## Features
* Written in C++ as a GDExtension addon, which works with official builds of Godot Engine
* [Can be accessed](https://terrain3d.readthedocs.io/en/stable/docs/programming_languages.html) by GDScript, C#, and any language Godot supports
* Terrains as small as 64x64m up to 65.5x65.5km (4295km^2) in non-contiguous and variable sized regions
* Up to 32 textures
* Up to 10 levels of detail for the terrain mesh
* Foliage instancing, with up to 10 levels of detail, and a shadow impostor
* Sculpting, holes, texture painting, texture detiling, painting colors and wetness
* Imports heightmaps from [HTerrain](https://github.com/Zylann/godot_heightmap_plugin/), Gaea, World Creator, World Machine, Unity, Unreal and any tool that can export a heightmap. See [heightmaps](https://terrain3d.readthedocs.io/en/stable/docs/heightmaps.html)


## Games Using Terrain3D

Please see the [featured games using Terrain3D](https://terrain3d.readthedocs.io/en/latest/docs/games.html) for examples of what it can do.


## Getting Started

1. Read the [Introduction](https://terrain3d.readthedocs.io/en/stable/docs/introduction.html) to understand how this terrain system works.

2. Read the [Installation & Upgrade](https://terrain3d.readthedocs.io/en/stable/docs/installation.html) instructions.

3. Watch the [tutorial videos](https://terrain3d.readthedocs.io/en/stable/docs/tutorial_videos.html) and read through the documentation.

4. For support, read [Getting Help](https://terrain3d.readthedocs.io/en/stable/docs/getting_help.html) and join our [Discord server](https://tokisan.com/discord).


## Credit
Developed for the Godot community by:

|||
|--|--|
| **Cory Petkovsek, Tokisan Games** | [<img src="https://github.com/dmhendricks/signature-social-icons/blob/master/icons/round-flat-filled/35px/twitter.png?raw=true" width="24"/>](https://twitter.com/TokisanGames) [<img src="https://github.com/dmhendricks/signature-social-icons/blob/master/icons/round-flat-filled/35px/github.png?raw=true" width="24"/>](https://github.com/TokisanGames) [<img src="https://github.com/dmhendricks/signature-social-icons/blob/master/icons/round-flat-filled/35px/www.png?raw=true" width="24"/>](https://tokisan.com/) [<img src="https://github.com/dmhendricks/signature-social-icons/blob/master/icons/round-flat-filled/35px/discord.png?raw=true" width="24"/>](https://tokisan.com/discord) [<img src="https://github.com/dmhendricks/signature-social-icons/blob/master/icons/round-flat-filled/35px/youtube.png?raw=true" width="24"/>](https://www.youtube.com/@TokisanGames)|
| **Roope Palmroos, Outobugi Games** | [<img src="https://github.com/dmhendricks/signature-social-icons/blob/master/icons/round-flat-filled/35px/twitter.png?raw=true" width="24"/>](https://twitter.com/outobugi) [<img src="https://github.com/dmhendricks/signature-social-icons/blob/master/icons/round-flat-filled/35px/github.png?raw=true" width="24"/>](https://github.com/outobugi) [<img src="https://github.com/dmhendricks/signature-social-icons/blob/master/icons/round-flat-filled/35px/www.png?raw=true" width="24"/>](https://outobugi.com/) [<img src="https://github.com/dmhendricks/signature-social-icons/blob/master/icons/round-flat-filled/35px/youtube.png?raw=true" width="24"/>](https://www.youtube.com/@outobugi)|

And the contribution team in [AUTHORS.md](https://terrain3d.readthedocs.io/en/stable/docs/authors.html) and on the right of the github page.


## Contributing

Please see [CONTRIBUTING.md](https://github.com/TokisanGames/Terrain3D/blob/main/CONTRIBUTING.md) if you would like to help make Terrain3D the best terrain system for Godot.


## License

This addon has been released under the [MIT License](https://github.com/TokisanGames/Terrain3D/blob/main/LICENSE.txt).


================================================
FILE: SConstruct
================================================
#!/usr/bin/env python
from glob import glob
from pathlib import Path
import os

# TODO: Do not copy environment after godot-cpp/test is updated <https://github.com/godotengine/godot-cpp/blob/master/test/SConstruct>.
env = SConscript("godot-cpp/SConstruct")

# Add source files.
env.Append(CPPPATH=["src/"])
sources = Glob("src/*.cpp")

# Find gdextension path even if the directory or extension is renamed (e.g. project/addons/example/example.gdextension).
(extension_path,) = glob("project/addons/terrain_3d/*.gdextension")

# Find the addon path (e.g. project/addons/example).
addon_path = Path(extension_path).parent

# Find the project name from the gdextension file (e.g. example).
project_name = Path(extension_path).stem

scons_cache_path = os.environ.get("SCONS_CACHE")
if scons_cache_path != None:
    CacheDir(scons_cache_path)
    print("Scons cache enabled... (path: '" + scons_cache_path + "')")

# Embed documentation into the engine
if env["target"] in ["editor", "template_debug"]:
    doc_data = env.GodotCPPDocData("src/gen/doc_data.gen.cpp", source=Glob("doc/doc_classes/*.xml"))
    sources.append(doc_data)

# Create the library target (e.g. libexample.linux.debug.x86_64.so).
debug_or_release = "release" if env["target"] == "template_release" else "debug"
if env["platform"] == "macos":
    library = env.SharedLibrary(
        "{0}/bin/lib{1}.{2}.{3}.framework/{1}.{2}.{3}".format(
            addon_path,
            project_name,
            env["platform"],
            debug_or_release,
        ),
        source=sources,
    )
else:
    library = env.SharedLibrary(
        "{}/bin/lib{}.{}.{}.{}{}".format(
            addon_path,
            project_name,
            env["platform"],
            debug_or_release,
            env["arch"],
            env["SHLIBSUFFIX"],
        ),
        source=sources,
    )

## Option to use C++20 for this extension by replacing CXXFLAGS
#if env.get("is_msvc", False):
#    env.Replace(CXXFLAGS=["/std:c++20"])
#else:
#    env.Replace(CXXFLAGS=["-std=c++20"])

## Reenable CXXFLAGS removed by the above from godot-cpp/tools/godotcpp.py
# Disable exception handling. Godot doesn't use exceptions anywhere, and this
# saves around 20% of binary size and very significant build time.
#if env["disable_exceptions"]:
#    if env.get("is_msvc", False):
#        env.Append(CPPDEFINES=[("_HAS_EXCEPTIONS", 0)])
#    else:
#        env.Append(CXXFLAGS=["-fno-exceptions"])
#elif env.get("is_msvc", False):
#    env.Append(CXXFLAGS=["/EHsc"])

Default(library)


================================================
FILE: Terrain3D.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.7.34024.191
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Terrain3D", "Terrain3D.vcxproj", "{B8850C81-3339-46A9-9668-CAA004E84629}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|x64 = Debug|x64
		Debug|x86 = Debug|x86
		Release|x64 = Release|x64
		Release|x86 = Release|x86
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{B8850C81-3339-46A9-9668-CAA004E84629}.Debug|x64.ActiveCfg = Debug|x64
		{B8850C81-3339-46A9-9668-CAA004E84629}.Debug|x64.Build.0 = Debug|x64
		{B8850C81-3339-46A9-9668-CAA004E84629}.Debug|x86.ActiveCfg = Debug|Win32
		{B8850C81-3339-46A9-9668-CAA004E84629}.Debug|x86.Build.0 = Debug|Win32
		{B8850C81-3339-46A9-9668-CAA004E84629}.Release|x64.ActiveCfg = Release|x64
		{B8850C81-3339-46A9-9668-CAA004E84629}.Release|x64.Build.0 = Release|x64
		{B8850C81-3339-46A9-9668-CAA004E84629}.Release|x86.ActiveCfg = Release|Win32
		{B8850C81-3339-46A9-9668-CAA004E84629}.Release|x86.Build.0 = Release|Win32
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {119F9825-B9FE-4F51-9225-7EA96BF5BF7F}
	EndGlobalSection
EndGlobal


================================================
FILE: Terrain3D.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <VCProjectVersion>17.0</VCProjectVersion>
    <Keyword>Win32Proj</Keyword>
    <ProjectGuid>{b8850c81-3339-46a9-9668-caa004e84629}</ProjectGuid>
    <RootNamespace>Terrain3D</RootNamespace>
    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>Makefile</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="Shared">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <NMakeBuildCommandLine>scons dev_build=yes</NMakeBuildCommandLine>
    <NMakeReBuildCommandLine>scons dev_build=yes</NMakeReBuildCommandLine>
    <NMakeCleanCommandLine>scons --clean</NMakeCleanCommandLine>
    <NMakeIncludeSearchPath>$(SolutionDir)\src;$(SolutionDir)\godot-cpp\gdextension;$(SolutionDir)\godot-cpp\gen\include;$(SolutionDir)\godot-cpp\include</NMakeIncludeSearchPath>
    <AdditionalOptions>/std:c++17</AdditionalOptions>
    <OutDir>.vs</OutDir>
    <IntDir>.vs</IntDir>
    <NMakePreprocessorDefinitions>GDEXTENSION</NMakePreprocessorDefinitions>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
    <BuildLog>
      <Path>.vs/Terrain3D-build.log</Path>
    </BuildLog>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClInclude Include="src\constants.h" />
    <ClInclude Include="src\generated_texture.h" />
    <ClInclude Include="src\target_node_3d.h" />
    <ClInclude Include="src\terrain_3d_mesher.h" />
    <ClInclude Include="src\register_types.h" />
    <ClInclude Include="src\terrain_3d.h" />
    <ClInclude Include="src\terrain_3d_asset_resource.h" />
    <ClInclude Include="src\terrain_3d_collision.h" />
    <ClInclude Include="src\terrain_3d_data.h" />
    <ClInclude Include="src\terrain_3d_editor.h" />
    <ClInclude Include="src\logger.h" />
    <ClInclude Include="src\terrain_3d_instancer.h" />
    <ClInclude Include="src\terrain_3d_mesh_asset.h" />
    <ClInclude Include="src\terrain_3d_region.h" />
    <ClInclude Include="src\terrain_3d_texture_asset.h" />
    <ClInclude Include="src\terrain_3d_util.h" />
    <ClInclude Include="src\terrain_3d_material.h" />
    <ClInclude Include="src\terrain_3d_assets.h" />
    <ClInclude Include="src\unit_testing.h" />
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\generated_texture.cpp" />
    <ClCompile Include="src\terrain_3d_mesher.cpp" />
    <ClCompile Include="src\register_types.cpp" />
    <ClCompile Include="src\terrain_3d.cpp" />
    <ClCompile Include="src\terrain_3d_collision.cpp" />
    <ClCompile Include="src\terrain_3d_data.cpp" />
    <ClCompile Include="src\terrain_3d_editor.cpp" />
    <ClCompile Include="src\terrain_3d_instancer.cpp" />
    <ClCompile Include="src\terrain_3d_material.cpp" />
    <ClCompile Include="src\terrain_3d_mesh_asset.cpp" />
    <ClCompile Include="src\terrain_3d_region.cpp" />
    <ClCompile Include="src\terrain_3d_texture_asset.cpp" />
    <ClCompile Include="src\terrain_3d_assets.cpp" />
    <ClCompile Include="src\terrain_3d_util.cpp" />
    <ClCompile Include="src\unit_testing.cpp" />
  </ItemGroup>
  <ItemGroup>
    <None Include=".github\actions\base-deps\action.yml" />
    <None Include=".github\actions\build-cache\action.yml" />
    <None Include=".github\ISSUE_TEMPLATE\bug_report.yml" />
    <None Include=".github\ISSUE_TEMPLATE\config.yml" />
    <None Include=".github\ISSUE_TEMPLATE\feature_request.yml" />
    <None Include=".github\workflows\android.yml" />
    <None Include=".github\workflows\build.yml" />
    <None Include=".github\workflows\ios.yml" />
    <None Include=".github\workflows\linux.yml" />
    <None Include=".github\workflows\macos.yml" />
    <None Include=".github\workflows\web.yml" />
    <None Include=".github\workflows\windows.yml" />
    <None Include=".gitignore" />
    <None Include="AUTHORS.md" />
    <None Include="CONTRIBUTING.md" />
    <None Include="doc\build_docs.sh" />
    <None Include="doc\conf.py" />
    <None Include="doc\docs\collision.md" />
    <None Include="doc\docs\generating_csharp_bindings.md" />
    <None Include="doc\docs\introduction.md" />
    <None Include="doc\docs\double_precision.md" />
    <None Include="doc\docs\games.md" />
    <None Include="doc\docs\instancer.md" />
    <None Include="doc\docs\keyboard_shortcuts.md" />
    <None Include="doc\docs\platforms.md" />
    <None Include="doc\docs\nightly_builds.md" />
    <None Include="doc\docs\press.md" />
    <None Include="doc\docs\data_format.md" />
    <None Include="doc\docs\heightmaps.md" />
    <None Include="doc\docs\programming_languages.rst" />
    <None Include="doc\docs\displacement.md" />
    <None Include="doc\docs\texture_painting.md" />
    <None Include="doc\docs\user_interface.md" />
    <None Include="doc\index.rst" />
    <None Include="doc\docs\tips_environment.md">
      <SubType>
      </SubType>
    </None>
    <None Include="project\addons\terrain_3d\extras\shaders\lightweight.gdshader" />
    <None Include="project\addons\terrain_3d\extras\shaders\minimum.gdshader" />
    <None Include="project\addons\terrain_3d\extras\shaders\ocean_shader.gdshader" />
    <None Include="project\addons\terrain_3d\plugin.cfg" />
    <None Include="project\addons\terrain_3d\terrain.gdextension" />
    <None Include="README.md" />
    <None Include="SConstruct" />
    <None Include="src\shaders\debug_views.glsl" />
    <None Include="src\shaders\displacement.glsl" />
    <None Include="src\shaders\displacement_buffer.glsl" />
    <None Include="src\shaders\macro_variation.glsl" />
    <None Include="src\shaders\main.glsl" />
    <None Include="src\shaders\overlays.glsl" />
    <None Include="src\shaders\pbr_views.glsl">
      <FileType>Document</FileType>
    </None>
    <None Include="src\shaders\projection.glsl" />
    <None Include="src\shaders\samplers.glsl" />
    <None Include="src\shaders\backgrounds.glsl" />
    <None Include="src\shaders\editor_functions.glsl" />
    <None Include="src\shaders\dual_scaling.glsl" />
    <None Include="src\shaders\auto_shader.glsl" />
  </ItemGroup>
  <ItemGroup>
    <Text Include=".readthedocs.yaml" />
    <Text Include="doc\docs\import_export.md" />
    <Text Include="doc\docs\occlusion_culling.md" />
    <Text Include="doc\docs\shader_design.md" />
    <Text Include="doc\docs\system_architecture.md" />
    <Text Include="doc\docs\installation.md" />
    <Text Include="doc\docs\controlmap_format.md" />
    <Text Include="doc\docs\getting_help.md" />
    <Text Include="doc\docs\tutorial_videos.md" />
    <Text Include="doc\docs\troubleshooting.md" />
    <Text Include="doc\docs\tips_technical.md" />
    <Text Include="doc\docs\texture_prep.md" />
    <Text Include="doc\docs\building_from_source.md" />
    <Text Include="doc\requirements.txt" />
    <Text Include="doc\_static\theme_overrides.css" />
    <Text Include="LICENSE.txt" />
    <Text Include="doc\docs\navigation.md" />
    <Text Include="src\shaders\gpu_depth.glsl" />
  </ItemGroup>
  <ItemGroup>
    <Xml Include="doc\doc_classes\Terrain3D.xml" />
    <Xml Include="doc\doc_classes\Terrain3DCollision.xml" />
    <Xml Include="doc\doc_classes\Terrain3DData.xml" />
    <Xml Include="doc\doc_classes\Terrain3DEditor.xml" />
    <Xml Include="doc\doc_classes\Terrain3DInstancer.xml" />
    <Xml Include="doc\doc_classes\Terrain3DMaterial.xml" />
    <Xml Include="doc\doc_classes\Terrain3DMeshAsset.xml" />
    <Xml Include="doc\doc_classes\Terrain3DRegion.xml" />
    <Xml Include="doc\doc_classes\Terrain3DTextureAsset.xml" />
    <Xml Include="doc\doc_classes\Terrain3DAssets.xml" />
    <Xml Include="doc\doc_classes\Terrain3DUtil.xml" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: Terrain3D.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="1. Project Files">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
    <Filter Include="2. Docs">
      <UniqueIdentifier>{cddadac5-d2a5-45b0-947d-d3e2b055c87c}</UniqueIdentifier>
    </Filter>
    <Filter Include="6. C++">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="5. Headers">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
    </Filter>
    <Filter Include="4. Shaders">
      <UniqueIdentifier>{fa4f3a1c-e2a4-4421-9b19-e15c14fce184}</UniqueIdentifier>
    </Filter>
    <Filter Include="3. XML">
      <UniqueIdentifier>{0d771ba6-8e4a-4985-895c-d9b8eec8b3fd}</UniqueIdentifier>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="src\terrain_3d_assets.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_mesher.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\register_types.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_editor.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_material.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\constants.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\generated_texture.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\logger.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_util.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_instancer.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_mesh_asset.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_texture_asset.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_asset_resource.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_region.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_data.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\terrain_3d_collision.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\target_node_3d.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
    <ClInclude Include="src\unit_testing.h">
      <Filter>5. Headers</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\terrain_3d_mesher.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\register_types.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d_editor.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d_texture_asset.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d_assets.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d_material.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\generated_texture.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d_util.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d_instancer.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d_mesh_asset.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d_region.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d_data.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\terrain_3d_collision.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
    <ClCompile Include="src\unit_testing.cpp">
      <Filter>6. C++</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <None Include=".github\actions\build-cache\action.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include=".github\actions\base-deps\action.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include=".github\workflows\android.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include=".github\workflows\build.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include=".github\workflows\linux.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include=".github\workflows\macos.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include="project\addons\terrain_3d\plugin.cfg">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include=".github\workflows\windows.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include="project\addons\terrain_3d\terrain.gdextension">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include="src\shaders\debug_views.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="src\shaders\main.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="src\shaders\backgrounds.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include=".gitignore">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include="SConstruct">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include="README.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="CONTRIBUTING.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="AUTHORS.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\index.rst">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="src\shaders\auto_shader.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="src\shaders\dual_scaling.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="src\shaders\editor_functions.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="src\shaders\samplers.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="doc\docs\texture_painting.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\conf.py">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include="doc\docs\press.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\docs\platforms.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include=".github\workflows\ios.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include="doc\docs\nightly_builds.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\docs\double_precision.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\docs\games.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\docs\instancer.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\docs\user_interface.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include=".github\ISSUE_TEMPLATE\bug_report.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include=".github\ISSUE_TEMPLATE\config.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include=".github\ISSUE_TEMPLATE\feature_request.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include="doc\docs\collision.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\docs\data_format.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\docs\introduction.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include=".github\workflows\web.yml">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include="project\addons\terrain_3d\extras\shaders\minimum.gdshader">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="doc\docs\heightmaps.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\docs\tips_environment.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="src\shaders\overlays.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="doc\docs\keyboard_shortcuts.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="project\addons\terrain_3d\extras\shaders\lightweight.gdshader">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="doc\docs\generating_csharp_bindings.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="doc\docs\programming_languages.rst">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="src\shaders\displacement.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="src\shaders\displacement_buffer.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="src\shaders\pbr_views.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="doc\docs\displacement.md">
      <Filter>2. Docs</Filter>
    </None>
    <None Include="src\shaders\macro_variation.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="src\shaders\projection.glsl">
      <Filter>4. Shaders</Filter>
    </None>
    <None Include="doc\build_docs.sh">
      <Filter>1. Project Files</Filter>
    </None>
    <None Include="project\addons\terrain_3d\extras\shaders\ocean_shader.gdshader">
      <Filter>4. Shaders</Filter>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Text Include=".readthedocs.yaml">
      <Filter>1. Project Files</Filter>
    </Text>
    <Text Include="LICENSE.txt">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\building_from_source.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\import_export.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\occlusion_culling.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\shader_design.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\system_architecture.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\texture_prep.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\tips_technical.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\troubleshooting.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\installation.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\controlmap_format.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\getting_help.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\_static\theme_overrides.css">
      <Filter>1. Project Files</Filter>
    </Text>
    <Text Include="doc\docs\navigation.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="doc\docs\tutorial_videos.md">
      <Filter>2. Docs</Filter>
    </Text>
    <Text Include="src\shaders\gpu_depth.glsl">
      <Filter>4. Shaders</Filter>
    </Text>
    <Text Include="doc\requirements.txt">
      <Filter>1. Project Files</Filter>
    </Text>
  </ItemGroup>
  <ItemGroup>
    <Xml Include="doc\doc_classes\Terrain3D.xml">
      <Filter>3. XML</Filter>
    </Xml>
    <Xml Include="doc\doc_classes\Terrain3DAssets.xml">
      <Filter>3. XML</Filter>
    </Xml>
    <Xml Include="doc\doc_classes\Terrain3DData.xml">
      <Filter>3. XML</Filter>
    </Xml>
    <Xml Include="doc\doc_classes\Terrain3DEditor.xml">
      <Filter>3. XML</Filter>
    </Xml>
    <Xml Include="doc\doc_classes\Terrain3DInstancer.xml">
      <Filter>3. XML</Filter>
    </Xml>
    <Xml Include="doc\doc_classes\Terrain3DMaterial.xml">
      <Filter>3. XML</Filter>
    </Xml>
    <Xml Include="doc\doc_classes\Terrain3DMeshAsset.xml">
      <Filter>3. XML</Filter>
    </Xml>
    <Xml Include="doc\doc_classes\Terrain3DRegion.xml">
      <Filter>3. XML</Filter>
    </Xml>
    <Xml Include="doc\doc_classes\Terrain3DTextureAsset.xml">
      <Filter>3. XML</Filter>
    </Xml>
    <Xml Include="doc\doc_classes\Terrain3DUtil.xml">
      <Filter>3. XML</Filter>
    </Xml>
    <Xml Include="doc\doc_classes\Terrain3DCollision.xml">
      <Filter>3. XML</Filter>
    </Xml>
  </ItemGroup>
</Project>

================================================
FILE: Terrain3D.vcxproj.user
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ShowAllFiles>false</ShowAllFiles>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LocalDebuggerCommand>c:\gd\bin\Godot_v4.5.1-stable_win64.exe</LocalDebuggerCommand>
    <LocalDebuggerCommandArguments>-e project.godot</LocalDebuggerCommandArguments>
    <LocalDebuggerWorkingDirectory>project</LocalDebuggerWorkingDirectory>
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  </PropertyGroup>
</Project>

================================================
FILE: doc/Makefile
================================================
# Minimal makefile for Sphinx documentation
#

# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS    ?=
SPHINXBUILD   ?= sphinx-build
SOURCEDIR     = .
BUILDDIR      = _build

# Put it first so that "make" without argument is like "make help".
help:
	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help Makefile

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

install:
	python -m venv .venv && \
	. .venv/bin/activate && \
	pip install -r requirements.txt && \
	echo "Setup complete. Remember to run 'source .venv/bin/activate' to activate the virtual environment."

serve:
	source ./.venv/bin/activate && \
	make html && \
	python -m http.server --directory _build/html


================================================
FILE: doc/_static/theme_overrides.css
================================================
/* override table width restrictions */
.wy-table-responsive table td, .wy-table-responsive table th {
	white-space: normal;
}

.wy-table-responsive {
	margin-bottom: 24px;
	max-width: 100%;
	overflow: visible;
}


================================================
FILE: doc/api/class_terrain3d.rst
================================================
:github_url: hide

.. DO NOT EDIT THIS FILE!!!
.. Generated automatically from Godot engine sources.
.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
.. XML source: https://github.com/godotengine/godot/tree/master/../_plugins/Terrain3D/doc/doc_classes/Terrain3D.xml.

.. _class_Terrain3D:

Terrain3D
=========

**Inherits:** ``Node3D``

.. rst-class:: classref-introduction-group

Description
-----------

Terrain3D is a high performance, editable terrain system for Godot 4. It provides a clipmap based terrain that supports terrains from 64x64m up to 65.5x65.5km with multiple LODs, 32 textures, and editor tools for importing or creating terrains.

This class handles mesh generation, and management of the whole system. See `System Architecture <https://terrain3d.readthedocs.io/en/stable/docs/system_architecture.html>`__ for design details.

.. rst-class:: classref-reftable-group

Properties
----------

.. table::
   :widths: auto

   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | :ref:`Terrain3DAssets<class_Terrain3DAssets>`               | :ref:`assets<class_Terrain3D_property_assets>`                                                 |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``Shader``                                                  | :ref:`buffer_shader_override<class_Terrain3D_property_buffer_shader_override>`                 |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`buffer_shader_override_enabled<class_Terrain3D_property_buffer_shader_override_enabled>` | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | RenderingServer.ShadowCastingSetting                        | :ref:`cast_shadows<class_Terrain3D_property_cast_shadows>`                                     | ``1``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``Node3D``                                                  | :ref:`clipmap_target<class_Terrain3D_property_clipmap_target>`                                 |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | :ref:`Terrain3DCollision<class_Terrain3DCollision>`         | :ref:`collision<class_Terrain3D_property_collision>`                                           |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`collision_layer<class_Terrain3D_property_collision_layer>`                               | ``1``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`collision_mask<class_Terrain3D_property_collision_mask>`                                 | ``1``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | :ref:`CollisionMode<enum_Terrain3DCollision_CollisionMode>` | :ref:`collision_mode<class_Terrain3D_property_collision_mode>`                                 | ``1``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``float``                                                   | :ref:`collision_priority<class_Terrain3D_property_collision_priority>`                         | ``1.0``         |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`collision_radius<class_Terrain3D_property_collision_radius>`                             | ``64``          |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`collision_shape_size<class_Terrain3D_property_collision_shape_size>`                     | ``16``          |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``Node3D``                                                  | :ref:`collision_target<class_Terrain3D_property_collision_target>`                             |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``float``                                                   | :ref:`cull_margin<class_Terrain3D_property_cull_margin>`                                       | ``0.0``         |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | :ref:`Terrain3DData<class_Terrain3DData>`                   | :ref:`data<class_Terrain3D_property_data>`                                                     |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``String``                                                  | :ref:`data_directory<class_Terrain3D_property_data_directory>`                                 | ``""``          |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | :ref:`DebugLevel<enum_Terrain3D_DebugLevel>`                | :ref:`debug_level<class_Terrain3D_property_debug_level>`                                       | ``0``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``float``                                                   | :ref:`displacement_scale<class_Terrain3D_property_displacement_scale>`                         | ``1.0``         |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``float``                                                   | :ref:`displacement_sharpness<class_Terrain3D_property_displacement_sharpness>`                 | ``0.25``        |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`free_editor_textures<class_Terrain3D_property_free_editor_textures>`                     | ``true``        |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | GeometryInstance3D.GIMode                                   | :ref:`gi_mode<class_Terrain3D_property_gi_mode>`                                               | ``1``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | :ref:`Terrain3DInstancer<class_Terrain3DInstancer>`         | :ref:`instancer<class_Terrain3D_property_instancer>`                                           |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | :ref:`InstancerMode<enum_Terrain3DInstancer_InstancerMode>` | :ref:`instancer_mode<class_Terrain3D_property_instancer_mode>`                                 | ``1``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``float``                                                   | :ref:`label_distance<class_Terrain3D_property_label_distance>`                                 | ``0.0``         |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`label_size<class_Terrain3D_property_label_size>`                                         | ``48``          |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | :ref:`Terrain3DMaterial<class_Terrain3DMaterial>`           | :ref:`material<class_Terrain3D_property_material>`                                             |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`mesh_lods<class_Terrain3D_property_mesh_lods>`                                           | ``7``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`mesh_size<class_Terrain3D_property_mesh_size>`                                           | ``48``          |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`mouse_layer<class_Terrain3D_property_mouse_layer>`                                       | ``32``          |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | RenderingServer.ShadowCastingSetting                        | :ref:`ocean_cast_shadows<class_Terrain3D_property_ocean_cast_shadows>`                         | ``0``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``float``                                                   | :ref:`ocean_cull_margin<class_Terrain3D_property_ocean_cull_margin>`                           | ``20.0``        |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`ocean_enabled<class_Terrain3D_property_ocean_enabled>`                                   | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | GeometryInstance3D.GIMode                                   | :ref:`ocean_gi_mode<class_Terrain3D_property_ocean_gi_mode>`                                   | ``0``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``Node3D``                                                  | :ref:`ocean_light_target<class_Terrain3D_property_ocean_light_target>`                         |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``Material``                                                | :ref:`ocean_material<class_Terrain3D_property_ocean_material>`                                 |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`ocean_mesh_lods<class_Terrain3D_property_ocean_mesh_lods>`                               | ``7``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`ocean_mesh_size<class_Terrain3D_property_ocean_mesh_size>`                               | ``32``          |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`ocean_render_layers<class_Terrain3D_property_ocean_render_layers>`                       | ``1``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`ocean_tessellation_level<class_Terrain3D_property_ocean_tessellation_level>`             | ``0``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``float``                                                   | :ref:`ocean_vertex_spacing<class_Terrain3D_property_ocean_vertex_spacing>`                     | ``4.0``         |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``PhysicsMaterial``                                         | :ref:`physics_material<class_Terrain3D_property_physics_material>`                             |                 |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | :ref:`RegionSize<enum_Terrain3D_RegionSize>`                | :ref:`region_size<class_Terrain3D_property_region_size>`                                       | ``256``         |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`render_layers<class_Terrain3D_property_render_layers>`                                   | ``2147483649``  |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`save_16_bit<class_Terrain3D_property_save_16_bit>`                                       | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_autoshader<class_Terrain3D_property_show_autoshader>`                               | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_checkered<class_Terrain3D_property_show_checkered>`                                 | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_colormap<class_Terrain3D_property_show_colormap>`                                   | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_contours<class_Terrain3D_property_show_contours>`                                   | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_control_angle<class_Terrain3D_property_show_control_angle>`                         | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_control_blend<class_Terrain3D_property_show_control_blend>`                         | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_control_scale<class_Terrain3D_property_show_control_scale>`                         | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_control_texture<class_Terrain3D_property_show_control_texture>`                     | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_displacement_buffer<class_Terrain3D_property_show_displacement_buffer>`             | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_grey<class_Terrain3D_property_show_grey>`                                           | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_grid<class_Terrain3D_property_show_grid>`                                           | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_heightmap<class_Terrain3D_property_show_heightmap>`                                 | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_instancer_grid<class_Terrain3D_property_show_instancer_grid>`                       | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_jaggedness<class_Terrain3D_property_show_jaggedness>`                               | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_navigation<class_Terrain3D_property_show_navigation>`                               | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_region_grid<class_Terrain3D_property_show_region_grid>`                             | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_roughmap<class_Terrain3D_property_show_roughmap>`                                   | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_texture_albedo<class_Terrain3D_property_show_texture_albedo>`                       | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_texture_ao<class_Terrain3D_property_show_texture_ao>`                               | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_texture_height<class_Terrain3D_property_show_texture_height>`                       | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_texture_normal<class_Terrain3D_property_show_texture_normal>`                       | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_texture_rough<class_Terrain3D_property_show_texture_rough>`                         | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``bool``                                                    | :ref:`show_vertex_grid<class_Terrain3D_property_show_vertex_grid>`                             | ``false``       |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``int``                                                     | :ref:`tessellation_level<class_Terrain3D_property_tessellation_level>`                         | ``0``           |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``String``                                                  | :ref:`version<class_Terrain3D_property_version>`                                               | ``"1.1.0-dev"`` |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+
   | ``float``                                                   | :ref:`vertex_spacing<class_Terrain3D_property_vertex_spacing>`                                 | ``1.0``         |
   +-------------------------------------------------------------+------------------------------------------------------------------------------------------------+-----------------+

.. rst-class:: classref-reftable-group

Methods
-------

.. table::
   :widths: auto

   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``Mesh``                                      | :ref:`bake_mesh<class_Terrain3D_method_bake_mesh>`\ (\ lod\: ``int``, filter\: :ref:`HeightFilter<enum_Terrain3DData_HeightFilter>` = 0\ ) |const|                                                            |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``PackedVector3Array``                        | :ref:`generate_nav_mesh_source_geometry<class_Terrain3D_method_generate_nav_mesh_source_geometry>`\ (\ global_aabb\: ``AABB``, require_nav\: ``bool`` = true\ ) |const|                                       |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``Camera3D``                                  | :ref:`get_camera<class_Terrain3D_method_get_camera>`\ (\ ) |const|                                                                                                                                            |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``Vector3``                                   | :ref:`get_clipmap_target_position<class_Terrain3D_method_get_clipmap_target_position>`\ (\ ) |const|                                                                                                          |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``Vector3``                                   | :ref:`get_collision_target_position<class_Terrain3D_method_get_collision_target_position>`\ (\ ) |const|                                                                                                      |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | :ref:`Terrain3DEditor<class_Terrain3DEditor>` | :ref:`get_editor<class_Terrain3D_method_get_editor>`\ (\ ) |const|                                                                                                                                            |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``Vector3``                                   | :ref:`get_intersection<class_Terrain3D_method_get_intersection>`\ (\ src_pos\: ``Vector3``, direction\: ``Vector3``, gpu_mode\: ``bool`` = false\ )                                                           |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``Object``                                    | :ref:`get_plugin<class_Terrain3D_method_get_plugin>`\ (\ ) |const|                                                                                                                                            |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``Dictionary``                                | :ref:`get_raycast_result<class_Terrain3D_method_get_raycast_result>`\ (\ src_pos\: ``Vector3``, direction\: ``Vector3``, collision_mask\: ``int`` = 4294967295, exclude_terrain\: ``bool`` = false\ ) |const| |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | |void|                                        | :ref:`set_camera<class_Terrain3D_method_set_camera>`\ (\ camera\: ``Camera3D``\ )                                                                                                                             |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | |void|                                        | :ref:`set_editor<class_Terrain3D_method_set_editor>`\ (\ editor\: :ref:`Terrain3DEditor<class_Terrain3DEditor>`\ )                                                                                            |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | |void|                                        | :ref:`set_plugin<class_Terrain3D_method_set_plugin>`\ (\ plugin\: ``Object``\ )                                                                                                                               |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | |void|                                        | :ref:`snap<class_Terrain3D_method_snap>`\ (\ )                                                                                                                                                                |
   +-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

.. rst-class:: classref-section-separator

----

.. rst-class:: classref-descriptions-group

Signals
-------

.. _class_Terrain3D_signal_assets_changed:

.. rst-class:: classref-signal

**assets_changed**\ (\ ) :ref:`🔗<class_Terrain3D_signal_assets_changed>`

Emitted when :ref:`assets<class_Terrain3D_property_assets>` is changed.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_signal_material_changed:

.. rst-class:: classref-signal

**material_changed**\ (\ ) :ref:`🔗<class_Terrain3D_signal_material_changed>`

Emitted when :ref:`material<class_Terrain3D_property_material>` is changed.

.. rst-class:: classref-section-separator

----

.. rst-class:: classref-descriptions-group

Enumerations
------------

.. _enum_Terrain3D_DebugLevel:

.. rst-class:: classref-enumeration

enum **DebugLevel**: :ref:`🔗<enum_Terrain3D_DebugLevel>`

.. _class_Terrain3D_constant_ERROR:

.. rst-class:: classref-enumeration-constant

:ref:`DebugLevel<enum_Terrain3D_DebugLevel>` **ERROR** = ``0``

Errors and warnings always print.

.. _class_Terrain3D_constant_INFO:

.. rst-class:: classref-enumeration-constant

:ref:`DebugLevel<enum_Terrain3D_DebugLevel>` **INFO** = ``1``

Typically every function call and other important informational messages.

.. _class_Terrain3D_constant_DEBUG:

.. rst-class:: classref-enumeration-constant

:ref:`DebugLevel<enum_Terrain3D_DebugLevel>` **DEBUG** = ``2``

Detailed steps within functions.

.. _class_Terrain3D_constant_EXTREME:

.. rst-class:: classref-enumeration-constant

:ref:`DebugLevel<enum_Terrain3D_DebugLevel>` **EXTREME** = ``3``

Messages for continuous operations like snapping and editing.

.. rst-class:: classref-item-separator

----

.. _enum_Terrain3D_RegionSize:

.. rst-class:: classref-enumeration

enum **RegionSize**: :ref:`🔗<enum_Terrain3D_RegionSize>`

.. _class_Terrain3D_constant_SIZE_64:

.. rst-class:: classref-enumeration-constant

:ref:`RegionSize<enum_Terrain3D_RegionSize>` **SIZE_64** = ``64``

The region size is 64 x 64 meters, vertices, and pixels on Image maps.

.. _class_Terrain3D_constant_SIZE_128:

.. rst-class:: classref-enumeration-constant

:ref:`RegionSize<enum_Terrain3D_RegionSize>` **SIZE_128** = ``128``

The region size is 128 x 128 meters, vertices, and pixels on Image maps.

.. _class_Terrain3D_constant_SIZE_256:

.. rst-class:: classref-enumeration-constant

:ref:`RegionSize<enum_Terrain3D_RegionSize>` **SIZE_256** = ``256``

The region size is 256 x 256 meters, vertices, and pixels on Image maps. (default)

.. _class_Terrain3D_constant_SIZE_512:

.. rst-class:: classref-enumeration-constant

:ref:`RegionSize<enum_Terrain3D_RegionSize>` **SIZE_512** = ``512``

The region size is 512 x 512 meters, vertices, and pixels on Image maps.

.. _class_Terrain3D_constant_SIZE_1024:

.. rst-class:: classref-enumeration-constant

:ref:`RegionSize<enum_Terrain3D_RegionSize>` **SIZE_1024** = ``1024``

The region size is 1024 x 1024 meters, vertices, and pixels on Image maps.

.. _class_Terrain3D_constant_SIZE_2048:

.. rst-class:: classref-enumeration-constant

:ref:`RegionSize<enum_Terrain3D_RegionSize>` **SIZE_2048** = ``2048``

The region size is 2048 x 2048 meters, vertices, and pixels on Image maps.

.. rst-class:: classref-section-separator

----

.. rst-class:: classref-descriptions-group

Property Descriptions
---------------------

.. _class_Terrain3D_property_assets:

.. rst-class:: classref-property

:ref:`Terrain3DAssets<class_Terrain3DAssets>` **assets** :ref:`🔗<class_Terrain3D_property_assets>`

.. rst-class:: classref-property-setget

- |void| **set_assets**\ (\ value\: :ref:`Terrain3DAssets<class_Terrain3DAssets>`\ )
- :ref:`Terrain3DAssets<class_Terrain3DAssets>` **get_assets**\ (\ )

The list of texture and mesh assets used by Terrain3D. You can optionally save this as an external ``.tres`` text file if you wish to share it with Terrain3D nodes in other scenes.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_buffer_shader_override:

.. rst-class:: classref-property

``Shader`` **buffer_shader_override** :ref:`🔗<class_Terrain3D_property_buffer_shader_override>`

.. rst-class:: classref-property-setget

- |void| **set_buffer_shader_override**\ (\ value\: ``Shader``\ )
- ``Shader`` **get_buffer_shader_override**\ (\ )

.. container:: contribute

	There is currently no description for this property. Please help us by `contributing one <https://contributing.godotengine.org/en/latest/documentation/class_reference.html>`__!

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_buffer_shader_override_enabled:

.. rst-class:: classref-property

``bool`` **buffer_shader_override_enabled** = ``false`` :ref:`🔗<class_Terrain3D_property_buffer_shader_override_enabled>`

.. rst-class:: classref-property-setget

- |void| **set_buffer_shader_override_enabled**\ (\ value\: ``bool``\ )
- ``bool`` **is_buffer_shader_override_enabled**\ (\ )

.. container:: contribute

	There is currently no description for this property. Please help us by `contributing one <https://contributing.godotengine.org/en/latest/documentation/class_reference.html>`__!

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_cast_shadows:

.. rst-class:: classref-property

RenderingServer.ShadowCastingSetting **cast_shadows** = ``1`` :ref:`🔗<class_Terrain3D_property_cast_shadows>`

.. rst-class:: classref-property-setget

- |void| **set_cast_shadows**\ (\ value\: RenderingServer.ShadowCastingSetting\ )
- RenderingServer.ShadowCastingSetting **get_cast_shadows**\ (\ )

Tells the renderer how to cast shadows from the terrain onto other objects. This sets ``GeometryInstance3D.ShadowCastingSetting`` in the engine.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_clipmap_target:

.. rst-class:: classref-property

``Node3D`` **clipmap_target** :ref:`🔗<class_Terrain3D_property_clipmap_target>`

.. rst-class:: classref-property-setget

- |void| **set_clipmap_target**\ (\ value\: ``Node3D``\ )
- ``Node3D`` **get_clipmap_target**\ (\ )

The terrain clipmap mesh and lods will center itself at the position of this node. If null, or if in the editor, it will fall back to the camera position. See :ref:`set_camera()<class_Terrain3D_method_set_camera>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_collision:

.. rst-class:: classref-property

:ref:`Terrain3DCollision<class_Terrain3DCollision>` **collision** :ref:`🔗<class_Terrain3D_property_collision>`

.. rst-class:: classref-property-setget

- :ref:`Terrain3DCollision<class_Terrain3DCollision>` **get_collision**\ (\ )

The active :ref:`Terrain3DCollision<class_Terrain3DCollision>` object.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_collision_layer:

.. rst-class:: classref-property

``int`` **collision_layer** = ``1`` :ref:`🔗<class_Terrain3D_property_collision_layer>`

.. rst-class:: classref-property-setget

- |void| **set_collision_layer**\ (\ value\: ``int``\ )
- ``int`` **get_collision_layer**\ (\ )

The physics layers the terrain lives on. Sets ``CollisionObject3D.collision_layer``.

Alias for :ref:`Terrain3DCollision.layer<class_Terrain3DCollision_property_layer>`.

Also see :ref:`collision_mask<class_Terrain3D_property_collision_mask>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_collision_mask:

.. rst-class:: classref-property

``int`` **collision_mask** = ``1`` :ref:`🔗<class_Terrain3D_property_collision_mask>`

.. rst-class:: classref-property-setget

- |void| **set_collision_mask**\ (\ value\: ``int``\ )
- ``int`` **get_collision_mask**\ (\ )

The physics layers the physics body scans for colliding objects. Sets ``CollisionObject3D.collision_mask``.

Alias for :ref:`Terrain3DCollision.mask<class_Terrain3DCollision_property_mask>`.

Also see :ref:`collision_layer<class_Terrain3D_property_collision_layer>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_collision_mode:

.. rst-class:: classref-property

:ref:`CollisionMode<enum_Terrain3DCollision_CollisionMode>` **collision_mode** = ``1`` :ref:`🔗<class_Terrain3D_property_collision_mode>`

.. rst-class:: classref-property-setget

- |void| **set_collision_mode**\ (\ value\: :ref:`CollisionMode<enum_Terrain3DCollision_CollisionMode>`\ )
- :ref:`CollisionMode<enum_Terrain3DCollision_CollisionMode>` **get_collision_mode**\ (\ )

The selected mode determines if collision is generated and how. See :ref:`CollisionMode<enum_Terrain3DCollision_CollisionMode>` for details.

Alias for :ref:`Terrain3DCollision.mode<class_Terrain3DCollision_property_mode>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_collision_priority:

.. rst-class:: classref-property

``float`` **collision_priority** = ``1.0`` :ref:`🔗<class_Terrain3D_property_collision_priority>`

.. rst-class:: classref-property-setget

- |void| **set_collision_priority**\ (\ value\: ``float``\ )
- ``float`` **get_collision_priority**\ (\ )

The priority with which the physics server uses to solve collisions. The higher the priority, the lower the penetration of a colliding object. Sets ``CollisionObject3D.collision_priority``.

Alias for :ref:`Terrain3DCollision.priority<class_Terrain3DCollision_property_priority>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_collision_radius:

.. rst-class:: classref-property

``int`` **collision_radius** = ``64`` :ref:`🔗<class_Terrain3D_property_collision_radius>`

.. rst-class:: classref-property-setget

- |void| **set_collision_radius**\ (\ value\: ``int``\ )
- ``int`` **get_collision_radius**\ (\ )

If :ref:`collision_mode<class_Terrain3D_property_collision_mode>` is Dynamic, this is the distance range within which collision shapes will be generated.

Alias for :ref:`Terrain3DCollision.radius<class_Terrain3DCollision_property_radius>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_collision_shape_size:

.. rst-class:: classref-property

``int`` **collision_shape_size** = ``16`` :ref:`🔗<class_Terrain3D_property_collision_shape_size>`

.. rst-class:: classref-property-setget

- |void| **set_collision_shape_size**\ (\ value\: ``int``\ )
- ``int`` **get_collision_shape_size**\ (\ )

If :ref:`collision_mode<class_Terrain3D_property_collision_mode>` is Dynamic, this is the size of each collision shape.

Alias for :ref:`Terrain3DCollision.shape_size<class_Terrain3DCollision_property_shape_size>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_collision_target:

.. rst-class:: classref-property

``Node3D`` **collision_target** :ref:`🔗<class_Terrain3D_property_collision_target>`

.. rst-class:: classref-property-setget

- |void| **set_collision_target**\ (\ value\: ``Node3D``\ )
- ``Node3D`` **get_collision_target**\ (\ )

In dynamic mode, the terrain collision will center itself at the position of this node. If null, it will fall back to the :ref:`clipmap_target<class_Terrain3D_property_clipmap_target>` position and failing that will use the camera position. The camera is always used in the editor. See :ref:`set_camera()<class_Terrain3D_method_set_camera>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_cull_margin:

.. rst-class:: classref-property

``float`` **cull_margin** = ``0.0`` :ref:`🔗<class_Terrain3D_property_cull_margin>`

.. rst-class:: classref-property-setget

- |void| **set_cull_margin**\ (\ value\: ``float``\ )
- ``float`` **get_cull_margin**\ (\ )

This margin is added to the vertical component of the terrain mesh bounding boxes (AABB). The terrain already sets its AABB from :ref:`Terrain3DData.get_height_range()<class_Terrain3DData_method_get_height_range>`, which is calculated while sculpting. This setting only needs to be used if the shader has expanded the terrain beyond the AABB and the terrain meshes are being culled at certain viewing angles. This might happen from using :ref:`Terrain3DMaterial.world_background<class_Terrain3DMaterial_property_world_background>` with NOISE and a height value larger than the terrain heights. This setting is similar to ``GeometryInstance3D.extra_cull_margin``, but it only affects the Y axis.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_data:

.. rst-class:: classref-property

:ref:`Terrain3DData<class_Terrain3DData>` **data** :ref:`🔗<class_Terrain3D_property_data>`

.. rst-class:: classref-property-setget

- :ref:`Terrain3DData<class_Terrain3DData>` **get_data**\ (\ )

This class manages loading, saving, adding, and removing of Terrain3DRegions and access to their content.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_data_directory:

.. rst-class:: classref-property

``String`` **data_directory** = ``""`` :ref:`🔗<class_Terrain3D_property_data_directory>`

.. rst-class:: classref-property-setget

- |void| **set_data_directory**\ (\ value\: ``String``\ )
- ``String`` **get_data_directory**\ (\ )

The directory where terrain data will be saved to and loaded from.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_debug_level:

.. rst-class:: classref-property

:ref:`DebugLevel<enum_Terrain3D_DebugLevel>` **debug_level** = ``0`` :ref:`🔗<class_Terrain3D_property_debug_level>`

.. rst-class:: classref-property-setget

- |void| **set_debug_level**\ (\ value\: :ref:`DebugLevel<enum_Terrain3D_DebugLevel>`\ )
- :ref:`DebugLevel<enum_Terrain3D_DebugLevel>` **get_debug_level**\ (\ )

The verbosity of debug messages printed to the console. Errors and warnings are always printed. This can also be set via command line using ``--terrain3d-debug=LEVEL`` where ``LEVEL`` is one of ``ERROR, INFO, DEBUG, EXTREME``. The last includes continuously recurring messages like position updates for the mesh as the camera moves around.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_displacement_scale:

.. rst-class:: classref-property

``float`` **displacement_scale** = ``1.0`` :ref:`🔗<class_Terrain3D_property_displacement_scale>`

.. rst-class:: classref-property-setget

- |void| **set_displacement_scale**\ (\ value\: ``float``\ )
- ``float`` **get_displacement_scale**\ (\ )

A global multiplier for all displaced textures. This is the maximum distance that 2 adjacent verticies can be vertically seperated by. Setting this 1.0 would mean a maximum of + 0.5m, and -0.5m deviation from the collision mesh.

Alias for :ref:`Terrain3DMaterial.displacement_scale<class_Terrain3DMaterial_property_displacement_scale>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_displacement_sharpness:

.. rst-class:: classref-property

``float`` **displacement_sharpness** = ``0.25`` :ref:`🔗<class_Terrain3D_property_displacement_sharpness>`

.. rst-class:: classref-property-setget

- |void| **set_displacement_sharpness**\ (\ value\: ``float``\ )
- ``float`` **get_displacement_sharpness**\ (\ )

Adjusts the transition between textures. When set at `1.0`, the blending of displacment between textures will match the aldebo/normal blend sharpness exactly. Lower values will have a softer transition, avoiding harsh shapes, without compromising the abldeo and normal blend sharpness. If set at or very near to `0.0`, it is possible that more displaced textures can affect less displaced textures at low blend values even if not visible.

Alias for :ref:`Terrain3DMaterial.displacement_sharpness<class_Terrain3DMaterial_property_displacement_sharpness>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_free_editor_textures:

.. rst-class:: classref-property

``bool`` **free_editor_textures** = ``true`` :ref:`🔗<class_Terrain3D_property_free_editor_textures>`

.. rst-class:: classref-property-setget

- |void| **set_free_editor_textures**\ (\ value\: ``bool``\ )
- ``bool`` **get_free_editor_textures**\ (\ )

Frees ground textures used for editing in _ready(). These textures are used to generate the TextureArrays, so if you don't change any :ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>` settings in game, this can be enabled. Also reloads the texture asset list in _enter_tree() in case you load scenes via code and need the textures again. Calls :ref:`Terrain3DAssets.clear_textures()<class_Terrain3DAssets_method_clear_textures>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_gi_mode:

.. rst-class:: classref-property

GeometryInstance3D.GIMode **gi_mode** = ``1`` :ref:`🔗<class_Terrain3D_property_gi_mode>`

.. rst-class:: classref-property-setget

- |void| **set_gi_mode**\ (\ value\: GeometryInstance3D.GIMode\ )
- GeometryInstance3D.GIMode **get_gi_mode**\ (\ )

Tells the renderer which global illumination mode to use for the terrain mesh. This sets ``GeometryInstance3D.gi_mode`` in the engine.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_instancer:

.. rst-class:: classref-property

:ref:`Terrain3DInstancer<class_Terrain3DInstancer>` **instancer** :ref:`🔗<class_Terrain3D_property_instancer>`

.. rst-class:: classref-property-setget

- :ref:`Terrain3DInstancer<class_Terrain3DInstancer>` **get_instancer**\ (\ )

The active :ref:`Terrain3DInstancer<class_Terrain3DInstancer>` object.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_instancer_mode:

.. rst-class:: classref-property

:ref:`InstancerMode<enum_Terrain3DInstancer_InstancerMode>` **instancer_mode** = ``1`` :ref:`🔗<class_Terrain3D_property_instancer_mode>`

.. rst-class:: classref-property-setget

- |void| **set_instancer_mode**\ (\ value\: :ref:`InstancerMode<enum_Terrain3DInstancer_InstancerMode>`\ )
- :ref:`InstancerMode<enum_Terrain3DInstancer_InstancerMode>` **get_instancer_mode**\ (\ )

Normal - Generates MultiMeshInstance3Ds and renders all instances as normal.

Disabled - prevents the instancer from creating any MultiMeshInstance3Ds.

Alias for :ref:`Terrain3DInstancer.mode<class_Terrain3DInstancer_property_mode>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_label_distance:

.. rst-class:: classref-property

``float`` **label_distance** = ``0.0`` :ref:`🔗<class_Terrain3D_property_label_distance>`

.. rst-class:: classref-property-setget

- |void| **set_label_distance**\ (\ value\: ``float``\ )
- ``float`` **get_label_distance**\ (\ )

If label_distance is non-zero (try 1024-4096) it will generate and display region coordinates in the viewport so you can identify the exact region files you are editing. This setting is the visible distance of the labels.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_label_size:

.. rst-class:: classref-property

``int`` **label_size** = ``48`` :ref:`🔗<class_Terrain3D_property_label_size>`

.. rst-class:: classref-property-setget

- |void| **set_label_size**\ (\ value\: ``int``\ )
- ``int`` **get_label_size**\ (\ )

Sets the font size for region labels. See :ref:`label_distance<class_Terrain3D_property_label_distance>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_material:

.. rst-class:: classref-property

:ref:`Terrain3DMaterial<class_Terrain3DMaterial>` **material** :ref:`🔗<class_Terrain3D_property_material>`

.. rst-class:: classref-property-setget

- |void| **set_material**\ (\ value\: :ref:`Terrain3DMaterial<class_Terrain3DMaterial>`\ )
- :ref:`Terrain3DMaterial<class_Terrain3DMaterial>` **get_material**\ (\ )

A custom material for Terrain3D. You can optionally save this as an external ``.tres`` text file if you wish to share it with instances of Terrain3D in other scenes. See :ref:`Terrain3DMaterial<class_Terrain3DMaterial>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_mesh_lods:

.. rst-class:: classref-property

``int`` **mesh_lods** = ``7`` :ref:`🔗<class_Terrain3D_property_mesh_lods>`

.. rst-class:: classref-property-setget

- |void| **set_mesh_lods**\ (\ value\: ``int``\ )
- ``int`` **get_mesh_lods**\ (\ )

The number of lods generated for the terrain meshes. Enable wireframe mode in the viewport to see them.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_mesh_size:

.. rst-class:: classref-property

``int`` **mesh_size** = ``48`` :ref:`🔗<class_Terrain3D_property_mesh_size>`

.. rst-class:: classref-property-setget

- |void| **set_mesh_size**\ (\ value\: ``int``\ )
- ``int`` **get_mesh_size**\ (\ )

The correlated size of the terrain meshes. Lod0 has ``4*mesh_size + 2`` quads per side. E.g. when mesh_size=8, lod0 has 34 quads to a side, including 2 quads for seams.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_mouse_layer:

.. rst-class:: classref-property

``int`` **mouse_layer** = ``32`` :ref:`🔗<class_Terrain3D_property_mouse_layer>`

.. rst-class:: classref-property-setget

- |void| **set_mouse_layer**\ (\ value\: ``int``\ )
- ``int`` **get_mouse_layer**\ (\ )

Godot supports 32 render layers. For most objects, only layers 1-20 are available for selection in the inspector. 21-32 are settable via code, and are considered reserved for editor plugins.

This variable sets the editor render layer (21-32) to be used by ``get_intersection``, which the mouse cursor uses.

You may place other objects on this layer, however ``get_intersection`` will report intersections with them. So either dedicate this layer to Terrain3D, or if you must use all 32 layers, dedicate this one during editing or when using ``get_intersection``, and then you can use it during game play.

See :ref:`get_intersection()<class_Terrain3D_method_get_intersection>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_cast_shadows:

.. rst-class:: classref-property

RenderingServer.ShadowCastingSetting **ocean_cast_shadows** = ``0`` :ref:`🔗<class_Terrain3D_property_ocean_cast_shadows>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_cast_shadows**\ (\ value\: RenderingServer.ShadowCastingSetting\ )
- RenderingServer.ShadowCastingSetting **get_ocean_cast_shadows**\ (\ )

Tells the renderer how to cast shadows from the ocean onto other objects. This sets ``GeometryInstance3D.ShadowCastingSetting`` in the engine.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_cull_margin:

.. rst-class:: classref-property

``float`` **ocean_cull_margin** = ``20.0`` :ref:`🔗<class_Terrain3D_property_ocean_cull_margin>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_cull_margin**\ (\ value\: ``float``\ )
- ``float`` **get_ocean_cull_margin**\ (\ )

This margin is added to the vertical component of the ocean mesh bounding boxes (AABB). When you set the height of your waves in the shader, this margin should be adjusted. If it's too small, the meshes will clip at certain camera angles. If you set it too large, the renderer may have slightly more work to do. This setting is similar to ``GeometryInstance3D.extra_cull_margin``, but it only affects the Y axis.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_enabled:

.. rst-class:: classref-property

``bool`` **ocean_enabled** = ``false`` :ref:`🔗<class_Terrain3D_property_ocean_enabled>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_enabled**\ (\ value\: ``bool``\ )
- ``bool`` **is_ocean_enabled**\ (\ )

Generates another clipmap mesh, which you can apply an ocean shader to and configure independently of the terrain mesh.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_gi_mode:

.. rst-class:: classref-property

GeometryInstance3D.GIMode **ocean_gi_mode** = ``0`` :ref:`🔗<class_Terrain3D_property_ocean_gi_mode>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_gi_mode**\ (\ value\: GeometryInstance3D.GIMode\ )
- GeometryInstance3D.GIMode **get_ocean_gi_mode**\ (\ )

Tells the renderer which global illumination mode to use for the ocean mesh. This sets ``GeometryInstance3D.gi_mode`` in the engine.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_light_target:

.. rst-class:: classref-property

``Node3D`` **ocean_light_target** :ref:`🔗<class_Terrain3D_property_ocean_light_target>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_light_target**\ (\ value\: ``Node3D``\ )
- ``Node3D`` **get_ocean_light_target**\ (\ )

This sets the _light_direction and _light_color uniforms in the ocean shader, if they are present. You can use this for light scattering, detecting if the light is above the horizon, albedo coloring, etc.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_material:

.. rst-class:: classref-property

``Material`` **ocean_material** :ref:`🔗<class_Terrain3D_property_ocean_material>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_material**\ (\ value\: ``Material``\ )
- ``Material`` **get_ocean_material**\ (\ )

You can assign a ``StandardMaterial`` here for testing, but you really need a ``ShaderMaterial``. Start with the example in ``addons/terrain_3d/extras/shaders/M_ocean.tres``, which you can build on. Or use any of the ocean shaders available around the internet, provided you set `skip_vertex_transform` and copy the geomorphing code from our `vertex()` shader, which will properly handle the LOD transitions on the clipmap.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_mesh_lods:

.. rst-class:: classref-property

``int`` **ocean_mesh_lods** = ``7`` :ref:`🔗<class_Terrain3D_property_ocean_mesh_lods>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_mesh_lods**\ (\ value\: ``int``\ )
- ``int`` **get_ocean_mesh_lods**\ (\ )

The number of lods generated for the ocean meshes. Enable wireframe mode in the viewport to see them.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_mesh_size:

.. rst-class:: classref-property

``int`` **ocean_mesh_size** = ``32`` :ref:`🔗<class_Terrain3D_property_ocean_mesh_size>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_mesh_size**\ (\ value\: ``int``\ )
- ``int`` **get_ocean_mesh_size**\ (\ )

The correlated size of the ocean meshes. Lod0 has ``4*ocean_mesh_size + 2`` quads per side. E.g. when ocean_mesh_size=8, lod0 has 34 quads to a side, including 2 quads for seams.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_render_layers:

.. rst-class:: classref-property

``int`` **ocean_render_layers** = ``1`` :ref:`🔗<class_Terrain3D_property_ocean_render_layers>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_render_layers**\ (\ value\: ``int``\ )
- ``int`` **get_ocean_render_layers**\ (\ )

The render layers the ocean is drawn on. This sets ``VisualInstance3D.layers`` in the engine.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_tessellation_level:

.. rst-class:: classref-property

``int`` **ocean_tessellation_level** = ``0`` :ref:`🔗<class_Terrain3D_property_ocean_tessellation_level>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_tessellation_level**\ (\ value\: ``int``\ )
- ``int`` **get_ocean_tessellation_level**\ (\ )

This setting creates up to 6 additional subdivisions of the ocean mesh below LOD0, which provides more vertices for the vertex shader if desired. You can see it in wireframe mode.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_ocean_vertex_spacing:

.. rst-class:: classref-property

``float`` **ocean_vertex_spacing** = ``4.0`` :ref:`🔗<class_Terrain3D_property_ocean_vertex_spacing>`

.. rst-class:: classref-property-setget

- |void| **set_ocean_vertex_spacing**\ (\ value\: ``float``\ )
- ``float`` **get_ocean_vertex_spacing**\ (\ )

The distance between vertices, settable up to 100. Godot units are typically considered to be meters. This laterally scales the ocean vertices on X and Z axes, but does not scale wave height.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_physics_material:

.. rst-class:: classref-property

``PhysicsMaterial`` **physics_material** :ref:`🔗<class_Terrain3D_property_physics_material>`

.. rst-class:: classref-property-setget

- |void| **set_physics_material**\ (\ value\: ``PhysicsMaterial``\ )
- ``PhysicsMaterial`` **get_physics_material**\ (\ )

Applies a ``PhysicsMaterial`` override to the entire terrain StaticBody.

Alias for :ref:`Terrain3DCollision.physics_material<class_Terrain3DCollision_property_physics_material>` See that entry for details.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_region_size:

.. rst-class:: classref-property

:ref:`RegionSize<enum_Terrain3D_RegionSize>` **region_size** = ``256`` :ref:`🔗<class_Terrain3D_property_region_size>`

.. rst-class:: classref-property-setget

- |void| **change_region_size**\ (\ value\: :ref:`RegionSize<enum_Terrain3D_RegionSize>`\ )
- :ref:`RegionSize<enum_Terrain3D_RegionSize>` **get_region_size**\ (\ )

The number of vertices in each region, and the number of pixels for each map in :ref:`Terrain3DRegion<class_Terrain3DRegion>`. 1 pixel always corresponds to 1 vertex. :ref:`vertex_spacing<class_Terrain3D_property_vertex_spacing>` laterally scales regions, but does not change the number of vertices or pixels in each.

There is no undo for this operation. However you can apply it again to reslice, as long as your data doesn't hit the maximum boundaries.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_render_layers:

.. rst-class:: classref-property

``int`` **render_layers** = ``2147483649`` :ref:`🔗<class_Terrain3D_property_render_layers>`

.. rst-class:: classref-property-setget

- |void| **set_render_layers**\ (\ value\: ``int``\ )
- ``int`` **get_render_layers**\ (\ )

The render layers the terrain is drawn on. This sets ``VisualInstance3D.layers`` in the engine. The defaults is layer 1 and 32 (for the mouse cursor). When you set this via code, make sure the layer for :ref:`mouse_layer<class_Terrain3D_property_mouse_layer>` is included, or set that variable again after this so that the mouse cursor and :ref:`get_intersection()<class_Terrain3D_method_get_intersection>` work.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_save_16_bit:

.. rst-class:: classref-property

``bool`` **save_16_bit** = ``false`` :ref:`🔗<class_Terrain3D_property_save_16_bit>`

.. rst-class:: classref-property-setget

- |void| **set_save_16_bit**\ (\ value\: ``bool``\ )
- ``bool`` **get_save_16_bit**\ (\ )

If enabled, heightmaps are saved as 16-bit half-precision to reduce file size. Files are always loaded in 32-bit for editing. Upon save, a copy of the heightmap is converted to 16-bit for writing. It does not change what is currently in memory.

This process is lossy. 16-bit precision gets increasingly worse with every power of 2. At a height of 256m, the precision interval is .25m. At 512m it is .5m. At 1024m it is 1m. Saving a height of 1024.4m will be rounded down to 1024m.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_autoshader:

.. rst-class:: classref-property

``bool`` **show_autoshader** = ``false`` :ref:`🔗<class_Terrain3D_property_show_autoshader>`

.. rst-class:: classref-property-setget

- |void| **set_show_autoshader**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_autoshader**\ (\ )

Displays the area designated for use by the autoshader, which shows materials based upon slope.

Alias for :ref:`Terrain3DMaterial.show_autoshader<class_Terrain3DMaterial_property_show_autoshader>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_checkered:

.. rst-class:: classref-property

``bool`` **show_checkered** = ``false`` :ref:`🔗<class_Terrain3D_property_show_checkered>`

.. rst-class:: classref-property-setget

- |void| **set_show_checkered**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_checkered**\ (\ )

Shows a checkerboard display using a shader rendered pattern. This is turned on if the Texture List is empty.

Note that when a blank texture slot is created, a 1k checkerboard texture is generated and stored in the texture slot. That takes VRAM. The two patterns have a slightly different scale.

Alias for :ref:`Terrain3DMaterial.show_checkered<class_Terrain3DMaterial_property_show_checkered>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_colormap:

.. rst-class:: classref-property

``bool`` **show_colormap** = ``false`` :ref:`🔗<class_Terrain3D_property_show_colormap>`

.. rst-class:: classref-property-setget

- |void| **set_show_colormap**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_colormap**\ (\ )

Shows the color map in the albedo channel.

Alias for :ref:`Terrain3DMaterial.show_colormap<class_Terrain3DMaterial_property_show_colormap>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_contours:

.. rst-class:: classref-property

``bool`` **show_contours** = ``false`` :ref:`🔗<class_Terrain3D_property_show_contours>`

.. rst-class:: classref-property-setget

- |void| **set_show_contours**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_contours**\ (\ )

Overlays contour lines on the terrain. Customize the options in the material when enabled. Press `4` with the mouse in the viewport to toggle.

Alias for :ref:`Terrain3DMaterial.show_contours<class_Terrain3DMaterial_property_show_contours>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_control_angle:

.. rst-class:: classref-property

``bool`` **show_control_angle** = ``false`` :ref:`🔗<class_Terrain3D_property_show_control_angle>`

.. rst-class:: classref-property-setget

- |void| **set_show_control_angle**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_control_angle**\ (\ )

Albedo shows the painted angle. Orange means 0°, Yellow 270°, Cyan 180°, Violet 90°. Or warm colors towards -Z, cool colors +Z, greens/yellows +X, reds/blues -X. Draw all angles coming from the center of a circle for a better understanding.

Alias for :ref:`Terrain3DMaterial.show_control_angle<class_Terrain3DMaterial_property_show_control_angle>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_control_blend:

.. rst-class:: classref-property

``bool`` **show_control_blend** = ``false`` :ref:`🔗<class_Terrain3D_property_show_control_blend>`

.. rst-class:: classref-property-setget

- |void| **set_show_control_blend**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_control_blend**\ (\ )

Displays the values used to blend the textures. Blue shows the autoshader blending, red shows manually painted blending.

Alias for :ref:`Terrain3DMaterial.show_control_blend<class_Terrain3DMaterial_property_show_control_blend>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_control_scale:

.. rst-class:: classref-property

``bool`` **show_control_scale** = ``false`` :ref:`🔗<class_Terrain3D_property_show_control_scale>`

.. rst-class:: classref-property-setget

- |void| **set_show_control_scale**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_control_scale**\ (\ )

Albedo shows the painted scale. Larger scales are more red, smaller scales are more blue. 0.5 middle grey is the default 100% scale.

Alias for :ref:`Terrain3DMaterial.show_control_scale<class_Terrain3DMaterial_property_show_control_scale>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_control_texture:

.. rst-class:: classref-property

``bool`` **show_control_texture** = ``false`` :ref:`🔗<class_Terrain3D_property_show_control_texture>`

.. rst-class:: classref-property-setget

- |void| **set_show_control_texture**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_control_texture**\ (\ )

Albedo shows the base and overlay texture indices defined by the control map. Red pixels indicate the base texture, with brightness showing texture ids 0 to 31. Green pixels indicate the overlay texture. Yellow indicates both.

Alias for :ref:`Terrain3DMaterial.show_control_texture<class_Terrain3DMaterial_property_show_control_texture>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_displacement_buffer:

.. rst-class:: classref-property

``bool`` **show_displacement_buffer** = ``false`` :ref:`🔗<class_Terrain3D_property_show_displacement_buffer>`

.. rst-class:: classref-property-setget

- |void| **set_show_displacement_buffer**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_displacement_buffer**\ (\ )

Alias for :ref:`Terrain3DMaterial.show_displacement_buffer<class_Terrain3DMaterial_property_show_displacement_buffer>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_grey:

.. rst-class:: classref-property

``bool`` **show_grey** = ``false`` :ref:`🔗<class_Terrain3D_property_show_grey>`

.. rst-class:: classref-property-setget

- |void| **set_show_grey**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_grey**\ (\ )

Albedo is set to 0.2 grey.

Alias for :ref:`Terrain3DMaterial.show_grey<class_Terrain3DMaterial_property_show_grey>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_grid:

.. rst-class:: classref-property

``bool`` **show_grid** = ``false`` :ref:`🔗<class_Terrain3D_property_show_grid>`

.. rst-class:: classref-property-setget

- |void| **set_show_region_grid**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_region_grid**\ (\ )

Alias for :ref:`Terrain3DMaterial.show_region_grid<class_Terrain3DMaterial_property_show_region_grid>`. Press `1` with the mouse in the viewport to toggle.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_heightmap:

.. rst-class:: classref-property

``bool`` **show_heightmap** = ``false`` :ref:`🔗<class_Terrain3D_property_show_heightmap>`

.. rst-class:: classref-property-setget

- |void| **set_show_heightmap**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_heightmap**\ (\ )

Albedo is a white to black gradient depending on height. The gradient is scaled to a height of 300, so above that or far below 0 will be all white or black.

Alias for :ref:`Terrain3DMaterial.show_heightmap<class_Terrain3DMaterial_property_show_heightmap>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_instancer_grid:

.. rst-class:: classref-property

``bool`` **show_instancer_grid** = ``false`` :ref:`🔗<class_Terrain3D_property_show_instancer_grid>`

.. rst-class:: classref-property-setget

- |void| **set_show_instancer_grid**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_instancer_grid**\ (\ )

Overlays the 32x32m instancer grid on the terrain, which shows how the instancer data is partitioned. Press `2` with the mouse in the viewport to toggle.

Alias for :ref:`Terrain3DMaterial.show_instancer_grid<class_Terrain3DMaterial_property_show_instancer_grid>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_jaggedness:

.. rst-class:: classref-property

``bool`` **show_jaggedness** = ``false`` :ref:`🔗<class_Terrain3D_property_show_jaggedness>`

.. rst-class:: classref-property-setget

- |void| **set_show_jaggedness**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_jaggedness**\ (\ )

Highlights non-smooth areas of the terrain. Jagged peaks, troughs, or edges that are a bit rough with sharp angles between vertices.

Alias for :ref:`Terrain3DMaterial.show_jaggedness<class_Terrain3DMaterial_property_show_jaggedness>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_navigation:

.. rst-class:: classref-property

``bool`` **show_navigation** = ``false`` :ref:`🔗<class_Terrain3D_property_show_navigation>`

.. rst-class:: classref-property-setget

- |void| **set_show_navigation**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_navigation**\ (\ )

Displays the area designated for generating the navigation mesh.

Alias for :ref:`Terrain3DMaterial.show_navigation<class_Terrain3DMaterial_property_show_navigation>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_region_grid:

.. rst-class:: classref-property

``bool`` **show_region_grid** = ``false`` :ref:`🔗<class_Terrain3D_property_show_region_grid>`

.. rst-class:: classref-property-setget

- |void| **set_show_region_grid**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_region_grid**\ (\ )

Overlays the region grid on the terrain. This is more accurate than the region grid gizmo for determining where the region border is when editing. Press `1` with the mouse in the viewport to toggle.

Alias for :ref:`Terrain3DMaterial.show_region_grid<class_Terrain3DMaterial_property_show_region_grid>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_roughmap:

.. rst-class:: classref-property

``bool`` **show_roughmap** = ``false`` :ref:`🔗<class_Terrain3D_property_show_roughmap>`

.. rst-class:: classref-property-setget

- |void| **set_show_roughmap**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_roughmap**\ (\ )

Albedo is set to the roughness modification map as grey scale. Middle grey, 0.5 means no roughness modification. Black would be high gloss while white is very rough.

Alias for :ref:`Terrain3DMaterial.show_roughmap<class_Terrain3DMaterial_property_show_roughmap>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_texture_albedo:

.. rst-class:: classref-property

``bool`` **show_texture_albedo** = ``false`` :ref:`🔗<class_Terrain3D_property_show_texture_albedo>`

.. rst-class:: classref-property-setget

- |void| **set_show_texture_albedo**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_texture_albedo**\ (\ )

Albedo textures are shown only. Other channels are excluded.

Alias for :ref:`Terrain3DMaterial.show_texture_albedo<class_Terrain3DMaterial_property_show_texture_albedo>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_texture_ao:

.. rst-class:: classref-property

``bool`` **show_texture_ao** = ``false`` :ref:`🔗<class_Terrain3D_property_show_texture_ao>`

.. rst-class:: classref-property-setget

- |void| **set_show_texture_ao**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_texture_ao**\ (\ )

Albedo is set to the painted Ambient Occlusion textures.

Alias for :ref:`Terrain3DMaterial.show_texture_ao<class_Terrain3DMaterial_property_show_texture_ao>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_texture_height:

.. rst-class:: classref-property

``bool`` **show_texture_height** = ``false`` :ref:`🔗<class_Terrain3D_property_show_texture_height>`

.. rst-class:: classref-property-setget

- |void| **set_show_texture_height**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_texture_height**\ (\ )

Albedo is set to the painted Height textures.

Alias for :ref:`Terrain3DMaterial.show_texture_height<class_Terrain3DMaterial_property_show_texture_height>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_texture_normal:

.. rst-class:: classref-property

``bool`` **show_texture_normal** = ``false`` :ref:`🔗<class_Terrain3D_property_show_texture_normal>`

.. rst-class:: classref-property-setget

- |void| **set_show_texture_normal**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_texture_normal**\ (\ )

Albedo is set to the painted Normal textures.

Alias for :ref:`Terrain3DMaterial.show_texture_normal<class_Terrain3DMaterial_property_show_texture_normal>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_texture_rough:

.. rst-class:: classref-property

``bool`` **show_texture_rough** = ``false`` :ref:`🔗<class_Terrain3D_property_show_texture_rough>`

.. rst-class:: classref-property-setget

- |void| **set_show_texture_rough**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_texture_rough**\ (\ )

Albedo is set to the painted Roughness textures. This is different from the roughness modification map above.

Alias for :ref:`Terrain3DMaterial.show_texture_rough<class_Terrain3DMaterial_property_show_texture_rough>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_show_vertex_grid:

.. rst-class:: classref-property

``bool`` **show_vertex_grid** = ``false`` :ref:`🔗<class_Terrain3D_property_show_vertex_grid>`

.. rst-class:: classref-property-setget

- |void| **set_show_vertex_grid**\ (\ value\: ``bool``\ )
- ``bool`` **get_show_vertex_grid**\ (\ )

Overlays the vertex grid on the terrain, showing where each vertex is. Press `3` with the mouse in the viewport to toggle.

Alias for :ref:`Terrain3DMaterial.show_vertex_grid<class_Terrain3DMaterial_property_show_vertex_grid>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_tessellation_level:

.. rst-class:: classref-property

``int`` **tessellation_level** = ``0`` :ref:`🔗<class_Terrain3D_property_tessellation_level>`

.. rst-class:: classref-property-setget

- |void| **set_tessellation_level**\ (\ value\: ``int``\ )
- ``int`` **get_tessellation_level**\ (\ )

Enables displacement using texture heights for additional mesh detail when set above 0. This creates up to 6 additional subdivisions of the terrain mesh below LOD0, and adds a displacement buffer configurable in the material. You can see this in wireframe mode. Set to 0 to disable displacement. See :ref:`Terrain3DMaterial.show_displacement_buffer<class_Terrain3DMaterial_property_show_displacement_buffer>` and look at the Displacement Buffer debug view.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_version:

.. rst-class:: classref-property

``String`` **version** = ``"1.1.0-dev"`` :ref:`🔗<class_Terrain3D_property_version>`

.. rst-class:: classref-property-setget

- ``String`` **get_version**\ (\ )

The current version of Terrain3D.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_property_vertex_spacing:

.. rst-class:: classref-property

``float`` **vertex_spacing** = ``1.0`` :ref:`🔗<class_Terrain3D_property_vertex_spacing>`

.. rst-class:: classref-property-setget

- |void| **set_vertex_spacing**\ (\ value\: ``float``\ )
- ``float`` **get_vertex_spacing**\ (\ )

The distance between vertices, settable up to 100. Godot units are typically considered to be meters. This laterally scales the terrain on X and Z axes.

This variable changes the global position of landscape features. A mountain peak might be at (512, 512), but with a vertex spacing of 2.0 it is now located at (1024, 1024). It retains the same height.

All Terrain3D functions with a global_position expect an absolute global value. If you would normally use :ref:`Terrain3DData.import_images()<class_Terrain3DData_method_import_images>` to import an image in the region at (-1024, -1024), with a vertex_spacing of 2, you'll need to import that image at (-2048, -2048) to place it in the same region.

To scale heights, export the height map and reimport it with a new height scale.

.. rst-class:: classref-section-separator

----

.. rst-class:: classref-descriptions-group

Method Descriptions
-------------------

.. _class_Terrain3D_method_bake_mesh:

.. rst-class:: classref-method

``Mesh`` **bake_mesh**\ (\ lod\: ``int``, filter\: :ref:`HeightFilter<enum_Terrain3DData_HeightFilter>` = 0\ ) |const| :ref:`🔗<class_Terrain3D_method_bake_mesh>`

Generates a static ArrayMesh for the terrain.

\ ``lod`` - Determines the granularity of the generated mesh. The range is 0-8. 4 is recommended.

\ ``filter`` - Controls how vertex Y coordinates are generated from the height map. See :ref:`HeightFilter<enum_Terrain3DData_HeightFilter>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_generate_nav_mesh_source_geometry:

.. rst-class:: classref-method

``PackedVector3Array`` **generate_nav_mesh_source_geometry**\ (\ global_aabb\: ``AABB``, require_nav\: ``bool`` = true\ ) |const| :ref:`🔗<class_Terrain3D_method_generate_nav_mesh_source_geometry>`

Generates source geometry faces for input to nav mesh baking. Geometry is only generated where there are no holes and the terrain has been painted as navigable.

\ ``global_aabb`` - If non-empty, geometry will be generated only within this AABB. If empty, geometry will be generated for the entire terrain.

\ ``require_nav`` - If true, this function will only generate geometry for terrain marked navigable. Otherwise, geometry is generated for the entire terrain within the AABB (which can be useful for dynamic and/or runtime nav mesh baking).

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_get_camera:

.. rst-class:: classref-method

``Camera3D`` **get_camera**\ (\ ) |const| :ref:`🔗<class_Terrain3D_method_get_camera>`

Returns the camera the terrain is currently tracking for position, if not overridden by :ref:`clipmap_target<class_Terrain3D_property_clipmap_target>`. See :ref:`set_camera()<class_Terrain3D_method_set_camera>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_get_clipmap_target_position:

.. rst-class:: classref-method

``Vector3`` **get_clipmap_target_position**\ (\ ) |const| :ref:`🔗<class_Terrain3D_method_get_clipmap_target_position>`

Returns the position on which the terrain mesh is centered, which may be the camera or a target node. See :ref:`clipmap_target<class_Terrain3D_property_clipmap_target>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_get_collision_target_position:

.. rst-class:: classref-method

``Vector3`` **get_collision_target_position**\ (\ ) |const| :ref:`🔗<class_Terrain3D_method_get_collision_target_position>`

Returns the position on which the terrain collision is centered, which may be the camera or a target node. See :ref:`collision_target<class_Terrain3D_property_collision_target>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_get_editor:

.. rst-class:: classref-method

:ref:`Terrain3DEditor<class_Terrain3DEditor>` **get_editor**\ (\ ) |const| :ref:`🔗<class_Terrain3D_method_get_editor>`

Returns the current Terrain3DEditor instance, if it has been set.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_get_intersection:

.. rst-class:: classref-method

``Vector3`` **get_intersection**\ (\ src_pos\: ``Vector3``, direction\: ``Vector3``, gpu_mode\: ``bool`` = false\ ) :ref:`🔗<class_Terrain3D_method_get_intersection>`

Casts a ray from ``src_pos`` pointing towards ``direction``, attempting to intersect the terrain. This operation is does not use physics and is not a typical raycast, so enabling collision is unnecessary. This function likely won't work if src_pos is below the terrain.



This function can operate in one of two modes selected by ``gpu_mode``:

- If gpu_mode is disabled (default), it raymarches from src_pos until the terrain is intersected, up to 4000m away. This works with one function call, and can only intersect the terrain where regions exist. It is slower than gpu_mode and gets increasingly slower the farther away the terrain is, though you may not notice.



- If gpu_mode is enabled, it uses the GPU to detect the mouse. This works wherever the terrain is visible, even outside of regions, but may need to be called twice.



GPU mode places a camera at the specified point and "looks" at the terrain. It uses the depth texture to determine how far away the intersection point is. It requires the use of an editor render layer, (default 32, set with :ref:`mouse_layer<class_Terrain3D_property_mouse_layer>`) while using this function.



The main caveats of using this mode is that the call to get_intersection() requests a viewport be drawn, but cannot wait for it to finish as there is no "await" in C++ and no force draw function in Godot. So the return value is one frame behind, and invalid on the first call. This also means the function cannot be used more than once per frame. This mode works well when used continuously, once per frame, where one frame of difference won't matter. The editor uses this mode to place the mouse cursor decal.



This mode can also be used by your plugins and games, such as a space ship firing lasers at the terrain and causing an explosion at the hit point. However if the calls aren't continuous, eg driven by the mouse, you'll need to call once to capture the viewport image, wait for it to be drawn, then call again to get the result:

::

    var target_point = terrain.get_intersection(camera_pos, camera_dir, true)
    await RenderingServer.frame_post_draw
    target_point = terrain.get_intersection(camera_pos, camera_dir, true)



Possible return values:

- If the terrain is hit, the intersection point is returned.

- If there is no intersection, eg. the ray points towards the sky, it returns the maximum double float value ``Vector3(3.402823466e+38F,...)``. You can check this case with this code: ``if point.z > 3.4e38:``\ 

- On error, it returns ``Vector3(NAN, NAN, NAN)`` and prints a message to the console.



Also see :ref:`get_raycast_result()<class_Terrain3D_method_get_raycast_result>` and :ref:`Terrain3DData.get_height()<class_Terrain3DData_method_get_height>` for alternative functions.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_get_plugin:

.. rst-class:: classref-method

``Object`` **get_plugin**\ (\ ) |const| :ref:`🔗<class_Terrain3D_method_get_plugin>`

Returns the EditorPlugin Object connected to Terrain3D.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_get_raycast_result:

.. rst-class:: classref-method

``Dictionary`` **get_raycast_result**\ (\ src_pos\: ``Vector3``, direction\: ``Vector3``, collision_mask\: ``int`` = 4294967295, exclude_terrain\: ``bool`` = false\ ) |const| :ref:`🔗<class_Terrain3D_method_get_raycast_result>`

This is a helper function that creates a general physics-based raycast and returns the resulting dictionary; it's not limited to terrain use. Raycasts can only detect collision. It is used by our editor using the `on_collision` option to instance on non-terrain meshes.

Direction is added to src_pos and includes magnitude. So to run a raycast from (100, 100, 100) to the ground 100m below, direction would be (0, -110, 0) with margin.

Collision_mask has the physics layers the query will detect as a bitmask. By default, all collision layers are detected.

See `PhysicsDirectSpaceState3D.intersect_ray <https://docs.godotengine.org/en/stable/classes/class_physicsdirectspacestate3d.html#class-physicsdirectspacestate3d-method-intersect-ray>`__ for how to interpret the resulting dictionary.

Also see :ref:`get_intersection()<class_Terrain3D_method_get_intersection>` and :ref:`Terrain3DData.get_height()<class_Terrain3DData_method_get_height>` for alternative functions.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_set_camera:

.. rst-class:: classref-method

|void| **set_camera**\ (\ camera\: ``Camera3D``\ ) :ref:`🔗<class_Terrain3D_method_set_camera>`

Specifies the camera on which the terrain centers. It attempts to aquire the camera from the active viewport.

If the camera is instanced in a sub scene or by code, Terrain3D might not be able to find it, will issue an error, and the terrain will center at (0,0,0) causing LODs to not update until a trackable node is set.

Either specify the camera, or specify the clipmap and/or collision targets. It will use the targets first and fall back to the camera if they are null.

See :ref:`clipmap_target<class_Terrain3D_property_clipmap_target>` and :ref:`collision_target<class_Terrain3D_property_collision_target>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_set_editor:

.. rst-class:: classref-method

|void| **set_editor**\ (\ editor\: :ref:`Terrain3DEditor<class_Terrain3DEditor>`\ ) :ref:`🔗<class_Terrain3D_method_set_editor>`

Sets the current Terrain3DEditor instance.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_set_plugin:

.. rst-class:: classref-method

|void| **set_plugin**\ (\ plugin\: ``Object``\ ) :ref:`🔗<class_Terrain3D_method_set_plugin>`

Sets the EditorPlugin Object connected to Terrain3D.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3D_method_snap:

.. rst-class:: classref-method

|void| **snap**\ (\ ) :ref:`🔗<class_Terrain3D_method_snap>`

Queues the terrain mesh and collision to snap their positions to the target nodes on the next physics frame. Typically this only happens if the targets have moved sufficiently far. See :ref:`clipmap_target<class_Terrain3D_property_clipmap_target>` and :ref:`collision_target<class_Terrain3D_property_collision_target>`.

.. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
.. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)`
.. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
.. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
.. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`
.. |void| replace:: :abbr:`void (No return value.)`


================================================
FILE: doc/api/class_terrain3dassets.rst
================================================
:github_url: hide

.. DO NOT EDIT THIS FILE!!!
.. Generated automatically from Godot engine sources.
.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
.. XML source: https://github.com/godotengine/godot/tree/master/../_plugins/Terrain3D/doc/doc_classes/Terrain3DAssets.xml.

.. _class_Terrain3DAssets:

Terrain3DAssets
===============

**Inherits:** ``Resource``

.. rst-class:: classref-introduction-group

Description
-----------

This class contains arrays of :ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>` and :ref:`Terrain3DMeshAsset<class_Terrain3DMeshAsset>` resources. It is a savable resource, so you can save it to disk and use the same asset list in multiple scenes that use Terrain3D. The amount of data is small, so it can be saved as a git-friendly, text based .tres file or left within the scene file.

.. rst-class:: classref-reftable-group

Properties
----------

.. table::
   :widths: auto

   +----------------------------------------------------------------------------------------+------------------------------------------------------------------+--------+
   | :ref:`Array<class_Array>`\[:ref:`Terrain3DMeshAsset<class_Terrain3DMeshAsset>`\]       | :ref:`mesh_list<class_Terrain3DAssets_property_mesh_list>`       | ``[]`` |
   +----------------------------------------------------------------------------------------+------------------------------------------------------------------+--------+
   | :ref:`Array<class_Array>`\[:ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>`\] | :ref:`texture_list<class_Terrain3DAssets_property_texture_list>` | ``[]`` |
   +----------------------------------------------------------------------------------------+------------------------------------------------------------------+--------+

.. rst-class:: classref-reftable-group

Methods
-------

.. table::
   :widths: auto

   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | |void|                                                    | :ref:`clear_textures<class_Terrain3DAssets_method_clear_textures>`\ (\ update\: ``bool`` = false\ )                                                                             |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | |void|                                                    | :ref:`create_mesh_thumbnails<class_Terrain3DAssets_method_create_mesh_thumbnails>`\ (\ id\: ``int`` = -1, size\: ``Vector2i`` = Vector2i(512, 512), force\: ``bool`` = false\ ) |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``RID``                                                   | :ref:`get_albedo_array_rid<class_Terrain3DAssets_method_get_albedo_array_rid>`\ (\ ) |const|                                                                                    |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | :ref:`Terrain3DMeshAsset<class_Terrain3DMeshAsset>`       | :ref:`get_mesh_asset<class_Terrain3DAssets_method_get_mesh_asset>`\ (\ id\: ``int``\ ) |const|                                                                                  |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``int``                                                   | :ref:`get_mesh_count<class_Terrain3DAssets_method_get_mesh_count>`\ (\ ) |const|                                                                                                |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``RID``                                                   | :ref:`get_normal_array_rid<class_Terrain3DAssets_method_get_normal_array_rid>`\ (\ ) |const|                                                                                    |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``PackedFloat32Array``                                    | :ref:`get_texture_ao_light_affects<class_Terrain3DAssets_method_get_texture_ao_light_affects>`\ (\ ) |const|                                                                    |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``PackedFloat32Array``                                    | :ref:`get_texture_ao_strengths<class_Terrain3DAssets_method_get_texture_ao_strengths>`\ (\ ) |const|                                                                            |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | :ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>` | :ref:`get_texture_asset<class_Terrain3DAssets_method_get_texture_asset>`\ (\ id\: ``int``\ ) |const|                                                                            |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``PackedColorArray``                                      | :ref:`get_texture_colors<class_Terrain3DAssets_method_get_texture_colors>`\ (\ ) |const|                                                                                        |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``int``                                                   | :ref:`get_texture_count<class_Terrain3DAssets_method_get_texture_count>`\ (\ ) |const|                                                                                          |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``PackedVector2Array``                                    | :ref:`get_texture_detiles<class_Terrain3DAssets_method_get_texture_detiles>`\ (\ ) |const|                                                                                      |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``PackedVector2Array``                                    | :ref:`get_texture_displacements<class_Terrain3DAssets_method_get_texture_displacements>`\ (\ ) |const|                                                                          |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``PackedFloat32Array``                                    | :ref:`get_texture_normal_depths<class_Terrain3DAssets_method_get_texture_normal_depths>`\ (\ ) |const|                                                                          |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``PackedFloat32Array``                                    | :ref:`get_texture_roughness_mods<class_Terrain3DAssets_method_get_texture_roughness_mods>`\ (\ ) |const|                                                                        |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | ``PackedFloat32Array``                                    | :ref:`get_texture_uv_scales<class_Terrain3DAssets_method_get_texture_uv_scales>`\ (\ ) |const|                                                                                  |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | Error                                                     | :ref:`save<class_Terrain3DAssets_method_save>`\ (\ path\: ``String`` = ""\ )                                                                                                    |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | |void|                                                    | :ref:`set_mesh_asset<class_Terrain3DAssets_method_set_mesh_asset>`\ (\ id\: ``int``, mesh\: :ref:`Terrain3DMeshAsset<class_Terrain3DMeshAsset>`\ )                              |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | |void|                                                    | :ref:`set_texture_asset<class_Terrain3DAssets_method_set_texture_asset>`\ (\ id\: ``int``, texture\: :ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>`\ )               |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | |void|                                                    | :ref:`update_mesh_list<class_Terrain3DAssets_method_update_mesh_list>`\ (\ )                                                                                                    |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | |void|                                                    | :ref:`update_texture_list<class_Terrain3DAssets_method_update_texture_list>`\ (\ )                                                                                              |
   +-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

.. rst-class:: classref-section-separator

----

.. rst-class:: classref-descriptions-group

Signals
-------

.. _class_Terrain3DAssets_signal_meshes_changed:

.. rst-class:: classref-signal

**meshes_changed**\ (\ ) :ref:`🔗<class_Terrain3DAssets_signal_meshes_changed>`

Emitted when the mesh list is updated, which happens as a result of a :ref:`Terrain3DMeshAsset<class_Terrain3DMeshAsset>` changing.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_signal_textures_changed:

.. rst-class:: classref-signal

**textures_changed**\ (\ ) :ref:`🔗<class_Terrain3DAssets_signal_textures_changed>`

Emitted when this list is updated due to changes in the texture slots, or the files or settings of any :ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>`.

.. rst-class:: classref-section-separator

----

.. rst-class:: classref-descriptions-group

Enumerations
------------

.. _enum_Terrain3DAssets_AssetType:

.. rst-class:: classref-enumeration

enum **AssetType**: :ref:`🔗<enum_Terrain3DAssets_AssetType>`

.. _class_Terrain3DAssets_constant_TYPE_TEXTURE:

.. rst-class:: classref-enumeration-constant

:ref:`AssetType<enum_Terrain3DAssets_AssetType>` **TYPE_TEXTURE** = ``0``

Asset is type Terrain3DTextureAsset.

.. _class_Terrain3DAssets_constant_TYPE_MESH:

.. rst-class:: classref-enumeration-constant

:ref:`AssetType<enum_Terrain3DAssets_AssetType>` **TYPE_MESH** = ``1``

Asset is type Terrain3DMeshAsset.

.. rst-class:: classref-section-separator

----

.. rst-class:: classref-descriptions-group

Constants
---------

.. _class_Terrain3DAssets_constant_MAX_TEXTURES:

.. rst-class:: classref-constant

**MAX_TEXTURES** = ``32`` :ref:`🔗<class_Terrain3DAssets_constant_MAX_TEXTURES>`

Hard coded maximum number of textures, with IDs in the range of 0-31. Cannot easily be expanded.

.. _class_Terrain3DAssets_constant_MAX_MESHES:

.. rst-class:: classref-constant

**MAX_MESHES** = ``256`` :ref:`🔗<class_Terrain3DAssets_constant_MAX_MESHES>`

Limit of the maximum number of meshes. Arbitrary, easily expanded.

.. rst-class:: classref-section-separator

----

.. rst-class:: classref-descriptions-group

Property Descriptions
---------------------

.. _class_Terrain3DAssets_property_mesh_list:

.. rst-class:: classref-property

:ref:`Array<class_Array>`\[:ref:`Terrain3DMeshAsset<class_Terrain3DMeshAsset>`\] **mesh_list** = ``[]`` :ref:`🔗<class_Terrain3DAssets_property_mesh_list>`

.. rst-class:: classref-property-setget

- |void| **set_mesh_list**\ (\ value\: :ref:`Array<class_Array>`\[:ref:`Terrain3DMeshAsset<class_Terrain3DMeshAsset>`\]\ )
- :ref:`Array<class_Array>`\[:ref:`Terrain3DMeshAsset<class_Terrain3DMeshAsset>`\] **get_mesh_list**\ (\ )

The list of mesh assets.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_property_texture_list:

.. rst-class:: classref-property

:ref:`Array<class_Array>`\[:ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>`\] **texture_list** = ``[]`` :ref:`🔗<class_Terrain3DAssets_property_texture_list>`

.. rst-class:: classref-property-setget

- |void| **set_texture_list**\ (\ value\: :ref:`Array<class_Array>`\[:ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>`\]\ )
- :ref:`Array<class_Array>`\[:ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>`\] **get_texture_list**\ (\ )

The list of texture assets.

.. rst-class:: classref-section-separator

----

.. rst-class:: classref-descriptions-group

Method Descriptions
-------------------

.. _class_Terrain3DAssets_method_clear_textures:

.. rst-class:: classref-method

|void| **clear_textures**\ (\ update\: ``bool`` = false\ ) :ref:`🔗<class_Terrain3DAssets_method_clear_textures>`

After textures are loaded, they are combined into a TextureArray. The originals remain in VRAM and are only used if the :ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>` settings are changed and regenerating the TextureArrays are necessary. Use this function to clear the originals if not needed. It removes all textures from the asset list, freeing them if they are not referenced by other objects.

Update will regenerate the texture arrays housing the textures drawn on the terrain. This will remove all textures and turn the terrain checkerboard.

A similar ``clear_meshes`` is less useful so hasn't been included. However you can do the same thing with ``get_mesh_list().clear()``.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_create_mesh_thumbnails:

.. rst-class:: classref-method

|void| **create_mesh_thumbnails**\ (\ id\: ``int`` = -1, size\: ``Vector2i`` = Vector2i(512, 512), force\: ``bool`` = false\ ) :ref:`🔗<class_Terrain3DAssets_method_create_mesh_thumbnails>`

Generates mesh asset preview thumbnails for the asset dock, stored within each mesh asset. Specify id -1 to generate all. By default, mesh thumbnails are not recreated if they already exist. Specify ``force`` to regenerate existing thumbnails.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_albedo_array_rid:

.. rst-class:: classref-method

``RID`` **get_albedo_array_rid**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_albedo_array_rid>`

Returns the resource ID of the TextureArray generated from combining all albedo and height textures.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_mesh_asset:

.. rst-class:: classref-method

:ref:`Terrain3DMeshAsset<class_Terrain3DMeshAsset>` **get_mesh_asset**\ (\ id\: ``int``\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_mesh_asset>`

Returns the specified Terrain3DMeshAsset resource.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_mesh_count:

.. rst-class:: classref-method

``int`` **get_mesh_count**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_mesh_count>`

Returns the number of mesh assets in the list.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_normal_array_rid:

.. rst-class:: classref-method

``RID`` **get_normal_array_rid**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_normal_array_rid>`

Returns the resource ID of the TextureArray generated from combining all normal and roughness textures.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_texture_ao_light_affects:

.. rst-class:: classref-method

``PackedFloat32Array`` **get_texture_ao_light_affects**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_texture_ao_light_affects>`

Returns the array of ao light affects values each texture asset, indexed by asset id.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_texture_ao_strengths:

.. rst-class:: classref-method

``PackedFloat32Array`` **get_texture_ao_strengths**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_texture_ao_strengths>`

Returns the array of AO strengths for each texture asset, indexed by asset id.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_texture_asset:

.. rst-class:: classref-method

:ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>` **get_texture_asset**\ (\ id\: ``int``\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_texture_asset>`

Returns the Terrain3DTextureAsset with the specified ID.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_texture_colors:

.. rst-class:: classref-method

``PackedColorArray`` **get_texture_colors**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_texture_colors>`

Returns the array of albedo tints for each texture asset, indexed by asset id.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_texture_count:

.. rst-class:: classref-method

``int`` **get_texture_count**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_texture_count>`

Returns the number of texture slots used.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_texture_detiles:

.. rst-class:: classref-method

``PackedVector2Array`` **get_texture_detiles**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_texture_detiles>`

Returns the array of detiling values for each texture asset, indexed by asset id.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_texture_displacements:

.. rst-class:: classref-method

``PackedVector2Array`` **get_texture_displacements**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_texture_displacements>`

Returns the array of displacement offset and scale values for each texture asset, indexed by asset id.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_texture_normal_depths:

.. rst-class:: classref-method

``PackedFloat32Array`` **get_texture_normal_depths**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_texture_normal_depths>`

Returns the array of normal strengths for each texture asset, indexed by asset id.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_texture_roughness_mods:

.. rst-class:: classref-method

``PackedFloat32Array`` **get_texture_roughness_mods**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_texture_roughness_mods>`

Returns the array of roughness modification values for each texture asset, indexed by asset id.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_get_texture_uv_scales:

.. rst-class:: classref-method

``PackedFloat32Array`` **get_texture_uv_scales**\ (\ ) |const| :ref:`🔗<class_Terrain3DAssets_method_get_texture_uv_scales>`

Returns the array of uv scale values for each texture asset, indexed by asset id.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_save:

.. rst-class:: classref-method

Error **save**\ (\ path\: ``String`` = ""\ ) :ref:`🔗<class_Terrain3DAssets_method_save>`

Saves this texture list resource to disk, if saved as an external ``.tres`` or ``.res`` resource file.

path - specifies a directory and file name to use from now on.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_set_mesh_asset:

.. rst-class:: classref-method

|void| **set_mesh_asset**\ (\ id\: ``int``, mesh\: :ref:`Terrain3DMeshAsset<class_Terrain3DMeshAsset>`\ ) :ref:`🔗<class_Terrain3DAssets_method_set_mesh_asset>`

Assigns the Terrain3DMeshAsset to the specified ID slot. It can be null to clear the slot. See :ref:`set_texture_asset()<class_Terrain3DAssets_method_set_texture_asset>`.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_set_texture_asset:

.. rst-class:: classref-method

|void| **set_texture_asset**\ (\ id\: ``int``, texture\: :ref:`Terrain3DTextureAsset<class_Terrain3DTextureAsset>`\ ) :ref:`🔗<class_Terrain3DAssets_method_set_texture_asset>`

Adds a Terrain3DTextureAsset at the specified ID slot. The texture can be null to clear the slot, or remove it if its the last in the list. If the specified slot is full, it will be swapped with the source texture ID, or will find the next available ID.

.. rst-class:: classref-item-separator

----

.. _class_Terrain3DAssets_method_update_mesh_list:

.. rst-class:: classref-method

|void| **update_mesh_list**\ (\ ) :ref:`🔗<class_Terrain3DAssets_method_update_mesh_list>`

Updates the internal list of meshes used by the instancer.

.. rst-class:: classref-item-separator

--
Download .txt
gitextract_y8dts4rh/

├── .clang-format
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── actions/
│   │   ├── base-deps/
│   │   │   └── action.yml
│   │   └── build-cache/
│   │       └── action.yml
│   └── workflows/
│       ├── android.yml
│       ├── build.yml
│       ├── ios.yml
│       ├── linux.yml
│       ├── macos.yml
│       ├── web.yml
│       └── windows.yml
├── .gitignore
├── .gitmodules
├── .readthedocs.yaml
├── AUTHORS.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── SConstruct
├── Terrain3D.sln
├── Terrain3D.vcxproj
├── Terrain3D.vcxproj.filters
├── Terrain3D.vcxproj.user
├── doc/
│   ├── Makefile
│   ├── _static/
│   │   └── theme_overrides.css
│   ├── api/
│   │   ├── class_terrain3d.rst
│   │   ├── class_terrain3dassets.rst
│   │   ├── class_terrain3dcollision.rst
│   │   ├── class_terrain3ddata.rst
│   │   ├── class_terrain3deditor.rst
│   │   ├── class_terrain3dinstancer.rst
│   │   ├── class_terrain3dmaterial.rst
│   │   ├── class_terrain3dmeshasset.rst
│   │   ├── class_terrain3dregion.rst
│   │   ├── class_terrain3dtextureasset.rst
│   │   ├── class_terrain3dutil.rst
│   │   └── index.rst
│   ├── build_docs.sh
│   ├── conf.py
│   ├── doc_classes/
│   │   ├── Terrain3D.xml
│   │   ├── Terrain3DAssets.xml
│   │   ├── Terrain3DCollision.xml
│   │   ├── Terrain3DData.xml
│   │   ├── Terrain3DEditor.xml
│   │   ├── Terrain3DInstancer.xml
│   │   ├── Terrain3DMaterial.xml
│   │   ├── Terrain3DMeshAsset.xml
│   │   ├── Terrain3DRegion.xml
│   │   ├── Terrain3DTextureAsset.xml
│   │   └── Terrain3DUtil.xml
│   ├── docs/
│   │   ├── authors.rst
│   │   ├── building_from_source.md
│   │   ├── collision.md
│   │   ├── contributing.rst
│   │   ├── controlmap_format.md
│   │   ├── data_format.md
│   │   ├── displacement.md
│   │   ├── double_precision.md
│   │   ├── games.md
│   │   ├── generating_csharp_bindings.md
│   │   ├── getting_help.md
│   │   ├── heightmaps.md
│   │   ├── import_export.md
│   │   ├── installation.md
│   │   ├── instancer.md
│   │   ├── introduction.md
│   │   ├── keyboard_shortcuts.md
│   │   ├── license.rst
│   │   ├── navigation.md
│   │   ├── nightly_builds.md
│   │   ├── occlusion_culling.md
│   │   ├── platforms.md
│   │   ├── press.md
│   │   ├── programming_languages.rst
│   │   ├── shader_design.md
│   │   ├── system_architecture.md
│   │   ├── texture_painting.md
│   │   ├── texture_prep.md
│   │   ├── tips_environment.md
│   │   ├── tips_technical.md
│   │   ├── troubleshooting.md
│   │   ├── tutorial_videos.md
│   │   └── user_interface.md
│   ├── dump_contributors.py
│   ├── index.rst
│   ├── make.bat
│   └── requirements.txt
├── project/
│   ├── Terrain3D.csproj
│   ├── Terrain3D.sln
│   ├── addons/
│   │   └── terrain_3d/
│   │       ├── brushes/
│   │       │   ├── .gdignore
│   │       │   ├── acrylic1.exr
│   │       │   ├── circle0.exr
│   │       │   ├── circle1.exr
│   │       │   ├── circle2.exr
│   │       │   ├── circle3.exr
│   │       │   ├── circle4.exr
│   │       │   ├── hill1.exr
│   │       │   ├── hill2.exr
│   │       │   ├── mountain1.exr
│   │       │   ├── mountain2.exr
│   │       │   ├── mountain3.exr
│   │       │   ├── mountain4.exr
│   │       │   ├── peak1.exr
│   │       │   ├── peak2.exr
│   │       │   ├── peak3.exr
│   │       │   ├── ring1.exr
│   │       │   ├── smoke.exr
│   │       │   ├── square1.exr
│   │       │   ├── square2.exr
│   │       │   ├── square3.exr
│   │       │   ├── square4.exr
│   │       │   ├── square5.exr
│   │       │   ├── stones.exr
│   │       │   ├── terrain1.exr
│   │       │   ├── terrain2.exr
│   │       │   ├── terrain3.exr
│   │       │   ├── terrain4.exr
│   │       │   ├── terrain5.exr
│   │       │   ├── terrain6.exr
│   │       │   ├── texture1.exr
│   │       │   ├── texture2.exr
│   │       │   ├── texture3.exr
│   │       │   ├── texture4.exr
│   │       │   ├── texture5.exr
│   │       │   └── vegetation1.exr
│   │       ├── csharp/
│   │       │   ├── Terrain3D.cs
│   │       │   ├── Terrain3D.cs.uid
│   │       │   ├── Terrain3DAssets.cs
│   │       │   ├── Terrain3DAssets.cs.uid
│   │       │   ├── Terrain3DCollision.cs
│   │       │   ├── Terrain3DCollision.cs.uid
│   │       │   ├── Terrain3DData.cs
│   │       │   ├── Terrain3DData.cs.uid
│   │       │   ├── Terrain3DEditor.cs
│   │       │   ├── Terrain3DEditor.cs.uid
│   │       │   ├── Terrain3DInstancer.cs
│   │       │   ├── Terrain3DInstancer.cs.uid
│   │       │   ├── Terrain3DMaterial.cs
│   │       │   ├── Terrain3DMaterial.cs.uid
│   │       │   ├── Terrain3DMeshAsset.cs
│   │       │   ├── Terrain3DMeshAsset.cs.uid
│   │       │   ├── Terrain3DRegion.cs
│   │       │   ├── Terrain3DRegion.cs.uid
│   │       │   ├── Terrain3DTextureAsset.cs
│   │       │   ├── Terrain3DTextureAsset.cs.uid
│   │       │   ├── Terrain3DUtil.cs
│   │       │   └── Terrain3DUtil.cs.uid
│   │       ├── extras/
│   │       │   ├── 3rd_party/
│   │       │   │   ├── import_sgt.gd
│   │       │   │   ├── import_sgt.gd.uid
│   │       │   │   ├── project_on_terrain3d.gd
│   │       │   │   └── project_on_terrain3d.gd.uid
│   │       │   ├── particle_example/
│   │       │   │   ├── Terrain3DParticles.tscn
│   │       │   │   ├── grass.gdshader
│   │       │   │   ├── grass.gdshader.uid
│   │       │   │   ├── grass_material.tres
│   │       │   │   ├── particles.gdshader
│   │       │   │   ├── particles.gdshader.uid
│   │       │   │   ├── process_material.tres
│   │       │   │   ├── terrain_3D_particles.gd
│   │       │   │   └── terrain_3D_particles.gd.uid
│   │       │   └── shaders/
│   │       │       ├── M_ocean.tres
│   │       │       ├── hex_grid.gdshaderinc
│   │       │       ├── hex_grid.gdshaderinc.uid
│   │       │       ├── lightweight.gdshader
│   │       │       ├── lightweight.gdshader.uid
│   │       │       ├── minimum.gdshader
│   │       │       ├── minimum.gdshader.uid
│   │       │       ├── ocean_shader.gdshader
│   │       │       └── ocean_shader.gdshader.uid
│   │       ├── icons/
│   │       │   ├── autoshader.svg.import
│   │       │   ├── color_paint.svg.import
│   │       │   ├── height_add.svg.import
│   │       │   ├── height_div.svg.import
│   │       │   ├── height_flat.svg.import
│   │       │   ├── height_mul.svg.import
│   │       │   ├── height_slope.svg.import
│   │       │   ├── height_smooth.svg.import
│   │       │   ├── height_sub.svg.import
│   │       │   ├── holes.svg.import
│   │       │   ├── layers.svg.import
│   │       │   ├── multimesh.svg.import
│   │       │   ├── navigation.svg.import
│   │       │   ├── picker_checked.svg.import
│   │       │   ├── region_add.svg.import
│   │       │   ├── region_remove.svg.import
│   │       │   ├── terrain3d.svg.import
│   │       │   ├── texture_paint.svg.import
│   │       │   ├── texture_spray.svg.import
│   │       │   └── wetness.svg.import
│   │       ├── menu/
│   │       │   ├── bake_lod_dialog.gd
│   │       │   ├── bake_lod_dialog.gd.uid
│   │       │   ├── bake_lod_dialog.tscn
│   │       │   ├── baker.gd
│   │       │   ├── baker.gd.uid
│   │       │   ├── channel_packer.gd
│   │       │   ├── channel_packer.gd.uid
│   │       │   ├── channel_packer.tscn
│   │       │   ├── channel_packer_dragdrop.gd
│   │       │   ├── channel_packer_dragdrop.gd.uid
│   │       │   ├── channel_packer_import_template.txt
│   │       │   ├── directory_setup.gd
│   │       │   ├── directory_setup.gd.uid
│   │       │   ├── directory_setup.tscn
│   │       │   ├── terrain_menu.gd
│   │       │   └── terrain_menu.gd.uid
│   │       ├── plugin.cfg
│   │       ├── src/
│   │       │   ├── asset_dock.gd
│   │       │   ├── asset_dock.gd.uid
│   │       │   ├── asset_dock.tscn
│   │       │   ├── double_slider.gd
│   │       │   ├── double_slider.gd.uid
│   │       │   ├── editor_plugin.gd
│   │       │   ├── editor_plugin.gd.uid
│   │       │   ├── gradient_operation_builder.gd
│   │       │   ├── gradient_operation_builder.gd.uid
│   │       │   ├── multi_picker.gd
│   │       │   ├── multi_picker.gd.uid
│   │       │   ├── operation_builder.gd
│   │       │   ├── operation_builder.gd.uid
│   │       │   ├── tool_settings.gd
│   │       │   ├── tool_settings.gd.uid
│   │       │   ├── toolbar.gd
│   │       │   ├── toolbar.gd.uid
│   │       │   ├── ui.gd
│   │       │   └── ui.gd.uid
│   │       ├── terrain.gdextension
│   │       ├── terrain.gdextension.uid
│   │       ├── tools/
│   │       │   ├── importer.gd
│   │       │   ├── importer.gd.uid
│   │       │   ├── importer.tscn
│   │       │   ├── region_mover.gd
│   │       │   └── region_mover.gd.uid
│   │       └── utils/
│   │           ├── terrain_3d_objects.gd
│   │           ├── terrain_3d_objects.gd.uid
│   │           ├── transform_changed_notifier.gd
│   │           └── transform_changed_notifier.gd.uid
│   ├── demo/
│   │   ├── CodeGeneratedDemo.tscn
│   │   ├── Demo.tscn
│   │   ├── NavigationDemo.tscn
│   │   ├── assets/
│   │   │   ├── materials/
│   │   │   │   ├── M_crystal_blue.tres
│   │   │   │   ├── M_crystal_purple.tres
│   │   │   │   ├── M_crystal_red.tres
│   │   │   │   ├── M_rock23_black_tp.tres
│   │   │   │   └── M_rock23_tp.tres
│   │   │   ├── models/
│   │   │   │   ├── CrystalC.tscn
│   │   │   │   ├── LOD10Example.tscn
│   │   │   │   ├── LOD5Example.tscn
│   │   │   │   ├── RockA.glb
│   │   │   │   ├── RockA.glb.import
│   │   │   │   ├── RockA.tscn
│   │   │   │   ├── RockB.glb
│   │   │   │   ├── RockB.glb.import
│   │   │   │   ├── RockB.tscn
│   │   │   │   ├── RockC.glb
│   │   │   │   ├── RockC.glb.import
│   │   │   │   ├── RockC.tscn
│   │   │   │   ├── Tunnel.glb
│   │   │   │   ├── Tunnel.glb.import
│   │   │   │   └── Tunnel.tscn
│   │   │   └── textures/
│   │   │       ├── asset_licenses.txt
│   │   │       ├── ground037_alb_ht.png.import
│   │   │       ├── ground037_nrm_rgh.png.import
│   │   │       ├── rock023_alb_ht.png.import
│   │   │       └── rock023_nrm_rgh.png.import
│   │   ├── components/
│   │   │   ├── DemoBenchmark.tscn
│   │   │   ├── Enemy.tscn
│   │   │   ├── Environment.tscn
│   │   │   ├── Player.tscn
│   │   │   ├── Tunnel.tscn
│   │   │   └── UI.tscn
│   │   ├── csharp/
│   │   │   ├── CodeGenerated.cs
│   │   │   ├── CodeGenerated.cs.uid
│   │   │   └── CodeGeneratedCSDemo.tscn
│   │   ├── data/
│   │   │   ├── M_terrain.tres
│   │   │   ├── assets.tres
│   │   │   ├── nav_mesh.res
│   │   │   ├── terrain3d_00-01.res
│   │   │   ├── terrain3d_00-02.res
│   │   │   └── terrain3d_00_00.res
│   │   └── src/
│   │       ├── CameraManager.gd
│   │       ├── CameraManager.gd.uid
│   │       ├── CaveEntrance.gd
│   │       ├── CaveEntrance.gd.uid
│   │       ├── CodeGenerated.gd
│   │       ├── CodeGenerated.gd.uid
│   │       ├── DemoScene.gd
│   │       ├── DemoScene.gd.uid
│   │       ├── Enemy.gd
│   │       ├── Enemy.gd.uid
│   │       ├── Player.gd
│   │       ├── Player.gd.uid
│   │       ├── RuntimeNavigationBaker.gd
│   │       ├── RuntimeNavigationBaker.gd.uid
│   │       ├── UI.gd
│   │       └── UI.gd.uid
│   ├── icon.png.import
│   └── project.godot
├── src/
│   ├── constants.h
│   ├── generated_texture.cpp
│   ├── generated_texture.h
│   ├── logger.h
│   ├── register_types.cpp
│   ├── register_types.h
│   ├── shaders/
│   │   ├── auto_shader.glsl
│   │   ├── backgrounds.glsl
│   │   ├── debug_views.glsl
│   │   ├── displacement.glsl
│   │   ├── displacement_buffer.glsl
│   │   ├── dual_scaling.glsl
│   │   ├── editor_functions.glsl
│   │   ├── gpu_depth.glsl
│   │   ├── macro_variation.glsl
│   │   ├── main.glsl
│   │   ├── overlays.glsl
│   │   ├── pbr_views.glsl
│   │   ├── projection.glsl
│   │   └── samplers.glsl
│   ├── target_node_3d.h
│   ├── terrain_3d.cpp
│   ├── terrain_3d.h
│   ├── terrain_3d_asset_resource.h
│   ├── terrain_3d_assets.cpp
│   ├── terrain_3d_assets.h
│   ├── terrain_3d_collision.cpp
│   ├── terrain_3d_collision.h
│   ├── terrain_3d_data.cpp
│   ├── terrain_3d_data.h
│   ├── terrain_3d_editor.cpp
│   ├── terrain_3d_editor.h
│   ├── terrain_3d_instancer.cpp
│   ├── terrain_3d_instancer.h
│   ├── terrain_3d_material.cpp
│   ├── terrain_3d_material.h
│   ├── terrain_3d_mesh_asset.cpp
│   ├── terrain_3d_mesh_asset.h
│   ├── terrain_3d_mesher.cpp
│   ├── terrain_3d_mesher.h
│   ├── terrain_3d_region.cpp
│   ├── terrain_3d_region.h
│   ├── terrain_3d_texture_asset.cpp
│   ├── terrain_3d_texture_asset.h
│   ├── terrain_3d_util.cpp
│   ├── terrain_3d_util.h
│   ├── unit_testing.cpp
│   └── unit_testing.h
└── tools/
    ├── build_release.sh
    ├── hooks/
    │   ├── asmessage.applescript
    │   ├── canonicalize_filename.sh
    │   ├── pre-commit
    │   ├── pre-commit-clang-format
    │   └── winmessage.ps1
    └── install-hooks.py
Download .txt
SYMBOL INDEX (465 symbols across 43 files)

FILE: doc/dump_contributors.py
  function normalize_name (line 17) | def normalize_name(name):
  function normalize_gitbash_path (line 28) | def normalize_gitbash_path(path):

FILE: project/addons/terrain_3d/csharp/Terrain3D.cs
  class Terrain3D (line 11) | [Tool]
    method Terrain3D (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3D Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3D Instantiate() => Bind(ClassDB.Instantiate(...
    type DebugLevelEnum (line 63) | public enum DebugLevelEnum
    type RegionSizeEnum (line 71) | public enum RegionSizeEnum
    class GDExtensionSignalName (line 81) | public new static class GDExtensionSignalName
    class GDExtensionPropertyName (line 135) | public new static class GDExtensionPropertyName
    class GDExtensionMethodName (line 625) | public new static class GDExtensionMethodName
    method SetEditor (line 642) | public new void SetEditor(Terrain3DEditor editor) =>
    method GetEditor (line 645) | public new Terrain3DEditor GetEditor() =>
    method SetPlugin (line 648) | public new void SetPlugin(GodotObject plugin) =>
    method GetPlugin (line 651) | public new GodotObject GetPlugin() =>
    method SetCamera (line 654) | public new void SetCamera(Camera3D camera) =>
    method GetCamera (line 657) | public new Camera3D GetCamera() =>
    method GetClipmapTargetPosition (line 660) | public new Vector3 GetClipmapTargetPosition() =>
    method GetCollisionTargetPosition (line 663) | public new Vector3 GetCollisionTargetPosition() =>
    method Snap (line 666) | public new void Snap() =>
    method GetIntersection (line 669) | public new Vector3 GetIntersection(Vector3 srcPos, Vector3 direction, ...
    method GetRaycastResult (line 672) | public new Godot.Collections.Dictionary GetRaycastResult(Vector3 srcPo...
    method BakeMesh (line 675) | public new Mesh BakeMesh(long lod, Terrain3DData.HeightFilter filter =...
    method GenerateNavMeshSourceGeometry (line 678) | public new Vector3[] GenerateNavMeshSourceGeometry(Aabb globalAabb, bo...

FILE: project/addons/terrain_3d/csharp/Terrain3DAssets.cs
  class Terrain3DAssets (line 11) | [Tool]
    method Terrain3DAssets (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3DAssets Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3DAssets Instantiate() => Bind(ClassDB.Instan...
    type AssetType (line 63) | public enum AssetType
    class GDExtensionSignalName (line 69) | public new static class GDExtensionSignalName
    class GDExtensionPropertyName (line 123) | public new static class GDExtensionPropertyName
    class GDExtensionMethodName (line 141) | public new static class GDExtensionMethodName
    method SetTextureAsset (line 166) | public new void SetTextureAsset(long id, Terrain3DTextureAsset texture...
    method GetTextureAsset (line 169) | public new Terrain3DTextureAsset GetTextureAsset(long id) =>
    method GetTextureCount (line 172) | public new long GetTextureCount() =>
    method GetAlbedoArrayRid (line 175) | public new Rid GetAlbedoArrayRid() =>
    method GetNormalArrayRid (line 178) | public new Rid GetNormalArrayRid() =>
    method GetTextureColors (line 181) | public new Color[] GetTextureColors() =>
    method GetTextureNormalDepths (line 184) | public new float[] GetTextureNormalDepths() =>
    method GetTextureAoStrengths (line 187) | public new float[] GetTextureAoStrengths() =>
    method GetTextureAoLightAffects (line 190) | public new float[] GetTextureAoLightAffects() =>
    method GetTextureRoughnessMods (line 193) | public new float[] GetTextureRoughnessMods() =>
    method GetTextureUvScales (line 196) | public new float[] GetTextureUvScales() =>
    method GetTextureDetiles (line 199) | public new Vector2[] GetTextureDetiles() =>
    method GetTextureDisplacements (line 202) | public new Vector2[] GetTextureDisplacements() =>
    method ClearTextures (line 205) | public new void ClearTextures(bool update = false) =>
    method UpdateTextureList (line 208) | public new void UpdateTextureList() =>
    method SetMeshAsset (line 211) | public new void SetMeshAsset(long id, Terrain3DMeshAsset mesh) =>
    method GetMeshAsset (line 214) | public new Terrain3DMeshAsset GetMeshAsset(long id) =>
    method GetMeshCount (line 217) | public new long GetMeshCount() =>
    method CreateMeshThumbnails (line 220) | public new void CreateMeshThumbnails(long id = -1, Vector2I size = def...
    method UpdateMeshList (line 223) | public new void UpdateMeshList() =>
    method Save (line 226) | public new Error Save(string path = "") =>

FILE: project/addons/terrain_3d/csharp/Terrain3DCollision.cs
  class Terrain3DCollision (line 11) | [Tool]
    method Terrain3DCollision (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3DCollision Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3DCollision Instantiate() => Bind(ClassDB.Ins...
    type CollisionMode (line 63) | public enum CollisionMode
    class GDExtensionPropertyName (line 72) | public new static class GDExtensionPropertyName
    class GDExtensionMethodName (line 125) | public new static class GDExtensionMethodName
    method Build (line 136) | public new void Build() =>
    method Update (line 139) | public new void Update(bool rebuild = false) =>
    method Destroy (line 142) | public new void Destroy() =>
    method IsEnabled (line 145) | public new bool IsEnabled() =>
    method IsEditorMode (line 148) | public new bool IsEditorMode() =>
    method IsDynamicMode (line 151) | public new bool IsDynamicMode() =>
    method GetRid (line 154) | public new Rid GetRid() =>

FILE: project/addons/terrain_3d/csharp/Terrain3DData.cs
  class Terrain3DData (line 11) | [Tool]
    method Terrain3DData (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3DData Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3DData Instantiate() => Bind(ClassDB.Instanti...
    type HeightFilter (line 63) | public enum HeightFilter
    class GDExtensionSignalName (line 69) | public new static class GDExtensionSignalName
    class GDExtensionPropertyName (line 223) | public new static class GDExtensionPropertyName
    class GDExtensionMethodName (line 252) | public new static class GDExtensionMethodName
    method GetRegionCount (line 325) | public new long GetRegionCount() =>
    method GetRegionsActive (line 328) | public new Godot.Collections.Array GetRegionsActive(bool copy = false,...
    method GetRegionsAll (line 331) | public new Godot.Collections.Dictionary GetRegionsAll() =>
    method GetRegionMap (line 334) | public new int[] GetRegionMap() =>
    method GetRegionMapIndex (line 337) | public new static long GetRegionMapIndex(Vector2I regionLocation) =>
    method DoForRegions (line 340) | public new void DoForRegions(Rect2I area, Callable callback) =>
    method ChangeRegionSize (line 343) | public new void ChangeRegionSize(long regionSize) =>
    method GetRegionLocation (line 346) | public new Vector2I GetRegionLocation(Vector3 globalPosition) =>
    method GetRegionId (line 349) | public new long GetRegionId(Vector2I regionLocation) =>
    method GetRegionIdp (line 352) | public new long GetRegionIdp(Vector3 globalPosition) =>
    method HasRegion (line 355) | public new bool HasRegion(Vector2I regionLocation) =>
    method HasRegionp (line 358) | public new bool HasRegionp(Vector3 globalPosition) =>
    method GetRegion (line 361) | public new Terrain3DRegion GetRegion(Vector2I regionLocation) =>
    method GetRegionp (line 364) | public new Terrain3DRegion GetRegionp(Vector3 globalPosition) =>
    method SetRegionModified (line 367) | public new void SetRegionModified(Vector2I regionLocation, bool modifi...
    method IsRegionModified (line 370) | public new bool IsRegionModified(Vector2I regionLocation) =>
    method SetRegionDeleted (line 373) | public new void SetRegionDeleted(Vector2I regionLocation, bool deleted...
    method IsRegionDeleted (line 376) | public new bool IsRegionDeleted(Vector2I regionLocation) =>
    method AddRegionBlankp (line 379) | public new Terrain3DRegion AddRegionBlankp(Vector3 globalPosition, boo...
    method AddRegionBlank (line 382) | public new Terrain3DRegion AddRegionBlank(Vector2I regionLocation, boo...
    method AddRegion (line 385) | public new Error AddRegion(Terrain3DRegion region, bool update = true) =>
    method RemoveRegionp (line 388) | public new void RemoveRegionp(Vector3 globalPosition, bool update = tr...
    method RemoveRegionl (line 391) | public new void RemoveRegionl(Vector2I regionLocation, bool update = t...
    method RemoveRegion (line 394) | public new void RemoveRegion(Terrain3DRegion region, bool update = tru...
    method SaveDirectory (line 397) | public new void SaveDirectory(string directory) =>
    method SaveRegion (line 400) | public new void SaveRegion(Vector2I regionLocation, string directory, ...
    method LoadDirectory (line 403) | public new void LoadDirectory(string directory) =>
    method LoadRegion (line 406) | public new void LoadRegion(Vector2I regionLocation, string directory, ...
    method GetMaps (line 409) | public new Godot.Collections.Array GetMaps(Terrain3DRegion.MapType map...
    method UpdateMaps (line 412) | public new void UpdateMaps(Terrain3DRegion.MapType mapType = Terrain3D...
    method GetHeightMapsRid (line 415) | public new Rid GetHeightMapsRid() =>
    method GetControlMapsRid (line 418) | public new Rid GetControlMapsRid() =>
    method GetColorMapsRid (line 421) | public new Rid GetColorMapsRid() =>
    method SetPixel (line 424) | public new void SetPixel(Terrain3DRegion.MapType mapType, Vector3 glob...
    method GetPixel (line 427) | public new Color GetPixel(Terrain3DRegion.MapType mapType, Vector3 glo...
    method SetHeight (line 430) | public new void SetHeight(Vector3 globalPosition, double height) =>
    method GetHeight (line 433) | public new double GetHeight(Vector3 globalPosition) =>
    method SetColor (line 436) | public new void SetColor(Vector3 globalPosition, Color color) =>
    method GetColor (line 439) | public new Color GetColor(Vector3 globalPosition) =>
    method SetControl (line 442) | public new void SetControl(Vector3 globalPosition, long control) =>
    method GetControl (line 445) | public new long GetControl(Vector3 globalPosition) =>
    method SetRoughness (line 448) | public new void SetRoughness(Vector3 globalPosition, double roughness) =>
    method GetRoughness (line 451) | public new double GetRoughness(Vector3 globalPosition) =>
    method SetControlBaseId (line 454) | public new void SetControlBaseId(Vector3 globalPosition, long textureI...
    method GetControlBaseId (line 457) | public new long GetControlBaseId(Vector3 globalPosition) =>
    method SetControlOverlayId (line 460) | public new void SetControlOverlayId(Vector3 globalPosition, long textu...
    method GetControlOverlayId (line 463) | public new long GetControlOverlayId(Vector3 globalPosition) =>
    method SetControlBlend (line 466) | public new void SetControlBlend(Vector3 globalPosition, double blendVa...
    method GetControlBlend (line 469) | public new double GetControlBlend(Vector3 globalPosition) =>
    method SetControlAngle (line 472) | public new void SetControlAngle(Vector3 globalPosition, double degrees...
    method GetControlAngle (line 475) | public new double GetControlAngle(Vector3 globalPosition) =>
    method SetControlScale (line 478) | public new void SetControlScale(Vector3 globalPosition, double percent...
    method GetControlScale (line 481) | public new double GetControlScale(Vector3 globalPosition) =>
    method SetControlHole (line 484) | public new void SetControlHole(Vector3 globalPosition, bool enable) =>
    method GetControlHole (line 487) | public new bool GetControlHole(Vector3 globalPosition) =>
    method SetControlNavigation (line 490) | public new void SetControlNavigation(Vector3 globalPosition, bool enab...
    method GetControlNavigation (line 493) | public new bool GetControlNavigation(Vector3 globalPosition) =>
    method SetControlAuto (line 496) | public new void SetControlAuto(Vector3 globalPosition, bool enable) =>
    method GetControlAuto (line 499) | public new bool GetControlAuto(Vector3 globalPosition) =>
    method GetNormal (line 502) | public new Vector3 GetNormal(Vector3 globalPosition) =>
    method IsInSlope (line 505) | public new bool IsInSlope(Vector3 globalPosition, Vector2 slopeRange, ...
    method GetTextureId (line 508) | public new Vector3 GetTextureId(Vector3 globalPosition) =>
    method GetMeshVertex (line 511) | public new Vector3 GetMeshVertex(long lod, Terrain3DData.HeightFilter ...
    method GetHeightRange (line 514) | public new Vector2 GetHeightRange() =>
    method CalcHeightRange (line 517) | public new void CalcHeightRange(bool recursive = false) =>
    method ImportImages (line 520) | public new void ImportImages(Godot.Collections.Array images, Vector3 g...
    method ExportImage (line 523) | public new Error ExportImage(string fileName, Terrain3DRegion.MapType ...
    method LayeredToImage (line 526) | public new Image LayeredToImage(Terrain3DRegion.MapType mapType) =>
    method Dump (line 529) | public new void Dump(bool verbose = false) =>

FILE: project/addons/terrain_3d/csharp/Terrain3DEditor.cs
  class Terrain3DEditor (line 11) | [Tool]
    method Terrain3DEditor (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3DEditor Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3DEditor Instantiate() => Bind(ClassDB.Instan...
    type Operation (line 63) | public enum Operation
    type Tool (line 73) | public enum Tool
    class GDExtensionMethodName (line 90) | public new static class GDExtensionMethodName
    method SetTerrain (line 107) | public new void SetTerrain(Terrain3D terrain) =>
    method GetTerrain (line 110) | public new Terrain3D GetTerrain() =>
    method SetBrushData (line 113) | public new void SetBrushData(Godot.Collections.Dictionary data) =>
    method SetTool (line 116) | public new void SetTool(Terrain3DEditor.Tool tool) =>
    method GetTool (line 119) | public new Terrain3DEditor.Tool GetTool() =>
    method SetOperation (line 122) | public new void SetOperation(Terrain3DEditor.Operation operation) =>
    method GetOperation (line 125) | public new Terrain3DEditor.Operation GetOperation() =>
    method StartOperation (line 128) | public new void StartOperation(Vector3 position) =>
    method IsOperating (line 131) | public new bool IsOperating() =>
    method Operate (line 134) | public new void Operate(Vector3 position, double cameraDirection) =>
    method BackupRegion (line 137) | public new void BackupRegion(Terrain3DRegion region) =>
    method StopOperation (line 140) | public new void StopOperation() =>
    method ApplyUndo (line 143) | public new void ApplyUndo(Godot.Collections.Dictionary data) =>

FILE: project/addons/terrain_3d/csharp/Terrain3DInstancer.cs
  class Terrain3DInstancer (line 11) | [Tool]
    method Terrain3DInstancer (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3DInstancer Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3DInstancer Instantiate() => Bind(ClassDB.Ins...
    type InstancerMode (line 63) | public enum InstancerMode
    class GDExtensionPropertyName (line 69) | public new static class GDExtensionPropertyName
    class GDExtensionMethodName (line 80) | public new static class GDExtensionMethodName
    method ClearByMesh (line 98) | public new void ClearByMesh(long meshId) =>
    method ClearByLocation (line 101) | public new void ClearByLocation(Vector2I regionLocation, long meshId) =>
    method ClearByRegion (line 104) | public new void ClearByRegion(Terrain3DRegion region, long meshId) =>
    method IsEnabled (line 107) | public new bool IsEnabled() =>
    method AddInstances (line 110) | public new void AddInstances(Vector3 globalPosition, Godot.Collections...
    method RemoveInstances (line 113) | public new void RemoveInstances(Vector3 globalPosition, Godot.Collecti...
    method AddMultimesh (line 116) | public new void AddMultimesh(long meshId, MultiMesh multimesh, Transfo...
    method AddTransforms (line 119) | public new void AddTransforms(long meshId, Godot.Collections.Array tra...
    method AppendLocation (line 122) | public new void AppendLocation(Vector2I regionLocation, long meshId, G...
    method AppendRegion (line 125) | public new void AppendRegion(Terrain3DRegion region, long meshId, Godo...
    method UpdateTransforms (line 128) | public new void UpdateTransforms(Aabb aabb) =>
    method GetClosestMeshId (line 131) | public new long GetClosestMeshId(Vector3 globalPosition) =>
    method UpdateMmis (line 134) | public new void UpdateMmis(long meshId = -1, Vector2I regionLocation =...
    method SwapIds (line 137) | public new void SwapIds(long srcId, long destId) =>

FILE: project/addons/terrain_3d/csharp/Terrain3DMaterial.cs
  class Terrain3DMaterial (line 11) | [Tool]
    method Terrain3DMaterial (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3DMaterial Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3DMaterial Instantiate() => Bind(ClassDB.Inst...
    type WorldBackgroundEnum (line 63) | public enum WorldBackgroundEnum
    type TextureFilteringEnum (line 70) | public enum TextureFilteringEnum
    type UpdateFlags (line 76) | public enum UpdateFlags
    class GDExtensionPropertyName (line 85) | public new static class GDExtensionPropertyName
    class GDExtensionMethodName (line 355) | public new static class GDExtensionMethodName
    method Update (line 367) | public new void Update(long flags = 0) =>
    method GetMaterialRid (line 370) | public new Rid GetMaterialRid() =>
    method GetShaderRid (line 373) | public new Rid GetShaderRid() =>
    method GetBufferMaterialRid (line 376) | public new Rid GetBufferMaterialRid() =>
    method GetBufferShaderRid (line 379) | public new Rid GetBufferShaderRid() =>
    method SetShaderParam (line 382) | public new void SetShaderParam(StringName name, Variant value) =>
    method GetShaderParam (line 385) | public new void GetShaderParam(StringName name) =>
    method Save (line 388) | public new Error Save(string path = "") =>

FILE: project/addons/terrain_3d/csharp/Terrain3DMeshAsset.cs
  class Terrain3DMeshAsset (line 11) | [Tool]
    method Terrain3DMeshAsset (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3DMeshAsset Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3DMeshAsset Instantiate() => Bind(ClassDB.Ins...
    type GenType (line 63) | public enum GenType
    class GDExtensionSignalName (line 70) | public new static class GDExtensionSignalName
    class GDExtensionPropertyName (line 174) | public new static class GDExtensionPropertyName
    class GDExtensionMethodName (line 373) | public new static class GDExtensionMethodName
    method Clear (line 386) | public new void Clear() =>
    method SetHighlighted (line 389) | public new void SetHighlighted(bool enabled) =>
    method IsHighlighted (line 392) | public new bool IsHighlighted() =>
    method GetHighlightColor (line 395) | public new Color GetHighlightColor() =>
    method GetThumbnail (line 398) | public new Texture2D GetThumbnail() =>
    method GetMesh (line 401) | public new Mesh GetMesh(long lod = 0) =>
    method SetLodRange (line 404) | public new void SetLodRange(long lod, double distance) =>
    method GetLodRange (line 407) | public new double GetLodRange(long lod) =>
    method GetInstanceCount (line 410) | public new long GetInstanceCount() =>

FILE: project/addons/terrain_3d/csharp/Terrain3DRegion.cs
  class Terrain3DRegion (line 11) | [Tool]
    method Terrain3DRegion (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3DRegion Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3DRegion Instantiate() => Bind(ClassDB.Instan...
    type MapType (line 63) | public enum MapType
    class GDExtensionPropertyName (line 71) | public new static class GDExtensionPropertyName
    class GDExtensionMethodName (line 159) | public new static class GDExtensionMethodName
    method Clear (line 179) | public new void Clear() =>
    method SetMap (line 182) | public new void SetMap(Terrain3DRegion.MapType mapType, Image map) =>
    method GetMap (line 185) | public new Image GetMap(Terrain3DRegion.MapType mapType) =>
    method SetMaps (line 188) | public new void SetMaps(Godot.Collections.Array maps) =>
    method GetMaps (line 191) | public new Godot.Collections.Array GetMaps() =>
    method SanitizeMaps (line 194) | public new void SanitizeMaps() =>
    method SanitizeMap (line 197) | public new Image SanitizeMap(Terrain3DRegion.MapType mapType, Image ma...
    method ValidateMapSize (line 200) | public new bool ValidateMapSize(Image map) =>
    method UpdateHeight (line 203) | public new void UpdateHeight(double height) =>
    method UpdateHeights (line 206) | public new void UpdateHeights(Vector2 lowHigh) =>
    method CalcHeightRange (line 209) | public new void CalcHeightRange() =>
    method Save (line 212) | public new Error Save(string path = "", bool save16Bit = false) =>
    method SetData (line 215) | public new void SetData(Godot.Collections.Dictionary data) =>
    method GetData (line 218) | public new Godot.Collections.Dictionary GetData() =>
    method Duplicate (line 221) | public new Terrain3DRegion Duplicate(bool deep = false) =>
    method Dump (line 224) | public new void Dump(bool verbose = false) =>

FILE: project/addons/terrain_3d/csharp/Terrain3DTextureAsset.cs
  class Terrain3DTextureAsset (line 11) | [Tool]
    method Terrain3DTextureAsset (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3DTextureAsset Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3DTextureAsset Instantiate() => Bind(ClassDB....
    class GDExtensionSignalName (line 63) | public new static class GDExtensionSignalName
    class GDExtensionPropertyName (line 142) | public new static class GDExtensionPropertyName
    class GDExtensionMethodName (line 244) | public new static class GDExtensionMethodName
    method Clear (line 253) | public new void Clear() =>
    method SetHighlighted (line 256) | public new void SetHighlighted(bool enabled) =>
    method IsHighlighted (line 259) | public new bool IsHighlighted() =>
    method GetHighlightColor (line 262) | public new Color GetHighlightColor() =>
    method GetThumbnail (line 265) | public new Texture2D GetThumbnail() =>

FILE: project/addons/terrain_3d/csharp/Terrain3DUtil.cs
  class Terrain3DUtil (line 11) | [Tool]
    method Terrain3DUtil (line 17) | [Obsolete("Wrapper types cannot be constructed with constructors (it o...
    method Bind (line 30) | public new static Terrain3DUtil Bind(GodotObject godotObject)
    method Instantiate (line 61) | public new static Terrain3DUtil Instantiate() => Bind(ClassDB.Instanti...
    class GDExtensionMethodName (line 63) | public new static class GDExtensionMethodName
    method AsFloat (line 94) | public new static double AsFloat(long value) =>
    method AsUint (line 97) | public new static long AsUint(double value) =>
    method GetBase (line 100) | public new static long GetBase(long pixel) =>
    method EncBase (line 103) | public new static long EncBase(long @base) =>
    method GetOverlay (line 106) | public new static long GetOverlay(long pixel) =>
    method EncOverlay (line 109) | public new static long EncOverlay(long overlay) =>
    method GetBlend (line 112) | public new static long GetBlend(long pixel) =>
    method EncBlend (line 115) | public new static long EncBlend(long blend) =>
    method GetUvRotation (line 118) | public new static long GetUvRotation(long pixel) =>
    method EncUvRotation (line 121) | public new static long EncUvRotation(long rotation) =>
    method GetUvScale (line 124) | public new static long GetUvScale(long pixel) =>
    method EncUvScale (line 127) | public new static long EncUvScale(long scale) =>
    method IsHole (line 130) | public new static bool IsHole(long pixel) =>
    method EncHole (line 133) | public new static long EncHole(bool pixel) =>
    method IsNav (line 136) | public new static bool IsNav(long pixel) =>
    method EncNav (line 139) | public new static long EncNav(bool pixel) =>
    method IsAuto (line 142) | public new static bool IsAuto(long pixel) =>
    method EncAuto (line 145) | public new static long EncAuto(bool pixel) =>
    method FilenameToLocation (line 148) | public new static Vector2I FilenameToLocation(string filename) =>
    method LocationToFilename (line 151) | public new static string LocationToFilename(Vector2I regionLocation) =>
    method BlackToAlpha (line 154) | public new static Image BlackToAlpha(Image image) =>
    method GetMinMax (line 157) | public new static Vector2 GetMinMax(Image image) =>
    method GetThumbnail (line 160) | public new static Image GetThumbnail(Image image, Vector2I size = defa...
    method GetFilledImage (line 163) | public new static Image GetFilledImage(Vector2I size, Color color, boo...
    method LoadImage (line 166) | public new static Image LoadImage(string fileName, long cacheMode = 0,...
    method PackImage (line 169) | public new static Image PackImage(Image srcRgb, Image srcA, Image srcA...
    method LuminanceToHeight (line 172) | public new static Image LuminanceToHeight(Image srcRgb) =>

FILE: project/demo/csharp/CodeGenerated.cs
  class CodeGenerated (line 7) | public partial class CodeGenerated : Node
    method _Ready (line 11) | public override void _Ready()
    method CreateTerrainAsync (line 25) | private async Task CreateTerrainAsync()
    method CreateTerrain (line 34) | private async Task CreateTerrain()
    method CreateTextureAsset (line 99) | private async Task<Terrain3DTextureAsset> CreateTextureAsset(string as...
    method CreateMeshAsset (line 155) | private Terrain3DMeshAsset CreateMeshAsset(string assetName, Color color)

FILE: src/constants.h
  function Vector3 (line 49) | static const Vector3 V3_NAN{ NAN, NAN, NAN };
  type Vector3Hash (line 69) | struct Vector3Hash {

FILE: src/generated_texture.cpp
  function RID (line 27) | RID GeneratedTexture::create(const TypedArray<Image> &p_layers) {
  function RID (line 50) | RID GeneratedTexture::create(const Ref<Image> &p_image) {

FILE: src/generated_texture.h
  function class (line 10) | class GeneratedTexture {

FILE: src/register_types.cpp
  function initialize_terrain_3d_module (line 13) | void initialize_terrain_3d_module(ModuleInitializationLevel p_level) {
  function uninitialize_terrain_3d_module (line 30) | void uninitialize_terrain_3d_module(ModuleInitializationLevel p_level) {
  function GDExtensionBool (line 39) | GDExtensionBool GDE_EXPORT terrain_3d_init(

FILE: src/target_node_3d.h
  function class (line 10) | class TargetNode3D {
  function set_target (line 19) | void set_target(Node3D *p_node) {
  function Node3D (line 27) | Node3D *get_target() const {
  function Node3D (line 35) | Node3D *ptr() const { return get_target(); }

FILE: src/terrain_3d.cpp
  function Vector3 (line 650) | Vector3 Terrain3D::get_clipmap_target_position() const {
  function Vector3 (line 673) | Vector3 Terrain3D::get_collision_target_position() const {
  function Vector3 (line 910) | Vector3 Terrain3D::get_intersection(const Vector3 &p_src_pos, const Vect...
  function Dictionary (line 1007) | Dictionary Terrain3D::get_raycast_result(const Vector3 &p_src_pos, const...
  function PackedVector3Array (line 1068) | PackedVector3Array Terrain3D::generate_nav_mesh_source_geometry(const AA...
  function PackedStringArray (line 1084) | PackedStringArray Terrain3D::_get_configuration_warnings() const {

FILE: src/terrain_3d.h
  function class (line 25) | class Terrain3D : public Node3D {

FILE: src/terrain_3d_asset_resource.h
  function class (line 13) | class Terrain3DAssetResource : public Resource {

FILE: src/terrain_3d_assets.cpp
  function Error (line 692) | Error Terrain3DAssets::save(const String &p_path) {

FILE: src/terrain_3d_assets.h
  function class (line 15) | class Terrain3DAssets : public Resource {
  function Ref (line 109) | inline Ref<Terrain3DTextureAsset> Terrain3DAssets::get_texture_asset(con...
  function Ref (line 116) | inline Ref<Terrain3DMeshAsset> Terrain3DAssets::get_mesh_asset(const int...

FILE: src/terrain_3d_collision.cpp
  function Dictionary (line 22) | Dictionary Terrain3DCollision::_get_shape_data(const Vector2i &p_positio...
  function Vector3 (line 177) | Vector3 Terrain3DCollision::_shape_get_position(const int p_shape_id) co...
  function RID (line 587) | RID Terrain3DCollision::get_rid() const {

FILE: src/terrain_3d_collision.h
  function class (line 16) | class Terrain3DCollision : public Object {
  function Vector2i (line 97) | inline Vector2i Terrain3DCollision::_snap_to_grid(const Vector2i &p_pos)...
  function Vector2i (line 102) | inline Vector2i Terrain3DCollision::_snap_to_grid(const Vector3 &p_pos) ...

FILE: src/terrain_3d_data.cpp
  function Error (line 236) | Error Terrain3DData::add_region(const Ref<Terrain3DRegion> &p_region, co...
  function Color (line 629) | Color Terrain3DData::get_pixel(const MapType p_map_type, const Vector3 &...
  function real_t (line 654) | real_t Terrain3DData::get_height(const Vector3 &p_global_position) const {
  function Vector3 (line 680) | Vector3 Terrain3DData::get_normal(const Vector3 &p_global_position) const {
  function Vector3 (line 740) | Vector3 Terrain3DData::get_texture_id(const Vector3 &p_global_position) ...
  function Vector3 (line 786) | Vector3 Terrain3DData::get_mesh_vertex(const int32_t p_lod, const Height...
  function Error (line 1023) | Error Terrain3DData::export_image(const String &p_file_name, const MapTy...

FILE: src/terrain_3d_data.h
  function class (line 13) | class Terrain3DData : public Object {
  function get_region_map_index (line 202) | inline int Terrain3DData::get_region_map_index(const Vector2i &p_region_...
  function Vector2i (line 213) | inline Vector2i Terrain3DData::get_region_location(const Vector3 &p_glob...
  function get_region_id (line 219) | inline int Terrain3DData::get_region_id(const Vector2i &p_region_loc) co...
  function get_region_idp (line 230) | inline int Terrain3DData::get_region_idp(const Vector3 &p_global_positio...
  function Ref (line 242) | inline Ref<Terrain3DRegion> Terrain3DData::get_region(const Vector2i &p_...
  function Terrain3DRegion (line 254) | inline Terrain3DRegion *Terrain3DData::get_region_ptr(const Vector2i &p_...
  function Ref (line 261) | inline Ref<Terrain3DRegion> Terrain3DData::get_regionp(const Vector3 &p_...
  function set_height (line 267) | inline void Terrain3DData::set_height(const Vector3 &p_global_position, ...
  function set_color (line 271) | inline void Terrain3DData::set_color(const Vector3 &p_global_position, c...
  function Color (line 277) | inline Color Terrain3DData::get_color(const Vector3 &p_global_position) ...
  function set_control (line 283) | inline void Terrain3DData::set_control(const Vector3 &p_global_position,...
  function get_control (line 287) | inline uint32_t Terrain3DData::get_control(const Vector3 &p_global_posit...
  function set_control_base_id (line 292) | inline void Terrain3DData::set_control_base_id(const Vector3 &p_global_p...
  function get_control_base_id (line 298) | inline uint32_t Terrain3DData::get_control_base_id(const Vector3 &p_glob...
  function set_control_overlay_id (line 303) | inline void Terrain3DData::set_control_overlay_id(const Vector3 &p_globa...
  function get_control_overlay_id (line 309) | inline uint32_t Terrain3DData::get_control_overlay_id(const Vector3 &p_g...
  function set_control_blend (line 315) | inline void Terrain3DData::set_control_blend(const Vector3 &p_global_pos...
  function real_t (line 321) | inline real_t Terrain3DData::get_control_blend(const Vector3 &p_global_p...
  function set_control_angle (line 327) | inline void Terrain3DData::set_control_angle(const Vector3 &p_global_pos...
  function real_t (line 334) | inline real_t Terrain3DData::get_control_angle(const Vector3 &p_global_p...
  function set_control_scale (line 341) | inline void Terrain3DData::set_control_scale(const Vector3 &p_global_pos...
  function real_t (line 348) | inline real_t Terrain3DData::get_control_scale(const Vector3 &p_global_p...
  function set_control_hole (line 355) | inline void Terrain3DData::set_control_hole(const Vector3 &p_global_posi...
  function get_control_hole (line 360) | inline bool Terrain3DData::get_control_hole(const Vector3 &p_global_posi...
  function set_control_navigation (line 365) | inline void Terrain3DData::set_control_navigation(const Vector3 &p_globa...
  function get_control_navigation (line 370) | inline bool Terrain3DData::get_control_navigation(const Vector3 &p_globa...
  function set_control_auto (line 375) | inline void Terrain3DData::set_control_auto(const Vector3 &p_global_posi...
  function get_control_auto (line 380) | inline bool Terrain3DData::get_control_auto(const Vector3 &p_global_posi...
  function set_roughness (line 385) | inline void Terrain3DData::set_roughness(const Vector3 &p_global_positio...
  function real_t (line 391) | inline real_t Terrain3DData::get_roughness(const Vector3 &p_global_posit...
  function update_master_height (line 395) | inline void Terrain3DData::update_master_height(const real_t p_height) {
  function update_master_heights (line 403) | inline void Terrain3DData::update_master_heights(const Vector2 &p_low_hi...

FILE: src/terrain_3d_editor.cpp
  function real_t (line 740) | real_t Terrain3DEditor::_average(const AverageMode p_mode, const Vector3...
  function Color (line 791) | Color Terrain3DEditor::_average(const Vector3 &p_global_position, const ...

FILE: src/terrain_3d_editor.h
  function class (line 12) | class Terrain3DEditor : public Object {
  function MapType (line 133) | inline MapType Terrain3DEditor::_get_map_type() const {
  function _is_in_bounds (line 157) | inline bool Terrain3DEditor::_is_in_bounds(const Point2i &p_pixel, const...
  function Vector2 (line 163) | inline Vector2 Terrain3DEditor::_get_uv_position(const Vector3 &p_global...
  function Vector2 (line 171) | inline Vector2 Terrain3DEditor::_get_rotated_uv(const Vector2 &p_uv, con...

FILE: src/terrain_3d_instancer.cpp
  function RID (line 478) | RID Terrain3DInstancer::_create_multimesh(const int p_mesh_id, const int...
  function Vector2i (line 506) | Vector2i Terrain3DInstancer::_get_cell(const Vector3 &p_global_position,...
  function Array (line 516) | Array Terrain3DInstancer::_get_usable_height(const Vector3 &p_global_pos...

FILE: src/terrain_3d_instancer.h
  function class (line 17) | class Terrain3DInstancer : public Object {
  function _get_density_count (line 110) | inline uint32_t Terrain3DInstancer::_get_density_count(const real_t p_de...
  function _get_master_lod (line 121) | inline int Terrain3DInstancer::_get_master_lod(const Ref<Terrain3DMeshAs...

FILE: src/terrain_3d_material.cpp
  function String (line 109) | String Terrain3DMaterial::_apply_inserts(const String &p_shader, const A...
  function String (line 139) | String Terrain3DMaterial::_generate_shader_code() const {
  function String (line 222) | String Terrain3DMaterial::_strip_comments(const String &p_shader) const {
  function String (line 311) | String Terrain3DMaterial::_generate_buffer_shader_code() const {
  function String (line 356) | String Terrain3DMaterial::_inject_editor_code(const String &p_shader) co...
  function Variant (line 869) | Variant Terrain3DMaterial::get_shader_param(const StringName &p_name) co...
  function Error (line 1031) | Error Terrain3DMaterial::save(const String &p_path) {

FILE: src/terrain_3d_material.h
  function class (line 13) | class Terrain3DMaterial : public Resource {

FILE: src/terrain_3d_mesh_asset.cpp
  function Color (line 212) | Color Terrain3DMeshAsset::get_highlight_color() const {
  function ShadowCasting (line 388) | ShadowCasting Terrain3DMeshAsset::get_lod_cast_shadows(const int p_lod_i...
  function real_t (line 498) | real_t Terrain3DMeshAsset::get_lod_range(const int p_lod) const {
  function real_t (line 505) | real_t Terrain3DMeshAsset::get_lod_range_begin(const int p_lod) const {
  function real_t (line 513) | real_t Terrain3DMeshAsset::get_lod_range_end(const int p_lod) const {

FILE: src/terrain_3d_mesh_asset.h
  function class (line 38) | class Terrain3DMeshAsset : public Terrain3DAssetResource {

FILE: src/terrain_3d_mesher.cpp
  function RID (line 42) | RID Terrain3DMesher::_generate_mesh(const Vector2i &p_size, const bool p...
  function RID (line 87) | RID Terrain3DMesher::_instantiate_mesh(const PackedVector3Array &p_verti...

FILE: src/terrain_3d_mesher.h
  function class (line 10) | class Terrain3DMesher {

FILE: src/terrain_3d_region.cpp
  function Image (line 90) | Image *Terrain3DRegion::get_map_ptr(const MapType p_map_type) const {
  function Error (line 296) | Error Terrain3DRegion::save(const String &p_path, const bool p_16_bit) {
  function Dictionary (line 356) | Dictionary Terrain3DRegion::get_data() const {

FILE: src/terrain_3d_region.h
  function class (line 9) | class Terrain3DRegion : public Resource {
  function update_height (line 134) | inline void Terrain3DRegion::update_height(const real_t p_height) {
  function update_heights (line 144) | inline void Terrain3DRegion::update_heights(const Vector2 &p_low_high) {

FILE: src/terrain_3d_texture_asset.h
  function class (line 11) | class Terrain3DTextureAsset : public Terrain3DAssetResource {

FILE: src/terrain_3d_util.cpp
  function Vector2i (line 84) | Vector2i Terrain3DUtil::filename_to_location(const String &p_filename) {
  function Vector2i (line 90) | Vector2i Terrain3DUtil::string_to_location(const String &p_string) {
  function String (line 101) | String Terrain3DUtil::location_to_filename(const Vector2i &p_region_loc) {
  function String (line 106) | String Terrain3DUtil::location_to_string(const Vector2i &p_region_loc) {
  function PackedStringArray (line 115) | PackedStringArray Terrain3DUtil::get_files(const String &p_dir, const St...
  function Vector2 (line 155) | Vector2 Terrain3DUtil::get_min_max(const Ref<Image> &p_image) {

FILE: src/terrain_3d_util.h
  function class (line 21) | class Terrain3DUtil : public Object {
  function Vector2i (line 73) | inline Vector2i v3v2i(const Vector3 &p_v3) {
  function Vector3 (line 78) | inline Vector3 v2iv3(const Vector2i &p_v2) {
  function Vector2 (line 83) | inline Vector2 v3v2(const Vector3 &p_v3) {
  function Vector3 (line 88) | inline Vector3 v2v3(const Vector2 &p_v2) {
  function is_valid_region_size (line 96) | inline bool is_valid_region_size(int value) {
  function T (line 105) | T int_ceil_mult(const T numToRound, const T multiple) {
  function T (line 114) | T int_ceil_pow2(T numToRound, T multiple) {
  function T (line 123) | T int_round_mult(const T numToRound, const T multiple) {
  function T (line 145) | T int_divide_ceil(const T numer, const T denom) {
  function T (line 153) | T int_divide_floor(const T numer, const T denom) {
  function T (line 161) | T int_divide_round(const T numer, const T denom) {
  function real_t (line 171) | inline real_t bilerp(const real_t p_v00, const real_t p_v01, const real_...
  function real_t (line 186) | inline real_t bilerp(const real_t p_v00, const real_t p_v01, const real_...
  function Rect2 (line 194) | inline Rect2 aabb2rect(const AABB &p_aabb) {
  function real_t (line 202) | inline real_t smoothstep(const real_t p_low, const real_t p_high, const ...
  function Vector2 (line 207) | inline Vector2 smoothstep(const real_t p_low, const real_t p_high, const...
  function Vector3 (line 214) | inline Vector3 smoothstep(const real_t p_low, const real_t p_high, const...
  function as_float (line 229) | inline float as_float(const uint32_t p_value) { return *(float *)&p_valu...
  function as_uint (line 230) | inline uint32_t as_uint(const float p_value) { return *(uint32_t *)&p_va...
  function get_base (line 232) | inline uint8_t get_base(const uint32_t p_pixel) { return p_pixel >> 27 &...
  function get_base (line 233) | inline uint8_t get_base(const float p_pixel) { return get_base(as_uint(p...
  function enc_base (line 234) | inline uint32_t enc_base(const uint8_t p_base) { return (p_base & 0x1F) ...
  function gd_get_base (line 235) | inline uint32_t gd_get_base(const uint32_t p_pixel) { return get_base(p_...
  function gd_enc_base (line 236) | inline uint32_t gd_enc_base(const uint32_t p_base) { return enc_base(p_b...
  function get_overlay (line 238) | inline uint8_t get_overlay(const uint32_t p_pixel) { return p_pixel >> 2...
  function get_overlay (line 239) | inline uint8_t get_overlay(const float p_pixel) { return get_overlay(as_...
  function enc_overlay (line 240) | inline uint32_t enc_overlay(const uint8_t p_over) { return (p_over & 0x1...
  function gd_get_overlay (line 241) | inline uint32_t gd_get_overlay(const uint32_t p_pixel) { return get_over...
  function gd_enc_overlay (line 242) | inline uint32_t gd_enc_overlay(const uint32_t p_over) { return enc_overl...
  function get_blend (line 244) | inline uint8_t get_blend(const uint32_t p_pixel) { return p_pixel >> 14 ...
  function get_blend (line 245) | inline uint8_t get_blend(const float p_pixel) { return get_blend(as_uint...
  function enc_blend (line 246) | inline uint32_t enc_blend(const uint8_t p_blend) { return (p_blend & 0xF...
  function gd_get_blend (line 247) | inline uint32_t gd_get_blend(const uint32_t p_pixel) { return get_blend(...
  function gd_enc_blend (line 248) | inline uint32_t gd_enc_blend(const uint32_t p_blend) { return enc_blend(...
  function get_uv_rotation (line 250) | inline uint8_t get_uv_rotation(const uint32_t p_pixel) { return p_pixel ...
  function get_uv_rotation (line 251) | inline uint8_t get_uv_rotation(const float p_pixel) { return get_uv_rota...
  function enc_uv_rotation (line 252) | inline uint32_t enc_uv_rotation(const uint8_t p_rotation) { return (p_ro...
  function gd_get_uv_rotation (line 253) | inline uint32_t gd_get_uv_rotation(const uint32_t p_pixel) { return get_...
  function gd_enc_uv_rotation (line 254) | inline uint32_t gd_enc_uv_rotation(const uint32_t p_rotation) { return e...
  function get_uv_scale (line 256) | inline uint8_t get_uv_scale(const uint32_t p_pixel) { return p_pixel >> ...
  function get_uv_scale (line 257) | inline uint8_t get_uv_scale(const float p_pixel) { return get_uv_scale(a...
  function enc_uv_scale (line 258) | inline uint32_t enc_uv_scale(const uint8_t p_scale) { return (p_scale & ...
  function gd_get_uv_scale (line 259) | inline uint32_t gd_get_uv_scale(const uint32_t p_pixel) { return get_uv_...
  function gd_enc_uv_scale (line 260) | inline uint32_t gd_enc_uv_scale(const uint32_t p_scale) { return enc_uv_...
  function is_hole (line 262) | inline bool is_hole(const uint32_t p_pixel) { return (p_pixel >> 2 & 0x1...
  function is_hole (line 263) | inline bool is_hole(const float p_pixel) { return is_hole(as_uint(p_pixe...
  function enc_hole (line 264) | inline uint32_t enc_hole(const bool p_hole) { return (p_hole & 0x1) << 2; }
  function gd_is_hole (line 265) | inline bool gd_is_hole(const uint32_t p_pixel) { return is_hole(p_pixel); }
  function is_nav (line 267) | inline bool is_nav(const uint32_t p_pixel) { return (p_pixel >> 1 & 0x1)...
  function is_nav (line 268) | inline bool is_nav(const float p_pixel) { return is_nav(as_uint(p_pixel)...
  function enc_nav (line 269) | inline uint32_t enc_nav(const bool p_nav) { return (p_nav & 0x1) << 1; }
  function gd_is_nav (line 270) | inline bool gd_is_nav(const uint32_t p_pixel) { return is_nav(p_pixel); }
  function is_auto (line 272) | inline bool is_auto(const uint32_t p_pixel) { return (p_pixel & 0x1) == ...
  function is_auto (line 273) | inline bool is_auto(const float p_pixel) { return is_auto(as_uint(p_pixe...
  function enc_auto (line 274) | inline uint32_t enc_auto(const bool p_auto) { return p_auto & 0x1; }
  function gd_is_auto (line 275) | inline bool gd_is_auto(const uint32_t p_pixel) { return is_auto(p_pixel); }
  function _FORCE_INLINE_ (line 291) | _FORCE_INLINE_ bool remove_from_tree(Node *p_node) {
  function _FORCE_INLINE_ (line 303) | _FORCE_INLINE_ String ptr_to_str(const void *p_ptr) {

FILE: src/unit_testing.cpp
  function test_differs (line 6) | void test_differs() {
Condensed preview — 356 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,429K chars).
[
  {
    "path": ".clang-format",
    "chars": 6157,
    "preview": "# Commented out parameters are those with the same value as base LLVM style.\n# We can uncomment them if we want to chang"
  },
  {
    "path": ".gitattributes",
    "chars": 80,
    "preview": "# Normalize EOL for all files that Git considers text files.\n* text=auto eol=lf\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 936,
    "preview": "# These are supported funding model platforms\n\ngithub: [TokisanGames] # Replace with up to 4 GitHub Sponsors-enabled use"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 2380,
    "preview": "name: Report a technical issue\ndescription: Report a potential bug or technical issue in Terrain3D\nbody:\n\n- type: markdo"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 361,
    "preview": "blank_issues_enabled: false\n\ncontact_links:\n  - name: Documentation\n    url: https://terrain3d.readthedocs.io/\n    about"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 687,
    "preview": "name: Feature request\ndescription: Suggest an idea for Terrain3D, or something else that isn't a technical issue\nbody:\n\n"
  },
  {
    "path": ".github/actions/base-deps/action.yml",
    "chars": 1275,
    "preview": "name: Setup Base Dependencies\ndescription: Setup base dependencies\ninputs:\n  platform:\n    required: true\n    descriptio"
  },
  {
    "path": ".github/actions/build-cache/action.yml",
    "chars": 1538,
    "preview": "name: Setup Build Cache\ndescription: Setup build cache.\ninputs:\n  cache-name:\n    description: The cache base name (job "
  },
  {
    "path": ".github/workflows/android.yml",
    "chars": 1925,
    "preview": "name: 🤖 Android Builds\non: [ workflow_call, workflow_dispatch ]\n\njobs:\n  build:\n    name: 🤖 Android ${{ matrix.arch }} "
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 3874,
    "preview": "# Modeled off of godot-cpp https://github.com/godotengine/godot-cpp/blob/master/.github/workflows/ci.yml\n\nname: 🛠️ Build"
  },
  {
    "path": ".github/workflows/ios.yml",
    "chars": 1894,
    "preview": "name: 🍏 iOS Builds\non: [ workflow_call, workflow_dispatch ]\n\njobs:\n  build:\n    name: 🍏 iOS ${{ matrix.arch }} ${{ matr"
  },
  {
    "path": ".github/workflows/linux.yml",
    "chars": 2002,
    "preview": "name: 🐧 Linux Builds\non: [ workflow_call, workflow_dispatch ]\n\njobs:\n  build:\n    name: 🐧 Linux ${{ matrix.arch }} ${{ "
  },
  {
    "path": ".github/workflows/macos.yml",
    "chars": 1901,
    "preview": "name: 🍎 macOS Builds\non: [ workflow_call, workflow_dispatch ]\n\njobs:\n  build:\n    name: 🍎 macOS ${{ matrix.arch }} ${{ "
  },
  {
    "path": ".github/workflows/web.yml",
    "chars": 1855,
    "preview": "name: 🌐 Web Builds\non: [ workflow_call, workflow_dispatch ]\n\njobs:\n  build:\n    name: 🌐 Web ${{ matrix.arch }} ${{ matr"
  },
  {
    "path": ".github/workflows/windows.yml",
    "chars": 2008,
    "preview": "name: 🪟 Windows Builds\non: [ workflow_call, workflow_dispatch ]\n\njobs:\n  build:\n    name: 🪟 Windows ${{ matrix.arch }} "
  },
  {
    "path": ".gitignore",
    "chars": 486,
    "preview": "# Terrain3D\nproject/addons/terrain_3d/bin/\nproject/addons/explore-editor-theme/\nproject/_dev/\nproject/_export/\nproject/_"
  },
  {
    "path": ".gitmodules",
    "chars": 111,
    "preview": "[submodule \"godot-cpp\"]\n\tpath = godot-cpp\n\turl = https://github.com/godotengine/godot-cpp.git\n\tbranch = master\n"
  },
  {
    "path": ".readthedocs.yaml",
    "chars": 330,
    "preview": "# Read the Docs configuration file\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details\n\nversion:"
  },
  {
    "path": "AUTHORS.md",
    "chars": 2290,
    "preview": "# Terrain3D Authors\n\nThe creation of this plugin is thanks to the following contributors.\n\n## Core Team\n* Cory Petkovse"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 11753,
    "preview": "# Contributing To Terrain3D\n\nWe need your help to make this the best terrain plugin for Godot.\n\nPlease see [System Archi"
  },
  {
    "path": "LICENSE.txt",
    "chars": 1112,
    "preview": "MIT License\n\nCopyright (c) 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n\nPermission is hereby granted, fr"
  },
  {
    "path": "README.md",
    "chars": 3867,
    "preview": "![Terrain3D Logo](/doc/docs/images/terrain3d.jpg)\n\n# Terrain3D\nA high performance, editable terrain system for Godot 4.\n"
  },
  {
    "path": "SConstruct",
    "chars": 2523,
    "preview": "#!/usr/bin/env python\nfrom glob import glob\nfrom pathlib import Path\nimport os\n\n# TODO: Do not copy environment after go"
  },
  {
    "path": "Terrain3D.sln",
    "chars": 1405,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.7.3402"
  },
  {
    "path": "Terrain3D.vcxproj",
    "chars": 13548,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
  },
  {
    "path": "Terrain3D.vcxproj.filters",
    "chars": 12784,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "Terrain3D.vcxproj.user",
    "chars": 618,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/ms"
  },
  {
    "path": "doc/Makefile",
    "chars": 946,
    "preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the "
  },
  {
    "path": "doc/_static/theme_overrides.css",
    "chars": 213,
    "preview": "/* override table width restrictions */\n.wy-table-responsive table td, .wy-table-responsive table th {\n\twhite-space: nor"
  },
  {
    "path": "doc/api/class_terrain3d.rst",
    "chars": 91369,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/class_terrain3dassets.rst",
    "chars": 25041,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/class_terrain3dcollision.rst",
    "chars": 15619,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/class_terrain3ddata.rst",
    "chars": 87082,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/class_terrain3deditor.rst",
    "chars": 15141,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/class_terrain3dinstancer.rst",
    "chars": 21620,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/class_terrain3dmaterial.rst",
    "chars": 48981,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/class_terrain3dmeshasset.rst",
    "chars": 34764,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/class_terrain3dregion.rst",
    "chars": 26362,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/class_terrain3dtextureasset.rst",
    "chars": 16392,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/class_terrain3dutil.rst",
    "chars": 31579,
    "preview": ":github_url: hide\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sources.\n.. Generator: https"
  },
  {
    "path": "doc/api/index.rst",
    "chars": 668,
    "preview": ":github_url: hide\n:allow_comments: False\n\n.. DO NOT EDIT THIS FILE!!!\n.. Generated automatically from Godot engine sourc"
  },
  {
    "path": "doc/build_docs.sh",
    "chars": 708,
    "preview": "#!/bin/bash\nGODOT=/c/gd/bin/Godot_v4.5.1-stable_win64.exe\nMAKERST=/c/gd/godot/doc/tools/make_rst.py\nREPO=`git rev-parse "
  },
  {
    "path": "doc/conf.py",
    "chars": 1344,
    "preview": "# Configuration file for the Sphinx documentation builder.\n#\n# For the full list of built-in configuration values, see t"
  },
  {
    "path": "doc/doc_classes/Terrain3D.xml",
    "chars": 35783,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3D\" inherits=\"Node3D\" xmlns:xsi=\"http://www.w3.org/2001/XMLS"
  },
  {
    "path": "doc/doc_classes/Terrain3DAssets.xml",
    "chars": 8283,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3DAssets\" inherits=\"Resource\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "doc/doc_classes/Terrain3DCollision.xml",
    "chars": 5869,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3DCollision\" inherits=\"Object\" xmlns:xsi=\"http://www.w3.org/"
  },
  {
    "path": "doc/doc_classes/Terrain3DData.xml",
    "chars": 34702,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3DData\" inherits=\"Object\" xmlns:xsi=\"http://www.w3.org/2001/"
  },
  {
    "path": "doc/doc_classes/Terrain3DEditor.xml",
    "chars": 5310,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3DEditor\" inherits=\"Object\" xmlns:xsi=\"http://www.w3.org/200"
  },
  {
    "path": "doc/doc_classes/Terrain3DInstancer.xml",
    "chars": 9568,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3DInstancer\" inherits=\"Object\" xmlns:xsi=\"http://www.w3.org/"
  },
  {
    "path": "doc/doc_classes/Terrain3DMaterial.xml",
    "chars": 17691,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3DMaterial\" inherits=\"Resource\" xmlns:xsi=\"http://www.w3.org"
  },
  {
    "path": "doc/doc_classes/Terrain3DMeshAsset.xml",
    "chars": 12950,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3DMeshAsset\" inherits=\"Resource\" xmlns:xsi=\"http://www.w3.or"
  },
  {
    "path": "doc/doc_classes/Terrain3DRegion.xml",
    "chars": 10260,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3DRegion\" inherits=\"Resource\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "doc/doc_classes/Terrain3DTextureAsset.xml",
    "chars": 5177,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3DTextureAsset\" inherits=\"Resource\" xmlns:xsi=\"http://www.w3"
  },
  {
    "path": "doc/doc_classes/Terrain3DUtil.xml",
    "chars": 12504,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<class name=\"Terrain3DUtil\" inherits=\"Object\" xmlns:xsi=\"http://www.w3.org/2001/"
  },
  {
    "path": "doc/docs/authors.rst",
    "chars": 82,
    "preview": "Authors\n============\n.. include:: ../../AUTHORS.md\n   :parser: myst_parser.sphinx_"
  },
  {
    "path": "doc/docs/building_from_source.md",
    "chars": 12081,
    "preview": "Building from Source\n====================\n\nIf you wish to use more recent builds without building from source, see [Nigh"
  },
  {
    "path": "doc/docs/collision.md",
    "chars": 7756,
    "preview": "Collision\n=======================\n\nOne of the most important things about a terrain is knowing where it is. Using physic"
  },
  {
    "path": "doc/docs/contributing.rst",
    "chars": 92,
    "preview": "Contributing\n============\n.. include:: ../../CONTRIBUTING.md\n   :parser: myst_parser.sphinx_"
  },
  {
    "path": "doc/docs/controlmap_format.md",
    "chars": 2682,
    "preview": "Control Map Format\n=====================\n\nThe control map defines how the terrain is textured using unsigned, 32-bit int"
  },
  {
    "path": "doc/docs/data_format.md",
    "chars": 1626,
    "preview": "Data Format Changelog\n==========================\nThe Terrain3DRegion resource files have their own version, independent "
  },
  {
    "path": "doc/docs/displacement.md",
    "chars": 4370,
    "preview": "Displacement\n====================\n\nFor a more detailed terrain mesh, you can enable texture height based displacement. T"
  },
  {
    "path": "doc/docs/double_precision.md",
    "chars": 2634,
    "preview": "Double Precision\n=================\n\nWhen the player and camera move 10s to 100s of thousands, or millions of units away "
  },
  {
    "path": "doc/docs/games.md",
    "chars": 2567,
    "preview": "Games Using Terrain3D\n=======================\n\nTerrain3D is being used in the following games. To add yours, submit it t"
  },
  {
    "path": "doc/docs/generating_csharp_bindings.md",
    "chars": 1358,
    "preview": "Generating C# Bindings\n==========================\n\nC# Bindings need to be rebuilt after building Terrain3D. At this poin"
  },
  {
    "path": "doc/docs/getting_help.md",
    "chars": 2084,
    "preview": "Getting Help\n===================\n\n**Video Tutorials**: Make sure to watch the [tutorial videos](tutorial_videos.md) whic"
  },
  {
    "path": "doc/docs/heightmaps.md",
    "chars": 14564,
    "preview": "Heightmaps\n===========\n\nTerrain3D can be used with pre-made heightmaps. They can be found online, created from heightmap"
  },
  {
    "path": "doc/docs/import_export.md",
    "chars": 9494,
    "preview": "Importing & Exporting Data\n===========================\n\nThis page describes how to get data into or out of our tool. You"
  },
  {
    "path": "doc/docs/installation.md",
    "chars": 4522,
    "preview": "Installation & Upgrades\n==========================\n\n**Table of Contents**\n* [Requirements](#requirements)\n* [Installing "
  },
  {
    "path": "doc/docs/instancer.md",
    "chars": 15718,
    "preview": "Foliage Instancing\n====================\n\nTerrain3D provides two types of instancing systems that can be used to render n"
  },
  {
    "path": "doc/docs/introduction.md",
    "chars": 4873,
    "preview": "Introduction\n=====================\n\nTerrain3D is an editable **clipmap terrain** system divided into **regions**. Data c"
  },
  {
    "path": "doc/docs/keyboard_shortcuts.md",
    "chars": 6475,
    "preview": "Keyboard Shortcuts\n=================\n\nThe following mouse and keyboard shortcuts or hotkeys are available.\n\n\n**Table of "
  },
  {
    "path": "doc/docs/license.rst",
    "chars": 49,
    "preview": "License\n==========\n.. include:: ../../LICENSE.txt"
  },
  {
    "path": "doc/docs/navigation.md",
    "chars": 9615,
    "preview": "# Navigation\n\nNavigation in games is quite a broad and sometimes complex topic. A full description can't be provided her"
  },
  {
    "path": "doc/docs/nightly_builds.md",
    "chars": 1447,
    "preview": "Nightly Builds\n====================\n\nTraditionally, \"nightly builds\" are automatically built from the main development t"
  },
  {
    "path": "doc/docs/occlusion_culling.md",
    "chars": 2537,
    "preview": "Occlusion Culling\n===================\n\nOcclusion culling allows the renderer to hide objects that are behind the terrain"
  },
  {
    "path": "doc/docs/platforms.md",
    "chars": 5034,
    "preview": "Supported Platforms\n=========================\n\nThis page documents the status of various platforms and renderers support"
  },
  {
    "path": "doc/docs/press.md",
    "chars": 1537,
    "preview": "# Press\n\nTerrain3D has been featured in the following media:\n\n| Organization | Published | Link 1 | Link 2|\n|---|---|---"
  },
  {
    "path": "doc/docs/programming_languages.rst",
    "chars": 5801,
    "preview": "Programming Languages\n=====================\n\nAny language Godot supports should be able to work with Terrain3D via\nthe G"
  },
  {
    "path": "doc/docs/shader_design.md",
    "chars": 13533,
    "preview": "Shader Design\n==============\n\nOur shader combines a lot of ideas and code from [cdxntchou's IndexMapTerrain](https://git"
  },
  {
    "path": "doc/docs/system_architecture.md",
    "chars": 3607,
    "preview": "System Architecture\n=====================\n\n## Geometry Clipmap Terrain\nSome other terrain systems generate a grid of mes"
  },
  {
    "path": "doc/docs/texture_painting.md",
    "chars": 7791,
    "preview": "Texturing the Terrain\n=========================\n\n## Texture List\n\nOnce your texture files have been prepared, this docum"
  },
  {
    "path": "doc/docs/texture_prep.md",
    "chars": 15622,
    "preview": "Preparing Textures\n=========================\n\nTerrain3D supports up to 32 texture sets using albedo, height, normal, an"
  },
  {
    "path": "doc/docs/tips_environment.md",
    "chars": 21995,
    "preview": "Environment Tips\n============================\n\n**Table of Contents**\n* [Introduction](#introduction)\n* [Lighting](#ligh"
  },
  {
    "path": "doc/docs/tips_technical.md",
    "chars": 11831,
    "preview": "Technical Tips\n====================\n\n## Are Certain Features Supported?\n\nThis list are for items that don't already have"
  },
  {
    "path": "doc/docs/troubleshooting.md",
    "chars": 11363,
    "preview": "Troubleshooting\n=================\n\nTerrain3D is working for thousands of users. If you're having trouble you've likely m"
  },
  {
    "path": "doc/docs/tutorial_videos.md",
    "chars": 1848,
    "preview": "Tutorial Videos\n==================\n\n*Note: Some instructions in the videos may be out of date. Be sure to review the doc"
  },
  {
    "path": "doc/docs/user_interface.md",
    "chars": 5595,
    "preview": "User Interface\n=================\n\nThis document describes the various UI components of Terrain3D.\n\n**Table of Contents**"
  },
  {
    "path": "doc/dump_contributors.py",
    "chars": 4200,
    "preview": "# This scripts dumps all contributors names, handles, and urls for a repository.\n# To use modify the settings below.\n\npa"
  },
  {
    "path": "doc/index.rst",
    "chars": 4022,
    "preview": ".. Terrain3D documentation master file, created by\n   sphinx-quickstart on Wed Nov 29 15:57:36 2023.\n   You can adapt t"
  },
  {
    "path": "doc/make.bat",
    "chars": 765,
    "preview": "@ECHO OFF\n\npushd %~dp0\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-bu"
  },
  {
    "path": "doc/requirements.txt",
    "chars": 111,
    "preview": "docutils>=0.17\nmyst-parser>=3.0.0\nsphinx_rtd_theme>=1.1.1\nsphinx-rtd-dark-mode\nsphinx-tabs>=3.4.7\nsphinx<9.0.0\n"
  },
  {
    "path": "project/Terrain3D.csproj",
    "chars": 183,
    "preview": "<Project Sdk=\"Godot.NET.Sdk/4.4.1\">\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <EnableDynamicLo"
  },
  {
    "path": "project/Terrain3D.sln",
    "chars": 1051,
    "preview": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C0"
  },
  {
    "path": "project/addons/terrain_3d/brushes/.gdignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3D.cs",
    "chars": 24502,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3D.cs.uid",
    "chars": 20,
    "preview": "uid://des50dgjni8ga\n"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DAssets.cs",
    "chars": 9448,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DAssets.cs.uid",
    "chars": 19,
    "preview": "uid://myg4xtgeyn1n\n"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DCollision.cs",
    "chars": 5669,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DCollision.cs.uid",
    "chars": 19,
    "preview": "uid://yab31a0ysqa3\n"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DData.cs",
    "chars": 24349,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DData.cs.uid",
    "chars": 20,
    "preview": "uid://ct5j1v1bbb4x3\n"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DEditor.cs",
    "chars": 5651,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DEditor.cs.uid",
    "chars": 20,
    "preview": "uid://bhdx3ry8edaq5\n"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DInstancer.cs",
    "chars": 6620,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DInstancer.cs.uid",
    "chars": 19,
    "preview": "uid://v155pladupha\n"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DMaterial.cs",
    "chars": 14374,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DMaterial.cs.uid",
    "chars": 20,
    "preview": "uid://cq4wvyd0gl2do\n"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DMeshAsset.cs",
    "chars": 14390,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DMeshAsset.cs.uid",
    "chars": 20,
    "preview": "uid://c1mg74hkhl5m2\n"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DRegion.cs",
    "chars": 8606,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DRegion.cs.uid",
    "chars": 20,
    "preview": "uid://bcby10sji7q8i\n"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DTextureAsset.cs",
    "chars": 9493,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DTextureAsset.cs.uid",
    "chars": 20,
    "preview": "uid://bbee5m52swmhh\n"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DUtil.cs",
    "chars": 9175,
    "preview": "#pragma warning disable CS0109\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing"
  },
  {
    "path": "project/addons/terrain_3d/csharp/Terrain3DUtil.cs.uid",
    "chars": 20,
    "preview": "uid://b5712pl5vpmet\n"
  },
  {
    "path": "project/addons/terrain_3d/extras/3rd_party/import_sgt.gd",
    "chars": 1822,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Import From SimpleGrassTextured\n# \n# This sc"
  },
  {
    "path": "project/addons/terrain_3d/extras/3rd_party/import_sgt.gd.uid",
    "chars": 20,
    "preview": "uid://bllcuwetve45k\n"
  },
  {
    "path": "project/addons/terrain_3d/extras/3rd_party/project_on_terrain3d.gd",
    "chars": 4856,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# This script is an addon for HungryProton's S"
  },
  {
    "path": "project/addons/terrain_3d/extras/3rd_party/project_on_terrain3d.gd.uid",
    "chars": 19,
    "preview": "uid://g3opjh3m3iww\n"
  },
  {
    "path": "project/addons/terrain_3d/extras/particle_example/Terrain3DParticles.tscn",
    "chars": 1004,
    "preview": "[gd_scene load_steps=5 format=3 uid=\"uid://d3sr0a7dxfkr8\"]\n\n[ext_resource type=\"Script\" uid=\"uid://bp7r4ppgq1m0g\" path=\""
  },
  {
    "path": "project/addons/terrain_3d/extras/particle_example/grass.gdshader",
    "chars": 2454,
    "preview": "// Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n\nshader_type spatial;\n\nrender_mode skip_verte"
  },
  {
    "path": "project/addons/terrain_3d/extras/particle_example/grass.gdshader.uid",
    "chars": 20,
    "preview": "uid://dq3lfyp3u5oxt\n"
  },
  {
    "path": "project/addons/terrain_3d/extras/particle_example/grass_material.tres",
    "chars": 334,
    "preview": "[gd_resource type=\"ShaderMaterial\" load_steps=2 format=3 uid=\"uid://ljo1wt61kbkq\"]\n\n[ext_resource type=\"Shader\" uid=\"uid"
  },
  {
    "path": "project/addons/terrain_3d/extras/particle_example/particles.gdshader",
    "chars": 10640,
    "preview": "// Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n\n// This is an example particle shader design"
  },
  {
    "path": "project/addons/terrain_3d/extras/particle_example/particles.gdshader.uid",
    "chars": 20,
    "preview": "uid://dce675i014xcn\n"
  },
  {
    "path": "project/addons/terrain_3d/extras/particle_example/process_material.tres",
    "chars": 11210,
    "preview": "[gd_resource type=\"ShaderMaterial\" load_steps=4 format=3 uid=\"uid://el5y10hnh13g\"]\n\n[ext_resource type=\"Shader\" uid=\"uid"
  },
  {
    "path": "project/addons/terrain_3d/extras/particle_example/terrain_3D_particles.gd",
    "chars": 7965,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n#\n# This is an example of using a particle sha"
  },
  {
    "path": "project/addons/terrain_3d/extras/particle_example/terrain_3D_particles.gd.uid",
    "chars": 20,
    "preview": "uid://bp7r4ppgq1m0g\n"
  },
  {
    "path": "project/addons/terrain_3d/extras/shaders/M_ocean.tres",
    "chars": 2071,
    "preview": "[gd_resource type=\"ShaderMaterial\" load_steps=4 format=3 uid=\"uid://cgk4glwmc4vk2\"]\n\n[ext_resource type=\"Shader\" uid=\"ui"
  },
  {
    "path": "project/addons/terrain_3d/extras/shaders/hex_grid.gdshaderinc",
    "chars": 2138,
    "preview": "// Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n// This shader snippet draws a hex grid\n\n// T"
  },
  {
    "path": "project/addons/terrain_3d/extras/shaders/hex_grid.gdshaderinc.uid",
    "chars": 19,
    "preview": "uid://mri8pfoj2mfk\n"
  },
  {
    "path": "project/addons/terrain_3d/extras/shaders/lightweight.gdshader",
    "chars": 18600,
    "preview": "// Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n// This shader is the minimum needed to allow"
  },
  {
    "path": "project/addons/terrain_3d/extras/shaders/lightweight.gdshader.uid",
    "chars": 20,
    "preview": "uid://bbx2xhanpq5l3\n"
  },
  {
    "path": "project/addons/terrain_3d/extras/shaders/minimum.gdshader",
    "chars": 10155,
    "preview": "// Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n// This shader is the minimum needed to allow"
  },
  {
    "path": "project/addons/terrain_3d/extras/shaders/minimum.gdshader.uid",
    "chars": 19,
    "preview": "uid://01qauauvd8aa\n"
  },
  {
    "path": "project/addons/terrain_3d/extras/shaders/ocean_shader.gdshader",
    "chars": 11023,
    "preview": "// Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n// This file is an example ocean shader. You"
  },
  {
    "path": "project/addons/terrain_3d/extras/shaders/ocean_shader.gdshader.uid",
    "chars": 20,
    "preview": "uid://biawd3fhk5weg\n"
  },
  {
    "path": "project/addons/terrain_3d/icons/autoshader.svg.import",
    "chars": 912,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bdwolwswwy8wr\"\npath=\"res://.godot/imported/autoshader."
  },
  {
    "path": "project/addons/terrain_3d/icons/color_paint.svg.import",
    "chars": 914,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://krrmpalen8xu\"\npath=\"res://.godot/imported/color_paint."
  },
  {
    "path": "project/addons/terrain_3d/icons/height_add.svg.import",
    "chars": 912,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bcmbqryggekg1\"\npath=\"res://.godot/imported/height_add."
  },
  {
    "path": "project/addons/terrain_3d/icons/height_div.svg.import",
    "chars": 912,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://danh7tb2v6rx7\"\npath=\"res://.godot/imported/height_div."
  },
  {
    "path": "project/addons/terrain_3d/icons/height_flat.svg.import",
    "chars": 915,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://crj0xfyiyr45u\"\npath=\"res://.godot/imported/height_flat"
  },
  {
    "path": "project/addons/terrain_3d/icons/height_mul.svg.import",
    "chars": 912,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bu3q0645kb3el\"\npath=\"res://.godot/imported/height_mul."
  },
  {
    "path": "project/addons/terrain_3d/icons/height_slope.svg.import",
    "chars": 917,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://0cd7so4kw7da\"\npath=\"res://.godot/imported/height_slope"
  },
  {
    "path": "project/addons/terrain_3d/icons/height_smooth.svg.import",
    "chars": 921,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://chrbx4xnxyiel\"\npath=\"res://.godot/imported/height_smoo"
  },
  {
    "path": "project/addons/terrain_3d/icons/height_sub.svg.import",
    "chars": 911,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://mo3hnbk3ffjs\"\npath=\"res://.godot/imported/height_sub.s"
  },
  {
    "path": "project/addons/terrain_3d/icons/holes.svg.import",
    "chars": 897,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bsmaxekrmnuy2\"\npath=\"res://.godot/imported/holes.svg-a"
  },
  {
    "path": "project/addons/terrain_3d/icons/layers.svg.import",
    "chars": 900,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://cs1la1mashf2e\"\npath=\"res://.godot/imported/layers.svg-"
  },
  {
    "path": "project/addons/terrain_3d/icons/multimesh.svg.import",
    "chars": 909,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://cjlcl5lf20ve0\"\npath=\"res://.godot/imported/multimesh.s"
  },
  {
    "path": "project/addons/terrain_3d/icons/navigation.svg.import",
    "chars": 911,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://f3po5pogkv2b\"\npath=\"res://.godot/imported/navigation.s"
  },
  {
    "path": "project/addons/terrain_3d/icons/picker_checked.svg.import",
    "chars": 924,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bg8x6o32ggt88\"\npath=\"res://.godot/imported/picker_chec"
  },
  {
    "path": "project/addons/terrain_3d/icons/region_add.svg.import",
    "chars": 912,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://c0tn453fsckv5\"\npath=\"res://.godot/imported/region_add."
  },
  {
    "path": "project/addons/terrain_3d/icons/region_remove.svg.import",
    "chars": 921,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://cbpo5eamf3bx2\"\npath=\"res://.godot/imported/region_remo"
  },
  {
    "path": "project/addons/terrain_3d/icons/terrain3d.svg.import",
    "chars": 909,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bnsydn4jkyeyn\"\npath=\"res://.godot/imported/terrain3d.s"
  },
  {
    "path": "project/addons/terrain_3d/icons/texture_paint.svg.import",
    "chars": 921,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://duo8valena3a2\"\npath=\"res://.godot/imported/texture_pai"
  },
  {
    "path": "project/addons/terrain_3d/icons/texture_spray.svg.import",
    "chars": 920,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://16yfxe7xe703\"\npath=\"res://.godot/imported/texture_spra"
  },
  {
    "path": "project/addons/terrain_3d/icons/wetness.svg.import",
    "chars": 903,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bcgg0srmqsh3n\"\npath=\"res://.godot/imported/wetness.svg"
  },
  {
    "path": "project/addons/terrain_3d/menu/bake_lod_dialog.gd",
    "chars": 788,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Bake LOD Dialog for Terrain3D\n@tool\nextends "
  },
  {
    "path": "project/addons/terrain_3d/menu/bake_lod_dialog.gd.uid",
    "chars": 20,
    "preview": "uid://cqmt8f5x5c2ad\n"
  },
  {
    "path": "project/addons/terrain_3d/menu/bake_lod_dialog.tscn",
    "chars": 1371,
    "preview": "[gd_scene load_steps=2 format=3 uid=\"uid://bhvrrmb8bk1bt\"]\n\n[ext_resource type=\"Script\" uid=\"uid://cqmt8f5x5c2ad\" path=\""
  },
  {
    "path": "project/addons/terrain_3d/menu/baker.gd",
    "chars": 15974,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Baker for Terrain3D\nextends Node\n\nconst Bake"
  },
  {
    "path": "project/addons/terrain_3d/menu/baker.gd.uid",
    "chars": 19,
    "preview": "uid://4ulaeevj5jvi\n"
  },
  {
    "path": "project/addons/terrain_3d/menu/channel_packer.gd",
    "chars": 20086,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Channel Packer for Terrain3D\nextends RefCoun"
  },
  {
    "path": "project/addons/terrain_3d/menu/channel_packer.gd.uid",
    "chars": 20,
    "preview": "uid://bwldx4itd58o7\n"
  },
  {
    "path": "project/addons/terrain_3d/menu/channel_packer.tscn",
    "chars": 31627,
    "preview": "[gd_scene load_steps=12 format=3 uid=\"uid://nud6dwjcnj5v\"]\n\n[sub_resource type=\"StyleBoxFlat\" id=\"StyleBoxFlat_mbo40\"]\nc"
  },
  {
    "path": "project/addons/terrain_3d/menu/channel_packer_dragdrop.gd",
    "chars": 507,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Channel Packer Dragdropper for Terrain3D\n@to"
  },
  {
    "path": "project/addons/terrain_3d/menu/channel_packer_dragdrop.gd.uid",
    "chars": 20,
    "preview": "uid://br45krrqbw8bg\n"
  },
  {
    "path": "project/addons/terrain_3d/menu/channel_packer_import_template.txt",
    "chars": 612,
    "preview": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nmetadata={\n\"imported_formats\": [\"s3tc_bptc\"],\n\"vram_texture\": tru"
  },
  {
    "path": "project/addons/terrain_3d/menu/directory_setup.gd",
    "chars": 2735,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Directory Setup for Terrain3D\nextends Node\n\n"
  },
  {
    "path": "project/addons/terrain_3d/menu/directory_setup.gd.uid",
    "chars": 19,
    "preview": "uid://0034ukv2mngn\n"
  },
  {
    "path": "project/addons/terrain_3d/menu/directory_setup.tscn",
    "chars": 1678,
    "preview": "[gd_scene format=3 uid=\"uid://by3kr2nqbqr67\"]\n\n[node name=\"DirectorySetup\" type=\"ConfirmationDialog\"]\ntitle = \"Terrain3D"
  },
  {
    "path": "project/addons/terrain_3d/menu/terrain_menu.gd",
    "chars": 3256,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Menu for Terrain3D\nextends HBoxContainer\n\n\nc"
  },
  {
    "path": "project/addons/terrain_3d/menu/terrain_menu.gd.uid",
    "chars": 19,
    "preview": "uid://3gxvahogxa10\n"
  },
  {
    "path": "project/addons/terrain_3d/plugin.cfg",
    "chars": 189,
    "preview": "[plugin]\n\nname=\"Terrain3D\"\ndescription=\"A high performance, editable terrain system for Godot 4.\"\nauthor=\"Cory Petkovsek"
  },
  {
    "path": "project/addons/terrain_3d/src/asset_dock.gd",
    "chars": 36116,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Asset Dock for Terrain3D\n@tool\nextends Panel"
  },
  {
    "path": "project/addons/terrain_3d/src/asset_dock.gd.uid",
    "chars": 20,
    "preview": "uid://bgoifepft1hjw\n"
  },
  {
    "path": "project/addons/terrain_3d/src/asset_dock.tscn",
    "chars": 3003,
    "preview": "[gd_scene load_steps=2 format=3 uid=\"uid://dkb6hii5e48m2\"]\n\n[ext_resource type=\"Script\" uid=\"uid://bgoifepft1hjw\" path=\""
  },
  {
    "path": "project/addons/terrain_3d/src/double_slider.gd",
    "chars": 4362,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# DoubleSlider for Terrain3D\n# Should work for"
  },
  {
    "path": "project/addons/terrain_3d/src/double_slider.gd.uid",
    "chars": 19,
    "preview": "uid://stro0p1oawfb\n"
  },
  {
    "path": "project/addons/terrain_3d/src/editor_plugin.gd",
    "chars": 16018,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Editor Plugin for Terrain3D\n@tool\nextends Ed"
  },
  {
    "path": "project/addons/terrain_3d/src/editor_plugin.gd.uid",
    "chars": 20,
    "preview": "uid://bsgxo1qywjdf3\n"
  },
  {
    "path": "project/addons/terrain_3d/src/gradient_operation_builder.gd",
    "chars": 1610,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Gradient Operation Builder for Terrain3D\next"
  },
  {
    "path": "project/addons/terrain_3d/src/gradient_operation_builder.gd.uid",
    "chars": 20,
    "preview": "uid://def7sych6dp8b\n"
  },
  {
    "path": "project/addons/terrain_3d/src/multi_picker.gd",
    "chars": 1941,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Multipicker for Terrain3D\nextends HBoxContai"
  },
  {
    "path": "project/addons/terrain_3d/src/multi_picker.gd.uid",
    "chars": 20,
    "preview": "uid://dvdtoa32h6xdn\n"
  },
  {
    "path": "project/addons/terrain_3d/src/operation_builder.gd",
    "chars": 527,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Operation Builder for Terrain3D\nextends RefC"
  },
  {
    "path": "project/addons/terrain_3d/src/operation_builder.gd.uid",
    "chars": 20,
    "preview": "uid://bu5cm0eh052rm\n"
  },
  {
    "path": "project/addons/terrain_3d/src/tool_settings.gd",
    "chars": 29449,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Tool settings bar for Terrain3D\nextends Pane"
  },
  {
    "path": "project/addons/terrain_3d/src/tool_settings.gd.uid",
    "chars": 20,
    "preview": "uid://ciskaaennrffu\n"
  },
  {
    "path": "project/addons/terrain_3d/src/toolbar.gd",
    "chars": 7511,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Toolbar for Terrain3D\nextends VFlowContainer"
  },
  {
    "path": "project/addons/terrain_3d/src/toolbar.gd.uid",
    "chars": 20,
    "preview": "uid://b1j37u6utjbom\n"
  },
  {
    "path": "project/addons/terrain_3d/src/ui.gd",
    "chars": 24821,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# UI for Terrain3D\nextends Node\n\n\n# Includes\nc"
  },
  {
    "path": "project/addons/terrain_3d/src/ui.gd.uid",
    "chars": 20,
    "preview": "uid://bpad72s36mwkx\n"
  },
  {
    "path": "project/addons/terrain_3d/terrain.gdextension",
    "chars": 1501,
    "preview": "[configuration]\n\nentry_symbol = \"terrain_3d_init\"\ncompatibility_minimum = 4.4\n\n[icons]\n\nTerrain3D = \"res://addons/terrai"
  },
  {
    "path": "project/addons/terrain_3d/terrain.gdextension.uid",
    "chars": 20,
    "preview": "uid://bdn2ygldx56a8\n"
  },
  {
    "path": "project/addons/terrain_3d/tools/importer.gd",
    "chars": 4291,
    "preview": "# Copyright © 2023-2026 Cory Petkovsek, Roope Palmroos, and Contributors.\n# Importer for Terrain3D\n@tool\nextends Terrain"
  },
  {
    "path": "project/addons/terrain_3d/tools/importer.gd.uid",
    "chars": 20,
    "preview": "uid://cib2rig7vup10\n"
  },
  {
    "path": "project/addons/terrain_3d/tools/importer.tscn",
    "chars": 1970,
    "preview": "[gd_scene load_steps=9 format=3 uid=\"uid://blaieaqp413k7\"]\n\n[ext_resource type=\"Script\" path=\"res://addons/terrain_3d/to"
  },
  {
    "path": "project/addons/terrain_3d/tools/region_mover.gd",
    "chars": 1753,
    "preview": "# This script can be used to move your regions by an offset. \n# Eventually this tool will find its way into a built in U"
  }
]

// ... and 156 more files (download for full content)

About this extraction

This page contains the full source code of the outobugi/Terrain3D GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 356 files (2.2 MB), approximately 589.0k tokens, and a symbol index with 465 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!