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

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

1
คิว Direct / Compute / Copy จำนวนกี่คิวที่มีความหมาย
DirectX 12 แสดงคิวคำสั่งสำหรับกราฟิก (เรียกว่า "Direct") คำนวณหรือคัดลอกงาน ในแง่ของฟังก์ชั่นที่ให้มาแต่ละชุดสุดยอดของชุดต่อไปนี้ สเปคระบุว่าคิวคำสั่งที่สามารถดำเนินการควบคู่กันไปโดยอุปกรณ์ อย่างไรก็ตาม API ไม่ได้ จำกัด จำนวนคิวคำสั่งในทางใดทางหนึ่ง (อย่างน้อยฉันก็ไม่ได้ตระหนักถึงข้อ จำกัด ใด ๆ ) เห็นได้ชัดว่าผู้ขายต่างกันจัดการเรื่องนี้แตกต่างกันมาก: Intel ระบุไว้ในงานนำเสนอล่าสุด (สไลด์ 23) ซึ่งปัจจุบัน GPU ของพวกเขาไม่สามารถจัดการกับกราฟิกและการคำนวณแบบขนานและเครื่องถ่ายเอกสารมีปริมาณงานที่ไม่มากนัก พวกเขาไม่แนะนำให้ใช้กราฟิก / คิวการคำนวณหลายตัว เอเอ็มดีเริ่มต้นเมื่อนานมาแล้วในการโฆษณาการใช้งานคิว / "อะซิงโครนัสเชดเดอร์" โดยเริ่มจาก Mantle และคอนโซลคอนโซลปัจจุบัน นอกจากนี้ยังมีนักพัฒนาบางคน ( ตัวอย่าง ) ที่ยืนยันประสิทธิภาพที่เพิ่มขึ้นอย่างมีนัยสำคัญโดยการดำเนินการคำนวณและงานกราฟิกในแบบคู่ขนาน เมื่อไม่นานมานี้มีความกังวลเกี่ยวกับ Nvidia ที่ไม่รองรับ shader แบบอะซิงโครนัสในฮาร์ดแวร์: การใช้กราฟิกแยกกันและคิวการคำนวณในคราวเดียวดูเหมือนจะทำให้สิ่งต่าง ๆ ช้าลงซึ่งบ่งชี้ถึงการจำลองไดรเวอร์ ในทางตรงกันข้ามการดำเนินการคัดลอกแบบขนานได้รับการสนับสนุนโดย CUDA …
11 directx12  api 

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

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

2
การปัดเศษของการล้อมรอบพื้นที่หน้าจอมีการใช้งานอย่างไร
ฉันไม่เข้าใจคำอธิบายจากวิกิพีเดีย สำหรับทุกพิกเซลบนหน้าจอพิกเซลเชดเดอร์จะสุ่มค่าความลึกรอบพิกเซลปัจจุบันและพยายามคำนวณจำนวนการบดเคี้ยวจากแต่ละจุดที่สุ่มตัวอย่าง ค่าความลึกของพิกเซลโดยรอบจะบอกอะไรคุณเกี่ยวกับการบดเคี้ยวได้อย่างไร ฉันเข้าใจว่าการบดเคี้ยวเกิดขึ้นเมื่อวัตถุ A ย่อมาด้านหน้าวัตถุ B อื่นดังนั้นคุณไม่สามารถมองเห็นวัตถุ B ได้ แต่ทำไมคุณถึงมองที่พิกเซลความลึกของพิกเซลแวดล้อม ฉันหมายถึงคุณสามารถเห็นพิกเซลเหล่านั้นดังนั้นจึงไม่มีการอุดตัน บางทีฉันอาจเข้าใจผิด ๆ และสิ่งที่ฉันไม่เข้าใจก็คือเคอร์เนลคำศัพท์ในบทเรียนอื่น ๆ เคอร์เนลคืออะไรและทำไมคุณถึงใช้กับ ssao ใครช่วยอธิบายอัลกอริทึมโดยละเอียดเกี่ยวกับคำถามของฉัน


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

