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

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

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

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

1
เครื่องวัดแสงแตกต่างจากแผนที่ลูกบาศก์สิ่งแวดล้อมอย่างไร
มองไปที่พื้นผิวโพรบแบบเบาดูเหมือนว่าแผนที่สภาพแวดล้อมที่พร่ามัว อะไรคือความแตกต่างระหว่างทั้งสองกับวิธีการสอบสวนแสงและสิ่งที่เป็นประโยชน์จากการที่พร่ามัว?
17 lighting 

2
Subpixel Rendering สำหรับ Ray Tracer
ในการแสดงผลตัวอักษรมันเป็นเรื่องธรรมดาที่จะใช้การแสดงผล subpixel แนวคิดพื้นฐานที่นี่คือการแบ่งพิกเซลออกเป็นองค์ประกอบ RGB แล้วคำนวณค่าสำหรับแต่ละแยกต่างหาก เนื่องจากแต่ละองค์ประกอบมีขนาดเล็กกว่าทั้งพิกเซลการลดรอยหยักคุณภาพสูงจึงเป็นไปได้ เห็นได้ชัดว่ามีวิธีคล้ายกันในการทำเช่นเดียวกันกับเครื่องตรวจจับรังสี คุณทำการกรองการสร้างใหม่ในแต่ละช่องย่อยแยกจากกัน ฉันรู้สึกประหลาดใจที่อย่างไรก็ตามฉันไม่สามารถหาการอ้างอิงถึงตัวสืบหารังสีที่ทำสิ่งนี้ได้ โดยเฉพาะอย่างยิ่งหากคุณทำการเรนเดอร์สเปคตรัมเรียบร้อยแล้วนี่เป็นสิ่งที่ควรทำ มีบทความนี้จากวารสารที่ฉันไม่เคยได้ยินซึ่งดูเหมือนว่าจะเกี่ยวข้องกัน แต่โดยรวมแล้วการแสดงผลพิกเซลย่อยดูเหมือนจะไม่เป็นเรื่องปกติ คำถามของฉัน: ทำไมไม่ ?

3
เหตุใดเราจึงมีกรอบกราฟิกเช่น OpenGL และ DirectX เมื่อเกมสามารถวาดพิกเซลได้โดยตรง
เกมและแอพพลิเคชั่นที่เน้นกราฟิกอื่น ๆ ใช้เฟรมเวิร์กเช่น OpenGL และ DirectX พวกมันต้องการคุณสมบัติเช่น pixel shader และ DX12 แต่ทำไมเราต้องใช้เฟรมเวิร์กและฟีเจอร์ GPU ทั้งหมดเมื่อเราสามารถวาดทุก ๆ พิกเซลทีละพิกเซลได้? ขั้นแรกเกมจะต้องรวบรวมในลักษณะดังนั้นจึงถูกวาดพิกเซลโดยพิกเซล สิ่งนี้มีแนวโน้มที่จะทำให้เกมใช้งานได้ดี แต่จะเร็วกว่าและทำงานกับ GPU สี 32 บิตใด ๆ (แม้กระทั่งเก่า) ฉันรู้ว่าเกม 3 มิติแรกถูกวาดทีละพิกเซล แต่ทำไมพวกเขาถึงไม่ทำในตอนนี้

3
อัลกอริทึม state-of-the-art ปัจจุบันสำหรับเขตข้อมูลความสูงการติดตามเรย์คืออะไร
มีเอกสารจำนวนมากในช่วงหลายปีที่ผ่านมาเกี่ยวกับเทคนิคที่แตกต่างกันสำหรับการวาดภูมิประเทศสนามสูงใน ray-tracer อัลกอริธึมบางอย่างเรย์เดินตารางโดยตรง (หรือผ่านควอดทรี) คนอื่น ๆ เปลี่ยนภูมิประเทศให้เป็นตาข่ายรูปหลายเหลี่ยมและใช้การทดสอบจุดตัดแบบสามเหลี่ยมเรย์แบบมาตรฐาน ดูเหมือนว่างานวิจัยจะดำเนินต่อไปในช่วงไม่กี่ปีที่ผ่านมาและมันยากที่จะหางานเขียนในทศวรรษที่ผ่านมา แต่ความสมดุลระหว่างหน่วยความจำและการคำนวณ (ทั้ง CPU และ GPU) ยังคงมีการเปลี่ยนแปลง อัลกอริทึมแบบไหนที่ให้ประสิทธิภาพที่ดีที่สุดสำหรับเครื่องเดสก์ท็อประดับสูงในปัจจุบัน? หรือถ้าไม่มีคำตอบเดียวลักษณะการทำงานของอัลกอริทึมที่ดีที่สุดในปัจจุบันแตกต่างกันอย่างไร

