การพัฒนาเกม

คำถาม & คำตอบสำหรับนักพัฒนาเกมมืออาชีพและเป็นอิสระ

2
รายละเอียดของ GPU ทำอะไรได้จริงเมื่อตัดในพื้นที่ที่เป็นเนื้อเดียวกัน 4D?
ฉันเรียนรู้ไปป์ไลน์เรนเดอร์ที่สามารถตั้งโปรแกรมได้โดยการใช้เรนเดอร์ซอฟต์แวร์ตัวเล็ก ๆ ฉันพยายามใช้มันในรูปแบบ 'ฮาร์ดแวร์' อย่างไรก็ตามฉันไม่คุ้นเคยกับขั้นตอนการทำงานของ GPU และมีปัญหาในการตัดเป็นเนื้อเดียวกัน พื้นที่การตัดที่เป็นเนื้อเดียวกันประกอบด้วยตัวแปรwซึ่งมีความหลากหลายในแต่ละจุดยอด พิกัดจุดที่เป็นเนื้อเดียวกันของวัตถุแต่ละอัน (ระหว่างเมทริกซ์การฉายและการหารแบบเอกพันธ์ด้วย w) ที่พื้นที่การตัดของมันหรือไม่? ถ้าเป็นเช่นนั้นวิธีการตัดเส้นและสามเหลี่ยมใกล้กว่า Frustum หรือยืดตัวกล้อง (เช่น w <= frustum_znear)? ปรับปรุง : กระทู้นี้บอกว่าการตัดในพื้นที่ที่เป็นเนื้อเดียวกันนั้นเป็นปัญหาการแยกโดยตรงในพื้นที่ที่เป็นเนื้อเดียวกัน 4D p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4ซึ่งหมายความว่าจุดตัดคือ บอกว่าฉันมีP0(-70, -70, 118, 120)และP1(-32, -99, -13, -11)ในพื้นที่ที่เป็นเนื้อเดียวกัน 4D และจุดตัดกับplane w = -z(ซึ่งใน NDC คือ z = …

1
วาดครึ่งกลางของทรงกลมโดยทางโปรแกรม
ฉันพยายามสร้างครึ่งกลางของทรงกลม โดยทั่วไปเพื่อสร้างทรงกลมจะมีการกำหนดหมายเลขสแต็กและหมายเลขสแลชและมีตัวแปรสองตัวphi(สำหรับสไลซ์) และtheta(สำหรับสแต็ค) ที่รับผิดชอบต่อความก้าวหน้า และกระบวนการนี้แบ่งออกเป็นการสร้างฝาด้านล่างลำตัวและฝาปิดด้านบน (ดังที่เห็นด้านล่าง) เพื่อให้ได้ครึ่งกลาง ( thetaตรงกลาง 50% ดังด้านล่าง) เราจำเป็นต้องเว้นการแคปและแก้ไขส่วนใดส่วนหนึ่ง ฉันกำลังเล่นกับหมายเลข stack ( 1/4*stackNumbers to 3/4*stackNumbers) แต่ไม่ได้ให้ผลลัพธ์ที่ต้องการ ฉันจะแก้ไขการสร้างทรงกลมเพื่อให้ได้ครึ่งกลาง ( pi/4 <theta <pi*3/4) ได้อย่างไร ปัญหาโดยรวมของฉันคือฉันจะแบ่งทรงกลมออกเป็น 3 ส่วนต่าง ๆ ได้อย่างไรตอนบน 25%, กลาง 50% และ 25% ด้านล่าง? นี่คือรหัสยอดนิยมสำหรับการสร้างทรงกลมโดยทางโปรแกรม: private void generateSphere(int stackNumber, int sliceNumber, boolean facingOut) { int capVertexNumber = 3 …

2
ตัวแปรเงื่อนไขในวัตถุสคริปต์
ในขณะที่ใช้ScriptableObjectsฉันจะทำให้ตัวแปรบางตัวมีเงื่อนไขได้อย่างไร รหัสตัวอย่าง: [System.Serializable] public class Test : ScriptableObject { public bool testbool; public string teststring; public int testint; } เป้าหมาย:เมื่อtestbool == trueนั้นteststringจะสามารถแก้ไขได้เมื่อtestbool == falseนั้นtestintจะสามารถแก้ไขได้ในขณะที่อีกอันจะเป็น " สีเทา "
10 unity  c# 

1
แผนที่พื้นผิวกับอาเรย์พื้นผิว: พวกเขาจัดการกับซีพียูและ GPU ต่างกันอย่างไรและมีผลกระทบอย่างไรต่อประสิทธิภาพการทำงาน?
ความสามัคคี 5.4 (ปัจจุบันอยู่ในเบต้า) จะนำคุณลักษณะที่รอคอยมาก (ตั้งแต่ 2013) ที่เป็นอาร์เรย์พื้นผิว - ในไร้สาระเช่นเดียวกับArrayTexture OpenGL ของ อย่างไรก็ตามหลังจากทำการอ่านบางอย่างเกี่ยวกับอาร์เรย์ - พื้นผิวและพื้นผิวแผนที่ฉันยังคงไม่เข้าใจความแตกต่างทางเทคนิคในการใช้งานโดย CPU และ GPU ดังนั้นเพื่อที่จะเจาะจงมากขึ้นฉันอยากจะขอคำอธิบายเกี่ยวกับความแตกต่างที่สำคัญระหว่างวิธีการจัดการแผนที่พื้นผิวและพื้นผิวโดย CPU และ GPU และที่สำคัญที่สุดความแตกต่างดังกล่าวส่งผลกระทบต่อประสิทธิภาพและการจัดการหน่วยความจำอย่างไร วิธีที่อาร์เรย์ของพื้นผิวสามารถมีประสิทธิภาพได้ดีกว่าแผนที่พื้นผิว ฯลฯ ) หากรายละเอียดทางเทคนิคเกี่ยวกับการดำเนินงานของ Unity ขาดไปเนื่องจากความโชคร้ายที่ปิดตายโชคไม่ดีฉันจะมีความสุขมากกับคำตอบเกี่ยวกับ OpenGL.s ArrayTexture

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

3
จะจัดการกับ RTS Click-And-Move ใน 3D Space ได้อย่างไร?
ฉันจะจัดการคลิกและย้ายในพื้นที่ 3D ที่สมบูรณ์ได้อย่างไร มันง่ายในการจัดการบนเครื่องบิน 2D ด้วยเครื่องฉายรังสีแบบเรียบง่าย แต่นี่ไม่ใช่กรณีในแบบ 3 มิติเนื่องจากไม่มีเครื่องปลายสำหรับเครื่องรับรังสีเพื่อให้ได้จุดสิ้นสุด ฉันมีความคิดสองประการในใจ: ทำ raycast จากนั้นอนุญาตให้ผู้เล่นเลือกระยะทางในรังสีโดยอินพุทอื่น (ยกตัวอย่างเช่นเมาส์โฮว) แทนที่จะเป็น 3D ที่สมบูรณ์มี "ความสูงหลายชั้น" เพื่อให้ผู้เล่นสามารถเปลี่ยนเลเยอร์ความสูงก่อนสั่งย้าย คุณคิดยังไง?

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

3
คุณสมบัติของภูเขาที่ลดหลั่น
ฉันต้องการจำลองลักษณะภูมิประเทศแบบขั้นตอนที่ฉันพบในเว็บไซต์ผลงาน / บล็อกเมื่อสองสามวันก่อน การอ้างถึงไซต์นั้นการสร้าง terracing ถูกสร้างขึ้นโดย "คูณ [ความสูงสุดท้าย] ด้วยค่าการหน่วงบางอย่างภายในช่วงความสูงที่แน่นอนเพื่อสร้างคุณลักษณะหุบเขาที่สวยงาม" ฉันสงสัยว่าใครจะสามารถให้ตัวอย่างหรือขั้นตอนทางเทคนิคเพิ่มเติมเกี่ยวกับเรื่องนี้ได้บ้าง ในช่วงสัปดาห์ที่ผ่านมาฉันได้ค้นคว้าและเรียนรู้มากมายเกี่ยวกับวิธีการและวิธีปฏิบัติเกี่ยวกับภูมิประเทศ / พื้นผิวและวิธีปฏิบัติ แต่ฉันยังไม่เจออะไรที่อธิบายในรายละเอียดว่า 'การจับ' คืออะไรและฉันเริ่มหงุดหงิด

4
การสร้างขั้นตอนการอัปเดตเกมและเอฟเฟกต์ผีเสื้อ
หมายเหตุ: ฉันถามสิ่งนี้ใน Stack Overflow เมื่อสองสามวันก่อน แต่มีมุมมองน้อยมากและไม่มีการตอบสนอง คิดว่าฉันควรถาม gamdev.stackexchange แทน นี่เป็นคำถาม / คำขอทั่วไปสำหรับคำแนะนำเกี่ยวกับการบำรุงรักษาระบบการผลิตตามขั้นตอนผ่านการอัพเดทหลังการเผยแพร่หลายครั้งโดยไม่ทำลายเนื้อหาที่สร้างขึ้นก่อนหน้านี้ ฉันพยายามค้นหาข้อมูลและเทคนิคในการหลีกเลี่ยงปัญหา "Butterfly Effect" เมื่อสร้างเนื้อหาขั้นตอนสำหรับเกม เมื่อใช้เครื่องกำเนิดตัวเลขสุ่มแบบ seeded ลำดับการทำซ้ำของตัวเลขสุ่มสามารถใช้เพื่อสร้างโลกที่ทำซ้ำได้ ในขณะที่เกมบางเกมบันทึกโลกที่สร้างไว้บนดิสก์ที่สร้างขึ้นครั้งเดียวหนึ่งในคุณสมบัติที่ทรงพลังของขั้นตอนการสร้างคือความจริงที่ว่าคุณสามารถพึ่งพาความสามารถในการทำซ้ำของลำดับหมายเลขเพื่อสร้างภูมิภาคหลายครั้งในลักษณะเดียวกัน วิริยะ. เนื่องจากข้อ จำกัด ของสถานการณ์เฉพาะของฉันฉันจึงต้องลดการคงอยู่ให้เหลือน้อยที่สุดและจำเป็นต้องพึ่งพาจุดเริ่มต้นที่บริสุทธิ์อย่างเต็มที่เท่าที่จะทำได้ อันตรายหลักในแนวทางนี้คือแม้แต่การเปลี่ยนแปลงเพียงเล็กน้อยในระบบการสร้างขั้นตอนสามารถทำให้เกิดผลกระทบของผีเสื้อที่เปลี่ยนแปลงโลกทั้งใบ ทำให้การอัปเดตเกมเป็นเรื่องยากมากโดยไม่ทำลายโลกที่ผู้เล่นสำรวจ เทคนิคหลักที่ฉันใช้เพื่อหลีกเลี่ยงปัญหานี้คือการออกแบบการสร้างโพรซีเดอร์ในหลายเฟสซึ่งแต่ละอันมีตัวสร้างตัวเลขสุ่มแบบสุ่ม ซึ่งหมายความว่าแต่ละระบบย่อยนั้นมีอยู่ในตัวเองและหากมีสิ่งใดเสียหายก็จะไม่ส่งผลกระทบต่อทุกสิ่งในโลก อย่างไรก็ตามเรื่องนี้ดูเหมือนว่ามันยังมีศักยภาพมากมายสำหรับ "การแตก" แม้ว่าจะอยู่ในส่วนที่แยกจากเกม วิธีที่เป็นไปได้อีกวิธีหนึ่งในการจัดการกับปัญหานี้คือการรักษาเครื่องกำเนิดไฟฟ้าของคุณให้สมบูรณ์ในรหัสและใช้เครื่องกำเนิดที่เหมาะสมสำหรับอินสแตนซ์ของโลกที่กำหนด ดูเหมือนว่าจะเป็นฝันร้ายสำหรับฉันและฉันอยากรู้ว่าใครทำสิ่งนี้จริง ๆ ดังนั้นคำถามของฉันคือคำขอคำแนะนำเทคนิคและรูปแบบการออกแบบทั่วไปเพื่อจัดการกับปัญหานี้ของเอฟเฟกต์ผีเสื้อโดยเฉพาะอย่างยิ่งในบริบทของการอัปเดตเกมหลังวางจำหน่าย (หวังว่านั่นจะไม่ใช่คำถามที่กว้างเกินไป) ฉันกำลังทำงานใน Unity3D / C # ถึงแม้ว่านี่จะเป็นคำถามที่ไม่เชื่อเรื่องภาษา UPDATE: ขอบคุณสำหรับคำตอบ ดูเหมือนว่าข้อมูลแบบคงที่จะเป็นวิธีที่ดีที่สุดและปลอดภัยที่สุดและเมื่อการจัดเก็บข้อมูลจำนวนมากไม่ใช่ตัวเลือกการมีแคมเปญที่ยาวนานในโลกที่สร้างขึ้นจะต้องใช้เวอร์ชันที่เข้มงวดของเครื่องกำเนิดไฟฟ้า เหตุผลของข้อ จำกัด ในกรณีของฉันคือความต้องการบันทึก / ซิงค์บนคลาวด์บนอุปกรณ์เคลื่อนที่ …

1
การพัฒนาข้ามแพลตฟอร์ม C ++ / OpenGL ES (iOS / Android) [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันมีประสบการณ์ที่สมเหตุสมผลกับ C ++ และ OpenGL และฉันเพิ่งตัดสินใจลองพัฒนาเกมมือถือ หลังจากประสบความสำเร็จในการสร้างแอป OpenGL ES Android อย่างง่ายโดยใช้ Java ฉันวิจัยวิธีกำหนดเป้าหมายทั้ง Android และ iOS ด้วยรหัสการเขียนใหม่ให้น้อยที่สุดเท่าที่จะทำได้ ฉันลองใช้เครื่องมือพัฒนาแอพข้ามแพลตฟอร์มที่ภูมิใจของ Visual Studio 2015 แต่พบว่ามันใหม่เกินไปและมีการจัดทำเอกสารน้อยมาก ฉันสามารถสร้างเทมเพลตโครงการที่โปรแกรมมอบให้ฉัน แต่ฉันไม่สามารถหาวิธีได้จากเทมเพลตเหล่านี้ฉันอาจเพิ่มเนื้อหาลงในเกมหรือจัดการกับหน้าจอสัมผัส ฉันมีความปรารถนาที่เฉพาะเจาะจง แต่น่าเสียดายที่เฉพาะเจาะจงที่จะค้นหาด้วย Google ฉันต้องการสร้างเกม OpenGL ES โดยใช้ C ++ พร้อมโปรแกรมเสริมเฉพาะแพลตฟอร์มสำหรับ Android และ iOS ผู้คนถามคำถามที่คล้ายกันกับฉัน (แต่ไม่เหมือนกัน) …

2
วิธีการปรับเจ้าของร้านที่เป็นมิตรในถ้ำแห่งความพินาศท่ามกลางกลุ่มคนนับล้านนับล้าน?
ฉันกำลังสำรวจถ้ำตัวอย่างที่ต้องห้ามของการลงโทษ ฉันพบว่าท่ามกลาง squillions ของ baddies เจ้าของร้านที่เพิ่งเกิดขึ้นเพื่อขายสิ่งของภายในถ้ำที่อันตรายซึ่งไม่มีใครไป แปลก. ฉันทำให้เขาโกรธโดยไม่ตั้งใจและเขากลับกลายเป็นพลังมากกว่าสัตว์ประหลาดทุกตัวในเกม กระจัดกระจาย. ต่อไปนี้เป็นคำถามสองข้อสำหรับคุณ: คุณจะแสดงให้เห็นถึงเจ้าของร้านในถ้ำแห่งหายนะที่เกิดขึ้นเพื่อรอนักผจญภัยสุ่มซื้อของได้อย่างไร และ, มีวิธีที่ดีกว่าในการกีดกันการขโมยสิ่งของหรือฆ่าร้านค้าที่ดีกว่าเพียงแค่ทำให้พวกเขาชกคุณด้วยพลังที่ไร้สาระหรือไม่? หมายเหตุด้านข้าง: คะแนนโบนัสสำหรับการเชื่อมโยงสิ่งเหล่านี้อธิบายว่าทำไมและอย่างไรที่เขาจะลงไปที่นั่นในถ้ำแห่งหายนะตัวอย่างมีชีวิตรอดโดยไม่มีดาบปีศาจหรือเวทมนตร์เพื่อเอาสิ่งของมาด้วยและทำไมมันถึงเป็นความคิดที่ไม่ดี เพื่อต่อสู้กับเขา
10 npc 

1
ฉันควรคำนึงถึงข้อควรพิจารณาอะไรบ้างเมื่อวางโครงการที่ไม่จริงภายใต้การควบคุมของแหล่งที่มา
ฉันต้องการลองสร้างที่เก็บ git จากโครงการ UE4 ของฉันและอัปโหลดไปที่ Github.com แต่ฉันสงสัยว่าควรพิจารณาเป็นพิเศษว่าควรหลีกเลี่ยงการโพสต์ข้อมูลที่สำคัญเช่นรหัสนักพัฒนา / ใบรับรองของฉันหรือหลีกเลี่ยงการเพิ่มไฟล์ไบนารีขนาดใหญ่ หรือไฟล์ชั่วคราว / ไฟล์ระดับกลาง
10 unreal  git 

2
Ray Marching นำไปใช้กับโลกที่มีชีวิตชีวาได้อย่างไร
ฉันคิดว่าฉันเข้าใจพื้นฐานของสนามเรย์มาร์ช คุณจำลองฉากของคุณด้วยฟิลด์ระยะไกล (เช่น: http://iquilezles.org/www/articles/distfunctions/distfunctions.htm ) จากนั้นสำหรับแต่ละพิกเซลที่คุณฉายรังสีให้เริ่มจากจุดเริ่มต้นของรังสี ค้นหาระยะทางไปยังวัตถุที่ใกล้ที่สุดที่จุดนั้นและเพิ่มจุดตามระยะทางที่ใกล้ที่สุดจนกว่าคุณจะตีอะไร ฉันจัดการที่จะทำ renderer ง่ายและนั่นคือที่ที่คำอธิบายส่วนใหญ่ของเทคนิคหยุด นี่ทำให้ฉันมีคำถามบางอย่างเกี่ยวกับวิธีการใช้ SDF Ray Marching ในสถานการณ์จริง: คำถามที่ 1: ในเกมจริงฉากมักจะซับซ้อนและโหลดบน CPU โดยมีวัตถุแบบไดนามิกมากมาย ฉันเข้าใจการบดเคี้ยวแบบพื้นฐาน (เช่น octrees) และด้วยการเรนเดอร์รูปหลายเหลี่ยมฉันจะสร้างรายการ (บน CPU) ของรายการในมุมมอง frustrum เพื่อเรนเดอร์ ดังนั้นจินตนาการว่าฉันมีฉากที่ซับซ้อนมากซึ่งมีตัวละครและวัตถุแบบไดนามิกเคลื่อนไปมาบนหน้าจอควบคุมโดยซีพียู ฉันจะสตรีมวัตถุที่ฉันต้องการให้แสดงกับ GPU ในแต่ละเฟรมได้อย่างไร ทุกตัวอย่างมีฉากฮาร์ดโค้ดใน GLSL บางคนสามารถแบ่งปันตัวอย่างของระดับที่ถูกส่งไปยัง shader แบบไดนามิกได้หรือไม่? คำถามที่ 2: วัตถุมีหลายสีได้อย่างไร ฟังก์ชั่นระยะทางเพียงแค่คืนค่าระยะทาง แต่การใช้งานทั่วไปส่งสีกลับมาได้อย่างไร (เช่นคุณกดทรงกลมสีแดงและไม่ใช่บลูคิวบ์) หากนี่เป็นการใช้งานซีพียูฉันสามารถเรียกใช้ฟังก์ชันสากลภายในฟังก์ชันระยะทางเมื่อมีการตีเพื่อยุติเรย์มาร์เชอร์ เนื้อ / สี แต่คุณจะส่งคืนสีหรือพื้นผิวของรายการใน GLSL …

3
RPGs สมดุลสูตรความเสียหายเชิงเส้นอย่างไร
ฉันกำลังพัฒนาสูตรความเสียหายสำหรับเกม RPG ฉันได้ตรวจสอบสูตรชื่อหนังสือยอดนิยมมากมายสำหรับการอ้างอิง (Final Fantasy, Chrono Trigger, Golden Sun และ Castlevania) และส่วนใหญ่ดูเหมือนจะใช้ฟังก์ชันเชิงเส้น ปัญหาของฉันคือว่าสำหรับฟังก์ชั่นเชิงเส้น% ซึ่งความเสียหายเพิ่มขึ้นเมื่อการปรับระดับขึ้นลงในทุกระดับ ตัวอย่างเช่นเมื่อคุณไปจาก Lvl 2 ถึง Lvl 3 และสร้างความเสียหายเพิ่มขึ้น 50% แต่เมื่อคุณไปจาก Lvl 50 ถึง Lvl 51 การโจมตีจะสร้างความเสียหายแก่ศัตรูเดียวกัน 0.5% เท่านั้น ประกอบกับความจริงที่ว่า XP ในการเพิ่มเลเวลนั้นเพิ่มขึ้นอย่างมากในชื่อเหล่านี้มันไม่สมเหตุสมผลสำหรับฉัน ดังนั้นในขณะที่ฉันอยากจะละทิ้งฟังก์ชั่นประเภทนี้สำหรับเกมของฉันฉันรู้สึกว่ามีบางสิ่งที่ฉันจะต้องหายไปเนื่องจากเกมโปรดของฉันหลายคนใช้ ยิ่งกว่านั้นฉันได้เล่นเกมเหล่านี้และฉันไม่เคยสังเกตเห็นสิ่งนี้ เช่นการคำนวณความเสียหาย Golden Sun นั้นง่ายมาก: Damage = Attack - Defense สูตรความเสียหายของโปเกมอนด้านล่างนั้นซับซ้อนกว่าเล็กน้อย แต่การเติบโตของความเสียหายแบบสัมบูรณ์จะลดลงในแต่ละระดับ ฉันถูกต้องหรือไม่ที่จะคิดว่าความเสียหายในเกมเหล่านี้เพิ่มขึ้นในอัตราร้อยละที่ต่ำกว่าในแต่ละระดับ? พวกเขาสมดุลเกมอย่างไรเพื่อให้ระดับยังคงมีความสำคัญในภายหลังในเกม?

3
วิธีซ่อนโครงร่างหลังการประมวลผลเมื่อ / ตำแหน่งที่ซ่อนตาข่าย
ฉันกำลังทำงานเกี่ยวกับการตั้งค่าเค้าร่างที่ใช้งานอยู่ในเอนจิ้น 3 มิติของฉันเอฟเฟกต์ไฮไลท์สำหรับตัวละคร 3 มิติที่เลือกหรือฉากในหน้าจอ หลังจากทำงานกับ stencil buffer และรับผลลัพธ์ที่น่าพอใจ (ปัญหาเกี่ยวกับรูปร่างเว้าความหนาของร่างเนื่องจากระยะห่างจากกล้องและความไม่สอดคล้องระหว่างเดสก์ท็อปและแล็ปท็อปของฉัน) ฉันเปลี่ยนไปใช้การตรวจจับขอบและการสุ่มเฟรมบัฟเฟอร์ ค่อนข้างพอใจกับ อย่างไรก็ตามฉันไม่สามารถซ่อนเค้าร่างเมื่อตาข่ายที่เลือกอยู่ด้านหลังตาข่ายอื่น สิ่งนี้สมเหตุสมผลสำหรับกระบวนการของฉันเนื่องจากฉันเพียงแค่สร้างโครงร่าง 2 มิติจากเฟรมบัฟเฟอร์หลังจากเรนเดอร์ส่วนที่เหลือของฉาก การจับภาพหน้าจอสองรายการของฉันอยู่ด้านล่าง ที่แรกก็คือเค้าร่าง "ดี" ที่สองคือที่เห็นร่างอยู่เหนือตาข่ายที่บล็อกแหล่งที่มาเค้าร่าง กระบวนการเรนเดอร์ทำงานดังนี้: 1) วาดเฉพาะอัลฟาของตาข่ายที่ไฮไลต์เพื่อบันทึกภาพเงาดำในบัฟเฟอร์เฟรม (framebuffer1) 2) ส่ง texture จาก framebuffer1 ไปยัง shader ตัวที่สองซึ่งทำการตรวจจับขอบ จับขอบใน framebuffer2 3) แสดงฉากทั้งหมด 4) แสดงพื้นผิวจาก framebuffer2 ที่ด้านบนของฉาก ฉันมีแนวคิดเล็กน้อยเกี่ยวกับวิธีการทำให้สำเร็จและหวังว่าจะได้รับคำติชมเกี่ยวกับความถูกต้องของพวกเขาหรือวิธีการที่ง่ายกว่าหรือดีกว่า ก่อนอื่นฉันคิดว่าจะทำให้ฉากทั้งหมดเป็นบัฟเฟอร์เฟรมและเก็บเงาที่มองเห็นได้ของตาข่ายที่ถูกไฮไลต์ในช่องอัลฟา (สีขาวทั้งหมดจะบันทึกที่ที่ตาข่ายที่ไฮไลต์มองเห็น) จากนั้นฉันจะทำการตรวจจับขอบบนช่องอัลฟาทำการเรนเดอร์เฟรมบัฟเฟอร์ฉากแล้วทำการเรนเดอร์ขอบด้านบน ส่งผลให้บางสิ่งเช่นนี้: เพื่อให้บรรลุผลนี้ฉันคิดว่าการตั้งค่ากำหนดเฉพาะในระหว่างการส่งเรนเดอร์ของวัตถุที่ไฮไลต์ที่จะวาดสีดำทั้งหมดในอัลฟาสำหรับพิกเซลที่มองเห็นได้ แนวคิดที่สองของฉันคือการใช้กระบวนการเรนเดอร์ปัจจุบันตามที่ระบุไว้ข้างต้น แต่ยังเก็บพิกัด X, Y …

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