วิธีการวาดโลก 3 มิติด้วยเส้นเหมือนวาดภาพร่างหรือการ์ตูน


9

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

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

ฉันเป็นโปรแกรมเมอร์ที่มีประสบการณ์ แต่ยังไม่คุ้นเคยกับการเขียนโปรแกรม 3D ฉันไม่สามารถคิดอย่างถ่องแท้ถึงเกมที่มีลักษณะเช่นนี้ - เกิดขึ้นแล้วใช่ไหม แล้วเราจะทำอย่างไร? ปัญหาสองข้อคำนึงถึง - การค้นหาขอบที่สำคัญและวาดมัน มันจะต้องมี "เอ็นจิ้น" ที่เข้ารหัสจากเมทริกซ์ขึ้นอยู่กับบรรทัดไม่ใช่เอนจิ้น 3D ปกติหรือไม่?


ฉันแค่อยากจะเตือนคุณว่ามนุษย์ไม่ดีในการรับรู้ 3D บนหน้าจอ 2D ตามที่เป็นอยู่ดังนั้นการลดแสงเงาซึ่งเป็นส่วนสำคัญในการเข้าใจความลึกของฉากอาจทำงานได้ไม่ดีในเกมที่ใช้ 3D gameplay
Jeff

มีเกมหนึ่งเกมที่เหมาะกับสไตล์ที่คุณกำลังอธิบาย - Okami เผยแพร่สำหรับ PS2 ไม่กี่ปีหลังen.wikipedia.org/wiki/%C5%8Ckami
Eran Galperin

1
ดีฉันคิดเกี่ยวกับการทำสิ่งนี้ด้วยตัวเอง ฉันคิดว่าคุณต้องการใช้การแรเงา cel แบบบางอย่างไม่ใช่เฉพาะเส้น
mpnk121

คำตอบ:


11

โดยพื้นฐานแล้วสิ่งที่คุณกำลังพูดถึงคือการค้นพบที่ล้ำสมัยและมีเกมมากมายที่ทำในรูปแบบที่แตกต่างหลากหลาย

อาจเป็นคนแรกคือJet Set Radio (เปิดตัวในตะวันตกในชื่อ "Jet Grind Radio") ปล่อยตัวเพียงเดือนหรือสองเดือนหลังจากนั้นเป็นเกมที่ผมพัฒนาเทคนิคการแสดงผลที่คล้ายกัน: Looney Tunes: พื้นที่การแข่งขัน (On Space Race เราพยายามอย่างดีที่สุดเพื่อรักษาความหนาของเส้นเครื่องแบบในขณะที่ Jet Set Radio ทำให้ความกว้างของเส้นไม่เท่ากันเป็นส่วนใหญ่ของสไตล์การมองเห็น)

เกมทั้งสองนี้ทำงานในลักษณะเดียวกัน สำหรับแต่ละวัตถุที่จะระบุไว้วาดวัตถุสองครั้ง ก่อนอื่นทำการเรนเดอร์ย้อนกลับโดยใช้การกดจุดสุดยอด (นั่นคือเลื่อนจุดยอดแต่ละอันตามระยะทางตามเวกเตอร์ปกติ) และในสีใดก็ตามที่คุณต้องการให้ 'เส้น' ปรากฏ จากนั้นวาดอีกครั้งโดยไม่ต้องกดจุดสุดยอดและ backfacing ปกติ การใช้งานคู่นี้ให้ภาพเงาที่มีสีล้อมรอบวัตถุและทุกอย่างที่เกมสองเกมแรกนี้ใช้ ในการแข่งขันอวกาศฉันรักษาภาพลวงตาของความกว้างของเส้นคงที่โดยการผลักจุดยอดในระยะทางที่แตกต่างกันโดยขึ้นอยู่กับว่าวัตถุมาจากกล้องมากแค่ไหน ใน Jet Set Radio พวกเขาไม่ได้ (ซึ่งนำไปสู่เส้นที่ใหญ่ขึ้นหรือเล็กลงเมื่อวัตถุเคลื่อนที่เข้ามาใกล้หรือไกลจากกล้อง)