1
เหตุใดการเข้าถึงพื้นผิวจึงช้าลงมากเมื่อคำนวณพิกัดพื้นผิวในส่วนของส่วน
เมื่อใช้พื้นผิวใน GLSL วิธีที่ดีที่สุดคือการคำนวณพิกัดพื้นผิวสุดท้ายใน shader ที่จุดสุดยอดและส่งให้กับ shader ของชิ้นส่วนโดยใช้varyings ตัวอย่างที่มีการพลิกง่าย ๆ ในพิกัด y: // Vertex shader attribute vec2 texture; varying highp vec2 texCoord; // ... void main() { texCoord = vec2(texture.x, 1.0-texture.y); // ... } // Fragment shader varying highp vec2 textureCoordinates; uniform sampler2D tex; // ... void main() { highp vec4 …

1
การวาดเส้นที่ตัดกันอย่างรวดเร็ว
อัลกอริธึมไลน์ของ Bresenham เป็นวิธีการวาดเส้นตรงโดยใช้การดำเนินการจำนวนเต็มอย่างรวดเร็วเท่านั้น (การบวกการลบและการคูณด้วย 2) อย่างไรก็ตามมันสร้างสายนามแฝง มีวิธีที่รวดเร็วในการวาดเส้นที่ตัดกันหรือไม่?

4
มันสำคัญไหมว่าฉันจะเรียนรู้ OpenGL หรือ Direct3D?
ความแตกต่างระหว่างรายละเอียดการใช้งานเล็กน้อยของ API ทั้งสองนี้หมายความว่าเมื่อฉันได้เรียนรู้แล้วฉันสามารถใช้กับทุกสิ่งได้หรือไม่ หรือมีเหตุผลในการเรียนรู้อย่างใดอย่างหนึ่งมากกว่าที่อื่นถ้าฉันต้องการที่จะสามารถใช้งานได้โดยทั่วไปโดยไม่ต้องเรียนรู้ API อื่นในอนาคต? เป็นหนึ่งหรือมากกว่าทั่วไป? โดยเฉพาะอย่างยิ่งฉันต้องการที่จะสามารถเขียนสำหรับกราฟิกการ์ดใด ๆ ดังนั้นรหัสไม่ จำกัด เฉพาะการทำงานบนการ์ดของ manuafacturer เฉพาะหรือรูปแบบเฉพาะ ฉันต้องการเขียนโค้ดที่ยังคงใช้งานได้หากไม่มีการ์ดกราฟิก (แม้ว่าจะช้ากว่า) รหัสพกพาแตกต่างกันอย่างไรในหลายแพลตฟอร์ม (ระบบปฏิบัติการ / สถาปัตยกรรม) มีความแตกต่างกันหรือไม่? ฉันสนใจความพร้อมของห้องสมุดอื่น ๆ ที่ทำงานกับสิ่งเหล่านี้และไม่ว่าอย่างใดอย่างหนึ่งหรืออื่น ๆ นำไปสู่ข้อ จำกัด สิทธิ์การใช้งานที่น้อยลงในสภาพแวดล้อมที่กว้างขึ้น สิ่งใดที่วัดได้ซึ่งจะสร้างความแตกต่างว่าหนึ่งในนั้นอาจเป็นสิ่งเดียวที่ฉันเรียนรู้ได้โดยไม่ จำกัด ฉัน
11 opengl  api  direct3d 

1
นี่เป็นวิธีที่ถูกต้องในการใช้กฎหมายเบียร์หรือไม่?
เมื่อฉันใช้กฎของเบียร์ (การดูดซับสีผ่านระยะทางผ่านวัตถุ) มันไม่เคยดูดีมากด้วยเหตุผลบางอย่าง เมื่อฉันมีสีอยู่ด้านหลังวัตถุฉันจะคำนวณสีที่ปรับแล้วดังนี้ const vec3 c_absorb = vec3(0.2,1.8,1.8); vec3 absorb = exp(-c_absorb * (distanceInObject)); behindColor *= absorb; ที่จะให้สิ่งที่มีลักษณะเช่นนี้ (หมายเหตุหักเหเล็กน้อยนำไปใช้): และที่นี่มันไม่มีการหักเหของแสง: หมายเหตุที่ว่านี้จะดำเนินการเป็นของเล่น Shader ที่นี่ นี่เป็นคำอธิบายถึงสิ่งที่กฎหมายเบียร์ทำ แต่ไม่ได้ดูดีมากเมื่อเทียบกับภาพเช่นนี้: ไฮไลท์ด้านนอกฉันกำลังพยายามหาความแตกต่าง เป็นไปได้ไหมที่รูปทรงเรขาคณิตของฉันนั้นเรียบง่ายเกินไปที่จะแสดงมันออกมาได้ดีมาก? หรือฉันกำลังนำไปใช้อย่างไม่ถูกต้อง

