เราจะเริ่มด้วยการสร้างโพรซีเดอร์ได้อย่างไร


147

การสร้างขั้นตอนได้ถูกนำเข้าสู่จุดสนใจเมื่อเร็ว ๆ นี้ (โดย Spore, MMO, ฯลฯ ) และดูเหมือนว่าจะเป็นเทคนิคการเขียนโปรแกรมที่น่าสนใจ / มีประสิทธิภาพ

คำถามของฉันคือสิ่งเหล่านี้:

  • คุณรู้จักโครงการขนาดกลางที่ใช้เทคนิคการสร้างแบบขั้นตอนหรือไม่?
  • ภาษา / คลาสของภาษาใดที่ดีที่สุดสำหรับการสร้างขั้นตอน?
  • คุณสามารถใช้การสร้างขั้นตอนสำหรับรหัส "ร้ายแรง" ได้หรือไม่ (เช่นไม่ใช่เกม)

1
สงสัยว่าคุณจะพบบทความนี้จาก X-Team ไหม x-team.com/blog/…
Adam Gerard

คำตอบ:


117

คุณอาจจะเริ่มต้นด้วยทฤษฎีเล็ก ๆ น้อย ๆ และตัวอย่างง่ายๆเช่นขั้นตอนวิธีการจุดกึ่งกลางกระจัด คุณควรเรียนรู้เกี่ยวกับPerlin Noiseเล็กน้อยหากคุณสนใจที่จะสร้างกราฟิก ฉันใช้สิ่งนี้เพื่อเริ่มต้นโครงการปีสุดท้ายของฉันในการสร้างขั้นตอน

เศษส่วนเกี่ยวข้องกับการสร้างขั้นตอนอย่างใกล้ชิด

TerragenและSpeedTreeจะแสดงให้คุณเห็นถึงความเป็นไปได้ที่น่าอัศจรรย์ของการสร้างขั้นตอน

การสร้างโพรซีเดอร์เป็นเทคนิคที่สามารถใช้ในภาษาใด ๆ (ไม่ จำกัด เฉพาะภาษาเชิงโพรซีเดอร์เช่น C เนื่องจากสามารถใช้ในภาษา OO เช่น Java และภาษาลอจิกเช่น Prolog) ความเข้าใจที่ดีเกี่ยวกับการเรียกซ้ำในภาษาใด ๆ จะช่วยให้คุณเข้าใจขั้นตอนการสร้าง

สำหรับรหัส 'ที่ร้ายแรง' หรือไม่ใช่เกมนั้นมีการใช้เทคนิคการสร้างขั้นตอนเพื่อ:

  • จำลองการเติบโตของเมืองเพื่อวางแผนการจัดการจราจร
  • เพื่อจำลองการเจริญเติบโตของหลอดเลือด
  • SpeedTree ใช้ในภาพยนตร์และงานนำเสนอสถาปัตยกรรม

เสียงเพอร์ลินนี้ดูเหมือนตัวกรอง "เมฆ" ของ Photoshop
doubleOrt

การเชื่อมโยงแรกใช้งานไม่ได้
Jean Carlo Machado

เพลง Electro บางเพลงใช้การสร้างขั้นตอนที่ต้องสร้าง
Poyda

50

วิกิพีเดียการสร้างเนื้อหาขั้นตอน:

http://pcg.wikidot.com/

หากสิ่งที่คุณต้องการไม่ได้อยู่ที่นั่นแล้วเพิ่มมัน;)


11
ฉันไม่สามารถคัดลอกวิกิทั้งหมดที่นี่! ไม่มี 'ส่วนที่จำเป็น'
Martin

12

ตอนนี้การสร้างเนื้อหาขั้นตอนทั้งหมดเขียนขึ้นสำหรับ GPU ดังนั้นคุณจะต้องรู้ภาษาที่ใช้ นั่นหมายถึง GLSL หรือ HLSL ภาษาเหล่านี้เชื่อมโยงกับ OpenGL และ DirectX ตามลำดับ

ในขณะที่ความชอบส่วนตัวของฉันสำหรับ Dx11 / HLSL เนื่องจากความเร็วความโค้งการเรียนรู้ที่ง่ายขึ้นและFrank D Luna , OpenGL ได้รับการสนับสนุนบนแพลตฟอร์มเพิ่มเติม

คุณควรตรวจสอบ WebGL ด้วยถ้าคุณต้องการที่จะกระโดดลงไปในการเขียน shaders โดยไม่ต้องใช้เวลา (มาก) ในการตั้งค่าเอ็นจิ้นเกม OpenGL / DirectX

เนื้อหาขั้นตอนเริ่มต้นด้วยเสียง

ดังนั้นคุณจะต้องเรียนรู้เกี่ยวกับเสียง Perlin (และเสียงต่อจากตัวต่อSimplex )

Shadertoyเป็นข้อมูลอ้างอิงที่ยอดเยี่ยมสำหรับการเรียนรู้เกี่ยวกับการเขียนโปรแกรม Shader ฉันขอแนะนำให้คุณมาที่นี่เมื่อคุณได้รับรหัส shader ไปด้วยตัวคุณเองเป็นรหัสที่ไม่ได้สำหรับคลื่นไส้ทางคณิตศาสตร์ แต่นั่นคือวิธีการทำเนื้อหาขั้นตอน

