1 पॉइंट द्वारा GN⁺ 2024-10-31 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 3D गेम में शैडो वास्तविक दुनिया की तरह अपने-आप नहीं बनते, बल्कि सीमित performance के भीतर विश्वसनीय दिखने के लिए डिज़ाइन किए गए visual effect होते हैं
  • शुरुआती 3D गेम शैडो के लिए 2D इमेज, पैरों के नीचे blob shadow, runtime शैडो texture, और plane-projected geometry जैसी सरल लेकिन तेज तकनीकों का उपयोग करते थे
  • जैसे-जैसे scene अधिक जटिल हुए, projected texture, shadow map, और stencil shadow का उपयोग हुआ, लेकिन इनके साथ resolution artifacts, गलत surface projection, और अनुमान लगाना मुश्किल execution cost जैसी सीमाएँ भी आईं
  • static level lighting में vertex color और lightmap से बड़े शैडो store किए जाते थे, और आधुनिक गेम भी Cascaded Shadow Maps, light probes, capsule shadows जैसी पारंपरिक तकनीकों के रूपांतरों का उपयोग करते रहते हैं
  • ray tracing शैडो अधिक प्राकृतिक दिशा हैं, लेकिन Alan Wake 2 जैसे जटिल scenes में sampling और denoiser पर निर्भरता के कारण अब भी trade-off ही स्क्रीन के visual character को तय करते हैं

गेम के शैडो वास्तविक दुनिया से अलग बनाए जाते हैं

  • वास्तविक दुनिया में शैडो रोशनी के रुकने का परिणाम होते हैं, और यदि एक ही light source बहुत दूर हो तो कई शैडो एक-दूसरे पर पड़ने पर भी और गहरे नहीं होते
  • 3D वीडियोगेम में शैडो स्वाभाविक रूप से मौजूद नहीं होते, इसलिए developers को performance और visual believability के बीच सीधे डिज़ाइन करना पड़ता है
  • Metal Gear Solid के blob shadow की तरह, गेम में ऐसा दिखाना भी संभव है कि शैडो एक-दूसरे पर चढ़ने पर और गहरे हो जाएँ

स्क्रीन पर सीधे बनाए जाने वाले 2D शैडो

  • सबसे सरल तरीका यह है कि character को draw करने से पहले स्क्रीन पर 2D shadow image बना दी जाए
  • Winter Gold और MDK ने scaling के बिना animated 2D shadow images का उपयोग किया
  • जिन scenes में character बाकी सब चीज़ों से आगे होता है, वहाँ यह सरल तरीका भी अच्छी तरह काम करता है

Blob shadow: पैरों के नीचे का गहरा गोला

  • 3D में सबसे सरल तरीका character के नीचे एक गहरा डिस्क draw करना है
  • Super Mario 64 में character के लिए blob shadow का उपयोग किया गया, और Nintendo 64 के hardware decal feature से शैडो को प्रभावी रूप से clip करके सिर्फ floor plane पर दिखाया गया
  • blob shadow को परिस्थिति के हिसाब से animate भी किया जा सकता है
    • Super Mario 64 में jump करते समय शैडो छोटा हो जाता है
    • Metal Gear Solid में शैडो का shape बदलता है
  • शैडो के cliff से बाहर निकल जाने की समस्या को blob quad को decal की तरह project करके भी संभाला जा सकता है

Render texture आधारित planar shadow

  • यदि blob सिर्फ एक साधारण texture है, तो runtime में character को ऊपर से render करके उसे shadow texture के रूप में उपयोग किया जा सकता है
  • Crash Bandicoot: Warped ने runtime shadow texture से अच्छे नतीजे दिए
  • Soldier of Fortune ने भी यही तरीका अपनाया, लेकिन कम shadow resolution के कारण नतीजे उतने अच्छे नहीं रहे
  • यह तरीका light के viewpoint से depth map बनाने वाले shadow mapping से अलग है
    • यहाँ black/white image को texture की तरह उपयोग किया जाता है
    • यह 1-bit shadow map के काफ़ी करीब की अवधारणा है

