{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/flatten-anything-unsupervised-neural-surface","title":"Flatten Anything: Unsupervised Neural Surface Parameterization","arxiv_id":"2405.14633","date":"2024-05-23","proceeding":null,"authors":["Qijian Zhang","Junhui Hou","Wenping Wang","Ying He"],"abstract":"Surface parameterization plays an essential role in numerous computer graphics and geometry processing applications. Traditional parameterization approaches are designed for high-quality meshes laboriously created by specialized 3D modelers, thus unable to meet the processing demand for the current explosion of ordinary 3D data. Moreover, their working mechanisms are typically restricted to certain simple topologies, thus relying on cumbersome manual efforts (e.g., surface cutting, part segmentation) for pre-processing. In this paper, we introduce the Flatten Anything Model (FAM), an unsupervised neural architecture to achieve global free-boundary surface parameterization via learning point-wise mappings between 3D points on the target geometric surface and adaptively-deformed UV coordinates within the 2D parameter domain. To mimic the actual physical procedures, we ingeniously construct geometrically-interpretable sub-networks with specific functionalities of surface cutting, UV deforming, unwrapping, and wrapping, which are assembled into a bi-directional cycle mapping framework. Compared with previous methods, our FAM directly operates on discrete surface points without utilizing connectivity information, thus significantly reducing the strict requirements for mesh quality and even applicable to unstructured point cloud data. More importantly, our FAM is fully-automated without the need for pre-cutting and can deal with highly-complex topologies, since its learning process adaptively finds reasonable cutting seams and UV boundaries. Extensive experiments demonstrate the universality, superiority, and inspiring potential of our proposed neural surface parameterization paradigm. Our code is available at https://github.com/keeganhk/FlattenAnything.","url_abs":"https://arxiv.org/abs/2405.14633v2","url_pdf":"https://arxiv.org/pdf/2405.14633v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"flatten-anything-unsupervised-neural-surface","repo_url":"https://github.com/keeganhk/flattenanything","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2405.14633","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2405.14633"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"deterministic:regex_extraction","url":"https://github.com/keeganhk/FlattenAnything","reach":{"status":"ok"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/ruiqixu37/Nuvo","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/keeganhk/flattenanything","reach":{"status":"ok"}}],"summary":{"ran":10,"ran_fixture":1,"unverified":5},"by_repo_kind":{"official":{"samples":11,"ran":7,"repositories":1},"found_in_text":{"samples":5,"ran":4,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":16,"samples":[{"code_sha256_prefix":"dd71fbaabb2c15a6","entry":"ChartAssignmentMLP","repo":"ruiqixu37/Nuvo","repo_kind":"found_in_text","path":"network.py","file_url":"https://github.com/ruiqixu37/Nuvo/blob/HEAD/network.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"dd71fbaabb2c15a6"}},{"code_sha256_prefix":"e62cd9d6ee90a3e9","entry":"Cutting","repo":"keeganhk/flattenanything","repo_kind":"official","path":"util/model.py","file_url":"https://github.com/keeganhk/flattenanything/blob/HEAD/util/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"e62cd9d6ee90a3e9"}},{"code_sha256_prefix":"5286dea12d0c531a","entry":"PWE","repo":"keeganhk/flattenanything","repo_kind":"official","path":"util/model.py","file_url":"https://github.com/keeganhk/flattenanything/blob/HEAD/util/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"5286dea12d0c531a"}},{"code_sha256_prefix":"978fbc42c99a6e98","entry":"SurfaceCoordinateMLP","repo":"ruiqixu37/Nuvo","repo_kind":"found_in_text","path":"network.py","file_url":"https://github.com/ruiqixu37/Nuvo/blob/HEAD/network.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"978fbc42c99a6e98"}},{"code_sha256_prefix":"5f7a3bb1ec50d398","entry":"TextureCoordinateMLP","repo":"ruiqixu37/Nuvo","repo_kind":"found_in_text","path":"network.py","file_url":"https://github.com/ruiqixu37/Nuvo/blob/HEAD/network.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"5f7a3bb1ec50d398"}},{"code_sha256_prefix":"b6e9bcc803357977","entry":"Unwrapping","repo":"keeganhk/flattenanything","repo_kind":"official","path":"util/model.py","file_url":"https://github.com/keeganhk/flattenanything/blob/HEAD/util/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b6e9bcc803357977"}},{"code_sha256_prefix":"b925bc7f2d2cda77","entry":"Wrapping","repo":"keeganhk/flattenanything","repo_kind":"official","path":"util/model.py","file_url":"https://github.com/keeganhk/flattenanything/blob/HEAD/util/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b925bc7f2d2cda77"}},{"code_sha256_prefix":"09bcf98d61233d7b","entry":"as_arr","repo":"keeganhk/FlattenAnything","repo_kind":"official","path":"util/func.py","file_url":"https://github.com/keeganhk/FlattenAnything/blob/HEAD/util/func.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"09bcf98d61233d7b"}},{"code_sha256_prefix":"37eb3ed2e10e8fa0","entry":"get_normalization_stats","repo":"keeganhk/FlattenAnything","repo_kind":"official","path":"util/func.py","file_url":"https://github.com/keeganhk/FlattenAnything/blob/HEAD/util/func.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"37eb3ed2e10e8fa0"}},{"code_sha256_prefix":"3a98c93b91c40bf5","entry":"normalize_coordinates","repo":"keeganhk/FlattenAnything","repo_kind":"official","path":"util/func.py","file_url":"https://github.com/keeganhk/FlattenAnything/blob/HEAD/util/func.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3a98c93b91c40bf5"}},{"code_sha256_prefix":"bd61be1ecfd86fb3","entry":"positional_encoding","repo":"ruiqixu37/Nuvo","repo_kind":"found_in_text","path":"network.py","file_url":"https://github.com/ruiqixu37/Nuvo/blob/HEAD/network.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bd61be1ecfd86fb3"}},{"code_sha256_prefix":"2f3a268bfefdfc47","entry":"FlattenAnythingModel","repo":"keeganhk/flattenanything","repo_kind":"official","path":"util/model.py","file_url":"https://github.com/keeganhk/flattenanything/blob/HEAD/util/model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2f3a268bfefdfc47"}},{"code_sha256_prefix":"d9f64adec23bfaa0","entry":"GridDeforming","repo":"keeganhk/flattenanything","repo_kind":"official","path":"util/model.py","file_url":"https://github.com/keeganhk/flattenanything/blob/HEAD/util/model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d9f64adec23bfaa0"}},{"code_sha256_prefix":"c4c7facdeba9731f","entry":"Nuvo","repo":"ruiqixu37/Nuvo","repo_kind":"found_in_text","path":"network.py","file_url":"https://github.com/ruiqixu37/Nuvo/blob/HEAD/network.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c4c7facdeba9731f"}},{"code_sha256_prefix":"6c1a65da4e2bc4ed","entry":"test_fam","repo":"keeganhk/flattenanything","repo_kind":"official","path":"util/workflow.py","file_url":"https://github.com/keeganhk/flattenanything/blob/HEAD/util/workflow.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6c1a65da4e2bc4ed"}},{"code_sha256_prefix":"8f15b83c72bf42f8","entry":"test_fam","repo":"keeganhk/FlattenAnything","repo_kind":"official","path":"util/workflow.py","file_url":"https://github.com/keeganhk/FlattenAnything/blob/HEAD/util/workflow.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8f15b83c72bf42f8"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}