{"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/ash-animatable-gaussian-splats-for-efficient","title":"ASH: Animatable Gaussian Splats for Efficient and Photoreal Human Rendering","arxiv_id":"2312.05941","date":"2023-12-10","proceeding":"CVPR 2024 1","authors":["Haokai Pang","Heming Zhu","Adam Kortylewski","Christian Theobalt","Marc Habermann"],"abstract":"Real-time rendering of photorealistic and controllable human avatars stands as a cornerstone in Computer Vision and Graphics. While recent advances in neural implicit rendering have unlocked unprecedented photorealism for digital avatars, real-time performance has mostly been demonstrated for static scenes only. To address this, we propose ASH, an animatable Gaussian splatting approach for photorealistic rendering of dynamic humans in real-time. We parameterize the clothed human as animatable 3D Gaussians, which can be efficiently splatted into image space to generate the final rendering. However, naively learning the Gaussian parameters in 3D space poses a severe challenge in terms of compute. Instead, we attach the Gaussians onto a deformable character model, and learn their parameters in 2D texture space, which allows leveraging efficient 2D convolutional architectures that easily scale with the required number of Gaussians. We benchmark ASH with competing methods on pose-controllable avatars, demonstrating that our method outperforms existing real-time methods by a large margin and shows comparable or even better results than offline methods.","url_abs":"https://arxiv.org/abs/2312.05941v2","url_pdf":"https://arxiv.org/pdf/2312.05941v2.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":"ash-animatable-gaussian-splats-for-efficient","repo_url":"https://github.com/kv2000/ASH","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2312.05941","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2312.05941"}},"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/kv2000/ASH","reach":{"status":"ok"}}],"summary":{"ran":5,"ran_honours":1,"ran_draft_wrong":1},"by_repo_kind":{"official":{"samples":7,"ran":7,"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":7,"samples":[{"code_sha256_prefix":"2aac342a5cd4d19e","entry":"direction_to_quaternion","repo":"kv2000/ASH","repo_kind":"official","path":"scene/gaussian_model.py","file_url":"https://github.com/kv2000/ASH/blob/HEAD/scene/gaussian_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":"2aac342a5cd4d19e"}},{"code_sha256_prefix":"c56b7ef16f309a45","entry":"gaussian","repo":"kv2000/ASH","repo_kind":"official","path":"utils/loss_utils.py","file_url":"https://github.com/kv2000/ASH/blob/HEAD/utils/loss_utils.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c56b7ef16f309a45"}},{"code_sha256_prefix":"31a3c5ec0d3512ae","entry":"gen_uv_barycentric","repo":"kv2000/ASH","repo_kind":"official","path":"models/utils.py","file_url":"https://github.com/kv2000/ASH/blob/HEAD/models/utils.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":"31a3c5ec0d3512ae"}},{"code_sha256_prefix":"bb0e12df9c0d2a05","entry":"get_embedder","repo":"kv2000/ASH","repo_kind":"official","path":"scene/unet_2.py","file_url":"https://github.com/kv2000/ASH/blob/HEAD/scene/unet_2.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bb0e12df9c0d2a05"}},{"code_sha256_prefix":"ac0e42d6fbcfbbe6","entry":"l1_loss","repo":"kv2000/ASH","repo_kind":"official","path":"utils/loss_utils.py","file_url":"https://github.com/kv2000/ASH/blob/HEAD/utils/loss_utils.py","link_basis":"harvester_set","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":"ac0e42d6fbcfbbe6"}},{"code_sha256_prefix":"8c3b0f873ba11813","entry":"l2_loss","repo":"kv2000/ASH","repo_kind":"official","path":"utils/loss_utils.py","file_url":"https://github.com/kv2000/ASH/blob/HEAD/utils/loss_utils.py","link_basis":"harvester_set","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":"8c3b0f873ba11813"}},{"code_sha256_prefix":"2fb01cfbdec59b1e","entry":"readCamerasFromTransforms_from_pang","repo":"kv2000/ASH","repo_kind":"official","path":"exp_server_base.py","file_url":"https://github.com/kv2000/ASH/blob/HEAD/exp_server_base.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":"2fb01cfbdec59b1e"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}