NVidia และ ATI มีวิธีการสาธิตหลายวิธีเพื่อให้ได้เอฟเฟกต์นี้ส่วนใหญ่หมุนรอบพิกเซลที่มองหาบรรทัดฐานซึ่งตั้งฉากกับเวกเตอร์กล้องต่อพิกเซลสำหรับแต่ละพิกเซล แต่สิ่งเหล่านี้ต้องใช้ตาข่ายความละเอียดสูงมากและไม่สอดคล้องกัน ความกว้างของเส้นในทางปฏิบัติ ฉันไม่รู้ว่าเกมใดที่ใช้วิธีการนี้หรือไม่ ฉันไม่คิดว่าฉันเคยเห็นสิ่งใดที่ดูเหมือนตัวอย่างจาก บริษัท เหล่านี้

ฉันจะชี้ให้คุณดูที่Dragon's Lair 3Dซึ่งเป็นเกมเดียวที่ฉันรู้ซึ่งดูเหมือนว่าจะทำสิ่งนี้ได้อย่างถูกต้อง การนำผลิตภัณฑ์ดอทของกล้องจากรูปหลายเหลี่ยมและรูปหลายเหลี่ยมปกติสำหรับรูปหลายเหลี่ยมแต่ละรูปแบบในรูปแบบเพื่อดูว่ารูปหลายเหลี่ยมแต่ละรูปหันไปทางหรือออกจากกล้องจากนั้นตรวจสอบรูปหลายเหลี่ยมที่เชื่อมต่อทั้งหมด หากรูปหลายเหลี่ยมหนึ่งคู่มีขอบร่วมกันและรูปหลายเหลี่ยมหนึ่งรูปหันหน้าเข้าหากล้องและรูปหลายเหลี่ยมหนึ่งรูปนั้นไม่ปรากฏขึ้นก็จะวาดเส้นบางที่มีความกว้างคงที่ตามขอบในพื้นที่หน้าจอ (ฉันไม่สามารถทำให้งานนี้เร็วพอสำหรับดรีมแคสต์สำหรับ Space Race หรือฉันจะใช้มันวันนี้บนคอมพิวเตอร์ที่ทันสมัยนี่เป็นวิธีที่ฉันพยายามทำเอฟเฟกต์นี้ทั้งหมดแม้ว่ามันจะเป็น '

Dragon's Lair 3D เป็นเกมเดียวที่ฉันรู้ว่าจริง ๆ แล้วลากเส้นระหว่างพื้นที่ที่มีสีต่างกันหรือในช่วงที่ไม่ต่อเนื่องถึงจุดสุดยอดถึงแม้ว่าจะไม่มีขอบเงา ฉันสงสัยว่าพวกเขามีเครื่องมือที่กำหนดเองซึ่งอนุญาตให้ศิลปินของพวกเขาเสนอชื่อรูปหลายเหลี่ยมเพื่อรับสายเสมอ

Okamiซึ่งได้รับการกล่าวถึงโดยคนอื่น ๆ ดูเหมือนจะใช้วิธีการกดจุดยอด - เรนเดอร์แบบสองครั้งคล้ายกับ Jet Set Radio และ Space Race แต่ก็ใช้พื้นผิวที่สร้างขึ้นโดยใช้ศิลปะแบบแปรง (ตัวอย่างเช่นในระยะไกลจะถูกวาดเป็นรูปแบบการแปรงตามพื้นผิวซึ่งวาดเป็นรูปสี่เหลี่ยมมาตรฐาน) Okami น่ารัก แต่ฉันไม่คิดว่ามันจะสัมผัสกับเทคโนโลยีที่คุณถาม แน่นอนว่ามันใช้วิธีเก่ากว่าสำหรับเอฟเฟกต์ของมัน

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


+1 คำตอบที่ยอดเยี่ยมรวมถึงทั้งทฤษฎีและตัวอย่างที่น่าสนใจ
Maik Semder

คำตอบที่ยอดเยี่ยมขอบคุณสำหรับเวลาที่คุณเขียนมัน
bog ที่ร่าเริงไร้ชีวิตชีวา

1

สิ่งที่คุณกำลังพูดถึงคือการเรนเดอร์ที่ไม่ใช่ภาพถ่ายเหมือนจริง (aka NPR) ในเกม 3 มิติแบบเรียลไทม์ที่ใช้ชิ้นส่วน / พิกเซลเชดเดอร์

เลื่อนดูที่นี่เพื่อดูตัวอย่าง: http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html

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