Geometry से बनाए जाने वाले planar shadow

  • सहज तरीका यह है कि शैडो डालने वाली object को light की उलटी दिशा में किसी plane पर चपटा project किया जाए, और उसी object को काले रंग में एक बार फिर render किया जाए
  • ऐसे शैडो आमतौर पर opaque रखे जाते हैं ताकि object के हिस्सों के आपस में overlap होकर draw होने की समस्या छिप जाए
  • सपाट floor पर यह अच्छा बैठता है, लेकिन जटिल terrain पर इसकी accuracy घट जाती है
  • F-19 Stealth Fighter रनवे पर विमान का शैडो बनाता है
  • GLQuake आधारित गेमों में भी planar shadow देखे जा सकते हैं
    • Kingpin: Life of Crime ने काले planar shadow का ठीक-ठाक उपयोग किया
    • Half-Life alpha 0.52 में transparency की समस्या दिखाई देती है

Terrain पर planar shadow

  • David Braben का Virus spacecraft को terrain पर ऊपर से देखे गए शैडो डालने देता है
  • Interstate ’76 ज़मीन की ढलान के हिसाब से planar shadow को tilt और stretch करता है
    • कभी-कभी शैडो ज़मीन को भेदते हुए दिखाई देता है
    • कुल मिलाकर यह काफ़ी विश्वसनीय लगता है
    • software rendering स्क्रीन पर थोड़ा transparent शैडो दिखता है, जबकि hardware-accelerated स्क्रीन पर पूरी तरह काला शैडो दिखता है
  • Interstate ’76 ने bridge जैसी बड़ी objects के शैडो project करने की भी कोशिश की, लेकिन नतीजे पूरी तरह सफल नहीं रहे

Projected texture drop shadow

  • projected texture तरीका ऊपर बनाए गए shadow texture को plane पर नहीं, बल्कि विभिन्न प्रकार की surfaces पर project करता है
  • अवधारणा के स्तर पर यह Bat-Signal को आसमान से नीचे चमकाने जैसा है
  • Toy Story 3: The Video Game इस तरीके का एक उदाहरण है, और जब शैडो दूसरे शैडो पर चढ़ते हैं तो वे और गहरे हो जाते हैं
  • यह बहुत sharp शैडो बना सकता है, लेकिन surface conditions के प्रति संवेदनशील है
    • vertical surfaces पर यह अजीब लग सकता है
    • कुछ मामलों में यह ceiling पर भी दिखाई दे सकता है
    • Sonic Adventure 2: Battle के gameplay वीडियो में ऐसे उदाहरण देखे जा सकते हैं
  • यह objects के आर-पार भी दिख सकता है, इसलिए विशेष मामलों में अधिक उपयुक्त है
  • पेड़ों के शैडो के लिए भी यह अच्छा काम कर सकता है

Shadow map: व्यवहारिक रूप से मानक तरीका

  • shadow map में गेम light के viewpoint से एक depth image बनाता है, और world को render करते समय उसी image को पढ़कर तय करता है कि शैडो कहाँ पड़ना चाहिए
  • सामान्य rendering code को दोबारा उपयोग किया जा सकता है, इसलिए इसे लागू करना अपेक्षाकृत आसान है
  • सीमित resolution से “Peter Panning” और “shadow acne” जैसे प्रसिद्ध artifacts पैदा होते हैं
  • camera के पास की surfaces को shadow map का अधिक हिस्सा देने के लिए कई तकनीकें प्रस्तावित की गईं
  • अच्छे दिखने वाले नतीजों के लिए आमतौर पर tuning करनी पड़ती है

