{"id":40882502,"url":"https://github.com/bertt/i3dm-tile-cs","last_synced_at":"2026-01-22T01:16:50.531Z","repository":{"id":45191137,"uuid":"272952135","full_name":"bertt/i3dm-tile-cs","owner":"bertt","description":"Reader/Writer for Instanced 3DTiles (i3dm)","archived":false,"fork":false,"pushed_at":"2024-07-24T11:31:28.000Z","size":1014,"stargazers_count":15,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-05T22:09:51.610Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bertt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-06-17T11:06:00.000Z","updated_at":"2025-10-03T23:16:19.000Z","dependencies_parsed_at":"2023-01-25T11:30:17.476Z","dependency_job_id":null,"html_url":"https://github.com/bertt/i3dm-tile-cs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bertt/i3dm-tile-cs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertt%2Fi3dm-tile-cs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertt%2Fi3dm-tile-cs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertt%2Fi3dm-tile-cs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertt%2Fi3dm-tile-cs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bertt","download_url":"https://codeload.github.com/bertt/i3dm-tile-cs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertt%2Fi3dm-tile-cs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28648639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T21:29:11.980Z","status":"ssl_error","status_checked_at":"2026-01-21T21:24:31.872Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":"2026-01-22T01:16:50.063Z","updated_at":"2026-01-22T01:16:50.526Z","avatar_url":"https://github.com/bertt.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# i3dm-tile-cs\n\n.NET 8 library for reading/writing Instanced 3DTiles (i3dm)\n\ni3dm specs:\n\nhttps://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Instanced3DModel\n\n## NuGet\n\nhttps://www.nuget.org/packages/i3dm.tile/\n\n## Sample code\n\nReading i3dm. Supply the i3dm filename.\n\n```\nvar i3dmfile = File.OpenRead(@\"test.i3dm\");\nvar i3dm = I3dmReader.Read(i3dmfile);\n```\n\nThe i3dm object contains the glTF, FeatureTable (for instance Positions, NormalUps, NormalRights, ScaleNonUniforms, Scales) and \nBatchTable information.\n\nWriting i3dm. Supply the GLB (as byte[]) and instance positions (as list of Vector3). Optionally \ninstance NormalUps, NormalRights, Scales and ScaleNonUniforms can be provided.\n\n```\nvar i3dm = new I3dm.Tile.I3dm(positions, glb);\nvar bytes = I3dmWriter.Write(i3dm);\n```\n\nWhen writing an i3dm, also an external url can be provided to the glTF model instead of embedding the glTF in each tile:\n\n```\nvar glbUrl = \"http://myserver/test.glb\";\nvar i3dm = new I3dm.Tile.I3dm(positions, glbUrl);\nvar bytes = I3dmWriter.Write(i3dm);\n```\n\nBatch Id's are written in the FeatureTable by default as type 'UNSIGNED_SHORT', sample to use 'UNSIGNED_BYTE':\n\n```\nvar batchIds = new List\u003cint\u003e() { 0, 1 };\nvar i3dm = new I3dm.Tile.I3dm(positions, glb);\ni3dm.BatchIds = batchIds;\nvar bytes = I3dmWriter.Write(i3dm, \"UNSIGNED_BYTE\");\n```\n\n## Benchmarks\n\n```\nBenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.329 (2004/?/20H1)\nIntel Core i7-9750H CPU 2.60GHz, 1 CPU, 12 logical and 6 physical cores\n.NET Core SDK=3.1.301\n  [Host]     : .NET Core 3.1.5 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.27001), X64 RyuJIT\n  DefaultJob : .NET Core 3.1.5 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.27001), X64 RyuJIT\n\n\n|    Method |       Mean |    Error |   StdDev |    Gen 0 |    Gen 1 |    Gen 2 | Allocated |\n|---------- |-----------:|---------:|---------:|---------:|---------:|---------:|----------:|\n|  ReadI3dm |   163.4 us |  1.79 us |  1.59 us | 111.0840 | 111.0840 | 111.0840 | 359.43 KB |\n| WriteI3dm | 2,208.6 us | 41.15 us | 36.48 us | 109.3750 | 109.3750 | 109.3750 | 418.31 KB |\n```\n\n## Known limits\n\nNot implemented (yet): \n\n- quantized and oct encoded properties\n\nQUANTIZED_VOLUME_OFFSET, QUANTIZED_VOLUME_SCALE, POSITION_QUANTIZED, NORMAL_UP_OCT32P, NORMAL_RIGHT_OCT32P\n\n\n## Dependencies\n\n- System.Text.Json\n\n## History\n\n2024-07-24 - 1.1.3 Fix reading I3dm with glb padding\n\n2024-07-24 - 1.1.2 Fix reading I3dm with external uri (gltfFormat == 0)\n\n2024-07-24 - 1.1.1 Fix reading I3dm with padding bytes\n\n2024-07-24 - 1.1 to .NET 8\n\n2022-12-08 - 1.0 to .NET 6\n\n2021-09-23 - 0.5.1 Add padding rules\n\n2020-11-04 - 0.5: Breaking change: void I3dmWriter.Write(string path, I3dm i3dm) -\u003e byte[] I3dmWriter.Write(I3dm i3dm)\n\n2020-11-02 - 0.4.2: add write to stream\n\n2020-11-02 - 0.4.1: add support for composite tiles (cmpt)\n\n2020-10-19 - 0.3.3: add support for external glb (gltfFormat == 0)\n\n2020-08-27 - 0.3.2: add support for rtc_center for high precision positions\n\n2020-07-01 - 0.3.1: adding 8 byte padding requirements\n\n2020-06-29 - 0.3: adding FeatureTable batchIds formats (unsigned byte, unsigned short, unsigned int), scale and rtc_center\n\n2020-06-25 - 0.2: Adding writing i3dm tiles\n\n2020-06-22 - 0.1: Initial version - reading i3dm tiles","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbertt%2Fi3dm-tile-cs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbertt%2Fi3dm-tile-cs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbertt%2Fi3dm-tile-cs/lists"}