terraingenpy 0.1.1.dev13__tar.gz → 0.1.1.dev17__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (797) hide show
  1. terraingenpy-0.1.1.dev17/CHANGELOG.md +53 -0
  2. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/CMakeLists.txt +1 -1
  3. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/PKG-INFO +2 -3
  4. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/README.md +1 -2
  5. terraingenpy-0.1.1.dev17/examples/config/boulders/example_boulders_rolling.json +45 -0
  6. terraingenpy-0.1.1.dev17/examples/config/boulders/example_boulders_slope_map.json +56 -0
  7. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/build.cpp +8 -0
  8. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/config.h +14 -2
  9. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/boulders.h +9 -0
  10. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/craters.h +9 -1
  11. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/enums.h +10 -0
  12. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/maps.h +16 -0
  13. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/abundance.cpp +15 -4
  14. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_layer.cpp +43 -10
  15. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_layer.h +6 -0
  16. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_options.cpp +23 -0
  17. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_options.h +12 -1
  18. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/crater_layer.cpp +1 -0
  19. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/crater_layer.h +2 -1
  20. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/degradation/degradation_model.cpp +6 -0
  21. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/degradation/degradation_model.h +7 -0
  22. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/degradation/diffusion.cpp +5 -1
  23. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/degradation/diffusion.h +4 -0
  24. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/degradation/freshness.cpp +2 -1
  25. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/degradation/freshness.h +2 -1
  26. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/generation/population.h +4 -0
  27. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/generation/spacing.cpp +5 -2
  28. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/generation/spacing.h +5 -3
  29. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/apply.cpp +38 -3
  30. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/apply_options.cpp +2 -1
  31. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/apply_options.h +2 -1
  32. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/crater_kernel.cpp +4 -6
  33. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/datum.cpp +12 -4
  34. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/datum.h +2 -1
  35. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/prepared.h +2 -0
  36. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/slope.cpp +15 -0
  37. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/slope.h +24 -2
  38. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/density_map.cpp +24 -0
  39. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/density_map.h +35 -0
  40. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/kernels/craters.h +9 -2
  41. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/boulders.cpp +2 -0
  42. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/crater_models.cpp +3 -1
  43. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/craters.cpp +10 -3
  44. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/layers.cpp +23 -0
  45. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_boulders.py +13 -0
  46. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_craters.py +11 -0
  47. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/build_test.cpp +14 -3
  48. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/generate_terrain_test.cpp +8 -2
  49. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/json_io_test.cpp +11 -2
  50. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/boulders/boulder_layer_test.cpp +115 -0
  51. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/degradation/freshness_test.cpp +3 -0
  52. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/generation/spacing_test.cpp +44 -0
  53. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/shaping/crater_kernel_test.cpp +2 -0
  54. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/shaping/slope_test.cpp +113 -0
  55. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/density_map_test.cpp +30 -0
  56. terraingenpy-0.1.1.dev13/CHANGELOG.md +0 -29
  57. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.clang-format +0 -0
  58. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.clang-tidy +0 -0
  59. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.cmake-format.yaml +0 -0
  60. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.dockerignore +0 -0
  61. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.gitattributes +0 -0
  62. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  63. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  64. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  65. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.github/pull_request_template.md +0 -0
  66. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.github/scripts/install-lavapipe-windows.sh +0 -0
  67. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.github/workflows/ci.yml +0 -0
  68. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.gitignore +0 -0
  69. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/.pre-commit-config.yaml +0 -0
  70. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/CITATION.cff +0 -0
  71. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/CONTRIBUTING.md +0 -0
  72. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/Dockerfile +0 -0
  73. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/LICENSE +0 -0
  74. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/assets/textures/README.md +0 -0
  75. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/assets/textures/moon_01_diff_4k.jpg +0 -0
  76. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/assets/textures/moon_01_disp_4k.png +0 -0
  77. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/assets/textures/moon_01_nor_gl_4k.exr +0 -0
  78. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/assets/textures/moon_01_rough_4k.exr +0 -0
  79. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/BuildInfo.cmake +0 -0
  80. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/CoverageBadge.cmake +0 -0
  81. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/EmbedFile.cmake +0 -0
  82. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/Kernel.cpp.in +0 -0
  83. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/TerrainGenPackaging.cmake +0 -0
  84. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/TerrainGenSlang.cmake +0 -0
  85. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/TerrainGenTesting.cmake +0 -0
  86. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/terraingenConfig.cmake.in +0 -0
  87. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/third_party/benchmark.cmake +0 -0
  88. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/third_party/ernie.cmake +0 -0
  89. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/third_party/googletest.cmake +0 -0
  90. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/third_party/mesh_formats.cmake +0 -0
  91. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/third_party/miniz.cmake +0 -0
  92. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/third_party/nanobind.cmake +0 -0
  93. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/third_party/nvrtc.cmake +0 -0
  94. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/third_party/slang.cmake +0 -0
  95. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/third_party/volk.cmake +0 -0
  96. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/cmake/third_party/vulkan_headers.cmake +0 -0
  97. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/.gitignore +0 -0
  98. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/Makefile +0 -0
  99. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/README.md +0 -0
  100. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/api/cpp.md +0 -0
  101. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/api/python.md +0 -0
  102. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/concepts/index.md +0 -0
  103. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/css/extra.css +0 -0
  104. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/getting-started/command-line.md +0 -0
  105. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/getting-started/gui.md +0 -0
  106. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/getting-started/index.md +0 -0
  107. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/getting-started/installation.md +0 -0
  108. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/getting-started/quickstart.md +0 -0
  109. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/guides/index.md +0 -0
  110. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/index.md +0 -0
  111. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/overrides/home.html +0 -0
  112. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/overrides/partials/header.html +0 -0
  113. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/requirements.txt +0 -0
  114. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/scripts/generate_schema.py +0 -0
  115. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/docs/validation/index.md +0 -0
  116. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/README.md +0 -0
  117. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/ages/example_ages_fresh.json +0 -0
  118. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/ages/example_ages_steady_state.json +0 -0
  119. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/ages/example_ages_uniform.json +0 -0
  120. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/albedo/example_albedo_blast_zone.json +0 -0
  121. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/albedo/example_albedo_crater_rays.json +0 -0
  122. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/albedo/example_albedo_fresh_crater.json +0 -0
  123. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/albedo/example_albedo_moon_site.json +0 -0
  124. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/albedo/example_albedo_new_crater.json +0 -0
  125. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/albedo/example_albedo_oblique_rays.json +0 -0
  126. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/albedo/example_albedo_rgb.json +0 -0
  127. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/albedo/example_albedo_synthetic.json +0 -0
  128. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_buried.json +0 -0
  129. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_ejecta.json +0 -0
  130. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_exposure.json +0 -0
  131. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_fragments.json +0 -0
  132. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_layer.json +0 -0
  133. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_max_slope.json +0 -0
  134. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_models.json +0 -0
  135. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_patches.json +0 -0
  136. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_rock_abundance.json +0 -0
  137. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_scene.json +0 -0
  138. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_shapes.json +0 -0
  139. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_sp8023.json +0 -0
  140. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/boulders/example_boulders_thomas_clusters.json +0 -0
  141. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_catalog_and_map.json +0 -0
  142. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_datum.json +0 -0
  143. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_degradation_diffusion.json +0 -0
  144. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_degradation_none.json +0 -0
  145. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_interior_replacement.json +0 -0
  146. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_irregular.json +0 -0
  147. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_manual.json +0 -0
  148. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_max_craters.json +0 -0
  149. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_profile_complex.json +0 -0
  150. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_profile_martin_parkes_dunstan.json +0 -0
  151. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_rim_smoothing_soft.json +0 -0
  152. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_secondaries.json +0 -0
  153. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_secondary_rays.json +0 -0
  154. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_simple.json +0 -0
  155. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_slopes.json +0 -0
  156. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_smoothed_rims.json +0 -0
  157. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_spacing.json +0 -0
  158. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_texture.json +0 -0
  159. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/craters/example_craters_wall_marks.json +0 -0
  160. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/distributions/example_distributions_moore_rough_mare.json +0 -0
  161. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/distributions/example_distributions_piecewise_power_law.json +0 -0
  162. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/distributions/example_distributions_piecewise_uniform.json +0 -0
  163. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/distributions/example_distributions_power_law.json +0 -0
  164. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/distributions/example_distributions_tabulated.json +0 -0
  165. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/distributions/example_distributions_trask_equilibrium.json +0 -0
  166. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/distributions/example_distributions_viper.json +0 -0
  167. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/layers/example_layers_regions.json +0 -0
  168. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/layers/example_layers_roughness.json +0 -0
  169. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/layers/example_layers_scale_and_clamp.json +0 -0
  170. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_asteroid_body_mesh.json +0 -0
  171. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_mars_bedforms.json +0 -0
  172. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_mars_craters.json +0 -0
  173. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_mars_dunes.json +0 -0
  174. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_mars_exposure.json +0 -0
  175. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_mars_pavement.json +0 -0
  176. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_mars_sand_fill.json +0 -0
  177. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_mars_sand_shadows.json +0 -0
  178. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_mars_strata.json +0 -0
  179. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_mars_ventifacts.json +0 -0
  180. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_mercury_site.json +0 -0
  181. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_moon_body_mesh.json +0 -0
  182. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/planets/example_planets_moon_site.json +0 -0
  183. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/terrain/example_terrain_billow.json +0 -0
  184. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/terrain/example_terrain_cellular.json +0 -0
  185. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/terrain/example_terrain_domain_warp.json +0 -0
  186. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/terrain/example_terrain_fbm.json +0 -0
  187. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/terrain/example_terrain_layered.json +0 -0
  188. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/terrain/example_terrain_ridged.json +0 -0
  189. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/terrain/example_terrain_roughness.json +0 -0
  190. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/config/terrain/example_terrain_voronoi.json +0 -0
  191. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/CMakeLists.txt +0 -0
  192. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/ages/example_ages_models.cpp +0 -0
  193. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/albedo/example_albedo_crater_rays.cpp +0 -0
  194. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/boulders/example_boulders_ejecta.cpp +0 -0
  195. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/boulders/example_boulders_layer.cpp +0 -0
  196. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/boulders/example_boulders_shapes.cpp +0 -0
  197. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/common/browser.cpp +0 -0
  198. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/common/browser.h +0 -0
  199. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/common/example.cpp +0 -0
  200. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/common/example.h +0 -0
  201. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/common/main.cpp +0 -0
  202. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/common/standalone_main.cpp +0 -0
  203. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/config/example_config_load.cpp +0 -0
  204. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/craters/example_craters_degradation.cpp +0 -0
  205. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/craters/example_craters_manual.cpp +0 -0
  206. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/craters/example_craters_profiles.cpp +0 -0
  207. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/craters/example_craters_secondaries.cpp +0 -0
  208. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/craters/example_craters_simple.cpp +0 -0
  209. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/distributions/example_distributions_csfd.cpp +0 -0
  210. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/layers/example_layers_custom.cpp +0 -0
  211. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/layers/example_layers_regions.cpp +0 -0
  212. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/planets/example_planets_moon.cpp +0 -0
  213. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/sources/example_sources_raster_detail.cpp +0 -0
  214. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/terrain/example_terrain_fbm.cpp +0 -0
  215. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/terrain/example_terrain_layered.cpp +0 -0
  216. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/tiles/example_tiles_body_pyramid.cpp +0 -0
  217. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/tiles/example_tiles_quadtree.cpp +0 -0
  218. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/cpp/tiles/example_tiles_rover_contacts.cpp +0 -0
  219. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/__main__.py +0 -0
  220. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/_browser.py +0 -0
  221. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/_common.py +0 -0
  222. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/_harness.py +0 -0
  223. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/_images.py +0 -0
  224. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/ages/example_ages_models.py +0 -0
  225. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/albedo/example_albedo_crater_rays.py +0 -0
  226. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/albedo/example_albedo_moon_site.py +0 -0
  227. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/albedo/example_albedo_options.py +0 -0
  228. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/boulders/example_boulders_exposure.py +0 -0
  229. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/boulders/example_boulders_layer.py +0 -0
  230. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/boulders/example_boulders_positioning.py +0 -0
  231. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/boulders/example_boulders_shapes.py +0 -0
  232. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/boulders/example_boulders_size_models.py +0 -0
  233. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/config/example_config_load.py +0 -0
  234. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/craters/example_craters_age_sweep.py +0 -0
  235. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/craters/example_craters_apply_options.py +0 -0
  236. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/craters/example_craters_degradation.py +0 -0
  237. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/craters/example_craters_irregularity.py +0 -0
  238. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/craters/example_craters_manual.py +0 -0
  239. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/craters/example_craters_positioning.py +0 -0
  240. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/craters/example_craters_profiles.py +0 -0
  241. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/craters/example_craters_rim_smoothing.py +0 -0
  242. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/craters/example_craters_secondaries.py +0 -0
  243. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/craters/example_craters_simple.py +0 -0
  244. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/distributions/example_distributions_csfd.py +0 -0
  245. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/distributions/example_distributions_custom.py +0 -0
  246. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/layers/example_layers_custom.py +0 -0
  247. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/layers/example_layers_regions.py +0 -0
  248. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/planets/example_planets_body_mesh.py +0 -0
  249. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/planets/example_planets_mars.py +0 -0
  250. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/planets/example_planets_mars_dunes.py +0 -0
  251. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/planets/example_planets_mars_exposure.py +0 -0
  252. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/planets/example_planets_mercury.py +0 -0
  253. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/planets/example_planets_moon_site.py +0 -0
  254. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/sources/example_sources_chain.py +0 -0
  255. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/sources/example_sources_raster_detail.py +0 -0
  256. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/terrain/example_terrain_fbm.py +0 -0
  257. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/terrain/example_terrain_fractal_types.py +0 -0
  258. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/terrain/example_terrain_hurst_sweep.py +0 -0
  259. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/terrain/example_terrain_layered.py +0 -0
  260. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/terrain/example_terrain_noise_kernels.py +0 -0
  261. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/tiles/example_tiles_body_pyramid.py +0 -0
  262. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/tiles/example_tiles_point_queries.py +0 -0
  263. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/tiles/example_tiles_quadtree.py +0 -0
  264. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/examples/python/tiles/example_tiles_rover_contacts.py +0 -0
  265. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/mkdocs.yml +0 -0
  266. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/pyproject.toml +0 -0
  267. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/CMakeLists.txt +0 -0
  268. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/CMakeLists.txt +0 -0
  269. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/albedo.cpp +0 -0
  270. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/albedo.h +0 -0
  271. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/blast_zones.cpp +0 -0
  272. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/blast_zones.h +0 -0
  273. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/crater_albedo.cpp +0 -0
  274. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/crater_albedo.h +0 -0
  275. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/maturity.cpp +0 -0
  276. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/maturity.h +0 -0
  277. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/raster_albedo.cpp +0 -0
  278. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/raster_albedo.h +0 -0
  279. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/splotches.cpp +0 -0
  280. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/splotches.h +0 -0
  281. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/synthetic.cpp +0 -0
  282. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/albedo/synthetic.h +0 -0
  283. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/CMakeLists.txt +0 -0
  284. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/cli.cpp +0 -0
  285. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/cli.h +0 -0
  286. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/gui/CMakeLists.txt +0 -0
  287. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/gui/config_editor.cpp +0 -0
  288. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/gui/config_editor.h +0 -0
  289. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/gui/gui_app.cpp +0 -0
  290. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/gui/gui_app.h +0 -0
  291. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/gui/run.cpp +0 -0
  292. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/gui/run.h +0 -0
  293. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/gui/run_none.cpp +0 -0
  294. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/gui/terrain_scene.cpp +0 -0
  295. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/gui/terrain_scene.h +0 -0
  296. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/app/main.cpp +0 -0
  297. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/CMakeLists.txt +0 -0
  298. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/build.h +0 -0
  299. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/config.cpp +0 -0
  300. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/feature_lists.cpp +0 -0
  301. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/albedo.h +0 -0
  302. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/checks.h +0 -0
  303. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/common.h +0 -0
  304. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/crater_models.h +0 -0
  305. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/fields.h +0 -0
  306. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/json_io.h +0 -0
  307. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/layers.h +0 -0
  308. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/materials.h +0 -0
  309. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/outputs.h +0 -0
  310. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/fields/sources.h +0 -0
  311. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/generate.cpp +0 -0
  312. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/generate.h +0 -0
  313. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/json.cpp +0 -0
  314. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/json.h +0 -0
  315. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/schema.cpp +0 -0
  316. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/validate.cpp +0 -0
  317. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/config/validate.h +0 -0
  318. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/CMakeLists.txt +0 -0
  319. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/combined.cpp +0 -0
  320. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/combined.h +0 -0
  321. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/equilibrium.cpp +0 -0
  322. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/equilibrium.h +0 -0
  323. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/golombek_rapp.cpp +0 -0
  324. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/golombek_rapp.h +0 -0
  325. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/ivanov.cpp +0 -0
  326. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/ivanov.h +0 -0
  327. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/log_polynomial.cpp +0 -0
  328. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/log_polynomial.h +0 -0
  329. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/minimum.cpp +0 -0
  330. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/minimum.h +0 -0
  331. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/moore.cpp +0 -0
  332. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/moore.h +0 -0
  333. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/neukum.cpp +0 -0
  334. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/neukum.h +0 -0
  335. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/piecewise_power_law.cpp +0 -0
  336. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/piecewise_power_law.h +0 -0
  337. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/piecewise_uniform.cpp +0 -0
  338. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/piecewise_uniform.h +0 -0
  339. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/power_law.cpp +0 -0
  340. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/power_law.h +0 -0
  341. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/production_surface.cpp +0 -0
  342. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/production_surface.h +0 -0
  343. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/size_frequency.cpp +0 -0
  344. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/size_frequency.h +0 -0
  345. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/sp8023.cpp +0 -0
  346. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/sp8023.h +0 -0
  347. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/spliced.cpp +0 -0
  348. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/spliced.h +0 -0
  349. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/summed.cpp +0 -0
  350. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/summed.h +0 -0
  351. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/synthterrain.cpp +0 -0
  352. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/synthterrain.h +0 -0
  353. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/tabulated.cpp +0 -0
  354. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/tabulated.h +0 -0
  355. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/viper.cpp +0 -0
  356. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/distribution/viper.h +0 -0
  357. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/CMakeLists.txt +0 -0
  358. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/backend.cpp +0 -0
  359. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/backend.h +0 -0
  360. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/cuda.cpp +0 -0
  361. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/cuda.h +0 -0
  362. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/kernel.cpp +0 -0
  363. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/kernel.h +0 -0
  364. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/kernel.slang +0 -0
  365. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/metal.cpp +0 -0
  366. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/metal.h +0 -0
  367. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/program.h +0 -0
  368. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/vulkan.cpp +0 -0
  369. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/gpu/vulkan.h +0 -0
  370. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/CMakeLists.txt +0 -0
  371. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/bedforms.cpp +0 -0
  372. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/bedforms.h +0 -0
  373. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder.h +0 -0
  374. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_fragments.cpp +0 -0
  375. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_fragments.h +0 -0
  376. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_models.cpp +0 -0
  377. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_models.h +0 -0
  378. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_placer.h +0 -0
  379. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_shape.cpp +0 -0
  380. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/boulders/boulder_shape.h +0 -0
  381. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/ages/age_model.cpp +0 -0
  382. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/ages/age_model.h +0 -0
  383. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/ages/steady_state.cpp +0 -0
  384. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/ages/steady_state.h +0 -0
  385. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/crater.cpp +0 -0
  386. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/crater.h +0 -0
  387. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/crater_placer.cpp +0 -0
  388. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/crater_placer.h +0 -0
  389. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/degradation/diffusivities.cpp +0 -0
  390. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/degradation/diffusivities.h +0 -0
  391. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/degradation/state.h +0 -0
  392. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/generation/cell_cache.cpp +0 -0
  393. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/generation/cell_cache.h +0 -0
  394. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/generation/population.cpp +0 -0
  395. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/profiles/complex.cpp +0 -0
  396. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/profiles/complex.h +0 -0
  397. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/profiles/fassett_thomson.cpp +0 -0
  398. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/profiles/fassett_thomson.h +0 -0
  399. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/profiles/martin_parkes_dunstan.cpp +0 -0
  400. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/profiles/martin_parkes_dunstan.h +0 -0
  401. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/profiles/profile.h +0 -0
  402. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/rays.cpp +0 -0
  403. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/rays.h +0 -0
  404. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/secondaries.cpp +0 -0
  405. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/secondaries.h +0 -0
  406. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/secondary_model.cpp +0 -0
  407. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/secondary_model.h +0 -0
  408. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/apply.h +0 -0
  409. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/attributes.cpp +0 -0
  410. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/attributes.h +0 -0
  411. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/crater_kernel.h +0 -0
  412. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/irregularity.cpp +0 -0
  413. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/irregularity.h +0 -0
  414. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/morphometry.cpp +0 -0
  415. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/morphometry.h +0 -0
  416. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/craters/shaping/prepared.cpp +0 -0
  417. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/detail.cpp +0 -0
  418. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/detail.h +0 -0
  419. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/dunes.cpp +0 -0
  420. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/dunes.h +0 -0
  421. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/evaluation_cache.h +0 -0
  422. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/exposure.cpp +0 -0
  423. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/exposure.h +0 -0
  424. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/fade.cpp +0 -0
  425. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/fade.h +0 -0
  426. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/ground.h +0 -0
  427. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/kernel.h +0 -0
  428. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/kernels/cell.h +0 -0
  429. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/kernels/crater_datums.slang +0 -0
  430. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/kernels/craters.slang +0 -0
  431. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/kernels/noise_relief.h +0 -0
  432. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/kernels/noise_relief.slang +0 -0
  433. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/layer.cpp +0 -0
  434. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/layer.h +0 -0
  435. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/material.cpp +0 -0
  436. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/material.h +0 -0
  437. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/noise_relief.cpp +0 -0
  438. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/noise_relief.h +0 -0
  439. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/pavement.cpp +0 -0
  440. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/pavement.h +0 -0
  441. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/region.cpp +0 -0
  442. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/region.h +0 -0
  443. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/roughness.cpp +0 -0
  444. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/roughness.h +0 -0
  445. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/sample_block.cpp +0 -0
  446. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/sample_block.h +0 -0
  447. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/sand_fill.cpp +0 -0
  448. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/sand_fill.h +0 -0
  449. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/sand_shadow.cpp +0 -0
  450. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/sand_shadow.h +0 -0
  451. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/strata.cpp +0 -0
  452. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/strata.h +0 -0
  453. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/transforms.cpp +0 -0
  454. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/layers/transforms.h +0 -0
  455. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/materials/CMakeLists.txt +0 -0
  456. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/materials/materials.cpp +0 -0
  457. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/materials/materials.h +0 -0
  458. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/CMakeLists.txt +0 -0
  459. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/io/formats.h +0 -0
  460. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/io/gltf.cpp +0 -0
  461. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/io/icq.cpp +0 -0
  462. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/io/icq.h +0 -0
  463. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/io/mesh_io.cpp +0 -0
  464. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/io/mesh_io.h +0 -0
  465. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/io/obj.cpp +0 -0
  466. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/io/stl.cpp +0 -0
  467. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/mesh.cpp +0 -0
  468. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/mesh.h +0 -0
  469. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/polyhedra.cpp +0 -0
  470. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/polyhedra.h +0 -0
  471. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/shape_model.cpp +0 -0
  472. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/mesh/shape_model.h +0 -0
  473. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/CMakeLists.txt +0 -0
  474. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/fractal.h +0 -0
  475. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/hash.h +0 -0
  476. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/lattice.h +0 -0
  477. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/noise_layers.h +0 -0
  478. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/perlin.h +0 -0
  479. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/simplex.h +0 -0
  480. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/validate.cpp +0 -0
  481. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/validate.h +0 -0
  482. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/value.h +0 -0
  483. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/noise/worley.h +0 -0
  484. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/CMakeLists.txt +0 -0
  485. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/body_mesh.cpp +0 -0
  486. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/body_mesh.h +0 -0
  487. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/features.cpp +0 -0
  488. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/features.h +0 -0
  489. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/height_mesh.cpp +0 -0
  490. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/height_mesh.h +0 -0
  491. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/terrain.cpp +0 -0
  492. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/terrain.h +0 -0
  493. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/tiles.cpp +0 -0
  494. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/pipeline/tiles.h +0 -0
  495. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/CMakeLists.txt +0 -0
  496. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/albedo.cpp +0 -0
  497. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/bindings.h +0 -0
  498. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/casters.h +0 -0
  499. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/common.h +0 -0
  500. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/distribution.cpp +0 -0
  501. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/gpu.cpp +0 -0
  502. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/materials.cpp +0 -0
  503. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/mesh.cpp +0 -0
  504. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/module.cpp +0 -0
  505. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/noise.cpp +0 -0
  506. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/objects.h +0 -0
  507. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/pipeline.cpp +0 -0
  508. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/random.cpp +0 -0
  509. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/raster.cpp +0 -0
  510. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/sources.cpp +0 -0
  511. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/tables.h +0 -0
  512. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/trampolines.h +0 -0
  513. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/src/util.cpp +0 -0
  514. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/terraingen/__init__.py +0 -0
  515. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/python/terraingen/render.py +0 -0
  516. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/random/CMakeLists.txt +0 -0
  517. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/random/philox.h +0 -0
  518. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/random/samplers.cpp +0 -0
  519. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/random/samplers.h +0 -0
  520. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/random/stream.cpp +0 -0
  521. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/random/stream.h +0 -0
  522. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/random/value_distribution.cpp +0 -0
  523. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/random/value_distribution.h +0 -0
  524. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/CMakeLists.txt +0 -0
  525. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/cell_loops.cpp +0 -0
  526. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/cell_loops.h +0 -0
  527. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/gaussian_blur.cpp +0 -0
  528. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/gaussian_blur.h +0 -0
  529. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/geo_transform.h +0 -0
  530. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/geotiff/geotiff.cpp +0 -0
  531. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/geotiff/geotiff.h +0 -0
  532. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/geotiff/geotiff_read.cpp +0 -0
  533. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/geotiff/geotiff_write.cpp +0 -0
  534. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/geotiff/tiff_codecs.cpp +0 -0
  535. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/geotiff/tiff_codecs.h +0 -0
  536. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/geotiff/tiff_format.cpp +0 -0
  537. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/geotiff/tiff_format.h +0 -0
  538. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/grid.cpp +0 -0
  539. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/grid.h +0 -0
  540. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/raster.h +0 -0
  541. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/raster_stats.h +0 -0
  542. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/resample.cpp +0 -0
  543. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/raster/resample.h +0 -0
  544. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/CMakeLists.txt +0 -0
  545. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/field.cpp +0 -0
  546. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/field.h +0 -0
  547. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/flat_source.cpp +0 -0
  548. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/flat_source.h +0 -0
  549. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/geotiff_source.cpp +0 -0
  550. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/geotiff_source.h +0 -0
  551. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/source.h +0 -0
  552. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/source_chain.cpp +0 -0
  553. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/source_chain.h +0 -0
  554. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/synthetic_terrain.cpp +0 -0
  555. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/sources/synthetic_terrain.h +0 -0
  556. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/terraingen.h +0 -0
  557. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/CMakeLists.txt +0 -0
  558. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/build_info.cpp.in +0 -0
  559. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/build_info.h +0 -0
  560. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/cells.h +0 -0
  561. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/checks.cpp +0 -0
  562. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/checks.h +0 -0
  563. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/cube_faces.h +0 -0
  564. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/cube_sphere_cells.cpp +0 -0
  565. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/fft.cpp +0 -0
  566. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/fft.h +0 -0
  567. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/geometry.h +0 -0
  568. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/log.cpp +0 -0
  569. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/log.h +0 -0
  570. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/lru_cache.h +0 -0
  571. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/overloaded.h +0 -0
  572. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/parallel.cpp +0 -0
  573. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/parallel.h +0 -0
  574. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/planar_cells.cpp +0 -0
  575. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/portable.h +0 -0
  576. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/radial_shape.cpp +0 -0
  577. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/radial_shape.h +0 -0
  578. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/special_functions.cpp +0 -0
  579. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/special_functions.h +0 -0
  580. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/surface.cpp +0 -0
  581. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/surface.h +0 -0
  582. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/version.cpp +0 -0
  583. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/terraingen/util/version.h.in +0 -0
  584. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/CMakeLists.txt +0 -0
  585. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/benchmark/CMakeLists.txt +0 -0
  586. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/benchmark/bench_craters.cpp +0 -0
  587. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/benchmark/bench_grids.cpp +0 -0
  588. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/benchmark/bench_point_queries.cpp +0 -0
  589. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/benchmark/bench_python_subclasses.py +0 -0
  590. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/benchmark/fixtures.h +0 -0
  591. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/golden/CMakeLists.txt +0 -0
  592. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/golden/noise/kernels_test.cpp +0 -0
  593. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/integration/CMakeLists.txt +0 -0
  594. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/integration/build_info_stable.cmake +0 -0
  595. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/integration/examples/CMakeLists.txt +0 -0
  596. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/integration/package/CMakeLists.txt +0 -0
  597. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/integration/package/main.cpp +0 -0
  598. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/integration/package/test_debian_packages.cmake +0 -0
  599. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/CMakeLists.txt +0 -0
  600. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/conftest.py +0 -0
  601. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_albedo.py +0 -0
  602. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_config.py +0 -0
  603. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_crater_models.py +0 -0
  604. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_distributions.py +0 -0
  605. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_examples_harness.py +0 -0
  606. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_gpu.py +0 -0
  607. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_layers.py +0 -0
  608. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_meshes.py +0 -0
  609. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_noise.py +0 -0
  610. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_pipeline.py +0 -0
  611. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_random.py +0 -0
  612. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_raster.py +0 -0
  613. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_render.py +0 -0
  614. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_sources.py +0 -0
  615. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_stubs.py +0 -0
  616. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_tiles.py +0 -0
  617. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/python/test_util.py +0 -0
  618. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/statistical/CMakeLists.txt +0 -0
  619. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/statistical/distribution/crater_references_test.cpp +0 -0
  620. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/statistical/distribution/size_frequency_test.cpp +0 -0
  621. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/statistical/layers/boulders/boulder_layer_test.cpp +0 -0
  622. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/statistical/layers/craters/ages/ages_test.cpp +0 -0
  623. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/statistical/layers/craters/population_test.cpp +0 -0
  624. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/statistical/layers/roughness_test.cpp +0 -0
  625. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/statistical/random/random_test.cpp +0 -0
  626. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/support/log_capture.h +0 -0
  627. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/support/lunar_craters.h +0 -0
  628. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/support/raster_equality.h +0 -0
  629. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/support/statistics.h +0 -0
  630. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/support/temp_path.h +0 -0
  631. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/CMakeLists.txt +0 -0
  632. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/albedo/CMakeLists.txt +0 -0
  633. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/albedo/albedo_test.cpp +0 -0
  634. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/albedo/blast_zones_test.cpp +0 -0
  635. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/albedo/crater_albedo_test.cpp +0 -0
  636. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/albedo/splotches_test.cpp +0 -0
  637. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/app/CMakeLists.txt +0 -0
  638. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/app/cli_test.cpp +0 -0
  639. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/app/gui/CMakeLists.txt +0 -0
  640. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/app/gui/config_editor_test.cpp +0 -0
  641. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/app/gui/gui_app_test.cpp +0 -0
  642. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/app/gui/terrain_scene_test.cpp +0 -0
  643. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/CMakeLists.txt +0 -0
  644. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/checks_test.cpp +0 -0
  645. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/config_test.cpp +0 -0
  646. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/configs.h +0 -0
  647. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/feature_lists_test.cpp +0 -0
  648. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/json_parse_errors_test.cpp +0 -0
  649. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/json_read_test.cpp +0 -0
  650. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/schema_test.cpp +0 -0
  651. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/validate_config_test.cpp +0 -0
  652. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/validate_sources_test.cpp +0 -0
  653. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/config/write_outputs_test.cpp +0 -0
  654. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/CMakeLists.txt +0 -0
  655. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/combined_test.cpp +0 -0
  656. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/equilibrium_test.cpp +0 -0
  657. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/golombek_rapp_test.cpp +0 -0
  658. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/ivanov_test.cpp +0 -0
  659. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/log_polynomial_test.cpp +0 -0
  660. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/minimum_test.cpp +0 -0
  661. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/moore_test.cpp +0 -0
  662. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/neukum_test.cpp +0 -0
  663. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/piecewise_power_law_test.cpp +0 -0
  664. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/piecewise_uniform_test.cpp +0 -0
  665. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/power_law_test.cpp +0 -0
  666. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/production_surface_test.cpp +0 -0
  667. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/size_frequency_test.cpp +0 -0
  668. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/sp8023_test.cpp +0 -0
  669. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/spliced_test.cpp +0 -0
  670. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/summed_test.cpp +0 -0
  671. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/synthterrain_test.cpp +0 -0
  672. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/tabulated_test.cpp +0 -0
  673. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/distribution/viper_test.cpp +0 -0
  674. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/examples/CMakeLists.txt +0 -0
  675. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/examples/example_browser_test.cpp +0 -0
  676. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/examples/example_harness_test.cpp +0 -0
  677. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/gpu/CMakeLists.txt +0 -0
  678. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/gpu/backend_test.cpp +0 -0
  679. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/gpu/kernels/hash_conformance.slang +0 -0
  680. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/gpu/kernels/noise_conformance.slang +0 -0
  681. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/gpu/noise_test.cpp +0 -0
  682. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/gpu/vulkan_test.cpp +0 -0
  683. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/CMakeLists.txt +0 -0
  684. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/bedforms_test.cpp +0 -0
  685. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/boulders/boulder_fragments_test.cpp +0 -0
  686. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/boulders/boulder_models_test.cpp +0 -0
  687. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/boulders/boulder_options_test.cpp +0 -0
  688. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/boulders/boulder_shape_test.cpp +0 -0
  689. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/ages/age_model_test.cpp +0 -0
  690. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/ages/steady_state_test.cpp +0 -0
  691. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/crater_layer_test.cpp +0 -0
  692. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/crater_test.cpp +0 -0
  693. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/degradation/degradation_model_test.cpp +0 -0
  694. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/degradation/diffusion_test.cpp +0 -0
  695. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/generation/cell_cache_test.cpp +0 -0
  696. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/generation/population_test.cpp +0 -0
  697. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/profiles/complex_test.cpp +0 -0
  698. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/profiles/fassett_thomson_test.cpp +0 -0
  699. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/profiles/martin_parkes_dunstan_test.cpp +0 -0
  700. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/secondaries_test.cpp +0 -0
  701. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/shaping/apply_test.cpp +0 -0
  702. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/shaping/attributes_test.cpp +0 -0
  703. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/shaping/datum_test.cpp +0 -0
  704. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/shaping/irregularity_test.cpp +0 -0
  705. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/shaping/morphometry_test.cpp +0 -0
  706. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/craters/sphere_test.cpp +0 -0
  707. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/detail_test.cpp +0 -0
  708. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/dunes_test.cpp +0 -0
  709. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/evaluation_cache_test.cpp +0 -0
  710. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/exposure_test.cpp +0 -0
  711. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/fade_test.cpp +0 -0
  712. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/layer_test.cpp +0 -0
  713. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/noise_relief_test.cpp +0 -0
  714. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/pavement_test.cpp +0 -0
  715. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/region_test.cpp +0 -0
  716. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/roughness_test.cpp +0 -0
  717. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/sample_block_test.cpp +0 -0
  718. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/sand_fill_test.cpp +0 -0
  719. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/sand_shadow_test.cpp +0 -0
  720. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/sphere_layers_test.cpp +0 -0
  721. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/strata_test.cpp +0 -0
  722. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/layers/transforms_test.cpp +0 -0
  723. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/materials/CMakeLists.txt +0 -0
  724. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/materials/materials_test.cpp +0 -0
  725. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/mesh/CMakeLists.txt +0 -0
  726. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/mesh/io/icq_test.cpp +0 -0
  727. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/mesh/io/mesh_io_test.cpp +0 -0
  728. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/mesh/mesh_test.cpp +0 -0
  729. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/mesh/polyhedra_test.cpp +0 -0
  730. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/mesh/shape_model_test.cpp +0 -0
  731. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/mesh/support.h +0 -0
  732. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/noise/CMakeLists.txt +0 -0
  733. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/noise/fractal_test.cpp +0 -0
  734. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/noise/hash_test.cpp +0 -0
  735. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/noise/noise3_test.cpp +0 -0
  736. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/noise/noise_layers_test.cpp +0 -0
  737. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/noise/perlin_test.cpp +0 -0
  738. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/noise/simplex_test.cpp +0 -0
  739. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/noise/validate_test.cpp +0 -0
  740. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/noise/value_test.cpp +0 -0
  741. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/noise/worley_test.cpp +0 -0
  742. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/pipeline/CMakeLists.txt +0 -0
  743. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/pipeline/features_test.cpp +0 -0
  744. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/pipeline/height_mesh_test.cpp +0 -0
  745. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/pipeline/terrain_test.cpp +0 -0
  746. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/pipeline/terrain_tiles_test.cpp +0 -0
  747. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/pipeline/terrains.h +0 -0
  748. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/pipeline/tile_cache_test.cpp +0 -0
  749. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/pipeline/tiling_test.cpp +0 -0
  750. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/random/CMakeLists.txt +0 -0
  751. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/random/philox_test.cpp +0 -0
  752. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/random/samplers_test.cpp +0 -0
  753. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/random/stream_test.cpp +0 -0
  754. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/random/value_distribution_test.cpp +0 -0
  755. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/CMakeLists.txt +0 -0
  756. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/cell_loops_test.cpp +0 -0
  757. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/gaussian_blur_test.cpp +0 -0
  758. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/gdal_fixtures.h +0 -0
  759. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/generate_geotiff_fixtures.py +0 -0
  760. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/geo_transform_test.cpp +0 -0
  761. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/geotiff_fixtures.inc +0 -0
  762. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/geotiff_test.cpp +0 -0
  763. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/grid_test.cpp +0 -0
  764. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/raster_stats_test.cpp +0 -0
  765. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/raster_test.cpp +0 -0
  766. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/resample_test.cpp +0 -0
  767. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/raster/tiff_format_test.cpp +0 -0
  768. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/sources/CMakeLists.txt +0 -0
  769. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/sources/field_test.cpp +0 -0
  770. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/sources/flat_source_test.cpp +0 -0
  771. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/sources/geotiff_source_test.cpp +0 -0
  772. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/sources/source_chain_test.cpp +0 -0
  773. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/sources/synthetic_terrain_test.cpp +0 -0
  774. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/CMakeLists.txt +0 -0
  775. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/cells_test.cpp +0 -0
  776. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/checks_test.cpp +0 -0
  777. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/fft_test.cpp +0 -0
  778. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/geometry_test.cpp +0 -0
  779. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/log_test.cpp +0 -0
  780. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/lru_cache_test.cpp +0 -0
  781. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/overloaded_test.cpp +0 -0
  782. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/parallel_test.cpp +0 -0
  783. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/radial_shape_test.cpp +0 -0
  784. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/special_functions_test.cpp +0 -0
  785. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/surface_test.cpp +0 -0
  786. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/tests/unit/util/version_test.cpp +0 -0
  787. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/README.md +0 -0
  788. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/cgltf/LICENSE +0 -0
  789. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/cgltf/cgltf.h +0 -0
  790. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/cgltf/cgltf_write.h +0 -0
  791. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/miniz/LICENSE +0 -0
  792. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/miniz/miniz.c +0 -0
  793. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/miniz/miniz.h +0 -0
  794. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/nlohmann/LICENSE.MIT +0 -0
  795. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/nlohmann/json.hpp +0 -0
  796. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/tinyobjloader/LICENSE +0 -0
  797. {terraingenpy-0.1.1.dev13 → terraingenpy-0.1.1.dev17}/third_party/tinyobjloader/tiny_obj_loader.h +0 -0
