คอมพิวเตอร์กราฟฟิค

ถาม - ตอบสำหรับนักวิจัยคอมพิวเตอร์กราฟิกและโปรแกรมเมอร์

2
ติดตามเส้นทาง Cook-Torrance BRDF
- ขออภัยสำหรับการโพสต์ที่ยาวนาน แต่ฉันชอบที่จะทำอย่างนั้นเพราะ " ปีศาจอยู่ในรายละเอียด " :) ฉันกำลังเขียนตัวติดตามเส้นทางจากรอยขีดข่วนและมันทำงานได้ดีสำหรับพื้นผิวที่กระจายอย่างสมบูรณ์ (Lambertian) ( เช่นการทดสอบการบ่งชี้ของเตาเผา - อย่างน้อยก็มองเห็นได้ - ว่าเป็นการอนุรักษ์พลังงานและภาพที่แสดงนั้นตรงกับที่สร้างด้วย Mitsuba renderer พารามิเตอร์) ตอนนี้ฉันกำลังใช้การสนับสนุนคำศัพท์เฉพาะของรุ่น microfacet Cook-Torrance ดั้งเดิมเพื่อแสดงพื้นผิวโลหะบางอย่าง อย่างไรก็ตามดูเหมือนว่า BRDF นี้จะสะท้อนพลังงานมากกว่าที่ได้รับ ดูภาพตัวอย่างด้านล่าง: ภาพด้านบน: ภาพอ้างอิงมิตซูบะ (สันนิษฐานว่าถูกต้อง) ภาพ: การติดตามเส้นทางด้วยการสุ่มตัวอย่างแสงโดยตรงการสุ่มตัวอย่างซีกโลกที่สำคัญความยาวเส้นทางสูงสุด = 5, 32 เอสพีพีที่จัดแบ่งชั้นกรองกล่องพื้นผิวขรุขระ = 0.2, RGB ภาพด้านบน: ภาพที่แสดงจริง: กำลังดุร้ายไร้เดียงสาการติดตามเส้นทาง, การสุ่มตัวอย่างซีกโลกสม่ำเสมอ, ความยาวพา ธ สูงสุด = 5, 4096 stratified spp, …

3
หลีกเลี่ยงการต่อสู้ด้วยพื้นผิวที่บังเอิญ
เมื่อเรนเดอร์พื้นผิว co-planar สองอันที่ทับซ้อนกันปัญหาทั่วไปคือ "z-fighting" ซึ่งตัวเรนเดอร์ไม่สามารถตัดสินใจได้ว่าพื้นผิวใดของทั้งสองพื้นผิวนั้นอยู่ใกล้กับกล้องมากขึ้น วิธีการแก้ปัญหามาตรฐานนี้คือเพื่อให้พื้นผิวมีการชดเชยเล็กน้อยเมื่อออกแบบแบบจำลอง มีวิธีแก้ปัญหาอื่น ๆ อีกไหม?
26 rendering 

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

2
ค่าใช้จ่ายในการเปลี่ยนสถานะคืออะไร?
โปรแกรมเมอร์ควรมีความคิดที่ดีเกี่ยวกับค่าใช้จ่ายของการดำเนินการบางอย่างเช่นค่าใช้จ่ายในการเรียนการสอนบน CPU, ค่าใช้จ่ายของ L1, L2, หรือ L3 Cache, ค่า LHS เมื่อพูดถึงกราฟิกฉันรู้ว่าฉันไม่รู้ตัวเลยว่ามันคืออะไร ฉันมีในใจว่าถ้าเราสั่งพวกเขาโดยค่าใช้จ่ายการเปลี่ยนแปลงสถานะเป็นดังนี้ การเปลี่ยนเครื่องแบบของ Shader การเปลี่ยนแปลงบัฟเฟอร์จุดสุดยอดที่ใช้งานอยู่ การเปลี่ยนแปลงหน่วยพื้นผิวที่ใช้งานอยู่ การเปลี่ยนแปลงโปรแกรม shader ที่ใช้งานอยู่ การเปลี่ยนบัฟเฟอร์เฟรมที่แอ็คทีฟ แต่นั่นเป็นกฎง่ายๆที่อาจจะไม่ถูกต้องและฉันก็ไม่รู้ว่าคำสั่งของขนาดนั้นคืออะไร หากเราพยายามใส่หน่วย, ns, รอบสัญญาณนาฬิกาหรือจำนวนคำสั่งเราพูดถึงเท่าไหร่?