Shadertoy นั้นถูกสร้างขึ้นโดยInigo Quilezอัจฉริยะซึ่งเป็นผลิตภัณฑ์ของฉากตัวอย่างที่ทำงานที่ Pixar เขามีวิดีโอ youtube ( ตัวอย่างยอดเยี่ยม ) ของเซสชันการเข้ารหัสสดและฉันสามารถแนะนำสิ่งเหล่านี้ได้


17
คุณหมายถึงอะไร "การสร้างเนื้อหาเชิงปฏิบัติตอนนี้เขียนขึ้นสำหรับ GPU แล้ว" คุณกำลังพูดถึงสิ่งต่าง ๆ เช่นใบหญ้า? คุณไม่ได้หมายถึงการสร้างแผนที่หรือเมืองสำหรับเกมเช่นคุณใช่ไหม
Dronz

2
ใช่ฉันคิดว่าความคิดเห็น "ทั้งหมด" ที่นี่เป็นที่มากเกินไป แต่ในพื้นที่ของการสร้างภูมิทัศน์ (ซึ่งฉันคิดว่าเป็นชนิดที่พบบ่อยที่สุด) นี่คือคำตอบที่เป็นประโยชน์ แม้ว่าฉันไม่สามารถจินตนาการได้ว่าใครจะต้องการดูรหัสพิมพ์ในวิดีโอ
Nate CK

1
คนที่ต้องการเรียนรู้วิธีเขียนโค้ดที่ซับซ้อนเช่นเฉดสีหรือเรียนรู้วิธีใช้รูปแบบที่ซับซ้อนในการออกแบบ และนั่นเป็นเพียงการเกาพื้นผิว
อุลตราแมนทาโคมาน

"ตอนนี้การสร้างเนื้อหาขั้นตอนทั้งหมดเขียนขึ้นสำหรับ GPU ดังนั้นคุณจะต้องรู้ภาษาที่ดีกว่า" เป็นเพียงเรื่องจริงและทำให้เข้าใจผิด 100% (ฉันกำลังทำโปรเจ็กต์การสร้างโพรซีเดอร์แบบง่ายฉันเขียนโค้ด shader 0 บรรทัดในชีวิตของฉัน)
ลดกิจกรรม

9

หากคุณต้องการตัวอย่างของแผ่นเปลือกโลกเครื่องจำลองการแปรสัณฐานการพังทลายของเงาฝน ฯลฯ ดูที่: https://github.com/ftomassetti/lands

ยิ่งไปกว่านั้นยังมีตัวจำลองวิวัฒนาการอารยธรรม:

https://github.com/ftomassetti/civs

บล็อกที่เต็มไปด้วยทรัพยากรที่น่าสนใจคือ:

dungeonleague.com/

มันถูกละทิ้งไปแล้ว แต่คุณควรอ่านบทความทั้งหมด


แหล่งข้อมูลที่น่าสนใจ
SalahAdDin

8

ฉันไม่ใช่ผู้เชี่ยวชาญในเรื่องนี้ แต่ฉันสามารถลองและให้คำตอบได้สองสามข้อ:

  1. NetHack และ brethern เป็นโอเพ่นซอร์สและพึ่งพาการสร้างระดับขั้นตอน (แผนที่) อย่างหนัก ลิงก์ไปยังการดาวน์โหลดของมัน หากคุณมีความสนใจในการสร้างแนวนอน / พื้นผิว / คลาวด์ฉันขอแนะนำให้คุณค้นหาGamasutraและGameDevที่มีบทความเกี่ยวกับเรื่องเหล่านั้นค่อนข้างน้อย

  2. AFAIK ฉันไม่คิดว่าภาษาจะแตกต่างกันมาก รหัสส่วนใหญ่ที่คุณเห็นจะอยู่ใน C / CPP เพราะมันยังคงเป็นภาษาทางการของ Game Developers แต่คุณสามารถใช้อะไรก็ได้ที่คุณต้องการ ...

  3. ขึ้นอยู่กับว่าคุณมีโครงการที่สามารถใช้ประโยชน์จากเทคโนโลยีดังกล่าวได้หรือไม่ ฉันเห็นการสร้างขั้นตอนที่ใช้ในเครื่องจำลองสำหรับกองทัพ (ซึ่งถือได้ว่าเป็นเกมแม้ว่าพวกเขาจะไม่สามารถเล่นได้มาก :))

และหมายเหตุเล็ก ๆ - คำจำกัดความของฉันหากการสร้างขั้นตอนเป็นสิ่งที่สร้างข้อมูลจำนวนมากจากกฎหรือรูปแบบจำนวนเล็กน้อยและการสุ่มจำนวนมากผลลัพธ์ของคุณอาจแตกต่างกันไป :)


8

มีหนังสือที่ยอดเยี่ยมเกี่ยวกับหัวข้อ:

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

