4 पॉइंट द्वारा GN⁺ 2023-09-12 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • यह एक WebGL viewer है जिसमें ब्राउज़र में ही 3D Gaussian Splat scene को सीधे खोला और नियंत्रित किया जा सकता है, और इसका implementation code GitHub पर सार्वजनिक है
  • कीबोर्ड, माउस, ट्रैकपैड, टच और गेमपैड तक का समर्थन है, इसलिए desktop और mobile इनपुट वातावरण को व्यापक रूप से कवर करता है
  • कैमरा नियंत्रण को move, orbit rotation, tilt और roll में बाँटा गया है, और अलग-अलग input devices से उसी scene को अलग तरीके से explore किया जा सकता है
  • number keys और -, +, p के जरिए preloaded camera views बदलना, कैमरों के बीच cycle करना, और default animation फिर से शुरू करना संभव है
  • .ply file को drag-and-drop करके .splat में बदला जा सकता है, और cameras.json से camera settings लोड की जा सकती हैं

WebGL 3D Gaussian Splat Viewer

  • WebGL 3D Gaussian Splat Viewer Kevin Kwok द्वारा बनाया गया 3D Gaussian Splat viewer है
  • कोड Github पर सार्वजनिक है

इनपुट डिवाइस के अनुसार नियंत्रण

  • कीबोर्ड मूवमेंट

    • बायाँ/दायाँ arrow: बाएँ/दाएँ move
    • ऊपर/नीचे arrow: आगे/पीछे move
    • Space: jump
  • कैमरा एंगल

    • a / d: कैमरा बाएँ/दाएँ rotate
    • w / s: कैमरा ऊपर/नीचे tilt
    • q / e: कैमरा counterclockwise/clockwise roll
    • i / k, j / l: orbit rotation
  • ट्रैकपैड

    • scroll: ऊपर-नीचे-बाएँ-दाएँ orbit rotation
    • pinch: आगे/पीछे move
    • Ctrl + scroll: आगे/पीछे move
    • Shift + scroll: ऊपर-नीचे move या बाएँ/दाएँ move
  • माउस

    • क्लिक के बाद drag: orbit rotation
    • right click या Ctrl/Cmd key के साथ ऊपर-नीचे drag: move
  • टच

    • एक उंगली: orbit rotation
    • दो उंगलियों से pinch: आगे/पीछे move
    • दो उंगलियों से rotation: कैमरा clockwise/counterclockwise rotate
    • दो उंगलियों से pan: बाएँ/दाएँ और ऊपर/नीचे move
  • गेमपैड

    • connected game controller होने पर काम करता है

कैमरा और फ़ाइल प्रोसेसिंग

  • कैमरा व्यू नियंत्रण

    • 0-9: preloaded camera views में से किसी एक पर switch
    • - या +: लोड किए गए कैमरों के बीच cycle
    • p: default animation फिर से शुरू
  • ड्रैग-एंड-ड्रॉप

    • .ply file: .splat में convert
    • cameras.json: camera load

