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

2
ทำไมบางเกมแสดงแสงไฟส่องทะลุกำแพง?
ในบางเกมฉันเห็นแสงไฟส่องผ่านผนังแม้ว่าฉันจะตั้งค่าคุณภาพวิดีโอในระดับสูง ตัวอย่างของเกมที่ฉันเล่นเมื่อไม่นานมานี้คือ Borderlands 2 (ระเบิดขีปนาวุธ) และ Call of Cthulhu (ตะเกียง; เกมยังใช้ Unreal Engine 4) นี่เป็นข้อบกพร่องหรือมีเหตุผลด้านประสิทธิภาพหรือไม่ ตัวอย่าง Borderlands 2: https://youtu.be/9bV83qA6_mU?t=419 (ไม่กี่ครั้ง แต่อย่างรวดเร็ว) คำถามโบนัส: ในกรณีหลังมีการติดตาม ray ด้วยวิธีใดบ้างที่สามารถใช้ในการแก้ปัญหาได้อย่างถูก? ฉันเดาว่าแพง RT แก้ไขปัญหาได้แน่นอน แต่ฉันสงสัยว่ามันสามารถใช้ในรูปแบบ "ถูก" เพื่อแก้ปัญหาเฉพาะนี้ได้หรือไม่

3
BRDF และการประสานงานทรงกลมในการติดตามเรย์
ฉันพัฒนาเครื่องติดตามรังสีที่ใช้โมเดลไฟพงษ์ / บลินมาตรฐาน ตอนนี้ฉันกำลังแก้ไขเพื่อสนับสนุนการเรนเดอร์ตามร่างกายดังนั้นฉันจึงใช้โมเดล BRDF ต่างๆ ในขณะนี้ฉันมุ่งเน้นโมเดลของ Oren-Nayar และ Torrance-Sparrow แต่ละอันขึ้นอยู่กับพิกัดทรงกลมที่ใช้ในการแสดงเหตุการณ์ที่เกิดขึ้นและทิศทางแสง wo ขาออก คำถามของฉันคือวิธีใดที่เหมาะสมที่จะแปลง wi และ wo จากพิกัดคาร์ทีเซียนไปเป็นพิกัดกลม ฉันกำลังใช้สูตรมาตรฐานที่รายงานที่นี่https://en.wikipedia.org/wiki/Spherical_coordinate_system#Coordinate_system_conversionsแต่ฉันไม่แน่ใจว่าฉันทำสิ่งที่ถูกต้องเพราะเวกเตอร์ของฉันไม่ได้อยู่ที่ต้นกำเนิดของ ระบบพิกัดคาร์ทีเซียน แต่มีศูนย์กลางอยู่ที่จุดตัดของรังสีกับวัตถุ ที่นี่คุณสามารถค้นหาการใช้งานปัจจุบันของฉัน: https://github.com/chicio/Multispectral-Ray-tracing/tree/brdf/RayTracing/RayTracer/Objects/BRDF https://github.com/chicio/Multispectral-Ray-tracing/blob/brdf/RayTracing/RayTracer/Math/Vector3D.cpp ใครสามารถช่วยฉันอธิบายวิธีที่ถูกต้องในการแปลงเวกเตอร์ wi และ wo จากคาร์ทีเซียนไปเป็นพิกัดกลม UPDATE ฉันคัดลอกส่วนที่เกี่ยวข้องของรหัสที่นี่: การคำนวณพิกัดทรงกลม float Vector3D::sphericalTheta() const { float sphericalTheta = acosf(Utils::clamp(y, -1.f, 1.f)); return sphericalTheta; } float Vector3D::sphericalPhi() const { float …

4
ผลกระทบของลูปที่มีความยาวผันแปรได้ใน GPU shaders
เป็นที่นิยมในการแสดงเนื้อหาขั้นตอนภายใน GPU เช่นใน demoscene (วาดรูปสี่เหลี่ยมจัตุรัสเดียวเพื่อเติมหน้าจอและปล่อยให้ GPU คำนวณพิกเซล) เรย์เดินขบวนเป็นที่นิยม: ซึ่งหมายความว่า GPU กำลังประมวลผลวนซ้ำที่ไม่รู้จักจำนวนหนึ่งต่อพิกเซล (แม้ว่าคุณจะมีขอบด้านบนเหมือนmaxIterations) การวนลูปที่มีความยาวผันแปรมีผลต่อประสิทธิภาพของ shader อย่างไร ลองนึกภาพ psuedocode ray-marching ที่เรียบง่าย: t = 0.f; while(t < maxDist) { p = rayStart + rayDir * t; d = DistanceFunc(p); t += d; if(d < epsilon) { ... emit p return; } } ตระกูล …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.