มันมีอคติต่อเอฟเฟ็กต์ภาพไม่ใช่แบบเรียลไทม์และการสร้างแอนิเมชั่น แต่ทฤษฎีและความคิดนั้นสามารถใช้งานได้นอกเขตข้อมูลเหล่านี้

นอกจากนี้ยังอาจกล่าวได้ว่ามีแพคเกจซอฟต์แวร์มืออาชีพที่ใช้ขั้นตอนการทำงานที่สมบูรณ์ที่เรียกว่าฮูดินี่ของ SideFX คุณสามารถใช้มันเพื่อคิดค้นและแก้ปัญหาขั้นตอนต้นแบบให้กับปัญหาที่คุณสามารถแปลเป็นรหัสในภายหลัง

แม้ว่ามันจะเป็นแพ็คเกจที่ค่อนข้างแพง แต่ก็มีใบอนุญาตการประเมินผลฟรีซึ่งสามารถใช้เป็นเครื่องมือทางการศึกษาและ / หรือวิศวกรรมที่ดีมาก


7

การสร้างโพรซีเดอร์ถูกใช้อย่างหนักใน demoscene เพื่อสร้างกราฟิกที่ซับซ้อนในปฏิบัติการขนาดเล็ก Will Wright กล่าวด้วยซ้ำว่าเขาได้รับแรงบันดาลใจจากการเคลื่อนไหวในขณะที่สร้างสปอร์ นั่นอาจเป็นจุดเริ่มต้นที่ดีที่สุดของคุณ

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


3

สิ่งที่สำคัญที่สุดคือการวิเคราะห์ว่าถนนเมืองบล็อกและอาคารมีโครงสร้างอย่างไร ค้นหาว่าอาคารทุกหลังมีอะไรที่เหมือนกันบ้าง ดูภาพถ่ายแผนที่แผนและความเป็นจริง หากคุณทำเช่นนั้นคุณจะก้าวไปข้างหน้าหนึ่งคนที่พิจารณาการสร้างเมืองเป็นเพียงเทคโนโลยีคอมพิวเตอร์

ถัดไปคุณควรพัฒนาวิธีแก้ปัญหาในการสร้างรูปทรงเรขาคณิตนั้นในขั้นตอนเล็ก ๆ และแตกต่าง คุณต้องกำหนดกฎที่ประกอบกันเป็นเมืองที่น่าเชื่อถือ หากคุณเข้าสู่การสร้างแบบจำลอง 3 มิติคุณต้องคิดใหม่เกี่ยวกับสิ่งที่คุณได้เรียนรู้มากมายเพื่อให้คอมพิวเตอร์สามารถปฏิบัติตามคำแนะนำของคุณได้ในทุกสถานการณ์

เพื่อไม่ให้แทร็คหลวมคุณควรติดตั้งตัวดำเนินการจำนวนมากที่รับผิดชอบเฉพาะส่วนเล็ก ๆ ของกระบวนการทั้งหมด ทำให้การดีบักขยายและปรับปรุงระบบของคุณง่ายขึ้นมาก ในขั้นตอนถัดไปคุณควรเชื่อมโยงโอเปอเรเตอร์เหล่านั้นและตรวจสอบผลลัพธ์โดยการเปลี่ยนพารามิเตอร์

ฉันได้เห็น "เครื่องกำเนิดเมือง" มากเกินไปซึ่งส่วนใหญ่ประกอบด้วยกล่องรูปแบบสุ่มที่มีพื้นผิวหน้าต่างบางส่วนอยู่: (


3

(มากกว่า 10 ปีต่อมา ... )

การสร้างขั้นตอนหมายถึงรหัสที่ใช้ในการสร้างข้อมูลแทนการทำด้วยมือ ตัวอย่างเช่นถ้าคุณต้องการสร้างป่าด้วยต้นไม้หลายต้นคุณจะไม่ออกแบบต้นไม้แต่ละต้นด้วยมือดังนั้นการเข้ารหัสจะมีประสิทธิภาพมากขึ้นในการสร้างรูปแบบต่างๆ มันอาจเป็นรุ่นของกราฟิกทรีขนาดโครงสร้างตำแหน่ง ...

โดยทั่วไปมีการแทรกซึมบางอย่างที่มีกฎบางอย่างนอกเหนือไปจากที่คุณสามารถเพิ่มการสุ่มและตรรกะของคุณเองรวมเทคนิคเหล่านี้ทั้งหมด ... อะไรที่ค่อนข้างวุ่นวาย แต่ไม่วุ่นวายเกินไปสามารถให้ผลลัพธ์ที่น่าสนใจ

นี่คือเทคนิคเด่นบางประการ:

เกมที่มีชื่อเสียงสำหรับการสร้างขั้นตอนของพวกเขา:

วิดีโอสอนเกี่ยวกับขั้นตอนการสร้างทวีป

การประชุมเกี่ยวกับการสร้างเนื้อหาขั้นตอนสำหรับเกมมีวิดีโอมากมายในหัวข้อ: ทุกอย่างขั้นตอน

มีความสุข.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.