@@ -0,0 +1,53 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+
12
+ - Piecewise uniform size-frequency distributions: counts per diameter band, given absolutely or as shares of a total.
13
+ - Radial wall marks on craters, ridges and grooves down the wall that are strongest where it is steepest.
14
+ - Thomas cluster process for boulder clusters, with Poisson-scattered centres whose clusters add where they overlap.
15
+ - Craters on slopes: floors offset downslope and rims and ejecta lowered upslope (Plescia et al. 2019), and faster wear toward a critical gradient (Roering et al. 1999).
16
+ - Boulders limited to a maximum slope, optionally rolling down steeper ground to gather at its foot.
17
+ - Density maps from GeoTIFFs or constants: a scale, a count in a diameter range, or an areal fraction such as rock abundance, which set crater and boulder densities point by point.
18
+ - Size slope maps that bend boulder sizes into a local power law, from an exponent or a mean diameter map.
19
+ - Crater and boulder catalogs with a completeness limit, above which they stand in for generated features.
20
+ - Configuration reference in the documentation, generated from the schema at build time, and machine-readable value ranges in the schema.
21
+
22
+ ### Changed
23
+
24
+ - Density maps that count every feature take out the secondaries thrown from a layer's craters and the blocks thrown out around craters, and boulder patches and bedrock keep a map's mean, so nothing is counted twice.
25
+ - Boulder models settle onto a stable face by default instead of balancing on an edge or corner.
26
+ - Boulder generation logs under boulders rather than craters.
27
+ - Martin, Parkes and Dunstan is the default crater profile.
28
+
29
+ ### Fixed
30
+
31
+ - Freshness degradation never makes a crater deeper than fresh: basins shallower than the cutoff keep their fresh shape.
32
+ - Small craters inside larger ones on sloping ground no longer stand as raised mounds: datums are fitted to the slope-shaped relief that is applied.
33
+
34
+ ## [0.1.0] - 2026-10-18
35
+
36
+ Initial release.
37
+
38
+ ### Added
39
+
40
+ - C++20 library with Python bindings (`terraingenpy` on PyPI) for generating terrain from scratch or adding detail to existing DEMs.
41
+ - Craters and boulders from published size-frequency distributions, with crater ages, profiles, degradation, irregularity, secondaries and ejecta.
42
+ - Procedural 3D boulder models, and small boulders baked into the heightmap.
43
+ - Synthetic albedo with crater ejecta and rays that fade with age.
44
+ - Geologic features: dunes and ripples, layered strata, fractured bedrock, ventifacts and sand pooled in lows or behind boulders.
45
+ - Planes, spheres and ellipsoids, whole-body meshes, tiles and point queries.
46
+ - Deterministic output for a seed on any grid, tile or thread count.
47
+ - GPU acceleration on Vulkan, CUDA and Metal, detected at run time.
48
+ - `terraingen` command-line interface driven by JSON configurations.
49
+ - Examples in C++, Python and JSON.
50
+ - Release archives for Linux, macOS and Windows, Debian packages, and a Docker image.
51
+
52
+ [Unreleased]: https://github.com/alexmaietta/terraingen/compare/v0.1.0...HEAD
53
+ [0.1.0]: https://github.com/alexmaietta/terraingen/releases/tag/v0.1.0
@@ -8,7 +8,7 @@ endif()
8
8
 
