ตัวอย่างที่ดีของเอฟเฟกต์แบบมัลติพาส?


9

ใน XNA (และ Direct3D โดยทั่วไป AFAIK) แทนที่จะสร้างจุดสุดยอดและชิ้นส่วนแยกส่วนคุณรวมกลุ่มเฉดที่เกี่ยวข้องจำนวนมากไว้ใน 'เอฟเฟกต์' เมื่อคุณใช้เอฟเฟกต์คุณจะเลือก 'เทคนิค' (หรือวนซ้ำไปเรื่อย ๆ ) และจากนั้นแต่ละเทคนิคจะมีจำนวนรอบ คุณวนซ้ำผ่านแต่ละรอบที่เลือกจุดสุดยอดที่เกี่ยวข้องและ shader ส่วนและคุณวาดรูปทรงเรขาคณิต

สิ่งที่ฉันอยากรู้เกี่ยวกับสิ่งที่คุณจะต้องผ่านหลายรอบเพื่อ? ฉันเข้าใจในช่วงต้นของ 3 มิติคุณมีหน่วยพื้นผิวเพียงหน่วยเดียวและจากนั้นคุณมี 2 และบ่อยครั้งที่ยังไม่เพียงพอหากคุณต้องการทำแผนที่สิ่งแวดล้อม แต่สำหรับอุปกรณ์ที่ทันสมัยแม้ในชั้นเรียนมือถือคุณสามารถลองพื้นผิว 8 ชิ้นขึ้นไปและทำการคำนวณการส่องสว่างได้มากเท่าที่คุณต้องการใน shader เดียว

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

คำตอบ:


5

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

เช่นเดียวกับ Ranieri ที่พูดถึงตัวอย่างของ XNACC พวกเขาใช้หลายรอบเพื่อแสดงแสงจำนวนมาก แม้ว่าในตัวอย่างนั้นพวกเขากำลังดำเนินการผ่านเดียวกันเพียงครั้งเดียวสำหรับแต่ละแสง

โปรดทราบว่า Shader Model 2 และก่อนหน้านี้ไม่สามารถจัดการกับคำแนะนำได้ใกล้เคียงกับ Shader Model 3 หรือ 4 ในแต่ละ shader แต่ก็เป็นอีกเหตุผลหนึ่งที่แยกเอฟเฟกต์ออกเป็นหลายพาส - เพื่อรองรับฮาร์ดแวร์รุ่นเก่า


คุณสามารถยกตัวอย่างที่วัตถุ XNA Effect ที่คุณวนลูปผ่าน EffectPasses มีมากกว่าหนึ่งผ่านซึ่งตรงข้ามกับการใช้เอฟเฟกต์ต่าง ๆ และทำไม?
Jason Goemaat

4

ดังที่ได้อธิบายไว้ในคำตอบอื่น ๆ การแสดงผลหลายพาส (วาดตาข่ายเดียวหลายครั้งด้วยเฉดสี / พารามิเตอร์ที่แตกต่างกัน) ตามที่แนะนำในคำตอบอื่น ๆ ยังคงใช้เป็นหลักสำหรับแสงและเทคนิคพิเศษ

D3DX Effect สามารถใช้งานผ่านสิ่งเหล่านี้ได้ แต่มันสามารถนำไปใช้กับ shader / effect มากกว่าหนึ่ง

ความตั้งใจดั้งเดิมของการส่งผ่านคือการช่วยในการติดตั้งตัวแปลงแสงที่ซับซ้อนบนฮาร์ดแวร์ระดับล่าง (pre-shader-2.0) ซึ่งข้อ จำกัด เกี่ยวกับจำนวนของขั้นตอนพื้นผิวและคำแนะนำการแบ่งส่วนต่อรอบนั้นค่อนข้าง จำกัด

ในตัวอย่างของแสงหลายรอบจะมีประสิทธิภาพเพิ่มขึ้นอย่างมีนัยสำคัญโดยการใช้ผ่านแทนการเปลี่ยนผล?


3

นอกจากนี้ยังมีสิ่งที่แสงไฟที่ทุกคนกล่าวถึงอีกใช้งานที่สำคัญของที่นี่คือ ภาพเบลอ แนวนอนและแนวตั้งจะทำในการส่งผ่านแยกกัน (เพื่อให้ได้ความเบลอ 9x9 จะต้องมีการสุ่มตัวอย่าง 18 พิกเซลเท่านั้นสำหรับแต่ละพิกเซลเอาต์พุตแทนที่จะเป็น 81) ใช้สำหรับบลูม / HDR ความชัดลึกหรือแสง


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

1
@bluescrn - Bloom โดยทั่วไปถือว่าเป็นเอฟเฟกต์ 4 รอบ: หนึ่งเพื่อแยกพื้นที่สว่าง & downscale หนึ่งเพื่อเบลอแนวนอนหนึ่งเบลอในแนวตั้งหนึ่งเพื่อรวม / ยกระดับภาพเบลอกับต้นฉบับ ในขณะที่สามารถใช้พารามิเตอร์ shader เพื่อควบคุมสิ่งเหล่านี้ได้จำเป็นต้องมีการแยกสาขาเพื่อแยกความแตกต่างทั้งหมด แต่ผ่านการเบลอสองครั้ง
Robert Fraser


1

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

นอกจากนี้ฉันเชื่อว่า shaders ขนส่วนใหญ่ใช้หลายผ่าน


0

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

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