1 टिप्पणियां

 
GN⁺ 2023-09-12
Hacker News की राय
  • वाकई शानदार है, लेकिन controls उलझाने वाले हैं
    सामान्य WASD movement और mouse से viewpoint rotation के बजाय, mouse drag आगे-पीछे movement और किसी खास point के चारों ओर orbit rotation करता है, और A/D left-right movement, W/S ऊपर-नीचे देखने की तरह काम करते हैं
    controls की पूरी list README में है: https://github.com/antimatter15/splat#controls

    • मैं लेखक हूँ; camera controls असुविधाजनक हैं, इसके लिए माफ़ी। इसे ज़्यादा तार्किक तरीके में बदलने वाले pull requests खुशी से स्वीकार करूँगा
      मूल इरादा था कि सिर्फ arrow keys से, अपनी जगह पर शरीर घुमाते हुए और आगे-पीछे चलते हुए move किया जा सके
    • यह N64 FPS controls, जैसे GoldenEye, से काफ़ी मिलता-जुलता है
      arrow keys/joystick से आगे-पीछे movement और left-right rotation वाला “main movement”, और WASD/C buttons से left-right movement और up-down view वाला “secondary movement” करने की संरचना है
    • वैसे, सिर्फ mouse इस्तेमाल करने वाला control तरीका मुझे काफ़ी पसंद आया
    • सच कहूँ तो controls इतने non-intuitive और खराब हैं कि rendering demo देखने से पहले ही मैं अटक गया
  • वाकई शानदार। मैं भी gaussian-splatting [0] को WebGPU पर port करने पर काम कर रहा हूँ
    अब तक देखे गए दूसरे implementations की तरह, यह implementation भी perspective projection में ellipsoid को project करते समय वही गलती करता लगता है। पहले 3D में covariance calculate करके फिर 2D में project करने का तरीका[1] है, लेकिन यह approach केवल parallel/orthographic projection में सही है और perspective projection पर लागू करने से गलत नतीजे मिलते हैं
    perspective projection में तीन अतिरिक्त effects होते हैं। parallax shift से projected ellipse का shape बदलता है, ellipsoid का rotation apparent position बदलकर अतिरिक्त translation पैदा कर सकता है, और conic section सिर्फ ellipse ही नहीं बल्कि parabola और hyperbola भी हो सकता है
    पहले effect को इस matrix[2] से manually correct किया गया लगता है, लेकिन बाद के दो effects अब तक देखे गए implementations की calculation में शामिल नहीं थे। सही तरीके के लिए 3D covariance calculate करने के बजाय, camera position को vertex मानकर ellipsoid का boundary cone निकालना चाहिए और फिर उसे view plane से intersect करना चाहिए। उससे निकला conic section perspective-projected ellipsoid की exact outline होता है
    [0]: https://github.com/graphdeco-inria/gaussian-splatting
    [1]: https://github.com/antimatter15/splat/blob/3695c57e8828fedc2...
    [2]: https://github.com/antimatter15/splat/blob/3695c57e8828fedc2...

    • आम तौर पर camera projection के बाद Gaussian अब सचमुच Gaussian नहीं रहता, क्योंकि pinhole camera projection function z से divide करता है और इसलिए nonlinear होता है
      लेकिन अगर Gaussian image size की तुलना में छोटा हो, तो projection function को linearize करके approximate किया जा सकता है। इसलिए Gaussian Splatting paper equation 5 की तरह projection function का Jacobian इस्तेमाल करता है[0]
      असल में यह approximation बहुत अच्छी तरह match करता है। तीसरे link में जिस matrix की बात है, वही Jacobian है, और यह manual correction नहीं बल्कि mathematically valid है। derivation के लिए [1] देखें
      [0] https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_...
      [1] https://math.stackexchange.com/a/4716514/43771
    • लगता है यह सही है। projection को Cartesian coordinates में linear transform जैसा मानकर, उसी से Gaussian को transform किया जा रहा है
      दूसरे तरीके से देखें तो यह मानकर projection approximate किया जा रहा है कि पूरा Gaussian fixed depth पर है; अगर वह पर्याप्त दूर हो तो काम करता लगता है
      Gaussian का projective transform काफ़ी झंझट वाला लगता है, लेकिन लगता है किसी ने किया होगा। projective coordinates में संभव लगता है, पर अंत में Cartesian coordinates में project करने वाला हिस्सा मुश्किल है
      वैसे, सिर्फ outline project करना भी गलत है। पूरी density distribution बदलती है, और वह भी outline को प्रभावित करती है
    • मैं gaussian splat technique से परिचित नहीं हूँ, लेकिन मूल रूप से यह vertices में internal data वाला quadrilateral mesh नहीं है क्या?
      मुझे लगा था कि quadrilateral projection पहले से solved problem है; क्या आप समझा सकते हैं कि यह साधारण quadrilateral array से कैसे अलग है?
    • अगर frame rate को प्रभावित किए बिना boundary cone intersection वाला idea implement किया जा सके, तो WebGPU में यह ज़्यादा smooth लगेगा। हालांकि, ऐसे implementation के साथ समान conditions में compare करने पर अंतर देखना दिलचस्प होगा
  • zoom out करने पर बहुत सारे polygon edges दिखते हैं जो असल में होने नहीं चाहिए लगते
    ऐसा लगता है जैसे smooth “blobs” draw करने की कोशिश है लेकिन texture coordinates थोड़े misaligned हैं; सोच रहा हूँ कि यह bug है या technique का intended हिस्सा

    • यह intended है
      मूल रूप से यह semi-dense point cloud[1] है, जिसमें points की जगह ऐसे blobs हैं जिनके color, angle और size input photos से match करने के लिए adjusted हैं। इसलिए यह एक खास दूरी से देखने के लिए optimized है
      इसे 3D vector drawing जैसा समझें। अगर बहुत zoom in करें या इसका कोई हिस्सा अलग कर दें, तो पूरी चीज़ थोड़ी अजीब दिखने लगती है
      [1]https://www.researchgate.net/publication/326621750/figure/fi...
  • अब तक मैंने gaussian splatting को सिर्फ फोटो डेटा के लिए इस्तेमाल होते देखा है
    क्या इसे दूसरे ग्राफिक्स डेटा पर भी इस्तेमाल किया जा सकता है? दूसरे शब्दों में, क्या इसे गेम्स में इस्तेमाल करने की संभावना है?

    • यह स्थिति पर निर्भर करता है। gaussian splatting जैसे light field approach मूल रूप से 3D फोटो हैं
      इसमें केवल geometry की position और direction के हिसाब से color होता है, surface, material और light transport के सामान्य concepts—यानी emission, absorption, transmission, reflection, scattering—नहीं होते। यानी सिर्फ precomputed lighting और static scenes संभव हैं, animation मुश्किल है
      लगता है industry physical-based rendering (PBR) और ray/path tracing जैसी उन approaches की ओर जा रही है जो बेहतर dynamic lighting संभव बनाती हैं
      साथ ही फिलहाल इसकी space efficiency बेहद कम है। traditional rendering engine में जिस scene के लिए कुछ दर्जन GB काफी होंगे, वह TB scale तक जा सकता है। हालांकि और optimization होने पर यह बेहतर हो सकता है
      exception के तौर पर gaussian splatting जहाँ interesting हो सकता है, वह procedural/generative content है, शायद animation तक वाला content भी। खासकर smoke, fire, clouds, flowing water जैसे volumetric effects के लिए, जहाँ अभी particle systems इस्तेमाल होते हैं, यह अच्छी तरह fit हो सकता है
    • असंभव होने की कोई वजह नहीं है। आखिर यह बस एक शानदार point cloud ही है
      voxels की जगह इसे basic engine के रूप में इस्तेमाल करने वाला open-world Minecraft-style game आसानी से imagine किया जा सकता है
  • क्या यह technique video पर भी काम करेगी?
    INRIA work के README[1] को देखने पर लगता है कि हर static scene के लिए model train किया जाता है, तो क्या इसका मतलब video बाहर हो जाता है?
    [1] https://github.com/graphdeco-inria/gaussian-splatting

  • मैं अभी क्या देख रहा हूँ?

    • Gaussian splatting point cloud को fancy तरीके से कहने जैसा है, जिसमें points की जगह colored shapes इस्तेमाल होते हैं
      यह तरीका बहुत पहले से है, लेकिन अगर point cloud में दस लाख points हों तो उन दस लाखों को artistic तरीके से handle करना पड़ता है, इसलिए इसका ज्यादा इस्तेमाल नहीं हुआ
      यह 3D hair जैसा है। principle simple है—बस 1 अरब hair strands render कर दो—लेकिन असल में उसे अच्छा दिखाना मुश्किल है
      यहाँ machine learning model को दस लाख basic shapes, जैसे squares, circles, triangles आदि के angle, color, shape और size adjust करने दिए जाते हैं, ताकि वे हमारी दी हुई photos जैसे दिखें
    • मूल रूप से यह work है: https://github.com/graphdeco-inria/gaussian-splatting — 3D scenes render करने का थोड़ा अलग approach
  • क्या यह SIGGRAPH 2023 में Kerbl और Kopanas द्वारा propose की गई method इस्तेमाल करता है?
    https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/

    • हाँ। हालांकि यह शुरुआत में reconstruction generate करने वाले optimization हिस्से को नहीं, बल्कि सिर्फ splatting/rendering हिस्से को implement करता है
  • सच में कमाल है। point clouds भी interesting हैं, लेकिन यह उससे कहीं ज्यादा चौंकाने वाला है। कंपनी में इस्तेमाल होने वाले Lenovo laptop पर भी 60fps पर चलता है

    • mid-range mobile phone पर भी 36fps पर चलता है। इसकी उम्मीद नहीं थी
      हालांकि खासकर camera move करने पर काफी artifacts दिखते हैं
  • अगर इसे ThreeJS के अंदर चलने लायक बना दिया जाए, तो लगता है web 3D history में अपनी छाप छोड़ी जा सकती है

  • 3D view में इस तरह के mouse controls मैंने पहले कभी experience नहीं किए थे, इसलिए कुछ देर तक मैं काफी confused रहा