3
ความแตกต่างระหว่างการแสดงผลในซอฟต์แวร์ OpenGL และภาพเคลื่อนไหว 3 มิติ
ด้วย OpenGL และฉันสามารถทำให้สิ่งที่ดูน่าทึ่งใน "เรียลไทม์" 60 FPS อย่างไรก็ตามถ้าฉันพยายามสร้างวิดีโอของฉากเดียวกันในสมมติว่า Maya หรือ 3ds Max มันจะใช้เวลานานมากในการแสดงผลแม้ว่ามันจะเป็นความละเอียดและ FPS เดียวกันก็ตาม ทำไมการเรนเดอร์ทั้งสองประเภทนี้จึงใช้ช่วงเวลาต่างกันสำหรับผลลัพธ์เดียวกัน หมายเหตุ: ใช่ฉันตระหนักดีว่าซอฟต์แวร์แอนิเมชั่นสามมิติสามารถสร้างภาพที่ยอดเยี่ยมสูงถึงสิ่งที่สามารถทำได้ตามเวลาจริง แต่สำหรับคำถามนี้ฉันหมายถึงฉากที่มีความซับซ้อนเท่ากัน

2
Tessellation ในกราฟิกคอมพิวเตอร์คืออะไร
ในเกมล่าสุดฉันสังเกตเห็นสิ่งที่เรียกว่า Tessellation การเปิดสิ่งที่ทำลายอัตราเฟรมของฉัน ฉันสังเกตเห็นว่าเมื่อเปิดใช้งานดูเหมือนว่า Anti-Aliasing ใครสามารถให้ข้อมูลเพิ่มเติมแก่ฉันเกี่ยวกับสิ่งที่ GPU ทำ


2
จัดการ Projective Aliasing ในการแมป Shadow
ฉันเล่นซอกับการสร้างแบบจำลอง 3 มิติขั้นตอนง่าย ๆ เพื่อสร้างอาคารเล็ก ๆ สำหรับการพิมพ์ 3 มิติ ตัวอย่าง: เพื่อให้แบบจำลองบนหน้าจอที่อ่านง่ายขึ้นฉันได้ใช้การทำแผนที่เงาพื้นฐานสำหรับแสงทิศทางเดียว เนื่องจากฉากของฉันไม่เปลี่ยนไปฉันเพิ่งเรนเดอร์แผนที่เงาเมื่อใช้กล่องจัดแนวแกนของฉากเพื่อหาว่าขอบเขตของแผนที่เงาควรเป็นเท่าไหร่ เงาและขอบเขตดูเหมือนว่าฉันมีเมทริกซ์ทั้งหมดถูกต้อง แต่การเข้ามาใกล้ขึ้นเล็กน้อยดูแย่มาก: จากการอ่านที่ฉันทำฉันเข้าใจแพนเตอร์ปีเตอร์และสิ่งที่ฉันอาจทำเกี่ยวกับมัน แต่ขอบมอมแมมซึ่งฉันเชื่อว่าเป็นรูปแบบของนามแฝง projective ดูไม่ดีว่าฉันคิดว่ามีบางอย่างผิดปกติในการใช้งานพื้นฐานของฉัน ฉันแฮ็กพิกเซลแชร์เดอร์เพื่อแสดงขอบเขตเงาของเท็กเซล: ฉันได้รับการกรองแบบ bilinear ในพื้นผิว (โดยไม่ได้ฉันได้รับสิวที่ร้ายแรง) น่าเศร้าที่ความพยายามของฉันที่ PCF ล้มเหลวเช่นกัน - ดูเหมือนว่าจะมอมแมม: นี่คือตัวอย่างกรณีเดียวที่ปิดใช้งานการกรอง bilinear: สิ่งนี้มีลักษณะคล้ายนามแฝง projective "ทั่วไป" หรือไม่? สามารถเรนเดอร์แผนที่เงาแบบไดนามิกโดยใช้มุมมอง frustum ที่ตัดกับฉากหรืออาจจะเป็นแบบเรียงซ้อนแก้ปัญหาได้หรือไม่ แก้ไข: การเพิ่มโคลสอัพของการกรอง bilinear, การเปรียบเทียบเงาของโพสต์, เพื่อแสดงสิ่งที่ฉันได้รับ สิวเงาไม่ดีปรากฏขึ้นเนื่องจากขอบภายใน ฉันกำลังสร้างโมเดลด้วยบล็อกเสมือนแบบเรียงซ้อนและไม่ดำเนินการรวมกันอย่างเหมาะสม จากการอ่านของฉันการใช้การดำเนินการบูลีนบนโพลีเฮดนั้นไม่สำคัญ แต่จะช่วยให้ฉันสามารถใช้วอลลุ่มเงาคงที่รวมถึงทำความสะอาดสำหรับซอฟต์แวร์การพิมพ์ 3 มิติ