1
คณิตศาสตร์มุมมองของฉันถูกต้องหรือไม่
ฉันมีการบ้านที่ฉันต้องคำนวณและพล็อตจุดบางจุดโดยใช้การแปลงแบบ pespective แต่ฉันไม่แน่ใจว่าผลลัพธ์ของฉันถูกต้องเนื่องจากพล็อต 3 มิติที่ใช้พิกัดกล้องดูแตกต่างจาก 2d โดยใช้พิกัดภาพ . คุณช่วยฉันเข้าใจสิ่งที่ผิดหรือเปล่า? นี่คือสิ่งที่ได้รับ: กล้องอยู่ที่จุด , ระบุในพิกัดโลก (เป็นเมตร) ระบบพิกัดของกล้องหมุนรอบแกน Y ของการอ้างอิงโลกโดยดังนั้นเมทริกซ์การหมุนคือWTC= [ - 1 , 1 , 5 ]TWTC=[-1,1,5]T_WT^C = [−1, 1, 5]^Tw R c = [ c o s ( θ ) 0 s i n ( θ ) 0 1 0 - …

2
ทำไมอินเวอร์ส transposed ของเมทริกซ์มุมมองแบบจำลองที่ใช้ในการแปลงเวกเตอร์ปกติ?
เมื่อเรนเดอร์ฉาก 3 มิติด้วยการแปลงที่นำไปใช้กับวัตถุบรรทัดฐานจะต้องถูกเปลี่ยนเป็นอินเวอร์ส transposed ของเมทริกซ์มุมมองโมเดล ดังนั้นด้วยปกติ , modelViewMatrixการแปลงปกติคือM n ′nnnMMMn'n′n' n'= ( M- 1)T⋅ nn′=(M−1)T⋅nn' = (M^{-1})^{T} \cdot n เมื่อเปลี่ยนวัตถุมันเป็นที่ชัดเจนว่าจะต้องมีการแปลงมาตรฐาน แต่ทำไมในทางคณิตศาสตร์นี่คือเมทริกซ์การแปลงที่สอดคล้องกัน?

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

3
เหตุใดความปลอดภัยของเธรดจึงเป็นเรื่องใหญ่สำหรับ Graphics APIs
ทั้ง Vulkan และ DirectX12 นั้นอ้างว่าใช้ได้ในลักษณะที่ปลอดภัยต่อเธรด คนดูเหมือนจะตื่นเต้นกับเรื่องนี้ ทำไมสิ่งนี้จึงถือว่าเป็นคุณสมบัติที่ยิ่งใหญ่? การประมวลผล "ของจริง" จะถูกโยนข้ามบริดจ์หน่วยความจำบนหน่วยประมวลผลแยกต่างหาก นอกจากนี้ถ้ามันใหญ่มากทำไมมันไม่ได้จนถึงตอนนี้ที่เธรดกราฟิกปลอดภัย API ออกมา

1
ทำไมเสียงเพอร์ลินของฉันจึงดู“ บล็อก”?
ฉันพยายามใช้ Perlin Noise ด้วยตัวเองโดยใช้เพียงทฤษฎี (ติดตาม flafla2.github.io/2014/08/09/perlinnoise.html) น่าเสียดายที่ฉันไม่สามารถมองหาเสียงเพอร์ลิน "ดั้งเดิม" ได้ อะไรคือสาเหตุที่รหัสด้านล่างแสดงผล Perlin Noise รุ่นที่บล็อก ฉันควรปรับปรุง / เปลี่ยนแปลงรหัสเพื่อให้แสดงผล Perlin Noise โดยไม่มีสิ่งประดิษฐ์หรือไม่ ฉันสงสัยว่าอาจมีปัญหาไม่ว่าจะเป็นวิธีการสอดแทรกหรือในgradsเวกเตอร์ gradsเวกเตอร์มีผลคูณจุดของ (เวกเตอร์สุ่มสำหรับจุดตาข่าย) และ (เวกเตอร์ขนาด) - ทั้ง 4 จุดขัดแตะอยู่บริเวณใกล้เคียง (เวกเตอร์สุ่มและขนาดอธิบายไว้ในลิงค์แรก) GLSL Sandbox: http://glslsandbox.com/e#32663.0 float fade(float t) { return t * t * t * (t * (t * 6. - 15.) …
21 glsl  noise  artifacts 


3
รูเล็ตรัสเซียเป็นคำตอบจริงๆหรือไม่?
ฉันได้เห็นแล้วว่าในการติดตั้ง Path Tracing การใช้แนวทางที่เรียกว่า Russian Roulette นั้นใช้ในการกำจัดเส้นทางบางส่วนและแบ่งปันผลงานของพวกเขาในเส้นทางอื่น ๆ ฉันเข้าใจว่าแทนที่จะติดตามเส้นทางจนกว่ามันจะลดลงต่ำกว่าค่าการสนับสนุนที่กำหนดไว้และจากนั้นให้ทิ้งการใช้เกณฑ์ที่แตกต่างกันและเส้นทางที่การบริจาคต่ำกว่าเกณฑ์นั้นจะถูกยกเลิกด้วยความน่าจะเป็นเพียงเล็กน้อยเท่านั้น เส้นทางอื่นมีส่วนร่วมของพวกเขาเพิ่มขึ้นตามจำนวนที่สอดคล้องกับการแบ่งปันพลังงานที่หายไปจากเส้นทางที่ถูกยกเลิก ฉันยังไม่ชัดเจนว่าจะเป็นการแก้ไขอคติที่ได้รับการแนะนำโดยเทคนิคหรือไม่หรือจำเป็นต้องใช้เทคนิคทั้งหมดเพื่อหลีกเลี่ยงอคติ รูเล็ตรัสเซียให้ผลที่ไม่เอนเอียงหรือไม่? รูเล็ตรัสเซียจำเป็นสำหรับผลที่เป็นกลางหรือไม่? นั่นคือจะใช้ขีด จำกัด เล็ก ๆ และยกเลิกเส้นทางทันทีที่มันลดลงต่ำกว่าขีด จำกัด นั้นจะให้ผลลัพธ์ที่เอนเอียงหรือมีอคติน้อยลงหรือไม่ เมื่อพิจารณาจากตัวอย่างจำนวนมากโดยพลการทั้งสองจะเข้าหากันบนภาพผลลัพธ์ที่เป็นกลางหรือไม่? ฉันกำลังมองหาที่จะเข้าใจเหตุผลพื้นฐานสำหรับการใช้วิธีรูเล็ตรัสเซีย ความเร็วหรือคุณภาพแตกต่างกันอย่างมีนัยสำคัญหรือไม่? ฉันเข้าใจว่าพลังงานถูกกระจายไปในรังสีอื่นเพื่อรักษาพลังงานทั้งหมด อย่างไรก็ตามการแจกจ่ายนี้ยังไม่สามารถทำได้ถ้ารังสีนั้นสิ้นสุดลงเมื่อลดลงต่ำกว่าขีด จำกัด คงที่แทนที่จะมีช่วงชีวิตที่กำหนดแบบสุ่มหลังจากถึงขีด จำกัด นั้นหรือไม่? ในทางกลับกันถ้าพลังงานที่จะสูญเสียไปโดยการยุติรังสีโดยไม่ต้องกระจายพลังงานนั้นก็จะหายไปในที่สุด (เช่นเดียวกับรังสีที่มันถูกแจกจ่ายไปก็ถูกยกเลิกด้วย) ในที่สุดสิ่งนี้จะปรับปรุงสถานการณ์ได้อย่างไร

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

1
Anti-aliasing / Filtering ในการติดตามเรย์
ในการติดตามรังสี / การติดตามเส้นทางหนึ่งในวิธีที่ง่ายที่สุดในการต่อต้านนามแฝงของภาพคือการแทนที่ค่าพิกเซลและเฉลี่ยผลลัพธ์ IE แทนที่จะถ่ายภาพตัวอย่างทุกชิ้นผ่านจุดศูนย์กลางของพิกเซลคุณชดเชยตัวอย่างด้วยจำนวนเงินหนึ่ง ในการค้นหาทั่วอินเทอร์เน็ตฉันได้พบสองวิธีที่แตกต่างกันในการทำสิ่งนี้: สร้างตัวอย่างอย่างไรก็ตามคุณต้องการและชั่งน้ำหนักผลลัพธ์ด้วยตัวกรอง ตัวอย่างหนึ่งคือPBRT สร้างตัวอย่างที่มีการแจกแจงเท่ากับรูปร่างของตัวกรอง สองตัวอย่างคือขนาดเล็กและทังสเตนเรนเดอร์ของBenedikt Bitterli สร้างและชั่งน้ำหนัก กระบวนการพื้นฐานคือ: สร้างตัวอย่างอย่างไรก็ตามคุณต้องการ (ลำดับแบบสุ่มแบ่งชั้นความคลาดเคลื่อนต่ำ ฯลฯ ) ชดเชยเรย์ของกล้องโดยใช้สองตัวอย่าง (x และ y) แสดงภาพด้วยรังสี คำนวณน้ำหนักโดยใช้ฟังก์ชั่นตัวกรองและระยะห่างของตัวอย่างโดยอ้างอิงจากจุดศูนย์กลางพิกเซล ตัวอย่างเช่น Box Filter, Tent Filter, Gaussian Filter, ฯลฯ ) ใช้น้ำหนักกับสีจากการเรนเดอร์ สร้างเป็นรูปร่างของตัวกรอง หลักฐานพื้นฐานคือการใช้การสุ่มตัวอย่างการแปลงผกผันเพื่อสร้างตัวอย่างที่กระจายตามรูปร่างของตัวกรอง ตัวอย่างเช่นฮิสโตแกรมของตัวอย่างที่กระจายในรูปร่างของเกาส์เซียนจะเป็น: สิ่งนี้สามารถทำได้อย่างแน่นอนหรือโดยการ binning ฟังก์ชั่นเป็น pdf / cdf แยก smallptใช้ cdf ผกผันที่แน่นอนของตัวกรองเต็นท์ ตัวอย่างของวิธีการ binning สามารถพบได้ที่นี่ คำถาม …