Stencil shadow: तेज़ किनारे, लेकिन भारी लागत

  • stencil shadow किसी भी surface पर sharp शैडो draw कर सकता है, और ऐसा film-noir look बनाता है जिसे shadow map से दोहराना मुश्किल है
  • इसका प्रतिनिधि उदाहरण Doom 3 है, जो अपने अंधेरे कमरों के लिए प्रसिद्ध है
  • इस तरीके में अदृश्य geometry यानी shadow volume से world को रोशनी वाले और शैडो वाले हिस्सों में बाँटा जाता है
  • गेम सिर्फ उन pixels पर lighting लागू करता है जो shadow volume के भीतर नहीं होते
  • इसे चलाने के लिए world को कई बार draw करना पड़ता है
    • पहले पूरे world को ambient lighting के साथ draw किया जाता है
    • फिर हर light के लिए shadow volume draw किया जाता है, और उसके बाद world को फिर से draw करके सिर्फ shadow के बाहर वाले pixels को प्रभावित किया जाता है
    • front face और back face के लिए अलग-अलग stencil operation सेट किए जाते हैं
  • संभवतः सबसे शुरुआती commercial उदाहरणों में Severance: Blade of Darkness शामिल है, जिसने 2001 में अच्छे शैडो दिखाए
  • आज यह कम उपयोग होने का एक कारण execution cost का अनुमान लगाना कठिन होना है
    • cost इस बात पर बहुत निर्भर करती है कि स्क्रीन पर shadow volume कितना बड़ा दिखता है
    • optimized algorithms पर patent भी थे
    • Doom 3 के बारे में ऐसे संबंधित links हैं जिनसे लगता है कि Id Software किसी तरह के समझौते पर पहुँचा था

Soft stencil shadow

  • stencil shadow का sharp होना ज़रूरी नहीं है
  • Silent Hill 2 ने PlayStation 2 पर stencil shadow draw करने के बाद blur लगाकर soft shadow बनाए
  • console पर इसका परिणाम लगभग पूरी तरह परफ़ेक्ट दिखता है

Simplified character shadow

  • स्क्रीन पर दिखने वाले model से सरल model को भी शैडो डालने के लिए इस्तेमाल किया जा सकता है
  • Nintendo 64 के Zelda में सिर्फ Link के पैर शैडो डालते हैं, बाकी हिस्से नहीं
  • Hyperblade ने futuristic hockey arena में खिलाड़ियों के लिए simple animated planar shadow का अनोखा उपयोग किया

Static level lighting में शैडो

  • vertex color और lightmap गेम level की lighting store करने की तकनीकें हैं, और कई गेमों में बड़े पैमाने के शैडो दिखाने का यही एकमात्र तरीका था
  • Vertex color

    • Ico दिखाता है कि पुरानी per-vertex lighting से भी परिष्कृत शैडो बनाए जा सकते हैं
    • low-poly map में sharp शैडो भी vertex color से व्यक्त किए जा सकते हैं
    • Tony Hawk Pro Skater 2 ने इस सरल तरीके से भी प्रभावशाली नतीजे दिए
  • Lightmap

    • lightmap level lighting और शैडो store करने का क्लासिक तरीका है
    • हर vertex में color store करने के बजाय, lighting के लिए दूसरा texture set उपयोग किया जाता है
    • अलग-अलग areas को अलग resolution दिया जा सकता है, इसलिए जहाँ ज़रूरत हो वहाँ शैडो अधिक सटीक बनाए जा सकते हैं
    • यह vertex color की तुलना में अधिक memory उपयोग करता है
    • Quake को lightmap लोकप्रिय बनाने वाले गेम के रूप में गिना जाता है

आधुनिक गेमों में लगातार उपयोग होती पारंपरिक तकनीकें

  • आधुनिक गेम भी परिस्थिति के हिसाब से पारंपरिक shadow techniques का उपयोग करते रहते हैं
  • shadow mapping का एक रूप Cascaded Shadow Maps बड़े क्षेत्रों को तेज़ी से cover करने के लिए उपयोग होता है
  • lightmap को light probes जैसी अन्य तकनीकों के साथ उपयोग किया जा सकता है
    • Call of Duty भी lightmap का उपयोग करता है
    • संबंधित उदाहरण Hemispherical Lighting Insights slides में हैं
  • simplified character model का विचार भी जारी है
    • The Last of Us खींचे हुए spheres से soft character shadow बनाता है
    • Unreal Engine characters के लिए capsule shadows support करता है
  • projected shadow भी अब तक उपयोग में हैं
    • Hot Wheels Track Attack shadow mesh को texture में render करके उसे race track पर project करता है
    • इसे developer blog के विवरण और gameplay वीडियो में देखा जा सकता है

