CityGaussian: Gaussian का उपयोग करके रीयल-टाइम उच्च-गुणवत्ता वाले बड़े पैमाने के सीन रेंडरिंग
(dekuliutesla.github.io)- CityGaussian(CityGS) 3D Gaussian Splatting(3DGS) को शहर-स्तरीय सीन तक विस्तारित करने वाली ECCV 2024 की एक विधि है, जिसका लक्ष्य training efficiency और real-time navigation quality दोनों को साथ में हासिल करना है
- बड़े पैमाने के सीन को एक बार में संभालना कठिन होने की सीमा को divide-and-conquer learning और level of detail(LoD) रणनीति के जरिए अलग-अलग हल किया गया है
- global scene prior information और adaptive training data selection का उपयोग करके block-स्तरीय training परिणामों ko अधिक कुशलता से align किया जाता है और उन्हें smooth तरीके से fuse किया जाता है
- fused Gaussian primitive को compress करके कई level of detail बनाए जाते हैं, और rendering के समय block-आधारित तरीके से उपयुक्त detail level चुना और aggregate किया जाता है
- LoD के बिना MatrixCity को 25 million Gaussian से व्यक्त करने पर A100 में केवल 18 FPS मिलता है, जबकि LoD लागू करने वाला CityGS औसतन 36 FPS के साथ real-time rendering हासिल करता है
बड़े पैमाने के 3DGS के लिए training·rendering संरचना
- 3D Gaussian Splatting(3DGS) ने real-time 3D scene reconstruction और novel view synthesis में मजबूत प्रदर्शन दिखाया है, लेकिन large-scale scene training और अलग-अलग scale पर real-time rendering अब भी भारी पड़ते हैं
- CityGaussian इस समस्या को दो चरणों में संभालता है
- divide-and-conquer learning: बड़े पैमाने के सीन को block units में बाँटकर कुशलतापूर्वक train किया जाता है
- LoD रणनीति: observation scale के अनुसार केवल आवश्यक detail level का उपयोग करके rendering speed बढ़ाई जाती है
- global scene prior information और adaptive training data selection training efficiency बढ़ाते हैं, और अलग किए गए scene fragments को अधिक स्वाभाविक रूप से fuse करने में मदद करते हैं
- fused Gaussian primitive compression process के बाद कई detail levels में संगठित किए जाते हैं
- rendering चरण में block-आधारित detail level selection और aggregation strategy का उपयोग किया जाता है, जिससे कई scale पर भी तेज़ screen generation संभव होता है
प्रदर्शन और सार्वजनिक सामग्री
- LoD लागू न करने पर MatrixCity सीन को 25 million Gaussian से व्यक्त किया जाता है, और A100 के आधार पर 18 FPS मापा गया
- इस गति को आरामदायक roaming experience देने के लिए पर्याप्त नहीं माना गया
- LoD लागू करने वाला CityGS बहुत अलग-अलग scale पर भी real-time rendering संभव बनाता है, और A100 पर औसतन 36 FPS मापा गया
- बड़े पैमाने के सीन प्रयोगों में CityGS ने state-of-the-art rendering quality दिखाई, और अलग-अलग scale वाले बड़े सीन में consistent real-time rendering को support किया
- सार्वजनिक सामग्री
1 टिप्पणियां
Hacker News की राय
वीडियो के dataset का नाम Matrix city है, इसे देखकर लगता है कि इसके कुछ साल पहले रिलीज़ हुए Unreal Engine 5 Matrix demo से निकाले जाने की संभावना काफ़ी ज़्यादा है
viewpoints काफ़ी मिलते-जुलते हैं, इसलिए photorealism तो है, लेकिन यह असली photos से आया हुआ नहीं लगता
और खोजने पर पता चला कि यही सही था: https://city-super.github.io/matrixcity/
दिलचस्प बात यह है कि तब मूल पोस्ट असली objects के reconstruction को फिर से reconstruct करने जैसा है
MatrixCity map अलग है, लेकिन Matrix Awakens के map से कुछ हद तक मिलता-जुलता है। Matrix Awakens project के technical lead द्वारा लिखे गए [3] इस page के design analysis में भी यह देखा जा सकता है
और आगे जाकर [4] GitHub codebase के MatrixPlugin section को देखें, तो इसमें साफ़ लिखा है कि city-sample project इस्तेमाल किया गया है
[1] https://www.unrealengine.com/marketplace/en-US/product/city-...
[2] https://www.unrealengine.com/marketplace/en-US/learn/city-sa...
[3] https://quentinmarmier.artstation.com/projects/xYeKNO
[4] https://github.com/city-super/MatrixCity
इसलिए NeRF या Gaussian splatting training थोड़ी आसान हो जाती है, क्योंकि camera pose optimization error नहीं होता
शुरुआती NeRF papers ने Blender से render किए गए मशहूर पीले Lego excavator का इस्तेमाल भी इसी वजह से किया था
Matrix city जैसे scene के लिए data reproduce करने में लंबा समय लगाकर train करने की ज़रूरत नहीं लगती
weekend में मैंने Google Maps 3D tile mesh और Gaussian splats को जोड़कर देखा; बिल्कुल वही चीज़ नहीं है, लेकिन effect काफ़ी मिलता-जुलता और उपयोगी था
code-linked example 1: https://twitter.com/kfarr/status/1773934700878561396
example 2: https://twitter.com/3dstreetapp/status/1775203540442697782
पहले link में developer tools में error दिखता है
Uncaught (in promise) Error: Failed to fetch resource [https://tile.googleapis.com/v1/3dti](<https://tile.googleapis.com/v1/3dti>)...aframe-loader-3dtiles-component को देखने वाला हूं
“average speed 36 FPS (A100 पर tested)” यानी शायद मतलब यह है कि अगर आपके पास $8k वाला GPU है तो real-time है
graphics paper जब कहता है कि उसने real-time speed हासिल कर ली, तो हमेशा दोबारा check करना पड़ता है कि वह सचमुच real-time है या “पैसे से खरीदे जा सकने वाले सबसे महंगे hardware पर 640x480 20fps”
benchmark को काफ़ी नीचे कर दें तो कुछ भी real-time हो सकता है
virtual production जैसे use cases में काम आ सकता है, लेकिन mobile के लिए शायद नहीं
https://www.techpowerup.com/forums/attachments/all-cards-png...
अगर आप कुछ ऐसा चाहते हैं जो 10 साल पुराने laptop पर भी, बल्कि GPU के बिना भी चल सके, तो https://github.com/pierotofy/OpenSplat देखें। यह मैंने बनाया है
इसलिए यह कोई ऐसी problem नहीं लगती जिसे पार न किया जा सके
कोई मुझे समझा सकता है कि 3D Gaussian splatting कोई dead end नहीं है?
rendering single-digit factor से बहुत धीमी है, और data भी single-digit factor से बहुत बड़ा है। यह rasterization और ray tracing की बहस फिर से देखने जैसा लगता है
rasterization हमेशा ray tracing से तेज़ रहेगा, और अगर ray tracing 10 गुना तेज़ हो जाए, तो rasterization भी 10 गुना तेज़ हो जाएगा
Gaussian point cloud से traditional geometry और materials बनाना दिलचस्प हो सकता है। लेकिन photogrammetry तो काफी पहले से मौजूद है
एक विशाल शहर को splats से real-time render करने की कोशिश “सही दिशा” जैसी नहीं लगती
यह cool, मज़ेदार और दिलचस्प तो है, लेकिन सच में उपयोगी होगा या नहीं, पक्का नहीं। मैं expert नहीं हूँ, इसलिए सच में पूछ रहा हूँ
मौजूदा research का ज़्यादातर हिस्सा performance पर focused नहीं है, और compression सहित unified format पर सहमति भी अभी नहीं बनी है
optimization की गुंजाइश बहुत साफ़ है, और अलग-अलग devices के लिए adjust करना भी आसान है। यह point cloud LOD या mesh culling जैसा है
splat performance viewer का temporary competitive advantage हो सकता है, लेकिन जैसे video decompression या दूसरे 3D standards open source के जरिए फैले, वैसे ही कुछ सालों में ज़्यादातर devices पर high-quality, high-frame splat viewing basic requirement बन जाने की संभावना है
इसके बाद सवाल यह है कि इसे कहाँ इस्तेमाल किया जाएगा
browser में 100fps से ज़्यादा: https://current-exhibition.com/laboratorio31/
900fps: https://m-niemeyer.github.io/radsplat/
traditional engines में 30 साल का R&D जमा है, इसलिए tools और optimization को catch up करने में समय लगेगा
लेकिन papers कहाँ से आ रहे हैं, यह देखें तो Apple और Meta बहुत हैं, और यह उन दोनों कंपनियों द्वारा push किए जा रहे metaverse/spatial computing युग को चलाने वाली technology लगती है
iPhone video जैसे बहुत कम production-cost वाले content को 3D environment में ले जाने की क्षमता traditional तरीकों के बहुत सारे R&D को पीछे धकेल देगी
पतली structures या बालों जैसी fine details capture करना भी बहुत मुश्किल है। 3DGS ऐसे हिस्सों में strong है
इसकी मौजूदा कमजोरियों को सुधारने पर भी research चल रही है, जिसमें traditional graphics pipeline में इस्तेमाल किए जा सकने वाले mesh extraction methods भी शामिल हैं
photogrammetry तभी अच्छी तरह काम करती है जब surface data साफ़ हो, लेकिन Gaussian splats फर, vegetation, particles, rough surfaces जैसे semi-volumetric data में strong हैं
glossy/reflective surfaces, subdivision-surface nature वाले volumes, और बहुत ज़्यादा view-dependent materials के लिए भी यह अच्छी तरह fit बैठता है
अगर use case पूरी 3D photo जैसा है, तो यह काफी शानदार है और पूरी तरह justified use case है
3D game engine के लिए हो, तो basic primitives को game engine की जरूरतों के मुताबिक dynamically handle करना मुश्किल लगता है। कोशिशें जारी रहेंगी, लेकिन इस नज़रिए से Gaussian कोई उपयोगी intermediate representation कम और final render format ज़्यादा लगता है
engine में practical इस्तेमाल के लिए बीच की खाई भरने वाली कोई और चीज़ invent करनी होगी, और अभी बहुत सवाल बाकी हैं
दूसरे use cases का पता नहीं, लेकिन दुनिया सिर्फ 3D games और visual effects से नहीं बनी है
जिन चीज़ों के नाम में Gauss जुड़ा है, वे इतनी ज़्यादा हैं, और Gaussian splatting जैसे नए नाम लगातार जुड़ते रहते हैं, यह देखकर फिर से मज़ा आता है कि Gauss ने कितने fields पर असर डाला
उन्होंने इसे सीधे invent नहीं किया, लेकिन उस mathematics में उनका बड़ा योगदान था
https://en.wikipedia.org/wiki/Monte_Carlo_(disambiguation)
सिर्फ “Science and Technology” section में ही 8 items हैं
देखना दिलचस्प होगा कि यह किस license के तहत release होगा
मैं इसे इस्तेमाल करने वाला open source game देखना चाहूँगा
इतिहास में कई examples हैं जो triangle meshes के alternative के रूप में promising लगे, फिर यह पता चला कि उन्हें efficiently animate करने का तरीका नहीं है और वे गायब हो गए
point cloud के अंदर objects में “chair, table, person” जैसी intrinsic metadata नहीं होती, इसलिए कोई भी interaction बहुत मुश्किल हो जाता है
नामुमकिन नहीं है, लेकिन अभी practical नहीं है
ऊपर से यह real-time rendering के लिए भी खास optimized नहीं है। भले ही बहुत सारे points prune कर दिए गए हों, low-resolution mesh इस्तेमाल करना कहीं ज़्यादा efficient है
यह Cities: Skylines जैसी चीज़ों से बहुत बेहतर नहीं दिखता
न zoom in है, न zoom out, और हमेशा बहुत सीमित frame ही दिखाता है; क्या मैं कुछ miss कर रहा हूँ?
paper बार-बार MatrixCity को reference करता है, और ऊपर किसी और ने जो https://city-super.github.io/matrixcity/ ढूँढा है, वह भी बताता है कि यह पूरी तरह synthetic data है
मेरी समझ से यह Unreal Engine से extracted है
मैं pygame से सीख रहा हूँ, और सोच रहा हूँ कि गेम में motion blur कैसे डाला जाता है
उदाहरण के लिए, pygame में Mario बनाते समय अगर Mario jump करे तो मैं चाहता हूँ कि वह धुंधला दिखे
9 pixels का average लेकर Mario का धुंधला version बनाया जा सकता है, लेकिन पता नहीं बाकी games में आमतौर पर ऐसा ही किया जाता है या नहीं
कई games motion blur के बिना भी बहुत sharp होते हैं, इसलिए उत्सुक हूँ कि इसे वास्तव में इस्तेमाल किया जाता है या नहीं
फिल्मों में यह काफी बड़ा factor है, और यह बात भी याद आती है कि cinematic motion blur पाने के लिए 25fps पर shoot करना पड़ता है
यानी हर object की velocity calculate करके उसे color के रूप में render करें, और फिर post-processing step में blur effect की intensity और direction तय करने के लिए उसका उपयोग करें
camera-relative movement की जरूरत भी पड़ सकती है। Mario के मामले में शायद नहीं, लेकिन FPS में जब camera आगे बढ़े तो आप चाहेंगे कि screen के edges धुंधले दिखें
संबंधित सामग्री: https://city-super.github.io/octree-gs/
बड़े scenes को 3D Gaussians से render करने का यह काफी advanced approach है, इसलिए code आते ही इसे जल्दी test करके देखना चाहूँगा