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

สำหรับคำถามทั้งหมดที่เกี่ยวข้องกับเฉดสีเช่นส่วนที่ตั้งโปรแกรมได้ของท่อส่ง GPU สำหรับคำถาม shader เฉพาะภาษาโปรดดูที่แท็ก [glsl] และ [hlsl]

1
ทำไมเงื่อนไขนี้ในส่วนย่อยของฉันจึงช้า
ฉันได้ตั้งค่ารหัสการวัด FPS บางอย่างใน WebGL (ตามคำตอบ SO นี้ ) และได้ค้นพบความแปลกประหลาดบางอย่างกับประสิทธิภาพของชิ้นส่วนของฉัน รหัสนี้แสดงเพียงรูปสี่เหลี่ยมจัตุรัสเดียว (หรือมากกว่าสองรูปสามเหลี่ยม) บนผืนผ้าใบขนาด 1024x1024 ดังนั้นเวทมนตร์ทั้งหมดจึงเกิดขึ้นในส่วนย่อย พิจารณา shader ง่าย ๆ นี้ (GLSL; vertex shader เป็นเพียงแค่ pass-through): // some definitions void main() { float seed = uSeed; float x = vPos.x; float y = vPos.y; float value = 1.0; // Nothing to see …

1
เงื่อนไขคงที่มีราคาแพงกว่าการเปลี่ยนเครื่องแต่ง
โดยทั่วไปแล้วการแตกแขนงในร่มเงาไม่ใช่ความคิดที่ดี แต่ตอนนี้ฉันมี shader ที่มีเงื่อนไขที่คงที่เกี่ยวกับการเรียกการดึงทั้งหมด ดังนั้นสาขาที่ดำเนินการจะเป็นแบบเดียวกันเสมอสำหรับการโทรแบบดึงครั้งเดียว การแตกแขนงแบบนี้ยังมีค่าใช้จ่ายสูงกว่าการมีหลายเฉดสีที่ไม่มีกิ่งเหล่านี้และสลับไปมาระหว่างกันหรือไม่?

2
เหตุใดแผนที่ปกติจึงเป็นสีน้ำเงินและสีม่วง
ฉันกำลังเรียนรู้เกี่ยวกับการทำแผนที่ปกติ ฉันเข้าใจว่าค่า RGB ถูกแปลงเป็น XYZ แต่คำถามของฉันคือมันถูกแปลงเป็นอย่างไรและเหตุใดแผนที่ปกติจึงเป็นสีน้ำเงินและสีม่วง
11 shader  lighting 

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

1
ประสิทธิภาพการวนซ้ำในเครื่อง Shader
ฉันสงสัยว่าอะไรคือวิธีที่ดีที่สุดในการรวมฟังก์ชั่นวนลูปแบบไดนามิกเข้ากับ shader? ครั้งแรกดูเหมือนว่าไม่สามารถใช้อาร์เรย์แบบไดนามิกได้ ดังนั้นจะดีกว่าหรือไม่ที่จะสร้างอาร์เรย์ขนาดสูงสุดและเติมเพียงบางส่วนหรือกำหนดอาร์เรย์ด้วยขนาดที่กำหนดไว้ล่วงหน้า แล้ววิธีที่ดีที่สุดในการทำซ้ำแถวลำดับนี้คืออะไร ควรใช้ลูปที่ไม่ได้ควบคุมหรือลูปไดนามิกสำหรับบางอย่างระหว่างการทำซ้ำ 4 ถึง 128 หรือไม่ if (i == myCurrentMaximumIterationNumber)ผมเคยเห็นยังว่ามันเป็นไปได้ที่จะคายมันจำนวนสูงสุดที่กำหนดไว้ล่วงหน้าซ้ำแล้วหยุดมันด้วยสภาพเช่น

1
ฉันจำเป็นต้องแต่งเครื่องแบบหรือคุณลักษณะใหม่เมื่อเปลี่ยนโปรแกรม shader หรือไม่
การแสดงฉากมักจะเกี่ยวข้องกับโปรแกรม shader มากกว่าหนึ่งโปรแกรมซึ่งในกรณีของฉันทุกคนใช้คุณลักษณะเดียวกันและใช้เครื่องแบบอย่างน้อยบางส่วน เพื่อให้ทำงานอย่างถูกต้องฉันกำลังเล่นอย่างปลอดภัยซึ่งหมายความว่าฉันเชื่อมโยงคุณลักษณะใหม่และรับตำแหน่งเครื่องแบบที่เหมาะสมทุกครั้งที่ฉันสลับระหว่างโปรแกรม Shader ดังนั้นโดยทั่วไปหลายครั้งในทุก ๆ เฟรมซึ่งอาจไม่ใช่วิธีที่ดีที่สุด ดังนั้นจำเป็นต้องรีบูทคุณลักษณะและชุดเครื่องแบบใหม่หลังจากเปลี่ยนโปรแกรม shader หรือไม่? และทำไม? ถ้าเป็นเช่นนั้นมีวิธีการทำเช่นนี้หนึ่งครั้งในช่วงเริ่มต้นของโปรแกรมและไม่ต้องแตะอีกครั้ง (ยกเว้นการตั้งค่าเครื่องแบบ)?
11 opengl  glsl  shader 


2
การใช้แผนที่พื้นผิวหลายอย่างไม่ดีสำหรับการแคชหรือไม่?
หากฉันมีพื้นผิวหลายอย่าง (พูดว่าแผนที่มากกว่า 5 แผนที่) ไปยังหน่วยพื้นผิวเดียวกันมันจะทำงานได้แย่กว่าแคชมากกว่าถ้าฉันมีเพียง 2 หรือ 3 พื้นผิว?

