Browser में open world बनाना, भाग 4: fancy terrain से पहले streaming
लेखक Oleg Sidorkin, Cinevva के CTO और सह-संस्थापक
यहां नए हैं? series guide का इस्तेमाल करें। यह बताती है कि spike क्या होता है और सभी भागों को जोड़ती है।
streaming वही जगह है जहां "दिखने में अच्छे" projects आमतौर पर बिखर जाते हैं।
एक still frame में आप बहुत कुछ छिपा सकते हैं। लेकिन chunk boundary पार करते समय होने वाली 40 ms की hitch को आप नहीं छिपा सकते।
हमने जानबूझकर advanced terrain representation बनाने से पहले streaming को टेस्ट किया। इससे हमें load और unload behavior पर साफ signal मिला।
Spike 6 ने साधारण chunk content के साथ neighborhood churn को verify किया।
Spike 6 को नए tab में खोलें ↗ · View source
फिर हम Spike 11 में असली terrain path की तरफ बढ़े। worker side decode के साथ height chunk streaming और 17 से 33 से 65 sample grids तक progressive refinement।
Spike 11 को नए tab में खोलें ↗ · View source
यह क्रम हमारी उम्मीद से ज़्यादा मायने रखता था। अगर हमने सीधे compressed height chunks से शुरुआत की होती, तो हर hitch अस्पष्ट होती। decode का issue, texture upload का issue, या geometry update का issue। Spike 6 ने Spike 11 के complexity जोड़ने से पहले एक uncertainty layer हटा दी।
इस chapter से एक व्यावहारिक सबक आगे के spikes में काम आया। Upload stalls को सीधे मापना चाहिए, average FPS से अंदाज़ा नहीं लगाना चाहिए। average FPS frame spikes को छिपा देता है, और frame spikes ही वो चीज़ हैं जो users असल में महसूस करते हैं।
भाग 5 में हम visual cost chapter में जाएंगे, जहां vegetation, terrain shaders, और cascaded shadows एक ही frame budget के लिए मुकाबला करते हैं।
इस chapter में संदर्भित technology
Chunk-based streaming. दुनिया को independent chunks की एक grid में बांटा जाता है (आमतौर पर 64x64 मीटर)। जैसे-जैसे player आगे बढ़ता है, पीछे के किनारे के chunks unload होते हैं और सामने के किनारे के chunks stream in होते हैं। Skyrim का cell system इसी तरह काम करता है: player के चारों ओर 5x5 cells की grid load रहती है, जो उसके चलने पर swap होती रहती है। browser version इस समीकरण में network latency जोड़ता है, जिससे player velocity के आधार पर predictive pre-fetching ज़रूरी हो जाती है। हमारी streaming architecture guide देखें।
Progressive heightmap refinement. terrain पहले low resolution पर भेजें, फिर refine करें। grid sizes मनमाने नहीं हैं: हर level एक
Delta encoding और compression. heightmap data अच्छे से compress होता है क्योंकि आसपास के cells की values मिलती-जुलती होती हैं। delta encoding हर cell और उसकी predicted value (neighbors का average) के बीच का अंतर store करता है, जिससे values zero के पास इकट्ठा हो जाती हैं। zlib या brotli के साथ मिलकर, एक 65x65 chunk 8.4 KB raw से 1-2 KB compressed तक गिर जाता है। दूर के chunks के लिए कम precision पर (16-bit के बजाय 8-bit): 0.5-1 KB। terrain data compression देखें।
Predictive pre-fetching. player के पहुंचने से पहले chunks load करना। lead distance को उतना cover करना होता है जितनी दूरी player एक chunk load होने के दौरान तय करता है,
भाग 4, कुल 12 में से।
पिछला: भाग 3 - वे साधारण spikes जिन्होंने हमें बचाया
अगला: भाग 5 - खूबसूरत चीज़ों का budget तय करना
Series guide: /hi/blog/2026-02-25-open-world-browser-series-guide