{"id":18265141,"url":"https://github.com/nasa-ammos/landform","last_synced_at":"2025-04-04T21:31:38.805Z","repository":{"id":211113506,"uuid":"727831278","full_name":"NASA-AMMOS/Landform","owner":"NASA-AMMOS","description":"Terrain mesh processing toolkit that can generate 3DTiles datasets","archived":false,"fork":false,"pushed_at":"2024-08-28T16:09:54.000Z","size":39307,"stargazers_count":24,"open_issues_count":2,"forks_count":6,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-20T19:28:38.975Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NASA-AMMOS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-05T17:00:31.000Z","updated_at":"2025-01-06T04:09:31.000Z","dependencies_parsed_at":"2024-11-05T11:17:26.961Z","dependency_job_id":"fa140db5-aac2-47b6-9409-d688cb362daa","html_url":"https://github.com/NASA-AMMOS/Landform","commit_stats":null,"previous_names":["nasa-ammos/landform"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NASA-AMMOS%2FLandform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NASA-AMMOS%2FLandform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NASA-AMMOS%2FLandform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NASA-AMMOS%2FLandform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NASA-AMMOS","download_url":"https://codeload.github.com/NASA-AMMOS/Landform/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247252209,"owners_count":20908644,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-05T11:17:13.697Z","updated_at":"2025-04-04T21:31:33.792Z","avatar_url":"https://github.com/NASA-AMMOS.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv style=\"width: 42em\"\u003e \n\n# Landform\n\nLandform is a terrain mesh processing toolkit that can generate [3DTiles](https://www.ogc.org/standard/3dtiles/) datasets.  It is used by the Mars 2020 mission in ground data processing to convert textured terrain meshes into the 3DTiles format, as well as to create [contextual meshes](ContextualMesh.md) that combine up to thousands of in-situ and orbital observations.  Landform can read mesh, image, and pointcloud input data in a variety of formats including a limited subset of the OpenInventor binary iv format, GLTF, OBJ, PLY, PNG, JPG, TIFF, FITS, [GeoTIFF](https://www.ogc.org/standard/geotiff/), [VICAR](https://www-mipl.jpl.nasa.gov/external/VICAR_file_fmt.pdf), and [PDS ODL-wrapped VICAR](https://pds.nasa.gov/tools/about/) (IMG).  Landform can write mesh and image data in many formats including 3DTiles, GLTF, OBJ, PLY, PNG, JPG, TIFF, and FITS.\n\nLandform can be run as a command-line toolset or optionally deployed to AWS as a terrain processing service.  It can also be used as a library for building other terrain mesh processing tools.  It can read mesh, image, and pointcloud input data in a variety of formats including a limited subset of the OpenInventor binary iv format, GLTF, OBJ, PLY, PNG, JPG, TIFF, FITS, [GeoTIFF](https://www.ogc.org/standard/geotiff/), [VICAR](https://www-mipl.jpl.nasa.gov/external/VICAR_file_fmt.pdf), and [PDS ODL-wrapped VICAR](https://pds.nasa.gov/tools/about/) (IMG), and it can write mesh and image data in many formats including 3DTiles, GLTF, OBJ, PLY, PNG, JPG, TIFF, and FITS.\n\nIn addition to serailizers for all the essential data formats used in Mars surface mission terrain processing, Landform also contains implementations of many useful and practical mesh and image processing algorithms including composite image stitching, texture backprojection, texture baking, texture atlassing, mesh decimation, mesh resampling, mesh reconstruction from pointclouds, mesh clipping, convex hull computation, CAHV[ORE] camera models, software rasterization, ray casting, feature-based mesh alignment, and creation of hierarchical 3DTiles datasets from large monolithic textured meshes.\n\nLandform is written in C#.  It currently builds only with Visual Studio 2019 on Windows and only runs on Intel Windows platforms.\n\nThe top-level command-line entrypoint is in [Landform.cs](./Landform/Landform.cs).  After building run this to get a brief synopsis of the available commands:\n```\n./Landform/bin/Release/Landform.exe\n```\nAdditional documentation is provided in the header comments of the corresponding source files in the [Landform](./Landform) subproject.\n\n## Contributors\n\nLandform was originally developed at the Jet Propulsion Laboratory, California Institute of Technology for use in ground data processing for planetary surface missions under a contract with the National Aeronautics and Space Administration.\n\nIndividual contributors include Marsette Vona, Bob Crocco, Alexander Menzies, Charles Goddard, Thomas Schibler, Gailin Pease, Nicholas Charchut, Nicholas Anastas, Keavon Chambers, Benjamin Nuernberger, and Andrew Zhang.\n\n## Contributors\n\nLandform was originally developed at the Jet Propulsion Laboratory, California Institute of Technology for use in ground data processing for planetary surface missions under a contract with the National Aeronautics and Space Administration.\n\nIndividual contributors include Marsette Vona, Bob Crocco, Alexander Menzies, Charles Goddard, Thomas Schibler, Gailin Pease, Nicholas Charchut, Nicholas Anastas, Keavon Chambers, Benjamin Nuernberger, and Andrew Zhang.\n\n## License\n\nSee [LICENSE.txt](LICENSE.txt).\n\n## Dependencies\n\nThese are managed with the NuGet package manager and will be automatically downloaded as needed:\n* [UVAtlas dot NET](https://github.com/Microsoft/UVAtlas) using a custom C# wrapper in [UVAtlasWrapper](./UVAtlasWrapper)\n* [AWS SDK](https://aws.amazon.com/sdk-for-net)\n* [log4net](https://logging.apache.org/log4net)\n* [Newtonsoft Json dot NET](https://www.newtonsoft.com/json)\n* [Math dot NET Numerics](https://numerics.mathdotnet.com)\n* [MIConvexHull](https://designengrlab.github.io/MIConvexHull)\n* [OptimizedPriorityQueue](https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp)\n* [RTree](https://github.com/drorgl/cspatialindexrt)\n* [Sharp3DBinPacking](https://github.com/303248153/Sharp3DBinPacking)\n* [Supercluster KDTree](https://github.com/ericreg/Supercluster.KDTree)\n* [Triangle dot NET](https://github.com/wo80/Triangle.NET)\n* [GDAL](https://gdal.org)\n* [EmguCV](https://www.emgu.com/wiki/index.php/Emgu_CV) (this dependency has a GPL license)\n* [OpenTK](https://opentk.net)\n* [ZedGraph](https://github.com/ZedGraph/ZedGraph)\n* [ColorMine](https://github.com/colormine/colormine)\n* [CSharpFITS](https://github.com/rwg0/csharpfits)\n* [SixLabors ImageSharp](https://github.com/SixLabors/ImageSharp)\n* [CommandLine](https://github.com/commandlineparser/commandline)\n* [RestSharp](https://restsharp.dev)\n* [Embree dot NET](https://github.com/TomCrypto/Embree.NET)\n* [PoissonRecon](https://github.com/mkazhdan/PoissonRecon)\n* [fssrecon](https://github.com/simonfuhrmann/mve/blob/master/apps/fssrecon)\n\nMany Landform workflows currently require access to Mars 2020 or MSL ground data subsystems including the mission Places database server and the mission operational datastore.  In principle it should be possible to replace these functions with data from the [Mars 2020 Planetary Data System (PDS) Archive](https://pds-geosciences.wustl.edu/missions/mars2020/), but that will require some development work.\n\n## Building\n\nLandform currently only builds with Visual Studio 2019 on Windows, and only runs on Intel Windows platforms.\n\nIn addition to Visual Studio 2019, you will need to install the Visual Studio 2013 and Visual Studio 2019 redistributables installed.  You can get these directly from Microsoft or use the installers in the [Deploy](./Deploy) subdirectory.\n\nYou may also need to install the [.NET framework 4.8 developer pack from Microsoft](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net48).\n\nVisual studio should automatically install the requisite dependencies.  In case it doesn't, try the following:\n1. Open [Landform.sln](./Landform.sln) in Visual Studio 2019\n1. Open the package manager console from `Tools \u003e Nuget Package Manager \u003e Package Manager Console`\n1. Run `update-package -reinstall`  (do not replace `GDalConfiguration.cs` file if asked)\n\nNormally Landform is run from a release (vs debug) build.  Once you have successfully compiled it, the executable should be available at `./Landform/bin/Release/Landform.exe`.\n\n## Compatible Visualization Software\n\nLandform 3DTiles products are typically viewed by Mars mission ground software such as ASTTRO which downloads the tileset data on demand and integrates with mission-specific interfaces.  ASTTRO uses the open-source AMMOS [Unity3DTiles](https://github.com/NASA-AMMOS/Unity3DTiles) component to load and render 3DTiles tilesets.  The Unity3DTiles software also includes a simple stand-alone web-based viewer.  A similar JavasScript component was also recently developed, AMMOS [3DTilesRendererJS](https://github.com/NASA-AMMOS/3DTilesRendererJS).\n\nLandform can optionally also produce meshes in more traditional textured mesh formats such as PLY or OBJ.  This can be done either as a single monolithic mesh with one texture image, or split up into multiple submeshes.  The monolithic form can suffer from limited texture resolution, even when using a relatively high resolution (e.g. 8k) image.  In that case Landform can optionally allocate a larger central portion of the image to the central detailed portion of the terrain, with the periphery of the image mapped to the remainder of the terrain at a lower resolution.\n\n## Coordinate Conventions\n\nLandform and its underlying matrix library XNAMath (ported from [MonoGame](https://monogame.net)) uses a right handed rotation, row vector convention, e.g. `new_row_vector = row_vector * matrix`. The portions of code that interface with OpenCV (EMGU) frequently convert to a column vector convention, so be careful.\n\nImages are accessed by pixel using zero based rows and columns with the origin at the top left of the image. Integer pixel coordinats are at the top left corner of the pixel.  Some of the camera model code uses pixel center conventions so be aware of half-pixel offsets.\n\nLandform expects that texture coordinates for meshes follow the OpenGL convention of the lower-left of an image being the origin. This means that texture coordinates require a vertical coordinate swap to map between pixels and uvs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnasa-ammos%2Flandform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnasa-ammos%2Flandform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnasa-ammos%2Flandform/lists"}