3
การแรเงาทางกายภาพ - แสงรอบข้าง / โดยอ้อม
ฉันใช้เครื่องมือติดตามเส้นทางร่างกายหลังจากเรียน PBRT โดย M. Pharr และ G. Humphreys ตอนนี้ฉันกำลังพยายามใช้การเรนเดอร์แบบกราฟิกกับกราฟิกแบบเรียลไทม์โดยใช้ OpenGL ES (ในแอปพลิเคชัน iPhone) ฉันต้องการเริ่มใช้ Oren-Nayar และ Cook-Torrance เป็นแบบกระจายและแบบพิเศษ BRDF แต่ฉันมีปัญหา: ฉันจะจำลองแสงทางอ้อมได้อย่างไร ในเส้นทางติดตาม (เช่นเดียวกับที่มีอยู่ใน pbrt) แสงทางอ้อม / รอบจะได้รับ "อัตโนมัติ" จากอัลกอริทึมการติดตามเส้นทางตามที่เป็นไปตามเส้นทางของรังสีแสงโดยคำนึงถึงแสงทางตรงและทางอ้อม ฉันจะสร้างแบบจำลองแสงทางอ้อมในการเรนเดอร์เชิงกายภาพที่เขียนใน OpenGL ES ได้อย่างไรโดยใช้กราฟิกคอมพิวเตอร์ตามเวลาจริง

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

2
เพราะเหตุใดช่างภาพเหมือนจริงส่วนใหญ่จึงมีฉากทดสอบวัสดุที่คล้ายคลึงกัน
ฉันสังเกตเห็นว่าตัวเรนเดอร์เสมือนจริงส่วนใหญ่มีฉากทดสอบวัสดุที่คล้ายคลึงกันมาก นี่คือตัวอย่างบางส่วน: เครื่องปั่น Mitsuba Vray คำถามของฉันคือเหตุใดจึงเลือกรุ่น / สไตล์เฉพาะนี้เพื่อทดสอบวัสดุ มันมีความได้เปรียบมากกว่ากาน้ำชา , ทรงกลมและsuzannesบ้างไหม? มีฉากทั่วไปอื่น ๆ สำหรับการทดสอบวัสดุหรือไม่
15 material 

2
จะใช้ trackball ใน OpenGL ได้อย่างไร?
หลังจากอ่านมากเกี่ยวกับการแปลงมันถึงเวลาที่จะใช้ trackball สำหรับแอพของฉัน ฉันเข้าใจว่าฉันต้องสร้างเวกเตอร์จากจุดเริ่มต้นไปยังจุดที่คลิกเมาส์จากนั้นอีกอันจากจุดเริ่มต้นไปยังที่ที่ปล่อยเมาส์ คำถามของฉันคือฉันต้องเปลี่ยนพิกัดพิกเซล (x, y) เป็น coords โลกหรือฉันควรทำทุกอย่างในพื้นที่ภาพ (พิจารณาพื้นที่ภาพคือการฉายภาพ 2 มิติของฉากที่วัดเป็นพิกเซล) แก้ไข คำตอบของ Richie Sams นั้นดีมาก อย่างไรก็ตามฉันคิดว่าฉันกำลังทำตามวิธีที่แตกต่างกันเล็กน้อยโปรดแก้ไขฉันหากฉันผิดหรือเข้าใจผิดบางอย่าง ในใบสมัครของฉันฉันมีSimplePerspectiveCameraระดับที่ได้รับpositionของกล้องที่position of the targetเรากำลังมองหาที่upเวกเตอร์ที่fovy, aspectRatio, nearและfarระยะทาง กับสิ่งที่ฉันสร้างเมทริกซ์มุมมองและการฉายของฉัน ตอนนี้ถ้าฉันต้องการซูมเข้า / ออกฉันจะอัพเดทมุมมองและอัพเดทเมทริกซ์การฉายของฉัน ถ้าฉันต้องการเลื่อนฉันเลื่อนตำแหน่งของกล้องและดูที่เดลต้าที่เมาส์สร้าง ในที่สุดสำหรับการหมุนฉันสามารถใช้การแปลงแกนมุมหรือ quaternions สำหรับสิ่งนี้ฉันบันทึก pixel-coords ที่เมาส์ถูกกดแล้วเมื่อเมาส์เคลื่อนฉันก็จะบันทึก pixel-coords สำหรับแต่ละคู่ของคอร์ดฉันสามารถคำนวณค่า Z ที่กำหนดสูตรสำหรับทรงกลมเช่น sqrt (1-x ^ 2-y ^ 2) จากนั้นคำนวณเวกเตอร์ที่ไปจากtargetไปPointMousePressedและกลับจากtargetไปPointMouseMovedทำผลิตภัณฑ์ข้าม เพื่อให้แกนหมุนและใช้วิธีการใด ๆ เพื่อคำนวณตำแหน่งกล้องใหม่ อย่างไรก็ตามข้อสงสัยที่ใหญ่ที่สุดของฉันคือค่า …
15 opengl  trackball 

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

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