2 पॉइंट द्वारा GN⁺ 2024-10-13 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 3Blue1Brown की visualization को Grant Sanderson द्वारा बनाई गई Python लाइब्रेरी Manim से code किया जाता है, और वीडियो Ben Sparks के साथ वास्तविक production workflow को follow करता है
  • Manim, Grant के निजी production environment और docs·tests·issue response को अधिक मज़बूत बनाने वाले Manim Community में बँटा हुआ है, और शुरुआती लोगों के लिए आमतौर पर community version अधिक उपयुक्त है
  • काम करने का तरीका Sublime Text और Python terminal को जोड़कर code snippets को तुरंत चलाने और checkpoint paste से बीच की state को cache करके बार-बार experiment करने के काफ़ी करीब है
  • डेमो में Lorenz attractor को SciPy से calculate करने के बाद curve, dot, updater, 3D camera और trail effect को मिलाकर यह दिखाया जाता है कि पास-पास की initial conditions कैसे अलग हो जाती हैं
  • अंतिम scene को pre-run से error और length जाँचने के बाद MP4 में render किया जाता है, और फिर उसे editing tool में डालकर YouTube वीडियो production process आगे बढ़ती है

Manim की शुरुआत और उसके दो branch version

  • 3Blue1Brown animation का मुख्य tool Grant Sanderson द्वारा खुद बनाई गई Python लाइब्रेरी Manim है
  • Manim में हर scene को programming के ज़रिए बनाया जाता है, और यह 3Blue1Brown के production style के अनुरूप एक custom tool के रूप में विकसित हुआ है
  • Grant ने undergraduate के आख़िरी दौर में mathematical functions को transformations के रूप में बेहतर visualize करने के लिए Python code लिखा था, और यही code चैनल के पहले वीडियो के साथ शुरू हुआ
  • जैसे-जैसे वीडियो बढ़ते गए, tool बेहतर होता गया, और बेहतर tool ने फिर और जटिल वीडियो बनाना संभव किया
  • हाल के hologram वीडियो के visual effects 2~3 साल पहले कहीं ज़्यादा कठिन होते, लेकिन कई वर्षों के workflow improvement की वजह से production कठिनाई कम हुई

Manim Community और Grant का निजी version

  • Grant, वीडियो में इस्तेमाल किया गया code और Manim खुद, दोनों GitHub पर public करते रहे हैं
  • लेकिन वीडियो production और open source management साथ-साथ चलते रहने से issues और Pull Requests पर पर्याप्त response देना आसान नहीं था
  • community ने ज़्यादा मज़बूत tool बनाने के लिए repository को fork किया, और यही version Manim Community है
    • issues और Pull Requests पर response अधिक सक्रिय है
    • tests और documentation बेहतर तरीके से तैयार हैं
    • शुरुआत करने वालों के लिए आमतौर पर यही recommended है
  • वीडियो डेमो में Grant द्वारा सीधे इस्तेमाल किया जाने वाला version इस्तेमाल होता है
    • पिछले कुछ वर्षों में इसे अधिक interactive और तेज़ चलने वाला बनाया गया है
    • जिन लोगों के लिए documentation और tests महत्वपूर्ण हैं, उनके लिए community version अधिक उपयुक्त है

