2008-09-30 15 views
128

Procedural generation हाल ही में स्पॉटलाइट (स्पोर, एमएमओ, आदि द्वारा) में लाया गया है, और यह एक दिलचस्प/शक्तिशाली प्रोग्रामिंग तकनीक की तरह लगता है।प्रक्रियात्मक पीढ़ी के साथ कोई कैसे शुरू होता है?

  • आप किसी भी मध्यम आकार के परियोजनाओं है कि उत्पादन प्रक्रिया तकनीकों का उपयोग के बारे में पता है:

    मेरे सवालों इन कर रहे हैं?
  • प्रक्रियात्मक पीढ़ी के लिए भाषा की कौन सी भाषा/वर्ग सर्वोत्तम है?
  • क्या आप "गंभीर" कोड के लिए प्रक्रियात्मक पीढ़ी का उपयोग कर सकते हैं? (यानी, एक खेल नहीं)
+8

यह सवाल नो मैन्स की हाल ही में रिलीज के बाद से कुछ ध्यान दिया जा रहा प्रतीत हो रहा है पढ़ना चाहिए आकाश, दिलचस्प – Liam

उत्तर

107

आप शायद चाहिए midpoint displacement algorithm जैसे छोटे सिद्धांत और सरल उदाहरणों से शुरू करें। यदि आप ग्राफिक्स उत्पन्न करने में रुचि रखते हैं तो आपको Perlin Noise के बारे में कुछ भी सीखना चाहिए। मैंने प्रक्रियात्मक पीढ़ी पर अपने अंतिम वर्ष परियोजना के साथ शुरू करने के लिए इसका इस्तेमाल किया।

Fractals प्रक्रियात्मक पीढ़ी से बारीकी से संबंधित हैं।

Terragen और SpeedTree आपको प्रक्रियात्मक पीढ़ी की कुछ अद्भुत संभावनाएं दिखाएंगे।

प्रक्रियात्मक पीढ़ी एक ऐसी तकनीक है जिसका उपयोग किसी भी भाषा में किया जा सकता है (यह निश्चित रूप से सी जैसी प्रक्रियात्मक भाषाओं तक ही सीमित नहीं है, क्योंकि इसका उपयोग जावा जैसे ओओ भाषाओं और प्रोलॉग जैसे तर्क भाषाओं में किया जा सकता है)। किसी भी भाषा में रिकर्सन की अच्छी समझ प्रक्रियात्मक पीढ़ी के बारे में आपकी समझ को मजबूत करेगी।

'गंभीर' या गैर खेल कोड के रूप में, उत्पादन प्रक्रिया तकनीक के लिए इस्तेमाल किया गया है:

  • आदेश यातायात प्रबंधन के लिए
  • योजना के लिए रक्त के विकास अनुकरण में शहरों की विकास अनुकरण जहाजों
  • SpeedTree फिल्में और वास्तु प्रस्तुतियों
7

प्रक्रियात्मक पीढ़ी का उपयोग एक छोटे से निष्पादन योग्य में जटिल ग्राफिक्स बनाने के लिए डेमोसीन में भारी रूप से किया जाता है। राइट ने यह भी कहा कि वह बीमार बनाने के दौरान जनसांख्यिकी से प्रेरित था। यह शुरू करने के लिए आपका सबसे अच्छा स्थान हो सकता है।

http://en.wikipedia.org/wiki/Demoscene

+12

मुझे डेमोसीन सीखने के लिए एक मुश्किल जगह मिल गई। – Liam

8