1
การแสดงผลที่มีประสิทธิภาพพร้อมแหล่งกำเนิดแสงจำนวนมาก
ในการสร้างฉากด้วยแหล่งกำเนิดแสงเดียวโดยใช้การแรเงาด้วยพงษ์เราสามารถคำนวณสีสุดท้ายของแต่ละชิ้นส่วนที่ส่งผ่านไปยังส่วนของชิ้นส่วนที่ขึ้นอยู่กับองค์ประกอบของแสงและแสงโดยรอบ สิ่งนี้สามารถขยายได้อย่างง่ายดายเพื่อรองรับแหล่งกำเนิดแสงหลายแห่งด้วยการเพิ่มผลลัพธ์ของการใช้แหล่งกำเนิดแสงแต่ละแหล่งบนชิ้นส่วนเช่น: final_color = (0, 0, 0, 1) for each light: final_color += apply_light(material, light) final_color = clamp(final_color, (0,0,0,1), (1,1,1,1)) อย่างไรก็ตามด้วยแหล่งกำเนิดแสงจำนวนมากกระบวนการนี้ค่อนข้างช้า ด้วยNไฟวิธีนี้ต้องใช้การคำนวณสำหรับการแรเงาพองที่จะทำNครั้งต่อชิ้นส่วน มีวิธีการที่ดีกว่าในการเรนเดอร์ฉากด้วยแหล่งแสงจำนวนมาก (หลายร้อยพัน ฯลฯ ) หรือไม่?

2
สาเหตุของการเกิดสิวเงา
ฉันรู้วิธีการทำแผนที่เงา แต่ฉันไม่ได้รับสาเหตุของการเกิดสิวเงา! ทุกคนสามารถบอกสาเหตุของการเกิดสิวเงาด้วยวิธีง่าย ๆ ได้หรือไม่และมันเกี่ยวข้องกับความละเอียดของแผนที่ลึกอย่างไร

1
รูปแบบที่ถูกต้องของคำศัพท์เรขาคณิต GGX
ฉันกำลังพยายามนำ BRDF ของ microfacet ไปใช้ใน raytracer ของฉัน แต่ฉันพบปัญหาบางอย่าง เอกสารและบทความจำนวนมากที่ฉันได้อ่านให้นิยามคำเรขาคณิตบางส่วนเป็นฟังก์ชันของมุมมองและเวกเตอร์ครึ่งหนึ่ง: G1 (v, h) อย่างไรก็ตามเมื่อใช้งานนี้ฉันได้รับผลลัพธ์ดังต่อไปนี้: (แถวล่างเป็นฉนวนความหยาบ 1.0 - 0.0, แถวบนสุดเป็นโลหะที่มีความหยาบ 1.0 - 0.0) มีไฮไลท์แปลก ๆ อยู่รอบ ๆ ขอบและตัดรอบ ๆ nl == 0 ฉันไม่สามารถเข้าใจได้ว่ามันมาจากไหน ฉันใช้ Unity เป็นข้อมูลอ้างอิงในการตรวจสอบการแสดงผลของฉันดังนั้นฉันจึงตรวจสอบแหล่งที่มาของ shader เพื่อดูว่าพวกเขาใช้อะไรและจากสิ่งที่ฉันสามารถบอกได้ว่าเทอมเรขาคณิตของพวกเขานั้นไม่ได้ถูกพาราเมท ดังนั้นฉันจึงลองใช้รหัสเดียวกัน แต่ใช้กับพื้นผิวมาโครปกติแทนที่จะเป็นครึ่งเวคเตอร์และได้ผลลัพธ์ดังนี้ สำหรับดวงตาที่ไม่ผ่านการฝึกฝนของฉันสิ่งนี้ดูเหมือนจะใกล้เคียงกับผลลัพธ์ที่ต้องการ แต่ฉันมีความรู้สึกว่ามันไม่ถูกต้อง? บทความที่ฉันอ่านส่วนใหญ่ใช้เวกเตอร์ครึ่งตัว แต่ไม่ใช่ทั้งหมด มีเหตุผลสำหรับความแตกต่างนี้หรือไม่? ฉันใช้รหัสต่อไปนี้เป็นคำเรขาคณิตของฉัน: float RayTracer::GeometryGGX(const Vector3& v, const Vector3& …

1
การคำนวณยอดต่อยอดใน OpenGL Tesselation
ฉันพยายามใช้การจำลองผ้าตามตำแหน่งโดยใช้การจัดการฮาร์ดแวร์ ซึ่งหมายความว่าฉันต้องการอัปโหลดรูปสี่เหลี่ยมควบคุมไปยังการ์ดกราฟิกจากนั้นใช้ tesselation และ geometry shading เพื่อสร้างโหนดในผ้า ความคิดนี้ตามหลังกระดาษ: Huynh, David "การจำลองผ้าโดยใช้ tessellation ฮาร์ดแวร์" (2011) วิทยานิพนธ์. สถาบันเทคโนโลยีโรเชสเตอร์ http://scholarworks.rit.edu/theses/265/ ฉันรู้วิธีการใช้ tesselation เพื่อสร้างจุดจำลอง สิ่งที่ฉันไม่รู้ก็คือวิธีเก็บข้อมูลที่คำนวณไว้ใน framebuffer รูปทรงเรขาคณิตและการประเมินค่า tesselation มีข้อมูลที่จำเป็นสำหรับการคำนวณต่อยอด แต่พวกเขาสามารถเขียนลงใน framebuffer โดยตรงได้หรือไม่ ส่วนที่ฉันรู้สามารถเขียนไปที่ framebuffer แต่ข้อมูลของฉันจะถูกแก้ไขและฉันจะไม่รู้ว่าจะเขียนตำแหน่งใดอีก

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