code लिखकर तुरंत जाँचने वाला production style

  • Manim का हर scene एक Python class के रूप में लिखा जाता है, और construct method के अंदर render होने वाला code रहता है
  • circle, rectangle, text जैसे objects को screen पर add किया जाता है, और play method से Write, Transform जैसे animations चलाए जाते हैं
  • ज़्यादातर objects default रूप से screen के center में रखे जाते हैं, और to_edge, shift जैसे operations से उनकी position बदली जाती है
  • Grant का work environment, Sublime Text और Python terminal को साथ इस्तेमाल करने पर आधारित है
    • code line को copy करके terminal में चलाने पर उसका असर तुरंत current scene में दिखता है
    • Sublime shortcut, चुने गए code को copy करके run करने की प्रक्रिया automate करता है
    • terminal current scene से जुड़ा रहता है, इसलिए बदलाव का परिणाम तुरंत देखा जा सकता है
  • लंबे scene में पूरा code हर बार दोबारा चलाने के बजाय बीच के हिस्से पर बार-बार experiment करने वाली सुविधा महत्वपूर्ण होती है
    • hologram वीडियो का उदाहरण 4 मिनट 30 सेकंड का MP4 बनाने वाला लंबा Python code था
    • लंबे scene में बहुत सारा context और local variables share होते हैं, इसलिए उन्हें एक ही file में रखना उपयोगी था
    • checkpoint paste किसी खास comment position पर scene state को cache करता है, फिर उसी state पर लौटकर चुना गया code चलाता है
    • यह तरीका pure text file और Jupyter notebook के बीच के hybrid workflow जैसा है

Manim animation का बुनियादी एहसास

  • Manim की एक महत्वपूर्ण philosophy यह है कि “कुछ भी किसी भी चीज़ में transform हो सकता है”
  • उदाहरण के लिए hello world text के पहले अक्षर H को circle में transform करने वाला scene बनाया जा सकता है
    • circle को scene में सीधे add किए बिना भी उसे transformation target के रूप में define किया जा सकता है
    • text, characters के group की तरह होता है, इसलिए individual letters को निकालकर manipulate किया जा सकता है
  • Transform default रूप से smooth rate function का उपयोग करता है
    • default value smooth है, जो cubic bezier आधारित मुलायम movement जैसा दिखता है
    • linear इस्तेमाल करने पर शुरुआत और अंत ज़्यादा सख़्त महसूस होते हैं
    • जहाँ mathematical time progression को वैसा ही दिखाना ज़रूरी हो, वहाँ linear चाहिए
  • इसी तरह की बारीक tuning, सिर्फ़ “चलता हुआ scene” और “अच्छा दिखने वाला scene” के बीच फ़र्क बनाती है
  • Write जैसे 3Blue1Brown वीडियो में परिचित animations भी Manim built-in function के रूप में call किए जा सकते हैं

Lorenz attractor डेमो

  • डेमो का मुख्य उदाहरण Lorenz attractor है
    • यह 3-dimensional differential equations से आने वाला रूप है
    • यह 3D space में किसी point के समय के साथ बदलने के तरीके को deterministic rules से तय करता है
    • initial conditions को कई तरह से बदलने पर दिलचस्प visual result मिलते हैं
  • Grant ने mathematical calculation वाला हिस्सा बनाते समय ChatGPT से Python function लिखने को कहा
    • SciPy के integrate और initial value problem solver function का इस्तेमाल हुआ
    • तैयार code Matplotlib rendering को आधार बनाकर था, जिसे बाद में Manim के हिसाब से adjust किया गया
  • Lorenz equation की state को x, y, z coordinates से व्यक्त किया जाता है, और हर moment पर derivative निकालने वाले function से इसे लिखा जाता है
  • numerical solution का output time values और x, y, z values के रूप में आता है, और Grant ने इसे आसान ढंग से handle करने के लिए एक wrapper रखा
    • SciPy की तरफ़ की notation में y को output की तरह treat किया जाता है, जिससे थोड़ा confusion हो सकता है
    • state array और transposed form को उन्होंने अपने उपयोग के हिसाब से ढाला
  • initial condition को (0, 0, 0) रखने पर सभी values 0 आईं, इसलिए यह उपयुक्त नहीं था; एक coordinate को 10 करने पर रोचक points बने
  • Manim में calculated points को curve में बदलने के लिए set_points_as_corners का उपयोग किया जाता है
  • axis coordinate system को Manim coordinate system में बदलने के लिए coords_to_point के short form c2p का उपयोग किया जाता है
  • Python का * syntax iterable को function arguments के रूप में unpack करके भेजने के लिए इस्तेमाल होता है
    • उदाहरण में x, y, z coordinate lists को अलग करके function में भेजा गया

