ปัญหาปกติที่สติ๊กเกอร์ค้างไว้


11

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

มีอีกสองสิ่งที่ฉันต้องการเพิ่มในระบบนี้: การตัดปกติและสติ๊กเกอร์แมปปกติ การตัดปกติคือเมื่อฉันทิ้งชิ้นส่วนที่ทอดข้ามมุมคม การกระทำที่นี่ วิธีการแก้ปัญหานี้คือการทิ้งเศษชิ้นส่วนที่มีความแตกต่างอย่างมากระหว่างค่าปกติใน G-Buffer และค่าปกติของรูปลอก สิ่งนี้จะต้องมีการอ่านพื้นผิวปกติของ G-buffer

ในการทำการแมปปกติของรูปลอกฉันต้องผสมผสานปกติของรูปลอก (จากแผนที่ปกติ) กับ G-บัฟเฟอร์ของปกติ ต้องเขียนไปยังพื้นผิวปกติของ G-buffer

ฉันหวังว่ามันชัดเจนว่าเพื่อรองรับคุณสมบัติทั้งสองนี้ฉันต้องอ่านและเขียนลงบนพื้นผิวปกติใน shader pass เดียวกัน น่าเศร้านี่คือพฤติกรรมที่ไม่ได้กำหนดดังนั้นฉันสงสัยว่ามีวิธีอื่นที่จะใช้คุณสมบัติเหล่านี้

คำตอบ:


1

คุณใช้ระบบการแสดงผลแบบใด ข้อมูลต่อไปนี้ควรถูกต้องสำหรับทุกระบบการแสดงผล แต่ใน DX11 หรือรุ่นที่ใหม่กว่า OpenGL อาจมีทางออกที่ดีกว่าเมื่อใช้ UAV

-

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

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

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

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

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