แผนที่พื้นผิวกับอาเรย์พื้นผิว: พวกเขาจัดการกับซีพียูและ GPU ต่างกันอย่างไรและมีผลกระทบอย่างไรต่อประสิทธิภาพการทำงาน?


10

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

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

หากรายละเอียดทางเทคนิคเกี่ยวกับการดำเนินงานของ Unity ขาดไปเนื่องจากความโชคร้ายที่ปิดตายโชคไม่ดีฉันจะมีความสุขมากกับคำตอบเกี่ยวกับ OpenGL.s ArrayTexture


ฉันไม่แปลกใจเลยที่คุณไม่พบการเปรียบเทียบทางเทคนิคเนื่องจากทั้งคู่นั้นขึ้นอยู่กับการนำไปใช้งาน (มากกว่าสำหรับอาร์เรย์)
จันทร์ที่

คุณกำลังจะได้รับข้อมูลเกี่ยวกับการทำงานของเอนจิน Unity engine เนื่องจากเป็นกล่องดำแบบปิด สิ่งเดียวที่คุณทำได้คือโพรไฟล์แต่ละกรณีและเปรียบเทียบการใช้ cpu และ gpu ด้วยตัวคุณเอง เพื่อให้เข้าใจถึงวิธีการทำงานจะต้องให้วิศวกร Unity ก้าวเข้ามาหรือซอร์สโค้ดของพวกเขาเพื่อเปิดหรือรั่วไหล
jgallant

@ จอนยุติธรรมเพียงพอ แต่จริงๆแล้วฉันสนใจคำตอบของผู้ไม่เชื่อเรื่องพระเจ้ามากขึ้น หากมีความแตกต่างกันมากฉันสามารถอัปเดตคำถามเพื่อพูดคุยเกี่ยวกับตัวอย่างเช่น ArrayTexture ของ OpenGL: opengl.org/wiki/Array_Texture
ASteer

คำตอบ:


12

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

มีความแตกต่างเล็กน้อยในแง่ของวิธีที่คุณใช้แต่ละตัวเลือกซึ่งจะมีการใช้อย่างสม่ำเสมอ:

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

วิธีนี้จะช่วยหลีกเลี่ยงปัญหาที่พบบ่อยเกี่ยวกับ atlases texture ซึ่งเราจำเป็นต้องเพิ่มการเติมระหว่าง swatches texture ที่อยู่ติดกันเพื่อให้ตัวอย่างที่ขอบไม่ให้เลือดออกมารวมกันโดยเฉพาะในระดับ mip ที่ลึกกว่า

นอกจากนี้ยังหมายความว่าหากคุณต้องการให้พื้นผิวของคุณเรียงต่อกันคุณสามารถใช้ฮาร์ดแวร์การสุ่มตัวอย่างพื้นผิวเพื่อทำเช่นเดียวกับพื้นผิววานิลลา ด้วย atlases เรามักจะต้องทำการคำนวณแบบเรียงต่อกันใน shader ชิ้นส่วนของเราเนื่องจากตัวอย่างเพียงแค่ห่อ / กระจก / ที่หนีบ / เส้นขอบพิกัดพื้นผิวทั่วแผนที่ทั้งหมดไม่ใช่กระเบื้องบุคคลภายใน

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


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

ข้อเสียของพื้นผิวอาร์เรย์อื่น ๆ : พวกเขาจะถูก จำกัด GL_MAX_ARRAY_TEXTURE_LAYERSด้วย สำหรับ GPU กึ่งทันสมัยของฉันนี่คือ 2048 ดังนั้นหากคุณต้องการพื้นผิวเล็ก ๆ ขีด จำกัด นี้อาจต่ำเกินไป
jwd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.