पास-पास की initial conditions के अलग होने वाला scene

  • Lorenz attractor visualization का मुख्य बिंदु यह है कि बहुत पास की initial conditions शुरू में लगभग एक जैसी चलती हैं, लेकिन बाद में अलग हो जाती हैं
  • Grant initial conditions की एक list बनाते हैं और z coordinate को छोटे epsilon से अलग सेट करते हैं
    • शुरुआत में 2 conditions से शुरू किया जाता है
    • बाद में इसे 10 conditions तक बढ़ाया जाता है
  • कई curves को रखने के लिए VGroup का उपयोग किया जाता है
    • vectorized object group होने की जानकारी देने से rendering तेज़ हो सकती है
  • हर curve के end point पर glow dot लगाया जाता है
    • GlowDot ऐसा object है जिसे moving point को visually बेहतर दिखाने के लिए बनाया गया है
    • हर dot पर updater लगा होता है, जो हर frame में उसे curve के end point तक ले जाता है
  • zip का उपयोग dot और curve, या state और color जैसी corresponding lists पर parallel iteration के लिए किया जाता है
    • अगर दो list की length अलग हो, तो iteration छोटी list के ख़त्म होने पर रुक जाती है
    • color_gradient से states की संख्या जितने colors बनाकर length match की जाती है
  • ShowCreation से curve draw करते समय अगर default smoothing इस्तेमाल हो, तो वास्तविक time progression distort हो सकती है; इसलिए dynamics को ज्यों का त्यों दिखाने वाले हिस्सों में linear rate function का उपयोग किया जाता है
  • पास-पास की initial conditions शुरुआत में लगभग साथ चलती हैं, लेकिन समय बीतने पर वे पूरी तरह अलग positions में फैल जाती हैं
  • Lorenz attractor को सिर्फ़ simple point या period नहीं, बल्कि एक ऐसे strange attractor के रूप में देखा जाता है जो किसी खास shape की ओर खिंचता है, फिर भी exact position initial conditions के प्रति sensitive रहती है

interactive mode के workaround code और scene effects

  • डेमो में globals().update(locals()) जैसा “cursed” code भी आता है
  • यह code, Manim के IPython embed environment में function द्वारा outer scope के variables न देख पाने की समस्या से बचने के लिए एक अस्थायी workaround है
    • सामान्य Python script में वही code ठीक से चलता है
    • Manim के embedded interactive environment में NameError आ सकता है
    • local variables को global variable dictionary में डालकर समस्या को टाला जाता है
  • वास्तविक library code में ऐसा तरीका उचित नहीं होगा, लेकिन scene development के अस्थायी interactive session में इसका जोखिम अपेक्षाकृत कम है
  • बेहतर तरीका यह है कि function को जिन variables की ज़रूरत है, उन्हें arguments के रूप में साफ़-साफ़ दिया जाए
  • curve को समय के साथ गायब करना हो तो FadeOut इस्तेमाल किया जा सकता है
    • play का run_time, evolution time से match कर दिया जाए तो curve उसी अवधि में धीरे-धीरे transparent होता है
  • dot के पीछे trail छोड़ने वाला effect TracingTail से बनाया जाता है
    • यह किसी एक dot का पीछा करने वाली tail बना सकता है
    • time_traced को 1 सेकंड से 3 सेकंड करने पर लंबी tail दिखाई देती है
    • 10 dots में से हर एक पर tail लगाने से कई trajectories के फैलने का दृश्य और साफ़ दिखता है