Ray tracing शैडो भी परफ़ेक्ट नहीं हैं

  • जो गेम physical accuracy वाली lighting simulate करना चाहते हैं, उनमें जहाँ रोशनी नहीं पहुँचती वहाँ शैडो स्वाभाविक रूप से बनते हैं
  • shadow map के विपरीत, छोटे geometry details भी सटीक शैडो डाल सकते हैं
  • बड़े lamp स्वाभाविक रूप से soft shadow बनाते हैं, और indirect light अंधेरे कोनों को उजला कर सकती है
  • इस लक्ष्य को वास्तविक बनाने के लिए ray tracing algorithms और hardware पर बहुत समय और लागत लगाई गई है
  • लेकिन आधुनिक गेम scenes इतने जटिल हैं कि simulation को approximate करना पड़ता है
    • Alan Wake 2 के ray-traced shadows में हर pixel को यादृच्छिक रूप से चुनी गई एक light से ही रोशनी मिलती है
    • परिणाम को denoiser में भेजा जाता है, जो noisy image को बुद्धिमानी से smooth करता है
  • ray tracing शैडो भी परफ़ेक्ट नहीं हैं, और चुने गए trade-off के अनुसार उनका अपना अलग look बनता है

बिना शैडो वाला विकल्प

  • कुछ गेम शैडो की बजाय अन्य तत्वों को अधिक प्राथमिकता दे सकते हैं
  • शैडो लागू न करना भी एक स्पष्ट डिज़ाइन विकल्प हो सकता है