मैं इस पर एक विशेषज्ञ नहीं हूँ, लेकिन मैं कोशिश करते हैं और कुछ जवाब योगदान कर सकते हैं:

  1. nethack और यह brethern है खुला स्रोत रहे हैं और स्तरों में से उत्पादन प्रक्रिया पर काफी भरोसा (नक्शे)। Link इसके डाउनलोड के लिए। यदि आप परिदृश्य/बनावट/क्लाउड पीढ़ी में अधिक रुचि रखते हैं, तो मैं आपको Gamasutra और GameDev खोजने की सलाह दूंगा जिसमें उन विषयों पर बहुत से लेख हैं।

  2. AFAIK मुझे नहीं लगता कि भाषाओं के बीच बहुत अंतर है। आपके द्वारा देखे जाने वाले अधिकांश कोड सी/सीपीपी में होंगे क्योंकि यह अभी भी गेम डेवलपर्स की आधिकारिक भाषा है, लेकिन आप जो कुछ भी चाहते हैं उसका उपयोग कर सकते हैं ...

  3. वैसे यह निर्भर करता है कि आपके पास कोई ऐसी परियोजना है जो लाभ उठा सकती है ऐसी तकनीक से। मैंने सेना के लिए सिमुलेटर में प्रयुक्त प्रक्रियात्मक पीढ़ी देखी (जिसे एक खेल माना जा सकता है, हालांकि वे बहुत बजाने योग्य नहीं हैं :))।

और एक छोटा सा नोट - मेरी परिभाषा है, तो उत्पादन प्रक्रिया कुछ भी नियम या पैटर्न और अनियमितता के बहुत सारे की एक छोटी राशि से डेटा का एक बहुत उत्पन्न कर रहा है, तो आपके परिणाम भिन्न हो सकते हैं :)

46

प्रक्रियात्मक सामग्री पीढ़ी विकि में प्रयोग किया जाता है:

http://pcg.wikidot.com/

तो क्या आप चाहते हैं पर वहाँ नहीं है, तो यह जोड़ने;)

+9

मैं यहां पूरे विकी की प्रतिलिपि नहीं बना सकता! कोई 'आवश्यक हिस्सा' नहीं है। – Martin

8

विषय के बारे में एक उत्कृष्ट पुस्तक है:

http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486

यह गैर की ओर पक्षपाती है रीयल-टाइम दृश्य प्रभाव और एनीमेशन पीढ़ी, लेकिन सिद्धांत और विचार इन क्षेत्रों के बाहर प्रयोग योग्य हैं, मुझे लगता है।

यह उल्लेख करने योग्य भी हो सकता है कि एक पेशेवर सॉफ्टवेयर पैकेज है जो साइडएफएक्स की हुडिनी नामक एक पूर्ण प्रक्रियात्मक वर्कफ़्लो लागू करता है। आप समस्याओं का आविष्कार और प्रोटोटाइप प्रक्रियात्मक समाधान के लिए इसका उपयोग कर सकते हैं, जिसे आप बाद में कोड में अनुवाद कर सकते हैं।

हालांकि यह एक महंगा पैकेज है, लेकिन इसका एक मुफ्त मूल्यांकन लाइसेंस है, जिसका उपयोग बहुत ही अच्छे शैक्षणिक और/या इंजीनियरिंग उपकरण के रूप में किया जा सकता है।

12

प्रक्रियात्मक सामग्री उत्पादन अब GPU के लिए लिखा गया है, इसलिए आपको एक शेडर भाषा जाननी होगी। इसका मतलब है जीएलएसएल या एचएलएसएल। ये क्रमशः ओपनजीएल और डायरेक्टएक्स से जुड़ी भाषाएं हैं।

जबकि मेरी निजी वरीयता गति के कारण डीएक्स 11/एचएलएसएल के लिए है, एक आसान सीखने की वक्र और Frank D Luna, ओपनजीएल अधिक प्लेटफार्मों पर समर्थित है।

यदि आप ओपनजीएल/डायरेक्टएक्स गेम इंजन को स्थापित करने के लिए (काफी) समय व्यतीत करने के बिना सीधे शेडर्स लिखने के लिए वेबगेल को देखना चाहते हैं तो आपको वेबजीएल भी देखना चाहिए।

प्रक्रियात्मक सामग्री शोर के साथ शुरू होती है।

तो आपको पर्लिन शोर (और उसके उत्तराधिकारी Simplex noise) के बारे में जानने की आवश्यकता होगी।

Shadertoy शेडर प्रोग्रामिंग के बारे में सीखने के लिए एक शानदार संदर्भ है। मैं अनुशंसा करता हूं कि आप शेडर कोडिंग को स्वयं जाने के बाद इसे प्राप्त करें, क्योंकि कोड गणितीय रूप से स्क्वैमिश के लिए नहीं है, लेकिन इस तरह प्रक्रियात्मक सामग्री की जाती है।