3D camera और equations handling

  • Manim scene default रूप से 3D coordinates रख सकते हैं, लेकिन ज़्यादातर 3Blue1Brown scenes शैक्षिक कारणों से 2D blackboard जैसे दिखते हैं
  • Lorenz attractor के लिए 3D की ज़रूरत होती है, इसलिए 3D axes जोड़े जाते हैं
  • 3D screen में depth बनाए रखने के लिए camera का धीरे-धीरे rotate या move होना उपयोगी है
    • Grant current camera position को clipboard में save करने वाला shortcut इस्तेमाल करते हैं
    • frame.animate.reorient(...) के रूप में camera frame को किसी निश्चित position तक animate किया जाता है
  • equations को LaTeX objects के रूप में scene में add किया जा सकता है
    • MathPix का उपयोग करके screen पर मौजूद equation को OCR से पढ़कर LaTeX या SVG में बदला जा सकता है
    • 3D scene में equation को screen पर fixed रखने के लिए fix_in_frame इस्तेमाल किया जाता है
  • LaTeX equation के specific variables को रंग दिया जा सकता है
    • उदाहरण में x, y, z को अलग-अलग colors दिए गए हैं
    • text को mathematical components में बाँटकर highlight या transform करने की सुविधा, mathematical explanation में उपयोगी है
  • Manim में string matching पर आधारित खास transform भी हैं
    • A^2, B^2 जैसे terms अगली line में उसी string position तक स्वाभाविक रूप से move हो सकते हैं
    • string-based matching से anagram animation की तरह अक्षरों को corresponding position पर भेजने वाले effects भी बनाए जा सकते हैं
  • flash around, indicate जैसे animations से equation के किसी खास character या term को highlight किया जा सकता है

rendering और वास्तविक production workflow

  • जब scene पसंद आ जाए, तो Manim command से Python file और scene name specify करके render किया जाता है
  • pre-run वह चरण है जिसमें पूरी animation को असल उपयोग से पहले एक बार जाँच लिया जाता है
    • कुल length का अनुमान लगाया जाता है
    • यह बीच में rendering रुकने के बजाय पहले से errors पकड़ने में मदद करता है
  • W file में लिखने का option है, और Finder से जुड़े options macOS Finder में result file खोलने के लिए इस्तेमाल होते हैं
  • अंतिम परिणाम MP4 file के रूप में render होता है
    • Grant आमतौर पर 4K में render करते हैं, इसलिए इसमें ज़्यादा समय लग सकता है
    • render हुई file को बाद में editing tool में डालकर edit किया जाता है
  • पहले Manim का उपयोग ज़्यादातर command line से scene render करके MP4 देखकर दोहराने वाले तरीके में होता था
  • बाद में OpenGL implementation की ओर बदलाव के समय के आसपास interactive shell आधारित workflow आया, जिससे code highlight करके तुरंत result देखने वाला तरीका बना
  • Grant का specific workflow, Sublime Text scripts और Terminus extension पर निर्भर है
    • दूसरे text editors में भी इसी तरह का behavior imitate किया जा सकता है
    • Visual Studio family के environment में भी इसी तरह का flow बनाया जा सकता है
  • features खोजने के लिए example scenes, library के animation folder, और पुराने वीडियो code वाले 3b1b/videos GitHub repository का उपयोग किया जा सकता है
  • Grant, Copilot की तुलना में ज़्यादा simple autocomplete को पसंद करते हैं
    • Manim में अक्सर उन्हें पहले से पता होता है कि वे कौन-सा behavior चाहते हैं
    • request को English की बजाय code में व्यक्त करना उन्हें अधिक natural लगता है