1 टिप्पणियां

 
GN⁺ 2024-10-31
Hacker News की राय
  • सबसे अच्छी बात यह है कि बाहर परछाइयाँ नीली होती हैं
    यह कोई optical illusion या artistic mood नहीं है, बल्कि साफ़ नीले आसमान वाले दिन परछाइयाँ आसमान से परावर्तित रोशनी से प्रकाशित होती हैं, इसलिए वे नीली दिखती हैं
    कार के नीचे देखें तो जहाँ आसमान दिखता है वहाँ साफ़ नीली परछाइयाँ दिखेंगी, और जहाँ कार का बॉडी आसमानी रोशनी तक रोक देता है वहाँ वे असली काले के ज़्यादा करीब हो जाती हैं
    इस साफ़ नीली धूप वाली परछाईं में मुलायम और काली AO sky shadow मिला दें, तो कम लागत में काफ़ी सुंदर परछाइयाँ बनाई जा सकती हैं
    • यह सही बात है, और इतना सूक्ष्म है कि बहुत से लोग नोटिस भी नहीं करते
      कोई अच्छा graphics rendering engine ऐसा करता है। परछाइयों में आसमानी रंग की हल्की tint होनी चाहिए
      इसी वजह से पुरानी No Man's Sky screenshots में कुछ मुझे खटकती थीं। शायद मैंने ऐसे scenes देखे थे जहाँ आसमान हरा था लेकिन परछाइयाँ बैंगनी थीं
    • चित्रकारों को अक्सर बाहर की परछाइयों को थोड़ा बैंगनी रंगने की शिक्षा दी जाती है, ताकि धूप के पीलेपन के साथ contrast अधिकतम हो
    • मैंने अभी Monet की सर्दियों की पेंटिंग में भी यही देखा: https://news.artnet.com/art-world/monet-the-magpie-three-fac...
  • आजकल के Nintendo platform games में इस्तेमाल होने वाला एक variation अच्छा लगता है। वे आजकल अधिकांश games की तरह shadow maps इस्तेमाल करते हैं, लेकिन player character की परछाईं को इस तरह adjust किया जाता है कि वह असली light source की position से बेपरवाह हमेशा ठीक नीचे गिरे
    इससे पुराने blob shadow की तरह jump के बाद कहाँ land करेंगे, यह समझने में मदद मिलती है, और साथ ही proper shadow की visual quality भी बनी रहती है
    अगर मुझे सही याद है, तो अंधेरे environments में वे परछाईं को ज़मीन से ज़्यादा चमकीला भी बना देते हैं ताकि वह दिखाई देती रहे
  • मुझे लगता था कि Valorant हमेशा कुछ फीका-सा इसलिए दिखता है क्योंकि players परछाईं नहीं डालते। कुछ दिन पहले पता चला कि cheating कम करने के लिए server दूसरे player model की position client को तब तक भेजता ही नहीं जब तक उसे वह visible न लगे
    तब player model के load और unload होने पर परछाइयाँ आती-जाती रहेंगी, इसलिए जब तक player का शरीर न दिखे, परछाईं भी नहीं दिख सकती
    • शायद आपने इस बारे में मेरी लिखी चीज़ देखी होगी। मुझे नहीं पता कि Valorant ने anti-cheat system की वजह से player shadows बंद कीं या नहीं, लेकिन anti-cheat इससे निश्चित ही आसान हो जाता है
      Valorant को low-end hardware पर भी बहुत high frame rates देने के लिए जानबूझकर rendering को बेहद simple रखा गया था। न केवल dynamic shadows नहीं हैं, बल्कि dynamic lighting भी बिल्कुल नहीं है, और कहीं भी alpha transparency नहीं है
      आम तौर पर पारदर्शी बनाए जाने वाले smoke effects जैसी चीज़ों को भी पूरी तरह opaque style में रखा गया, क्योंकि वह तेज़ है। cheating से अलग भी, performance की वजह से dynamic shadows शायद वैसे भी हटा दी जातीं
    • क्या server shadow visibility भी चेक करे तो इसे ठीक नहीं किया जा सकता? Valorant के बारे में मैं ज़्यादा नहीं जानता, लेकिन पीठ के पीछे light source रखकर न छिपना वास्तव में एक strategy element लग सकता है
  • अच्छा लेख है, और इसमें nostalgic game references बहुत हैं। मुझे अब भी याद है कि बहुत पहले N64 Zelda की परछाइयाँ देखकर मैं हैरान रह गया था
    Ray tracing techniques अपनाए जाने के साथ area lights और soft shadows standard बन जाएँगे, ऐसा लगता है। अगर hardware साथ देता हो, तो Quake 2 RTX देखकर अंदाज़ा लगाया जा सकता है कि भविष्य कैसा दिखेगा
    आखिर में, मैंने इस blog को अपनी graphics materials list में जोड़ लिया: https://github.com/aaron9000/c-game-resources
    • अगर smoke and mirrors जैसे tricks से काफ़ी अच्छी परछाइयाँ बनाई जा सकती हैं, तो performance reasons से cheat techniques का इस्तेमाल जारी रखना ही बेहतर है
  • “Stencil shadows के साथ ship हुआ सबसे शुरुआती game शायद 2001 का Severance: Blade of Darkness है, और उसकी परछाइयाँ शानदार हैं” इस हिस्से के बारे में, PowerVR PCX1 के लिए Revolte ने 1996 में stencil shadows इस्तेमाल किए थे
    https://www.youtube.com/watch?v=7BvtML5dIuI
    PowerVR PCX1 में shadow volumes के लिए hardware support था, और यह standard stencil shadows से अधिक efficient तरीके से implement किया गया था। scene को कई बार draw करने के बजाय, hardware मूलतः on-chip depth/stencil buffer में depth-only pre-pass चलाकर visible pixels तय करता था, फिर shadow volume test करके देखता था कि कौन से pixels shadow के भीतर हैं, और उसके बाद texture sampling तथा shading करता था
    रोशनी की brightness shadow volume के परिणाम के अनुसार adjust होती थी, और क्योंकि केवल visible pixels की shading होती थी, overdraw अनावश्यक texture fetch bandwidth बर्बाद नहीं करता था
    PCX1 के successor-based Dreamcast में भी shadow volumes इस्तेमाल करने वाले बहुत से games थे। Dreamcast implementation और भी flexible था, इसलिए volumes केवल lighting ही नहीं बल्कि कौन-सा texture, UV mapping, यहाँ तक कि transparent polygons के blending equation तक बदल सकते थे
    मैंने DC पर soft shadows भी बनाई थीं (https://imgur.com/a/DyaqzZD का आख़िरी हिस्सा), लेकिन फिर ज़्यादा standard stencil method पर लौट आया, जिसमें shadows को कई बार redraw करना पड़ता है, इसलिए fillrate पर काफ़ी बोझ पड़ता है
  • video game lighting technology की current state of the art देखनी हो तो Epic का हालिया UE 5.5 MegaLights demo देखें: https://youtu.be/p9XgF3ijVRQ?si=GcU0kP33iKQh_5Ge
  • अगर light sources एक से ज़्यादा हों, तो shadows के overlap होने पर वे सचमुच और गहरी हो जाती हैं
    अगर दो lamps तीन लोगों पर रोशनी डाल रहे हों, तो छह shadows बनेंगी। जहाँ ये छहों shadows overlap करेंगी, वह “काला” हो जाएगा या केवल ambient light पाएगा
    जहाँ shadows कम overlap करेंगी, वहाँ illumination gradient बनेगा
    • यह सही नहीं है। हर light source से एक shadow होगी, यानी दो shadows के intersect करते ही काला या सिर्फ ambient light बचेगी
      अगर आप light source A की shadow के भीतर हैं और light source B की shadow के भीतर भी, तो रोशनी कहाँ से मिलेगी? सिर्फ ambient से, और वह भी न हो तो काला
    • यह अच्छी observation है, लेकिन लेख ग़लत नहीं है। काफ़ी दिलचस्प लगा
      इसमें यह शर्त लगी हुई है कि “केवल एक light source है और वह काफ़ी दूर है, इसलिए shadow बस रोशनी की अनुपस्थिति है”
  • “कुछ शुरुआती flight simulators runway पर होने पर ऊपर से दिखने वाली चपटी shadow draw करते हैं। खोजते समय मुझे उम्मीद थी कि उड़ान के दौरान भी visible shadow के examples मिलेंगे, लेकिन नहीं मिले” इस हिस्से के बारे में, F-29 RETAL या F29 Retaliator, F29 ऐसा ही एक example है
    वह shadow इस game में जबरदस्त speed का एहसास देने वाला एक और छोटा-सा तत्व थी
    https://imgur.com/a/hOgxr7a
    https://www.mobygames.com/game/6233/f29-retaliator/
  • मेरे लिए सबसे प्रभावशाली shadow moment GTA IV खेलते समय था। मेरे पास काफ़ी ताकतवर gaming PC था, और player vehicle की headlights से बनने वाली real-time shadows कुल मिलाकर शानदार थीं
    जो पल अब भी याद है, वह रात में एक पिछली गली में कार चोरी करते समय का है। ठीक उसी क्षण जब player character कार में घुसा, पुलिस मोड़ से निकलकर आ गई, उसने कार चोरी होते “देखी” और बंदूक निकाली, और उसी समय headlights जल उठीं, जिससे चलते हुए पुलिसकर्मी की विशाल shadow पास की दीवार पर पड़ी
  • लेख अच्छा है और पढ़ने में मज़ेदार
    MGS में shadow overlap पूरी तरह ग़लत नहीं है। इसकी वजह ambient light, scattering, और दूसरी global illumination घटनाएँ हैं
    “Mirror’s Edge(2008, PC) मूलतः Lightmaps: The Game है” यह बात मज़ेदार भी है और सही भी। वह game तब भी प्रभावशाली था और आज भी है
    • अगर आप चाहते हैं कि game बहुत समय बाद भी अच्छा दिखे, तो baked global illumination जैसा कुछ नहीं। यह पहला game था जिसमें मैंने दोपहर की असली नीली shadows देखी थीं। हालाँकि वे level geometry से बनी shadows थीं
      मेरे हिसाब से उस समय उसे अनुचित रूप से कम आंका गया। शायद इसलिए कि वह अपने competitors से छोटा था