ปัญหาของคุณจะแก้ปัญหาการแสดงผลด้วย 1 บิตอัลฟา ซึ่งหมายความว่าคุณระบุอัลฟาของแหล่งที่มาซึ่งไม่ได้แสดงผล (ส่วนใหญ่ 0.5)
คุณต้องเขียน Shader discard
ของคุณเองสำหรับการบันทึกความลึกจากการเรียนการสอนและการใช้แสง ยกเลิกมีอยู่ใน hlsl, glsl และ cg เช่นกัน มันมีอยู่ในพิกเซล / ชิ้นส่วน shader และทิ้งส่วนที่ขาดจากการเรนเดอร์ไปสู่ backBuffer และเป็น z-buffer
if (texSample.a < 0.5)
discard;
ข้อได้เปรียบคือคุณไม่จำเป็นต้องเปลี่ยนการเรนเดอร์ครั้งที่ 2 ของคุณเฉพาะการเรนเดอร์แสงเท่านั้น นอกจากนี้ฉันได้พิสูจน์ว่ามันใช้งานได้:
หากคุณต้องการแสดงเงาที่ถูกต้องสำหรับวัตถุโปร่งใสหลาย ๆ อันคุณจะต้องใช้พื้นผิวที่มีความลึกหลายระดับพร้อมข้อมูลความลึกและความทึบแสงที่แสดงผลโดยใช้การปอกเปลือกแบบลึก และสำหรับควันผม ฯลฯ ความทึบลึกหรือแผนที่ความทึบแสงฟูริเยร์เป็นทางออกที่ดีที่สุด (ฉันแนะนำแผนที่ความทึบแสงแบบฟูริเยร์)
แก้ไข: ฉันเพิ่งรู้ว่าฉันลืมเพิ่มเครดิต เหมือนเคย. แบบจำลองทรีมาจากโครงการวนซ์ซึ่งยอดเยี่ยมมากถ้าคุณกำลังมองหาโพลีต่ำแบบพื้นผิวหนึ่งและแบบจำลองพืชฟรี