2
การวาดภาพด้วยฮาร์ดแวร์ที่เร่งความเร็วของรูปทรงโค้ง
วิธีการวาดรูปโค้งอย่างรวดเร็ว? โดย "เร็ว" ฉันคิดว่าควรใช้สิ่งอำนวยความสะดวกด้านฮาร์ดแวร์ให้มากที่สุด โดย "โค้ง" ฉันหมายถึงขอบเขตที่กำหนดโดยเส้นโค้งกำลังสองหรือลูกบาศก์ Bezier โดย "รูปร่าง" ฉันหมายถึงจังหวะ "อ้วน" (กว้างมากกว่า 1px) หรือแม้กระทั่งแปลก / ไม่ใช่ศูนย์เต็ม "รูปหลายเหลี่ยมโค้ง 2D" อาจมีรู (เช่นตัวอักษร "O") ฉันถามเพราะตัวเลือกที่ฉันรู้จักมีข้อบกพร่องหลายประการ: การหารูปทรงสามเหลี่ยมแล้วส่งไปยัง OpenGL - ทำงานได้ยากที่สุดใน CPU และอาจใช้รูปสามเหลี่ยมมากเกินไป / น้อยเกินไป (เช่นสิ้นเปลือง / หยาบ) พื้นผิวแผนที่ - ต้องคำนวณใหม่ / อัปโหลดพื้นผิวในทุกการเปลี่ยนแปลง (รูปร่างระดับการหมุน ... ) ฟิลด์ระยะทางที่มีการเซ็น - ขนาดใหญ่รายละเอียดดูไม่สวยหรือต้องคำนวณใหม่ / อัปโหลดพื้นผิว NV_path_rendering - อาจเป็นได้หากไม่ได้ทำงานกับการ์ดของ …

1
แนวคิดและคำศัพท์พื้นฐานเกี่ยวกับการแสดงปริมาตร
วรรณกรรมเกี่ยวกับการแสดงวัสดุเชิงปริมาตรและเอฟเฟกต์มีแนวโน้มที่จะใช้คำศัพท์ทางฟิสิกส์จำนวนมาก สมมติว่าฉันมีความเข้าใจที่ดีเกี่ยวกับแนวคิดที่เกี่ยวข้องกับการเรนเดอร์พื้นผิว ฉันต้องเข้าใจแนวคิดอะไรบ้างสำหรับการสร้างภาพปริมาตร? (ทั้งการแสดงผลแบบเรียลไทม์และออฟไลน์) อะไรคือความหมายของการกระเจิงแสงในบริบทของการเรนเดอร์ปริมาตร? (และทำไมมันจึงแยกเป็นแบบกระจายและแบบกระจาย?) ความสัมพันธ์ระหว่างการส่งการลดทอนและการดูดซึมคืออะไร? ฟังก์ชั่นเฟสคืออะไรและเล่นในการเรนเดอร์ปริมาตรได้อย่างไร? (โดยเฉพาะฟังก์ชั่นเฟส Henyey-Greenstein) กฎหมายเบียร์ - แลมเบิร์ตคืออะไรและเกี่ยวข้องกับการกระเจิงของแสงอย่างไร โดยพื้นฐานแล้วฉันจะทำให้แผนภาพมีความรู้สึกเช่นนี้ได้อย่างไร

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

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

3
ฉันจะสำรวจฉากที่ไม่พอดีกับหน่วยความจำได้อย่างไร
หากฉากที่จะถูก raytraced ไม่สามารถเก็บไว้ในหน่วยความจำแล้วโดยไม่ต้องเพิ่ม RAM เพิ่มเติมไปยังเครื่องดูเหมือนว่าไม่สมจริงที่จะแสดงในช่วงเวลาที่ปฏิบัติได้เนื่องจากจำเป็นต้องโหลดส่วนต่าง ๆ ของฉากจากดิสก์ที่อาจเกิดขึ้นหลายครั้งต่อพิกเซล . มีวิธีใดบ้างไหม? ฉันพยายามคิดถึงวิธีการคำนวณจำนวนมากที่เกี่ยวข้องกับเซตย่อยของฉากในคราวเดียวเพื่อลดจำนวนครั้งที่ต้องโหลดลงในหน่วยความจำ มีวิธีอื่นในการปรับปรุงความเร็วในกรณีเช่นนี้หรือไม่?

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