शेडरोई को प्रक्रियात्मक प्रतिभा, Inigo Quilez द्वारा बनाया गया था, जो पिक्सार में काम करने वाले डेमो दृश्य का एक उत्पाद है। उनके पास लाइव कोडिंग सत्रों के some youtube videos (great example) हैं और मैं इन्हें भी अनुशंसा कर सकता हूं।

+13

आपका क्या मतलब है "प्रक्रियात्मक सामग्री उत्पादन अब GPU के लिए लिखा गया है"? आप बस घास के ब्लेड जैसी चीजों के बारे में बात कर रहे हैं? उदाहरण के लिए, आप खेल के लिए नक्शे या शहरों की पीढ़ी का मतलब नहीं है, क्या आप? – Dronz

+2

हाँ, मुझे लगता है कि यहां "सभी" टिप्पणी एक अतिसंवेदनशीलता है, लेकिन परिदृश्य पीढ़ी के क्षेत्र में (जो मुझे लगता है कि सबसे आम प्रकार है), यह एक उपयोगी उत्तर है। हालांकि मैं कल्पना नहीं कर सकता कि कौन किसी वीडियो में किसी प्रकार का कोड देखना चाहता है। –

+0

कोई भी जो सीखना चाहता है कि जटिल कोड कैसे लिखना है, जैसे कि शेडर्स, या सीखें कि उनके डिजाइन में जटिल पैटर्न का उपयोग कैसे करें। और वह सिर्फ सतह खरोंच कर रहा है। –

3

सबसे महत्वपूर्ण बात यह है कि कैसे सड़कों, शहरों, ब्लॉक और इमारतों को संरचित किया जाता है इसका विश्लेषण करना है। पता लगाएं कि सभी तरह की इमारतों में क्या समान है। फोटो, मानचित्र, योजनाओं और वास्तविकता को देखें। यदि आप ऐसा करते हैं तो आप उन लोगों से एक कदम आगे बढ़ेंगे जो शहर के निर्माण को केवल कंप्यूटर-तकनीकी मामले के रूप में मानते हैं।

अगला आपको छोटे, विशिष्ट चरणों में उस ज्यामिति को कैसे बनाया जाए, इस पर समाधान विकसित करना चाहिए। आपको उन नियमों को परिभाषित करना होगा जो एक विश्वसनीय शहर बनाते हैं। यदि आप 3 डी मॉडलिंग में हैं तो आपको जो कुछ भी सीखा है उसे पुनर्विचार करना होगा ताकि कंप्यूटर किसी भी स्थिति में आपके निर्देशों का पालन कर सके।

ट्रैक को ढीला करने के लिए आपको बहुत से ऑपरेटरों को स्थापित करना चाहिए जो पूरी प्रक्रिया के केवल छोटे हिस्सों के लिए जिम्मेदार हैं। जो आपके सिस्टम को डीबगिंग, विस्तार और सुधारने में बहुत आसान बनाता है। अगले चरण में आपको उन ऑपरेटरों को लिंक करना चाहिए और पैरामीटर बदलकर परिणामों की जांच करनी चाहिए।

मैं भी कई "शहर जनरेटर" कि मुख्य रूप से उन पर कुछ खिड़की बनावट के साथ यादृच्छिक के आकार का बॉक्स से मिलकर बनता है देखा है: यदि आप एक दुनिया जनरेटर सिमुलेशन प्लेट टेक्टोनिक्स का एक उदाहरण चाहते हैं (

6

, कटाव, rain- छाया, आदि पर एक नज़र डालें: https://github.com/ftomassetti/lands

की वहाँ भी एक सभ्यताओं विकास सिम्युलेटर है कि शीर्ष पर:

https://github.com/ftomassetti/civs

एक ब्लॉग दिलचस्प संसाधन पर भरा हुआ है:

dungeonleague.com/

अब यह छोड़ दिया जाता है, लेकिन आप उसकी सभी पोस्ट

संबंधित मुद्दे