9
9
  # The release being worked towards, such as 0.1.0, or for a development build a PEP 440 pre-release of
10
10
  # it, such as 0.1.0.dev42, which only the Python package carries.
11
- set(TERRAINGEN_FULL_VERSION "0.1.1.dev13")
11
+ set(TERRAINGEN_FULL_VERSION "0.1.1.dev17")
12
12
  string(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" TERRAINGEN_VERSION "${TERRAINGEN_FULL_VERSION}")
13
13
 
14
14
  project(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: terraingenpy
3
- Version: 0.1.1.dev13
3
+ Version: 0.1.1.dev17
4
4
  Summary: Scientific terrain generation for planetary surfaces
5
5
  Keywords: terrain,moon,mars,craters,planetary science,simulation
6
6
  Author: Alex Maietta
@@ -60,7 +60,6 @@ Description-Content-Type: text/markdown
60
60
  [![coverage](https://img.shields.io/endpoint?url=https://alexmaietta.github.io/terraingen/coverage/badge.json)](https://alexmaietta.github.io/terraingen/coverage/)
61
61
  [![release](https://img.shields.io/github/v/release/alexmaietta/terraingen)](https://github.com/alexmaietta/terraingen/releases)
62
62
  [![pypi](https://img.shields.io/pypi/v/terraingenpy)](https://pypi.org/project/terraingenpy/)
63
- [![docs](https://img.shields.io/website?url=https%3A%2F%2Falexmaietta.github.io%2Fterraingen%2F&label=docs&up_message=latest&down_message=offline)](https://alexmaietta.github.io/terraingen/)
64
63
  [![license](https://img.shields.io/badge/license-BSD_3--Clause-blue)](LICENSE)
65
64
 
66
65
  # TerrainGen
@@ -78,7 +77,7 @@ TerrainGen can:
78
77
  - Produce synthetic albedo maps with crater ejecta and rays that fade with crater age.
79
78
  - Model complex geologic features such as complex and secondary craters, boulder ejecta fields, dunes and wind ripples, layered strata terraced into benches and cliffs, fractured bedrock pavement, wind-carved ventifacts, and sand pooled in lows or trailing behind boulders.
80
79
  - Be extended through base classes in C++ or Python with custom size-frequency distributions, crater ages, profiles and degradation, albedo, sources, and layers.
81
- - GPU-accelerated operations for generating noise, craters, boulders, albedo, and more.
80
+ - Perform GPU-accelerated operations for generating noise, craters, boulders, albedo, and more.
82
81
  - Generate deterministic results for the same seed on any grid, tile or thread count.
83
82
  - Integrate into simulations and other external workflows.
84
83
 
@@ -4,7 +4,6 @@
4
4
  [![coverage](https://img.shields.io/endpoint?url=https://alexmaietta.github.io/terraingen/coverage/badge.json)](https://alexmaietta.github.io/terraingen/coverage/)
5
5
  [![release](https://img.shields.io/github/v/release/alexmaietta/terraingen)](https://github.com/alexmaietta/terraingen/releases)
6
6
  [![pypi](https://img.shields.io/pypi/v/terraingenpy)](https://pypi.org/project/terraingenpy/)
7
- [![docs](https://img.shields.io/website?url=https%3A%2F%2Falexmaietta.github.io%2Fterraingen%2F&label=docs&up_message=latest&down_message=offline)](https://alexmaietta.github.io/terraingen/)
8
7
  [![license](https://img.shields.io/badge/license-BSD_3--Clause-blue)](LICENSE)
9
8
 
10
9
  # TerrainGen
@@ -22,7 +21,7 @@ TerrainGen can:
22
21
  - Produce synthetic albedo maps with crater ejecta and rays that fade with crater age.
23
22
  - Model complex geologic features such as complex and secondary craters, boulder ejecta fields, dunes and wind ripples, layered strata terraced into benches and cliffs, fractured bedrock pavement, wind-carved ventifacts, and sand pooled in lows or trailing behind boulders.
24
23
  - Be extended through base classes in C++ or Python with custom size-frequency distributions, crater ages, profiles and degradation, albedo, sources, and layers.
25
- - GPU-accelerated operations for generating noise, craters, boulders, albedo, and more.
24
+ - Perform GPU-accelerated operations for generating noise, craters, boulders, albedo, and more.
26
25
  - Generate deterministic results for the same seed on any grid, tile or thread count.
27
26
  - Integrate into simulations and other external workflows.
28
27
 
@@ -0,0 +1,45 @@
1
+ {
2
+ "schema_version": 1,
3
+ "layers": [
4
+ {
5
+ "type": "noise",
6
+ "stack": [
7
+ {
8
+ "seed": 1,
9
+ "wavelength": 30,
10
+ "amplitude": 6,
11
+ "octaves": 4
12
+ }
13
+ ]
14
+ },
15
+ {
16
+ "type": "boulders",
17
+ "seed": 1,
18
+ "coverage": 0.06,
19
+ "min_diameter": 0.2,
20
+ "max_diameter": 3,
21
+ "max_slope": 0.35,
22
+ "roll_distance": 15
23
+ }
24
+ ],
25
+ "outputs": [
26
+ {
27
+ "type": "heightmap",
28
+ "path": "example_boulders_rolling.tif",
29
+ "region": {
30
+ "width": 401,
31
+ "height": 401,
32
+ "pixel_size": 0.1
33
+ }
34
+ },
35
+ {
36
+ "type": "boulder_list",
37
+ "path": "example_boulders_rolling_boulders.csv",
38
+ "region": {
39
+ "width": 401,
40
+ "height": 401,
41
+ "pixel_size": 0.1
42
+ }
43
+ }
44
+ ]
45
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "schema_version": 1,
3
+ "layers": [
4
+ {
5
+ "type": "noise",
6
+ "stack": [
7
+ {
8
+ "seed": 1,
9
+ "wavelength": 40,
10
+ "amplitude": 0.5,
11
+ "octaves": 6
12
+ }
13
+ ]
14
+ },
15
+ {
16
+ "type": "boulders",
17
+ "seed": 1,
18
+ "sizes": {
19
+ "type": "power_law",
20
+ "coefficient": 0.02,
21
+ "exponent": 3.0
22
+ },
23
+ "min_diameter": 0.2,
24
+ "max_diameter": 3,
25
+ "slope_map": {
26
+ "field": {
27
+ "value": 2.2
28
+ },
29
+ "measure": "exponent",
30
+ "reference_diameter": 1.0,
31
+ "min_exponent": 1.5,
32
+ "max_exponent": 5.0
33
+ }
34
+ }
35
+ ],
36
+ "outputs": [
37
+ {
38
+ "type": "heightmap",
39
+ "path": "example_boulders_slope_map.tif",
40
+ "region": {
41
+ "width": 401,
42
+ "height": 401,
43
+ "pixel_size": 0.1
44
+ }
45
+ },
46
+ {
47
+ "type": "boulder_list",
48
+ "path": "example_boulders_slope_map_boulders.csv",
49
+ "region": {
50
+ "width": 401,
51
+ "height": 401,
52
+ "pixel_size": 0.1
53
+ }
54
+ }
55
+ ]
56
+ }
@@ -462,6 +462,14 @@ BoulderLayerOptions BuildBoulderOptions(const BoulderLayerSpec& spec, const std:
462
462
  options.densityMap =
463
463
  BuildDensityMap(*spec.densityMap, Child(path, "density_map"), directory);
464
464
  }
465
+ if (spec.slopeMap) {
466
+ const SizeSlopeMapSpec& s = *spec.slopeMap;
467
+ const std::string at = Child(path, "slope_map");
468
+ options.slopeMap =
469
+ SizeSlopeMap{BuildField(s.field, Child(at, "field"), directory), s.measure,
470
+ s.referenceDiameter, s.minExponent, s.maxExponent};
471
+ At(at, [&] { ValidateSizeSlopeMap(*options.slopeMap); });
472
+ }
465
473
  for (Crater boulder : spec.manual) {
466
474
  boulder.manual = true;
467
475
  options.manual.push_back(boulder);
@@ -102,6 +102,17 @@ struct DensityMapSpec {
102
102
  bool operator==(const DensityMapSpec&) const = default;
103
103
  };
104
104
 
105
+ /// A size slope map (`SizeSlopeMap`) of a boulder population.
106
+ struct SizeSlopeMapSpec {
107
+ FieldSpec field{};
108
+ SizeSlopeMeasure measure = SizeSlopeMeasure::Exponent;
109
+ double referenceDiameter = 1.0; ///< Metres.
110
+ double minExponent = 1.0;
111
+ double maxExponent = 6.0;
112
+
113
+ bool operator==(const SizeSlopeMapSpec&) const = default;
114
+ };
115
+
105
116
  struct ChainSourceSpec;
106
117
 
107
118
  /// The starting heights of a terrain, its base, named in JSON by its "type".
@@ -273,7 +284,7 @@ using SimpleProfileSpec = std::variant<FassettThomsonSpec, MartinParkesDunstanSp
273
284
  /// morphometry, and complex craters, with flat floors and central peaks, from it
274
285
  /// (`ComplexCraterProfile` with `LunarComplexCraterShape` or `MarsComplexCraterShape`).
275
286
  struct ComplexProfileSpec {
276
- SimpleProfileSpec simple{};
287
+ SimpleProfileSpec simple{MartinParkesDunstanSpec{}};
277
288
  bool operator==(const ComplexProfileSpec&) const = default;
278
289
  };
279
290
  /// A crater profile, named in JSON by its "type".
@@ -299,7 +310,7 @@ struct CraterLayerSpec {
299
310
  std::size_t maxCraters = 0; ///< Keep at most this many generated craters; 0 keeps all.
300
311
  /// Manual craters, in the surface's coordinates; parsing sets their `manual` flag.
301
312
  std::vector<Crater> manual{};
302
- ProfileSpec profile{};
313
+ ProfileSpec profile{MartinParkesDunstanSpec{}};
303
314
  DegradationSpec degradation{};
304
315
  CraterApplyOptions apply{};
305
316
  std::optional<DensityMapSpec> densityMap{}; ///< Gives `CraterLayerOptions::densityMap`.
@@ -348,6 +359,7 @@ struct BoulderLayerSpec {
348
359
  /// `BoulderShapeOptions::library`; relative to the configuration's folder.
349
360
  std::vector<std::string> shapeFiles{};
350
361
  std::optional<DensityMapSpec> densityMap{}; ///< Gives `boulders.densityMap`.
362
+ std::optional<SizeSlopeMapSpec> slopeMap{}; ///< Gives `boulders.slopeMap`.
351
363
  /// Catalog boulders in the surface's coordinates, as `boulders.manual`.
352
364
  std::vector<Crater> manual{};
353
365
  std::optional<FieldSpec> completeness{}; ///< Gives `boulders.completeness`.
@@ -414,6 +414,11 @@ template <typename IO> void Fields(IO& io, BoulderLayerSpec& spec) {
414
414
  "Steepest ground, across a boulder's diameter, that boulders stay on, in radians; steeper "
415
415
  "ground has none, models and drawn boulders alike. Unset keeps boulders on any slope.",
416
416
  "rad", Inside(0.0, 0.5 * std::numbers::pi));
417
+ io("roll_distance", pose.rollDistance,
418
+ "With max_slope, boulders on steeper ground roll down it and rest where it is gentle "
419
+ "enough, gathering at the foot of slopes; those that would roll farther than this many "
420
+ "metres are left out. Unset leaves out every boulder on steeper ground.",
421
+ "m", Above(0.0));
417
422
  io("burial_by_wear", pose.burialByWear,
418
423
  "How far wear sets burial, from 0 to 1: blocks of fresh craters sit near the smallest "
419
424
  "burial and those of worn ones sink toward the largest, while boulders between craters "
@@ -444,6 +449,10 @@ template <typename IO> void Fields(IO& io, BoulderLayerSpec& spec) {
444
449
  io("density_map", spec.densityMap,
445
450
  "Map that sets the abundance of boulders between craters point by point, scaling the "
446
451
  "sizes to what it measures; unset keeps the abundance the sizes set everywhere.");
452
+ io("slope_map", spec.slopeMap,
453
+ "Map of how steeply boulder counts fall with size, such as a mean diameter map, bending the "
454
+ "sizes into a local power law through their count at its reference diameter; needs a size "
455
+ "distribution. Unset keeps the sizes' shape everywhere.");
447
456
  io("manual", spec.manual,
448
457
  "Catalog boulders placed as given and never thinned or left out; x, y and diameter are "
449
458
  "read.");
@@ -218,7 +218,7 @@ template <typename IO> void Fields(IO& io, CraterTexture& texture) {
218
218
 
219
219
  template <typename IO> void Fields(IO& io, CraterSlopeResponse& slope) {
220
220
  io("enabled", slope.enabled,
221
- "Shapes craters on sloping ground asymmetrically, as their datum plane slopes; off keeps "
221
+ "Shapes craters asymmetrically along the slope of the ground beneath the layer; off keeps "
222
222
  "them the same on any slope.");
223
223
  io("seed", slope.seed, "Varies how far each crater's floor is offset.");
224
224
  io("floor_offset", slope.floorOffset,
@@ -232,6 +232,14 @@ template <typename IO> void Fields(IO& io, CraterSlopeResponse& slope) {
232
232
  "Slope at which the asymmetry is complete, in radians; it rises from none on level "
233
233
  "ground.",
234
234
  "rad", Above(0.0));
235
+ io("critical_gradient", slope.criticalGradient,
236
+ "Critical gradient Sc, rise over run, toward which downslope transport grows without bound: "
237
+ "a crater on a regional gradient S wears 1 / (1 - (S / Sc)^2) times as fast (Roering et al. "
238
+ "1999). Unset wears craters alike on any slope; no lunar value is published.",
239
+ "", Above(0.0));
240
+ io("max_wear_rate", slope.maxWearRate,
241
+ "Fastest a slope makes craters wear, over level ground: a numerical cap as S nears Sc.", "",
242
+ AtLeast(1.0));
235
243
  }
236
244
 
237
245
  template <typename IO> void Fields(IO& io, CraterApplyOptions& apply) {
@@ -344,6 +344,16 @@ template <> struct EnumNames<DensityMeasure> {
344
344
  }};
345
345
  };
346
346
 
347
+ template <> struct EnumNames<SizeSlopeMeasure> {
348
+ static constexpr std::array<EnumEntry<SizeSlopeMeasure>, 2> kValues{{
349
+ {"exponent", SizeSlopeMeasure::Exponent,
350
+ "The cumulative exponent alpha, counts falling as D^-alpha."},
351
+ {"mean_diameter", SizeSlopeMeasure::MeanDiameter,
352
+ "The mean diameter in metres of the features from the reference diameter up, from which "
353
+ "alpha = mean / (mean - D0)."},
354
+ }};
355
+ };
356
+
347
357
  template <> struct EnumNames<TiffCompression> {
348
358
  static constexpr std::array<EnumEntry<TiffCompression>, 4> kValues{{
349
359
  {"none", TiffCompression::None, "Uncompressed: the largest files."},
@@ -43,4 +43,20 @@ template <typename IO> void Fields(IO& io, DensityMapSpec& map) {
43
43
  "of it first; off when it counts only what the layer generates.");
44
44
  }
45
45
 
46
+ template <typename IO> void Fields(IO& io, SizeSlopeMapSpec& map) {
47
+ io("field", map.field, "The map.");
48
+ io("measure", map.measure, "What the map's values measure.");
49
+ io("reference_diameter", map.referenceDiameter,
50
+ "Diameter D0 in metres where the local power law meets the layer's own count, as N(>=D) = "
51
+ "N(>=D0) (D / D0)^-alpha; for a mean diameter map, the smallest diameter averaged.",
52
+ "m", Above(0.0));
53
+ io("min_exponent", map.minExponent,
54
+ "Smallest exponent alpha the map's values are clamped to; with the largest it bounds the "
55
+ "boulders drawn, so generous bounds draw more to thin.",
56
+ "", Above(0.0));
57
+ io("max_exponent", map.maxExponent,
58
+ "Largest exponent alpha the map's values are clamped to; above the smallest.", "",
59
+ Above(0.0));
60
+ }
61
+
46
62
  } // namespace terraingen::config
@@ -242,6 +242,9 @@ BoulderAbundance BoulderLayer::Abundance(double x, double y, const Ground* groun
242
242
  EjectaAbundance(x, y, ejecta, abundance);
243
243
  }
244
244
  abundance.background = BackgroundAbundance(x, y, ground, abundance.ejecta);
245
+ if (options_.slopeMap) {
246
+ abundance.exponent = SizeSlopeAt(*options_.slopeMap, x, y);
247
+ }
245
248
  return abundance;
246
249
  }
247
250
 
@@ -251,10 +254,18 @@ BoulderAbundance BoulderLayer::AbundanceAt(double x, double y, const Ground* gro
251
254
 
252
255
  double BoulderLayer::Density(double diameter, const BoulderAbundance& abundance) const {
253
256
  const BoulderSizes& sizes = options_.sizes;
254
- double density = sizes.distribution
255
- ? abundance.background * sizes.distribution->Incremental(diameter)
256
- : GolombekRappDensity(diameter, sizes.coverage * abundance.background,
257
- sizes.qConstant, sizes.qCoverageCoefficient);
257
+ double density = 0.0;
258
+ if (abundance.exponent) {
259
+ const double alpha = *abundance.exponent;
260
+ const double d0 = options_.slopeMap->referenceDiameter;
261
+ density = abundance.background * referenceCount_ * alpha * std::pow(d0, alpha) *
262
+ std::pow(diameter, -alpha - 1.0);
263
+ } else {
264
+ density = sizes.distribution
265
+ ? abundance.background * sizes.distribution->Incremental(diameter)
266
+ : GolombekRappDensity(diameter, sizes.coverage * abundance.background,
267
+ sizes.qConstant, sizes.qCoverageCoefficient);
268
+ }
258
269
  if (abundance.ejecta > 0.0) {
259
270
  density += abundance.ejecta * ejectaSizes_->Incremental(diameter);
260
271
  }
@@ -137,6 +137,10 @@ BoulderLayer::BoulderLayer(BoulderLayerOptions options, std::shared_ptr<const Cr
137
137
  mapAbundance_.emplace(options_);
138
138
  patchMean_ = MeanPatchAbundance(options_.patches);
139
139
  }
140
+ if (options_.slopeMap) {
141
+ referenceCount_ =
142
+ options_.sizes.distribution->Cumulative(options_.slopeMap->referenceDiameter);
143
+ }
140
144
  if (options_.clusters.share > 0.0) {
141
145
  clusterMean_ = options_.clusters.model == BoulderClusterModel::Thomas
142
146
  ? MeanThomasField(options_.clusters, surface_.IsBody())
@@ -402,11 +406,8 @@ std::optional<Boulder> BoulderLayer::DrawBoulder(const Crater& candidate, double
402
406
  candidate.id};
403
407
  boulder.wear = wear;
404
408
  boulder.model = options_.rendering.models.IsModel(boulder.diameter, spacing);
405
- if (pose.maxSlope && ground != nullptr && !candidate.manual) {
406
- const std::optional<Vec2d> g = GroundGradient(boulder, *ground);
407
- if (g && std::hypot(g->x, g->y) > std::tan(*pose.maxSlope)) {
408
- return std::nullopt;
409
- }
409
+ if (pose.maxSlope && ground != nullptr && !candidate.manual && !Roll(boulder, *ground)) {
410
+ return std::nullopt;
410
411
  }
411
412
  if (ground != nullptr) {
412
413
  const double height =
@@ -475,6 +476,30 @@ BoulderShape BoulderLayer::Abraded(const BoulderShape& shape, const BoulderPlace
475
476
  return cut;
476
477
  }
477
478
 
479
+ bool BoulderLayer::Roll(Boulder& boulder, const Ground& ground) const {
480
+ constexpr double kMaxSteps = 128.0;
481
+ const BoulderPose& pose = options_.pose;
482
+ const double limit = std::tan(*pose.maxSlope);
483
+ const double reach = pose.rollDistance.value_or(0.0);
484
+ const double step = std::fmax(boulder.diameter, reach / kMaxSteps);
485
+ double rolled = 0.0;
486
+ for (;;) {
487
+ const std::optional<Vec2d> g = GroundGradient(boulder, ground);
488
+ const double gradient = g ? std::hypot(g->x, g->y) : 0.0;
489
+ if (!(gradient > limit)) {
490
+ return true;
491
+ }
492
+ if (rolled + step > reach) {
493
+ return false;
494
+ }
495
+ const Vec2d to = surface_.Locate({boulder.x, boulder.y},
496
+ {-g->x / gradient * step, -g->y / gradient * step});
497
+ boulder.x = to.x;
498
+ boulder.y = to.y;
499
+ rolled += step;
500
+ }
501
+ }
502
+
478
503
  std::optional<Vec2d> BoulderLayer::GroundGradient(const Boulder& boulder,
479
504
  const Ground& ground) const {
480
505
  const double step = 0.5 * boulder.diameter;
@@ -521,20 +546,28 @@ std::vector<Boulder> BoulderLayer::Boulders(const Bounds2d& region, double spaci
521
546
  if (exposure_) {
522
547
  RequireGround(ground, "Boulders that read the exposure field");
523
548
  }
524
- const CraterList candidates = ScatterBoulderCandidates(region, spacing);
549
+ const double roll = ground != nullptr ? options_.pose.rollDistance.value_or(0.0) : 0.0;
550
+ const Bounds2d from = roll > 0.0 ? surface_.Expand(region, roll) : region;
551
+ const auto rests = [&](const Boulder& boulder) {
552
+ const double own = 0.5 * boulder.diameter * OwnMarginRadii();
553
+ return roll == 0.0 ||
554
+ surface_.Contains(surface_.Expand(region, own), {boulder.x, boulder.y});
555
+ };
556
+ const CraterList candidates = ScatterBoulderCandidates(from, spacing);
525
557
  if (!options_.fragmentation.Enabled()) {
526
- const CraterList ejecta = EjectaCraters(region);
558
+ const CraterList ejecta = EjectaCraters(from);
527
559
  std::vector<Boulder> boulders;
528
560
  for (std::size_t n = 0; n < candidates.Size(); ++n) {
529
- if (const std::optional<Boulder> boulder =
530
- DrawBoulder(candidates.At(n), spacing, ground, ejecta)) {
561
+ const std::optional<Boulder> boulder =
562
+ DrawBoulder(candidates.At(n), spacing, ground, ejecta);
563
+ if (boulder && rests(*boulder)) {
531
564
  boulders.push_back(*boulder);
532
565
  }
533
566
  }
534
567
  return boulders;
535
568
  }
536
569
  const double reach = 0.5 * options_.sizes.maxDiameter * (OwnMarginRadii() + BreakMarginRadii());
537
- const CraterList ejecta = EjectaCraters(surface_.Expand(region, reach));
570
+ const CraterList ejecta = EjectaCraters(surface_.Expand(from, reach));
538
571
  std::vector<Boulder> boulders;
539
572
  for (std::size_t n = 0; n < candidates.Size(); ++n) {
540
573
  const std::optional<Boulder> parent =
@@ -30,6 +30,8 @@ struct BoulderAbundance {
30
30
  double ejecta = 0.0;
31
31
  /// Wear of the crater the ejecta share comes from, from 0 (fresh) to 1 (its blocks gone).
32
32
  double ejectaWear = 0.0;
33
+ /// The size exponent a size slope map gives here (`SizeSlopeAt`); none keeps the sizes' shape.
34
+ std::optional<double> exponent;
33
35
 
34
36
  bool operator==(const BoulderAbundance&) const = default;
35
37
  };
@@ -126,6 +128,9 @@ class BoulderLayer final : public Layer, public BoulderPlacer, public MaterialSo
126
128
  /// The rise east and north (m/m) of `ground` across `boulder`'s diameter; none where the
127
129
  /// ground is missing.
128
130
  std::optional<Vec2d> GroundGradient(const Boulder& boulder, const Ground& ground) const;
131
+ /// Rolls `boulder` down ground steeper than `maxSlope` until it rests, as `rollDistance`
132
+ /// allows; false when it would roll farther, or with no roll distance on steep ground.
133
+ bool Roll(Boulder& boulder, const Ground& ground) const;
129
134
  /// The pieces `parent` breaks into at its wear, those resolved at `spacing`; `parent` alone
130
135
  /// when it is too small or too fresh to break.
131
136
  std::vector<Boulder> Break(const Boulder& parent, double spacing, const Ground* ground) const;
@@ -212,6 +217,7 @@ class BoulderLayer final : public Layer, public BoulderPlacer, public MaterialSo
212
217
  double minCraterDiameter_ = 0.0;
213
218
  double maxBackground_ = 1.0;
214
219
  double clusterMean_ = 1.0;
220
+ double referenceCount_ = 0.0; ///< N(>=D0) of the sizes at a size slope map's D0, per m^2.
215
221
  std::optional<BoulderMapAbundance> mapAbundance_;
216
222
  double patchMean_ = 1.0; ///< Under a map, what the patches are divided by.
217
223
  Vec2d meanOrigin_{}; ///< Corner of the bedrock mean lattice, in surface units.
@@ -1,6 +1,7 @@
1
1
  #include "terraingen/layers/boulders/boulder_options.h"
2
2
 
3
3
  #include "terraingen/distribution/golombek_rapp.h"
4
+ #include "terraingen/distribution/power_law.h"
4
5
  #include "terraingen/distribution/summed.h"
5
6
  #include "terraingen/noise/worley.h"
6
7
  #include "terraingen/util/checks.h"
@@ -149,6 +150,11 @@ void ValidateBoulderPose(const BoulderPose& pose) {
149
150
  if (pose.maxSlope && !(*pose.maxSlope > 0.0 && *pose.maxSlope < 0.5 * std::numbers::pi)) {
150
151
  throw std::invalid_argument("Boulder maxSlope must be in (0, pi / 2)");
151
152
  }
153
+ if (pose.rollDistance &&
154
+ !(pose.maxSlope && *pose.rollDistance > 0.0 && std::isfinite(*pose.rollDistance))) {
155
+ throw std::invalid_argument("Boulder rollDistance must be positive and finite, with a "
156
+ "maxSlope");
157
+ }
152
158
  }
153
159
 
154
160
  void ValidateBoulderFillet(const BoulderFillet& fillet) {
@@ -312,6 +318,13 @@ void ValidateBoulderLayerOptions(const BoulderLayerOptions& options) {
312
318
  if (options.densityMap) {
313
319
  ValidateDensityMap(*options.densityMap);
314
320
  }
321
+ if (options.slopeMap) {
322
+ ValidateSizeSlopeMap(*options.slopeMap);
323
+ if (!options.sizes.distribution) {
324
+ throw std::invalid_argument(
325
+ "A boulder size slope map needs a size distribution, not Golombek-Rapp sizes");
326
+ }
327
+ }
315
328
  ValidateBoulderPatches(options.patches);
316
329
  ValidateBoulderClusters(options.clusters);
317
330
  ValidateBoulderFragmentation(options.fragmentation);
@@ -458,6 +471,16 @@ BoulderCandidates(const BoulderLayerOptions& options) {
458
471
  std::vector<WeightedSfd> terms;
459
472
  if (sizes.distribution) {
460
473
  terms.push_back({richest, sizes.distribution});
474
+ if (options.slopeMap) {
475
+ const SizeSlopeMap& map = *options.slopeMap;
476
+ const double d0 = map.referenceDiameter;
477
+ const double count = richest * sizes.distribution->Cumulative(d0);
478
+ const double low = map.minExponent;
479
+ const double high = map.maxExponent;
480
+ terms.push_back(
481
+ {1.0, std::make_shared<PowerLawSfd>(count * std::pow(d0, low) * high / low, low)});
482
+ terms.push_back({1.0, std::make_shared<PowerLawSfd>(count * std::pow(d0, high), high)});
483
+ }
461
484
  } else {
462
485
  terms.push_back(
463
486
  {1.0, std::make_shared<GolombekRappSfd>(sizes.coverage * richest, sizes.qConstant,
@@ -224,6 +224,11 @@ struct BoulderPose {
224
224
  /// so which boulders exist does not depend on the spacing. Unset keeps boulders on any slope;
225
225
  /// needs the ground.
226
226
  std::optional<double> maxSlope{};
227
+ /// With `maxSlope`, boulders on steeper ground roll down it instead, in steps along the
228
+ /// steepest descent, and come to rest where it is no steeper than `maxSlope`, gathering at the
229
+ /// foot of slopes; those that would roll farther than this many metres are left out. Unset
230
+ /// leaves out every boulder on steeper ground.
231
+ std::optional<double> rollDistance{};
227
232
 
228
233
  bool operator==(const BoulderPose&) const = default;
229
234
  };
@@ -325,6 +330,11 @@ struct BoulderLayerOptions {
325
330
  /// it measures first. Patches, clusters and bedrock still spread boulders within it. Unset
326
331
  /// keeps the abundance `sizes` sets everywhere.
327
332
  std::optional<DensityMap> densityMap{};
333
+ /// A map of how steeply boulder counts fall with size (`SizeSlopeMap`), such as a mean
334
+ /// diameter map, bending the sizes between craters into a local power law through their count
335
+ /// at its reference diameter; needs a size distribution rather than Golombek-Rapp sizes. Unset
336
+ /// keeps the sizes' own shape everywhere.
337
+ std::optional<SizeSlopeMap> slopeMap{};
328
338
  /// Boulders from a catalog, placed as given and never thinned or left out; `x`, `y` and
329
339
  /// `diameter` are read, and IDs come from position and size (`AppendManualCraters`).
330
340
  std::vector<Crater> manual{};
@@ -458,7 +468,8 @@ double MaxBackgroundAbundance(const BoulderLayerOptions& options);
458
468
  std::shared_ptr<const SizeFrequencyDistribution> EjectaSizes(const BoulderLayerOptions& options);
459
469
 
460
470
  /// The distribution per m^2 candidate boulders are drawn from before thinning: the boulders
461
- /// between craters at their richest plus fresh crater blocks when enabled.
471
+ /// between craters at their richest, with a size slope map the power laws at its bounding
472
+ /// exponents too, plus fresh crater blocks when enabled.
462
473
  /// @throws std::invalid_argument as `ValidateBoulderLayerOptions`.
463
474
  std::shared_ptr<const SizeFrequencyDistribution>
464
475
  BoulderCandidates(const BoulderLayerOptions& options);
@@ -82,6 +82,7 @@ CraterLayer::CraterLayer(CraterModels models, CraterLayerOptions options)
82
82
  throw std::invalid_argument("Taking secondaries out of a density map needs every crater, "
83
83
  "not the maxCraters largest");
84
84
  }
85
+ options_.generation.spacing.outrankFrom = throwFrom_;
85
86
  }
86
87
 
87
88
  CraterKeepShare CraterLayer::KeepShare(const Bounds2d& region) const {
@@ -56,7 +56,8 @@ struct CraterLayerOptions {
56
56
  /// The secondaries `SecondaryCraterLayer`s throw from these craters. A `total` count or areal
57
57
  /// fraction map counts them too, so craters too small to throw secondaries the map measures
58
58
  /// are drawn at the map less those secondaries' density there; larger craters, which throw
59
- /// them, follow the map alone. Not with `generation.maxCraters`.
59
+ /// them, follow the map alone; with spacing they also take precedence over smaller craters, so
60
+ /// the throwers never depend on what they throw at. Not with `generation.maxCraters`.
60
61
  std::vector<SecondaryCraterOptions> secondaries{};
61
62
  };
62
63
 
@@ -8,6 +8,12 @@
8
8
 
9
9
  namespace terraingen {
10
10
 
11
+ CraterState DegradationModel::WornState(const Crater& crater, double rate) const {
12
+ Crater older = crater;
13
+ older.ageGyr *= rate;
14
+ return State(older);
15
+ }
16
+
11
17
  NoDegradation::NoDegradation(FreshMorphometry fresh, std::optional<double> depthRatio)
12
18
  : fresh_(std::move(fresh)), depthRatio_(depthRatio) {
13
19
  if (!fresh_) {
@@ -18,6 +18,13 @@ class DegradationModel {
18
18
  /// @throws std::domain_error if the crater's diameter is not positive and finite, or the model
19
19
  /// is not defined for it.
20
20
  virtual CraterState State(const Crater& crater) const = 0;
21
+
22
+ /// The crater's state had it worn `rate` times as fast as on level ground, as on a steep
23
+ /// regional slope. By default it is `State` of the crater `rate` times older, which suits
24
+ /// models whose wear follows age alone.
25
+ /// @param rate At least 1.
26
+ /// @throws std::domain_error as `State`.
27
+ virtual CraterState WornState(const Crater& crater, double rate) const;
21
28
  };
22
29
 
23
30
  /// Every crater stays as `fresh` makes it, optionally with one depth/diameter ratio for all.