{"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/points2surf-learning-implicit-surfaces-from","title":"Points2Surf: Learning Implicit Surfaces from Point Cloud Patches","arxiv_id":"2007.10453","date":"2020-07-20","proceeding":null,"authors":["Philipp Erler","Paul Guerrero","Stefan Ohrhallinger","Michael Wimmer","Niloy J. Mitra"],"abstract":"A key step in any scanning-based asset creation workflow is to convert unordered point clouds to a surface. Classical methods (e.g., Poisson reconstruction) start to degrade in the presence of noisy and partial scans. Hence, deep learning based methods have recently been proposed to produce complete surfaces, even from partial scans. However, such data-driven methods struggle to generalize to new shapes with large geometric and topological variations. We present Points2Surf, a novel patch-based learning framework that produces accurate surfaces directly from raw scans without normals. Learning a prior over a combination of detailed local patches and coarse global information improves generalization performance and reconstruction accuracy. Our extensive comparison on both synthetic and real data demonstrates a clear advantage of our method over state-of-the-art alternatives on previously unseen classes (on average, Points2Surf brings down reconstruction error by 30% over SPR and by 270%+ over deep learning based SotA methods) at the cost of longer computation times and a slight increase in small-scale topological noise in some cases. Our source code, pre-trained model, and dataset are available on: https://github.com/ErlerPhilipp/points2surf","url_abs":"https://arxiv.org/abs/2007.10453v2","url_pdf":"https://arxiv.org/pdf/2007.10453v2.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":"points2surf-learning-implicit-surfaces-from","repo_url":"https://github.com/ErlerPhilipp/points2surf","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":null},{"paper_slug":"points2surf-learning-implicit-surfaces-from","repo_url":"https://github.com/MChaus/NeoRender_test_task","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[],"methods":[],"datasets_introduced":[{"slug":"p2s","name":"P2S","full_name":"Points2Surf"}],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2007.10453","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2007.10453"}},"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":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/MChaus/NeoRender_test_task","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ErlerPhilipp/points2surf","reach":null}],"summary":{"ran_draft_wrong":3,"unverified":8},"by_repo_kind":{"official":{"samples":4,"ran":3,"repositories":1},"listed":{"samples":7,"ran":0,"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":0,"samples":[{"code_sha256_prefix":"c2dc2d8c43635f44","entry":"get_output_dimensions","repo":"ErlerPhilipp/points2surf","repo_kind":"official","path":"source/points_to_surf_eval.py","file_url":"https://github.com/ErlerPhilipp/points2surf/blob/HEAD/source/points_to_surf_eval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c2dc2d8c43635f44"}},{"code_sha256_prefix":"5766c560030f7164","entry":"get_output_ids","repo":"ErlerPhilipp/points2surf","repo_kind":"official","path":"source/points_to_surf_eval.py","file_url":"https://github.com/ErlerPhilipp/points2surf/blob/HEAD/source/points_to_surf_eval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5766c560030f7164"}},{"code_sha256_prefix":"f51709e1f7c95b06","entry":"parse_arguments","repo":"ErlerPhilipp/points2surf","repo_kind":"official","path":"source/points_to_surf_eval.py","file_url":"https://github.com/ErlerPhilipp/points2surf/blob/HEAD/source/points_to_surf_eval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f51709e1f7c95b06"}},{"code_sha256_prefix":"915eaec694cc6e1c","entry":"decode_sdf","repo":"MChaus/NeoRender_test_task","repo_kind":"listed","path":"source/utils.py","file_url":"https://github.com/MChaus/NeoRender_test_task/blob/HEAD/source/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"915eaec694cc6e1c"}},{"code_sha256_prefix":"e04b438843919fb2","entry":"get_models_path","repo":"MChaus/NeoRender_test_task","repo_kind":"listed","path":"sample_points.py","file_url":"https://github.com/MChaus/NeoRender_test_task/blob/HEAD/sample_points.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e04b438843919fb2"}},{"code_sha256_prefix":"6f25e98522278446","entry":"get_results_dir","repo":"MChaus/NeoRender_test_task","repo_kind":"listed","path":"continue_train.py","file_url":"https://github.com/MChaus/NeoRender_test_task/blob/HEAD/continue_train.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6f25e98522278446"}},{"code_sha256_prefix":"70c418780017e23a","entry":"laod_train_paths","repo":"MChaus/NeoRender_test_task","repo_kind":"listed","path":"continue_train.py","file_url":"https://github.com/MChaus/NeoRender_test_task/blob/HEAD/continue_train.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"70c418780017e23a"}},{"code_sha256_prefix":"4339938210066afc","entry":"load_classes","repo":"MChaus/NeoRender_test_task","repo_kind":"listed","path":"load_data_sets.py","file_url":"https://github.com/MChaus/NeoRender_test_task/blob/HEAD/load_data_sets.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4339938210066afc"}},{"code_sha256_prefix":"d0b9acfcba16fcca","entry":"marching_cubes","repo":"MChaus/NeoRender_test_task","repo_kind":"listed","path":"source/utils.py","file_url":"https://github.com/MChaus/NeoRender_test_task/blob/HEAD/source/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d0b9acfcba16fcca"}},{"code_sha256_prefix":"1cd5046a0ace2eb4","entry":"parse_arguments","repo":"ErlerPhilipp/points2surf","repo_kind":"official","path":"source/points_to_surf_train.py","file_url":"https://github.com/ErlerPhilipp/points2surf/blob/HEAD/source/points_to_surf_train.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1cd5046a0ace2eb4"}},{"code_sha256_prefix":"7465b4628f62ca9a","entry":"prepare_dir","repo":"MChaus/NeoRender_test_task","repo_kind":"listed","path":"sample_points.py","file_url":"https://github.com/MChaus/NeoRender_test_task/blob/HEAD/sample_points.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7465b4628f62ca9a"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}