1 टिप्पणियां

 
GN⁺ 2024-10-13
Hacker News की राय
  • 3B1B वाकई कमाल का काम कर रहा है
    मुझे व्यक्तिगत रूप से उसके YouTube वीडियो से बहुत मदद मिली है, और काश हाई स्कूल या इंजीनियरिंग कॉलेज में गणित ऐसे पढ़ाया जाता

    • मुझे भी कुछ ऐसा ही लगता है। बस, कई लोगों के लिए गणित की असली सराहना शायद थोड़ी उम्र बढ़ने के बाद ही आती है, और तब वे ऐसे चैनलों की ओर खिंचते हैं
  • https://sinerider.com/ भी देखने लायक है
    यह Grant Sanderson के 3B1B काम में कभी-कभी मदद करने वाले एक दोस्त द्वारा बनाया गया गेम है; LineRider की तरह ट्रैक बनाते हैं, लेकिन सूत्रों से — एक शानदार गणित-शिक्षा गेम
    3B1B और SineRider, दोनों ने function composition की सहज समझ बनाने में सबसे बड़ा असर डाला

  • रियल-टाइम में rendering engine का bug पकड़ना और उसका workaround भी निकाल लेना वाला हिस्सा प्रभावशाली था
    https://youtu.be/rbu7Zu5X1zI?feature=shared&t=693

    • देखने में यह ज़्यादा ऐसा लगा कि उसे backend में चल रही नई rendering logic की सीमाएँ पहले से पता थीं, और एक आसान high-level workaround भी मालूम था
      फिर भी काम प्रभावशाली है
    • बड़ी कंपनियों में इस तरह के आग लगाने वाले-और-बुझाने वाले इंजीनियर अक्सर चमकते हैं, क्योंकि वे अपने ही बनाए bug को बहुत दिखने वाली जगह पर ठीक करते हैं
    • उसे उस bug के बारे में पता था, लेकिन software development उसका मुख्य काम नहीं है; उसका असली काम वीडियो बनाना है
      live में उसकी जगह और कारण पहचान कर workaround सोच लेना दिखाता है कि वह अपने tools को बेहतर बनाने में समय लगाता है, और यह कभी-कभार नहीं बल्कि सक्रिय रूप से करता है
      यह अब भी काफ़ी शानदार है
  • मैं सोच रहा था कि नीचे दाईं ओर वाला Python interactive REPL कैसे काम कर रहा था
    संपादन: लगता है यह पूरी तरह custom workflow है: https://github.com/3b1b/videos?tab=readme-ov-file#workflow

    • वह YouTube पर पूरी तरह commercialized न हो चुके कुछ बेहतरीन creators में से एक लगता है। Mark Rober याद आता है
  • कई साल तक सिर्फ़ उसकी आवाज़ सुनकर और चेहरा न देखकर, जब चेहरा देखा तो ऐसा लगा जैसे अचानक uncanny valley के बीचोंबीच आ गया हूँ, काफ़ी मज़ेदार था

    • जिन creators को मैं देखता हूँ उनमें से काफ़ी लोग आजकल अपना चेहरा दिखाने लगे हैं। तुरंत दिमाग में आने वाला बड़ा उदाहरण Real Engineering का host है
      हाल के कुछ वीडियो में वह host, interviewer और narrator जैसी भूमिका निभा रहा था
      veratasium की तरह जब creator कुछ वीडियो अपने ऊपर ले लेता है, वह भी थोड़ा अजीब लगता है
      अगर सच में बड़ा reveal हो तो वह AvE होगा
    • उसका graduation speech देखो, शायद और भी चौंकोगे। उदाहरण: https://youtu.be/z7GVHB2wiyg
    • उसने 2020 में lockdown के दौरान लोगों को मानवीय जुड़ाव बनाए रखने में मदद करने के लिए अपना चेहरा दिखाना शुरू किया था
      उस समय वीडियो टिप्पणियों का बड़ा हिस्सा चैनल के नाम और icon के बारे में था, और सच में उसकी एक आँख वैसी ही दिखती है
    • वह पहले Matt Parker और Brady Haran(Numberphile) के वीडियो में भी कई बार आ चुका है, इसलिए यह हैरानी की बात है कि तुमने उसे नहीं देखा
      फिर भी, ऐसे niche चैनलों के भीतर भी पसंद काफ़ी बँटी हुई लगती है
    • खासकर narration वाली आवाज़ की audio quality, casually filmed व्यक्ति की आवाज़ से बेहतर होती है, इसलिए वह छोटा-सा अंतर भी काफ़ी अजीब लग सकता है
  • उसकी आवाज़ सच में बहुत अच्छी है। शांत और सुकून देने वाली, इसलिए घर का काम करते हुए भी उसे बैकग्राउंड में चलाकर कुछ सीखा जा सकता है
    ऐसे creators सराहना के हकदार हैं

    • मुझे लगता है ऐसी आवाज़ सफलता पर बड़ा असर डालती होगी, चाहे YouTube हो या podcast
    • यह व्यक्ति जन्मजात शिक्षक है। उसे सिर्फ़ content creator कहना उसकी सामाजिक उपयोगिता को पूरा व्यक्त नहीं करता
    • मेरी पसंद के हिसाब से उसकी आवाज़ थोड़ी ज़्यादा nasal है। somehow उससे उसमें मौजूद rigor थोड़ा कम महसूस होता है
  • उसका नया hologram वीडियो उन सबसे बेहतरीन YouTube वीडियो में से है जो मैंने कभी देखे हैं

  • इस tool से bridging algorithm[1] पर एक व्याख्यात्मक वीडियो बनता तो कमाल होता
    2016 से Pol.is जैसे tools का इस्तेमाल करने वाली participatory democracy प्रक्रियाओं में इस algorithm के उपयोग का मैं प्रशंसक रहा हूँ, और उसकी बुनियादी गणित की समझ बढ़ाने में योगदान देना चाहता था
    अगर Summer of Math Exposition[2] के समय मुझे Manim के बारे में पता होता, तो मैं ज़रूर इसमें कूद पड़ता
    [1]: https://bridging.systems/
    [2]: https://some.3b1b.co/

    • मुझे पता ही नहीं था कि ऐसा कुछ है। लिंक के लिए धन्यवाद, मैं अभी paper पढ़ रहा हूँ और अगर तुम व्याख्यात्मक वीडियो बनाओ तो मैं ज़रूर देखूँगा
      मेरी website प्रोफ़ाइल में है, तो अगर कभी बनाओ तो social media पर लिंक भेज देना अच्छा होगा
    • मैं जानना चाहता हूँ कि इसमें वास्तव में कौन-सी गणित शामिल है। [1] लिंक पर गया, लेकिन लगभग कोई गणितीय सामग्री नहीं मिली
    • अगर बनाओगे तो मैं देखूँगा। मैं pol.is का fan हूँ
  • Manim लिंक: https://github.com/3b1b/manim

  • उसके हर वीडियो में लगने वाला production effort चौंकाने वाला है। वह YouTube play button का हकदार है

    • YouTube की निराशाजनक बात भी यही है। high-quality वीडियो बनाने में बेहिसाब मेहनत लगती है, और यह किसी अच्छे से लिखे ब्लॉग पोस्ट की तुलना में कई गुना ज़्यादा होती है
      ब्लॉग की तरह ही, अगर किस्मत साथ न दे तो उस मेहनत का बड़ा हिस्सा बर्बाद हो जाता है। लेकिन ब्लॉग को कम-से-कम कई बार सामने आने का मौका मिलता है। वह HN के शीर्ष पर पहुँच सकता है, X या कहीं और फैल सकता है। एक ही platform के भीतर भी आम तौर पर कई मौके होते हैं
      इसके उलट, YouTube पर algorithm लगभग एक बार ही फ़ैसला करता है। अगर आपके पास पहले से बहुत बड़े subscriber base नहीं है, तो वह वीडियो को लगभग रैंडम तरीके से कुछ लोगों को दिखाता है, और अगर उन्होंने प्रतिक्रिया नहीं दी, तो वहीं बात खत्म