1
ทำไมการห้ามเรียกซ้ำใน OpenCL
ฉันต้องการใช้ OpenCL เพื่อเร่งการเรนเดอร์ภาพเรย์ท แต่ฉันสังเกตเห็นว่าหน้าวิกิพีเดียอ้างว่าการห้ามเรียกซ้ำนั้นเป็นสิ่งต้องห้ามใน Open CL มันเป็นเรื่องจริงเหรอ? ในขณะที่ฉันใช้การเรียกซ้ำอย่างครอบคลุมเมื่อต้องทำการเรย์ทติ้งนี่จะต้องใช้การออกแบบจำนวนมากเพื่อให้ได้ประโยชน์จากความเร็วที่เพิ่มขึ้น ข้อ จำกัด พื้นฐานที่ป้องกันการเรียกซ้ำคืออะไร มีวิธีใดบ้างไหม?

4
T-junctions ในตาข่ายส่งผลให้เกิดรอยแตก?
ฉันได้ยินมาจากหลายแหล่งที่มีรอยต่อ T-in ใน 3D meshes เป็นความคิดที่ไม่ดีเพราะมันอาจส่งผลให้เกิดรอยแตกในระหว่างการเรนเดอร์ บางคนสามารถอธิบายได้ว่าทำไมมันถึงเกิดขึ้นและสิ่งหนึ่งที่สามารถทำได้เพื่อหลีกเลี่ยงพวกเขา?
19 mesh 

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