คำถามติดแท็ก rendering

กระบวนการสร้างภาพหรือชุดของภาพจากแบบจำลองโดยใช้โปรแกรมคอมพิวเตอร์

1
ในระบบวัสดุที่ใช้กราฟฉันจะสนับสนุนประเภทอินพุตและเอาต์พุตที่หลากหลายได้อย่างไร
ฉันพยายามที่จะตัดหัวของฉันรอบระบบวิธีวัสดุเช่นนี้ , นี้จะดำเนินการ ระบบที่มีลักษณะคล้ายกราฟที่ทรงพลังและเป็นมิตรต่อผู้ใช้เหล่านี้ดูเหมือนจะเป็นวิธีที่ใช้กันทั่วไปในการอนุญาตให้โปรแกรมเมอร์และโปรแกรมเมอร์ที่ไม่ใช่โปรแกรมเมอร์สร้างความแตกต่างอย่างรวดเร็ว อย่างไรก็ตามจากประสบการณ์ที่ จำกัด ของฉันกับการเขียนโปรแกรมกราฟิกฉันไม่แน่ใจว่าพวกเขาทำงานอย่างไร พื้นหลัง: ดังนั้นเมื่อฉันได้ตั้งโปรแกรมระบบการแสดงผล OpenGL อย่างง่ายมาก่อนฉันมักจะสร้างคลาสวัสดุที่โหลดรวบรวมและเชื่อมโยง shaders จากไฟล์ GLSL แบบคงที่ที่ฉันสร้างขึ้นด้วยตนเอง ฉันมักจะสร้างคลาสนี้เป็น wrapper ง่าย ๆ สำหรับการเข้าถึงตัวแปรชุด GLSL เป็นตัวอย่างง่ายๆลองนึกภาพว่าฉันมี Shader Vertex พื้นฐานและ Shader Fragment พื้นฐานพร้อม Texture2D แบบพิเศษสำหรับการส่งผ่านพื้นผิว คลาสวัสดุของฉันเพียงแค่โหลดและรวบรวมสองเฉดสีเหล่านั้นลงในวัสดุและจากจุดนั้นมันจะเปิดเผยอินเทอร์เฟซที่เรียบง่ายสำหรับการอ่าน / เขียนชุด Texture2D ของ shader นั้น เพื่อให้ระบบนี้มีความยืดหยุ่นเพิ่มขึ้นเล็กน้อยฉันมักจะเขียนด้วยวิธีที่อนุญาตให้ฉันพยายามส่งชุดชื่อ / ประเภทใด ๆ[เช่น: SetUniform_Vec4 ("AmbientColor", colorVec4); ซึ่งจะตั้งค่าเครื่องแบบ AmbientColor เพื่อเวกเตอร์ 4d โดยเฉพาะเรียกว่า "colorVec4" …

3
การแสดงผลเพียงบางส่วนของหน้าจอโดยมีรายละเอียดสูง
หากมีการแสดงผลกราฟิกในมุมมองที่กว้าง (เช่นทีวีที่มีขนาดใหญ่มากหรือชุดหูฟัง VR) ผู้ชมจะไม่สามารถมุ่งเน้นไปที่ภาพทั้งหมดจริง ๆ เพียงส่วนหนึ่งของมัน (อันที่จริงนี่เป็นกรณีสำหรับหน้าจอขนาดปกติเช่นกัน) เมื่อรวมกับวิธีการติดตามสายตาของผู้ชม (ซึ่งส่วนใหญ่ทำงานได้ใน VR ฉันเดา) คุณสามารถใช้ประโยชน์จากทฤษฎีนี้และแสดงกราฟิกให้ห่างจากจุดโฟกัสของผู้ชมด้วยรายละเอียดและความละเอียดที่ลดลงทำให้ประสิทธิภาพโดยไม่สูญเสียคุณภาพ มีเทคนิคใดบ้างสำหรับสิ่งนี้ที่มีอยู่หรือกำลังพัฒนาอยู่ในปัจจุบัน

3
เหตุใดฉันจึงควรแยกวัตถุออกจากการแสดงผล
Disclamer:ฉันรู้ว่ารูปแบบของเอนทิตีคืออะไรและฉันไม่ได้ใช้ ฉันอ่านมากเกี่ยวกับการแยกวัตถุและการแสดงผล เกี่ยวกับความจริงที่ว่าตรรกะของเกมควรเป็นอิสระจากเอ็นจิ้นการเรนเดอร์พื้นฐาน นั่นเป็นสิ่งที่ดีและสวยงามและมันก็สมเหตุสมผลดี แต่มันก็ทำให้เกิดความเจ็บปวดอื่น ๆ อีกมากมายเช่นกัน: ต้องการการซิงโครไนซ์ระหว่างวัตถุลอจิกและวัตถุการแสดงผล (อันที่ทำให้สถานะของภาพเคลื่อนไหว, สไปรต์ ฯลฯ ) จำเป็นต้องเปิดวัตถุตรรกะให้กับประชาชนเพื่อให้วัตถุแสดงผลอ่านสถานะที่แท้จริงของวัตถุตรรกะ (มักจะนำวัตถุตรรกะที่จะเปลี่ยนได้อย่างง่ายดายในวัตถุทะเยอทะยานและ setter) นี่มันฟังดูไม่ดีสำหรับฉัน ในทางกลับกันมันง่ายมากที่จะจินตนาการว่าวัตถุเป็นตัวแทนของ 3d (หรือ 2d) และยังง่ายต่อการบำรุงรักษา มีวิธีการรักษาการแสดงกราฟิกและตรรกะเกมควบคู่กัน (หลีกเลี่ยงปัญหาการซิงโครไนส์) แต่เป็นนามธรรมออกไปจากเอ็นจิ้นการเรนเดอร์หรือไม่? หรือมีวิธีแยกตรรกะเกมและการเรนเดอร์ที่ไม่ทำให้เกิดข้อเสียข้างต้นหรือไม่? (อาจมีตัวอย่างฉันไม่เข้าใจการพูดที่เป็นนามธรรม)

1
การแสดงผลความสามัคคีบนจอภาพหลายจอ
ในขณะนี้ฉันพยายามทำให้เอกภาพวิ่งข้ามจอภาพ 2 จอ ฉันได้ทำการวิจัยแล้วและรู้ว่านี่เป็นไปได้อย่างเคร่งครัด มีวิธีแก้ปัญหาที่คุณต้องทำให้ขนาดของหน้าต่างเป็นขุยเพื่อให้มีความเป็นเอกภาพในการแสดงผลบนจอภาพทั้งสอง สิ่งที่ฉันทำคือสร้างความละเอียดหน้าจอที่กำหนดเองใหม่ซึ่งใช้ความกว้างของจอภาพทั้งสองของฉันดังที่เห็นในภาพต่อไปนี้คือ 3840 x 1080 เมื่อใดก็ตามที่ฉันไปเรียกใช้ exe เกม Unity ที่มีขนาดนั้น ทั้งหมดที่ฉันได้รับคือ: ขนาดที่กำหนดเองของฉันควรอยู่ที่ด้านล่างสุด แต่ไม่ใช่ มีบางอย่างที่ฉันยังไม่ได้ทำหรือพลาดไปซึ่งจะทำให้ความเป็นเอกภาพในขนาดหน้าจอที่กำหนดเองของฉันเมื่อมันมาถึงการรันเกมของฉันผ่านทาง exe หรือไม่? สิ่งที่น่าแปลกใจก็คือภายในเครื่องมือแก้ไขความสามัคคีขนาดหน้าจอที่กำหนดเองของฉันถูกหยิบขึ้นมาและฉันสามารถตั้งให้เป็นขนาดนั้นได้ในหน้าต่างเกมของฉัน: มีบางอย่างที่ฉันลืมทำเมื่อฉันสร้างและเรียกใช้เกมจากเมนูไฟล์หรือไม่? มีใครเคยเอาชนะปัญหานี้มาก่อนหรือไม่
11 unity  rendering 

3
แสดงการชนกันของการเคลื่อนไหวช้า ๆ อย่างผ่อนคลายหรือไม่?
ในเกมแข่งรถจำนวนมาก (เช่นBurnout Paradise ) เมื่อเกิดการชนเกมจะเล่นโดยอัตโนมัติเพื่อสลับการเคลื่อนที่ช้าและดำเนินการในลำดับช้าจนกระทั่งหลังจากการปะทะเสร็จสมบูรณ์ ฉันคิดเสมอว่านี่เป็นผลกระทบ คุณไม่ต้องการพลาดส่วนหนึ่งส่วนใดของการปะทะ! แต่หนึ่งในเพื่อนของฉันเพิ่งแนะนำว่าสิ่งนี้ทำเพื่อให้แน่ใจว่าไม่จำเป็นต้องมีการประมวลผลที่ล้นหลามเมื่อเกิดการชน ตอนนี้ฉันคิดว่ามันเป็นทางกลับกัน เมื่อมีการชนเกิดขึ้นรายละเอียดจำนวนมากแสดงในแบบสโลว์โมชั่นฉันแน่ใจว่ามีโอเวอร์เฮดในการคำนวณและการเรนเดอร์ไปป์ไลน์ อะไรที่ถูกต้อง? ภาพเคลื่อนไหวช้าเพิ่มการใช้ CPU / GPU หรือลดลงหรือไม่

4
ระบบและการแสดงผล
Okey สิ่งที่ฉันรู้จนถึงตอนนี้; เอนทิตีประกอบด้วยส่วนประกอบ (data-storage) ซึ่งเก็บข้อมูลเช่น; - พื้นผิว / สไปรต์ - Shader - ฯลฯ จากนั้นฉันก็มีระบบตัวแสดงภาพที่วาดทั้งหมดนี้ แต่สิ่งที่ฉันไม่เข้าใจก็คือการออกแบบโหมดแสดงภาพควรเป็นอย่างไร ฉันควรมีองค์ประกอบหนึ่งรายการสำหรับ "ประเภทภาพ" แต่ละรายการหรือไม่ องค์ประกอบหนึ่งที่ไม่มี shader หนึ่งชิ้นที่มี shader เป็นต้น เพียงแค่ต้องป้อนข้อมูลบางอย่างใน "วิธีที่ถูกต้อง" เพื่อทำสิ่งนี้ เคล็ดลับและข้อผิดพลาดที่ต้องระวัง

1
ฉันจะสร้างหมอกที่มีปริมาตรสูงได้อย่างไร
เมื่อเร็ว ๆ นี้ฉันกำลังมองหาเทคนิคในการสร้างหมอกควันตามปริมาตรในระดับตำแหน่ง Y ของโลกของเกม แต่สิ่งที่ฉันได้พบคือหมอกที่เกิดจากการใช้ระบบอนุภาคหรือหมอกของเครื่องยนต์ในตัวที่ไม่เหมาะกับสิ่งที่ฉันกำลังมองหา ในกรณีของฉันฉันต้องการหมอกที่มีประสิทธิภาพและหนาแน่น มันควรจะเป็นเกมทั่วโลก แต่เห็นได้ชัดว่าด้วยเหตุผลด้านประสิทธิภาพมันสามารถแสดงผลเป็นส่วนหนึ่งของกล้องหรือ shader และดูเหมือนว่ามันจะเคลื่อนไหวแม้ว่ามันจะเป็นเพียงภาพลวงตา ฉันสามารถตั้งค่าระบบอนุภาคถ้าเป็นตัวเลือกที่ดีที่สุดแนบกับกล้องและทำให้มันเคลื่อนที่ ดังนั้นคำถามหลักยังคงอยู่ - ฉันจะใช้หมอกแบบปริมาตรที่หนาแน่นและมีประสิทธิภาพได้อย่างไร เป็นเครื่องมือเฉพาะที่ฉันใช้มันเป็นเอกภาพ ตัวอย่างสิ่งที่ฉันหมายถึงนี่คือลิงค์ไปยังเกมที่มีเอฟเฟกต์ที่ฉันกำลังมองหา: Astromike
10 unity  shaders  rendering  fog 

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

1
วิธีแคชทรัพยากรในระบบการแสดงผล homebrew ของฉัน
พื้นหลัง: ฉันกำลังออกแบบระบบการเรนเดอร์ 3D แบบง่ายสำหรับสถาปัตยกรรมชนิดเอนทิตีคอมโพเนนต์โดยใช้ C ++ และ OpenGL ระบบประกอบด้วย renderer และกราฟฉาก เมื่อฉันเสร็จสิ้นการทำซ้ำครั้งแรกของโหมดแสดงภาพฉันอาจกระจายกราฟฉากลงในสถาปัตยกรรม ECS สำหรับตอนนี้มันเป็นตัวยึดตำแหน่งทางเดียวหรืออื่น หากเป็นไปได้ต่อไปนี้เป็นเป้าหมายของฉันสำหรับผู้สร้างภาพ: ความง่าย นี่เป็นโครงการวิจัยและฉันต้องการที่จะสามารถเปลี่ยนแปลงและขยายระบบของฉันได้อย่างง่ายดาย (ด้วยวิธีการของ ECS) การปฏิบัติ ฉากของฉันอาจมีนางแบบขนาดเล็กจำนวนมากและยังมีเล่มขนาดใหญ่ที่มีรูปทรงเรขาคณิตมากมาย ไม่สามารถรับวัตถุจากบริบท OGL และเรขาคณิตบัฟเฟอร์ทุกเฟรมการเรนเดอร์ ฉันตั้งเป้าหมายในการหาที่ตั้งของข้อมูลเพื่อหลีกเลี่ยงการพลาดแคช มีความยืดหยุ่น มันจะต้องสามารถแสดงสไปรต์โมเดลและโวลุ่ม (voxels) แยกออก กราฟฉากอาจถูก refactored ลงในสถาปัตยกรรมหลักของ ECS หลังจากที่ฉันเขียน renderer ของฉัน modular เป็นเรื่องดีที่สามารถสลับในโหมดแสดงภาพที่ต่างกันได้โดยไม่ต้องเปลี่ยนกราฟฉากของฉัน ความโปร่งใสอ้างอิงซึ่งหมายความว่า ณ เวลาใด ๆ ฉันสามารถให้มันถูกต้องฉากใด ๆ และมันจะทำให้ภาพเดียวกันสำหรับฉากนั้น โดยเฉพาะอย่างยิ่งเป้าหมายนี้ไม่จำเป็นต้องมี ฉันคิดว่ามันจะช่วยทำให้การจัดลำดับฉากเป็นเรื่องง่ายขึ้น (ฉันจะต้องสามารถบันทึกและโหลดฉาก) และให้ความยืดหยุ่นในการสลับฉากต่าง ๆ …

2
วิธีฉายโครงโฟมบนตาข่ายที่เปลี่ยนแปลงตลอดเวลา
ฉันพยายามที่จะสร้างน้ำและตอนนี้ฉันได้รับมันผ่านการสร้างคลื่นแบบไดนามิกบนตาข่าย แต่ตอนนี้ฉันต้องการทำให้เรือของฉันจัดการกับคลื่นเหล่านี้และทำให้เคลวินตื่นขึ้นมาบนจุดนี้ ความจริงก็คือฉันสร้างน้ำโดยใช้กระเบื้องที่แตกต่างกันซ้ำรูปแบบเดียวกันแบบไดนามิก ดังนั้นฉันจะสร้างสิ่งนี้บนตาข่าย (เครื่องบิน) ที่สร้างขึ้นแบบไดนามิกได้อย่างไร หากไม่มีการจัดการกระเบื้องอื่น ๆ (เครื่องบิน)
10 c#  unity  rendering 

1
ใน OpenGL การเรนเดอร์“ zero state” คืออะไร?
เมื่อเร็ว ๆ นี้ในการสัมภาษณ์งานฉันได้กล่าวว่าฉันสอนตัวเอง OpenGL ที่ทันสมัยและแสดงผลด้วยวัตถุบัฟเฟอร์จุดสุดยอดเพราะมหาวิทยาลัยของฉันสอนเฉพาะฟังก์ชั่นไปป์ไลน์ที่มีการแสดงโหมดทันทีในเวลานั้น ผู้สัมภาษณ์ขัดจังหวะฉันสั้น ๆ เพื่อบอกว่า VBOs ถูกแทนที่อย่างมีประสิทธิภาพด้วยสิ่งที่เรียกว่า "การปรับค่าสถานะเป็นศูนย์" แล้วให้ฉันดำเนินการต่อ ฉันลืมถามในภายหลังเกี่ยวกับสิ่งที่ตั้งใจทำเพราะเราย้ายไปเรียนวิชาอื่นอย่างรวดเร็วและผู้สัมภาษณ์หมดเวลาในตอนท้ายเนื่องจากตารางงานที่ยุ่ง หลังจากนั้นฉันค้นหาทางออนไลน์เพื่อหา "สถานะ OpenGL เป็นศูนย์" และ "แสดงสถานะเป็นศูนย์" โดยไม่มีผลลัพธ์ที่เกี่ยวข้องซึ่งส่วนใหญ่เป็นเพียงเรื่องเกี่ยวกับสถานะ OpenGL องค์กรที่มีปัญหาเป็นงานวิจัยที่หนักมากดังนั้นจึงมีโอกาสที่จะเป็นส่วนเสริมที่มีการสนับสนุนเพียงเล็กน้อยในปัจจุบันหรือว่าคำศัพท์ที่ใช้แตกต่างกันไป

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

2
ฉันจะแสดงภูมิประเทศในมุมมอง 2.5D ได้อย่างไรเช่นในเกม Don't Starve
ผมมีประสบการณ์ในการทำ 2D เกม scroller ด้านเช่น Terraria แต่ตอนนี้ฉันต้องการที่จะท้าทายตัวเองและทำให้เกมที่มีเป็นมุมมอง 2.5D เกมที่ฉันพยายามเลียนแบบคือ Don't Starve ตอนนี้โฟกัสของฉันอยู่ที่การหาวิธีทำให้พื้นดิน ฉันมีเวลายากลำบากในการหาวิธีที่พวกเขาสร้างพื้นดินและจากนั้นแสดงผล วิธีที่ฉันคิดว่าพวกเขาทำให้พื้นดินเกิดจากการทาสีพื้นในโปรแกรมระบายสีก่อนแล้วจึงจัดการภาพแบนนั้นเพื่อให้มีความลึก ฉันสับสนอย่างสมบูรณ์ว่าคุณจะทำให้ภูมิประเทศนั้นเป็นอย่างไร ฉันต้องการให้ภูมิประเทศมีคุณสมบัติดังต่อไปนี้: ดูภูมิประเทศใน Don't Starve นี่คือวิดีโอแสดงภูมิประเทศใน Don't Starve ภูมิประเทศจะเรียบและมุมและมุมมองของกล้องจะได้รับการแก้ไข คำแนะนำและคำแนะนำใด ๆ จะได้รับการชื่นชมขอบคุณล่วงหน้า (ฉันทำงานใน Java โดยใช้ Light Game Java Light Library (LWJGL))


4
อะไรทำให้พื้นผิวซ้อนทับกันอย่างแน่นอน
ฉันไม่สามารถเข้าใจได้ว่าอะไรทำให้พื้นผิวด้านหนึ่งทับซ้อนกัน ในเครื่องมือ 3 มิติที่ฉันสร้างขึ้นเทคนิคของฉันล้มเหลวในกรณีแบบขอบ วิธีการของฉันคือการเรียงลำดับพื้นผิวที่จะทาสีจากระยะไกลไปจนสุด เพื่อกำหนดความใกล้ชิดฉันกำลังเปรียบเทียบค่า z เฉลี่ย อย่างไรก็ตามบางครั้งพื้นผิวที่ทับซ้อนกันมีค่า z เฉลี่ยสูงกว่าพื้นผิวที่ทับซ้อนกัน ดังนั้นพื้นผิวที่อยู่ไกลออกไปจึงถูกทาสีทับพื้นผิวที่อยู่ใกล้ยิ่งขึ้นส่งผลให้เกิดการเรนเดอร์แบบนี้: สิ่งที่เราจะเห็นคือพื้นผิวด้านหน้าสีม่วงของลูกบาศก์เท่านั้นในขณะที่พื้นผิวด้านสีแดงถูกทาสีทับสีม่วง ค่าเฉลี่ย z ของพื้นผิวสีม่วงสูงกว่าดังนั้นจึง 'ไกลออกไป' ดังนั้นฉันสงสัยว่าเทคนิคนี้ถูกต้องหรือไม่ สิ่งที่ฉันพยายามก็คือการหาระยะทางจากกล้อง (เช่นที่มา) ไปยังพื้นผิว แต่แล้วฉันก็ต้องการจุด ฉันเลือกตรงกลางของแต่ละพื้นผิว แต่มันก็ไม่ได้ผลเสมอไปเพราะทุกพื้นผิวไม่ใหญ่เท่ากัน ดังนั้นวิธีที่เชื่อถือได้ในการกำหนดลำดับของความใกล้ชิดของพื้นผิวที่มีต่อแหล่งกำเนิดคืออะไร?
10 3d  rendering 

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