to fit in cache and bucket sort the points into the tiles before applying z-buffering. This is similar to sort-first2 graphics architectures (e.g., 8).
Although it requires extra work to tile sort the points and requires each point to be written twice before reaching its final destination, this approach produces much more coherent memory accesses. In our implementation, using the tiled z-buffer approach reduced the total time for projection and z-buffering from 42 milliseconds to 25 for a 512x512 image. Since this is the most expensive part of the render cache
computations, this is a significant savings. A tiled approach has be used previously to parallelize3 the render cache by explicitly partitioning the point cloud to reduce communication. By dynamically sorting the projected points each frame, our tiling approach has fewer visual artifacts and can be more flexible in its sampling and point cloud update strategies. We hope to explore our approach as a potentially better parallelization strategy if we have access to a suitable shared memory parallel machine.
3.3. Image Prefilter
Interpolation/smoothing filters are used to reconstruct an image from the frequently sparse point data. There are inherent tradeoffs in the choice of the filter size to use. Small filters are better at producing sharper, higher quality reconstruction when the points are dense, while larger filters are better at filling in the gaps between points when they are sparse.
The original render cache used a single 3x3 weighted image filter as shown in Figure 3. This works well except when no valid point falls within the 3x3 neighborhood of a pixel. In this case the pixel was either left the color it had in the previous frame or cleared to black depending on user preference. However neither choice works very well when the points are too sparse. This often happens when there are large changes in the image from frame to frame or when the rate of samples coming back from the underlying renderer is too low.
To better handle sparse regions we introduce an additional interpolation stage, called the prefilter, with a larger 7x7 uniform filter kernel. Uniform kernels have the advantage that they are cheap to compute and their cost cost does not depend on the size of the kernel (e.g., 5p. 406). Because of its larger kernel though, the prefiltered image is unacceptably blurry in high point density regions.We run the prefilter first and then allow the normal interpolation stage to overwrite any pixels where its smaller filter produces valid data. In effect, the larger prefilter is only used where the smaller 3x3 filter fails. See Figure 4.
The normal interpolation stage with its 3x3 filter also produces the priority image that is used to guide sampling and we have left this unchanged. The use of the prefilter does not effect the priority image of the choice of locations for new samples. Its purpose is simply to reduce the visual artifacts in sparse regions until the point density can be raised to a sufficient level for the 3x3 filter to work. In our implementation the prefilter is actually less expensive than the 3x3 filter and consumes only 10% of the render cache execution time.
3.4. Point Eviction
The render cache uses a fixed size cache of points and in the original version, a point would remain in the cache until it was overwritten by new sample point. Effects such as nondiffuse shading or scene editing can cause a point’s color to become incorrect, or stale. If the rate of new samples being computed per frame is very low, this stale data may remain in the point cache for a long time. We have added a new mechanism to allow points to be evicted from the cache even if there is no point available to overwrite it. Evicting points can actually speed up the image convergence by clearing out stale data more quickly.
Each point has an associated age which is stored in a byte (0-255). At the beginning of each frame, all the existing points are aged by some increment. This increment is chosen based on the number of new points added to the cache such that on average a point should reach the age of 128 before being overwritten. But several conditions can cause points to age at a faster rate such as if the point is not visible in the current frame or if color changes are detected in nearby points in the image plane. These can cause a point to reach the maximum age of 255 at which point it is automatically evicted from the cache. In the future, additional aging penalties may further improve stale data eviction.
3.5. Other Optimizations
We have also rewritten our implementation to take advantage of the SIMD (Single Instruction, Multiple Data) instructions available through Intel’s MMX, SSE, and SSE 2 instruction set extensions1. These provides 8 and 16 byte vectors that can be used to operate on multiple data (e.g., four floats) in a single instruction. We can thus project four points at the same time or operate on the red, green, and blue channels of a pixel simultaneously. However it does require some rear_
พอดีใน แคชและกลุ่มเรียงลำดับคะแนนเป็นกระเบื้องก่อนที่จะใช้การกำหนดบัฟเฟอร์ z นี่คือคล้ายกับสถาปัตยกรรมกราฟิก first2 เรียงลำดับ (เช่น 8) แม้ ว่าจะต้องเพิ่มเติมการเรียงกระเบื้องจุดต้องจุดแต่ละจุดจะเขียนสองครั้งก่อนที่จะถึงปลายทางสุดท้ายของ วิธีการนี้สร้างมาก coherent หาหน่วยความจำ ในงานของเรา ใช้วิธี z บัฟเฟอร์กระเบื้องลดลงรวมเวลาฉายและบัฟเฟอร์ z จาก 42 มิลลิวินาทีกับ 25 รูป 512 x 512 เนื่องจากเป็นส่วนแพงที่สุดของแคชให้ผลลัพธ์หนึ่ง เป็นการประหยัดอย่างมีนัยสำคัญ วิธีกระเบื้องได้ถูกใช้ก่อนหน้านี้ parallelize3 แค render โดยพาร์ทิชันเมฆจุดอย่างชัดเจนเพื่อลดการสื่อสาร โดยเรียงลำดับแบบไดนามิกการคาดคะแนนเฟรมแต่ละเฟรม วิธีการปูกระเบื้องของเรามีสิ่งประดิษฐ์ภาพน้อยลง และสามารถมีความยืดหยุ่นในการสุ่มตัวอย่างและจุดเมฆปรับปรุงกลยุทธ์ เราหวังว่าการสำรวจวิธีการของเราเป็นกลยุทธ์ parallelization อาจดีกว่าถ้าเราเข้าเครื่องพร้อมหน่วยความจำร่วมที่เหมาะสม3.3 รูป Prefilterสอดแทรก/ปรับให้เรียบการกรองจะใช้ในการสร้างภาพจากข้อมูลจุดบ่อบ่อย ๆ มีการยืนยันโดยธรรมชาติในตัวเลือกขนาดการกรองที่ใช้ ตัวกรองขนาดเล็กจะดีกว่าที่ผลิตคุณภาพสูง คมฟื้นฟูเมื่อจุดหนาแน่น ในขณะที่ตัวกรองขนาดใหญ่จะดีกว่าที่บรรจุในช่องว่างระหว่างจุดเมื่อห่าง แคสร้างภาพเดิมใช้ตัว 3 x 3 ถ่วงน้ำหนักภาพเดียวดังแสดงในรูปที่ 3 นี้ใช้งานได้ดียกเว้นเมื่อจุดไม่ถูกต้องอยู่ภายในพื้นที่ใกล้เคียง 3 x 3 ในพิกเซล ในกรณีนี้ พิกเซลจะเหลือสีในเฟรมก่อนหน้า หรือเลือกเป็นสีดำขึ้นอยู่กับการกำหนดลักษณะผู้ใช้ อย่างไรก็ตาม ทางเลือกที่ไม่ใช้งานเมื่อคะแนนห่างเกินไปดี นี้มักจะเกิดขึ้น เมื่อมีการเปลี่ยนแปลงขนาดใหญ่ในภาพจากเฟรมหนึ่งไปยังอีกเฟรม หรือเมื่ออัตราการกลับมาจากตัวต้นแบบตัวอย่างน้อยเกินไป การจัดการที่ดี เราแนะนำขั้นตอนการแทรกข้อความเพิ่มเติม พื้นที่ห่างเรียก prefilter กับเคอร์เนลกรองสม่ำเสมอ 7 x 7 ที่ใหญ่ เมล็ดเป็นรูปแบบมีข้อดีที่มีราคาถูกการคำนวณ และต้นทุนของต้นทุนขึ้นอยู่กับขนาดของเมล็ด (เช่น 5p. 406) เนื่องจากเคอร์เนลมีขนาดใหญ่ แม้ว่า ภาพ prefiltered ได้ unacceptably มัวในภูมิภาคความหนาแน่นของจุดสูงสุด เราเรียกใช้ prefilter ที่แรก และช่วยให้ระยะการแทรกแทรงปกติการเขียนทับพิกเซลใด ๆ ที่กรองขนาดเล็กที่ให้ข้อมูลที่ถูกต้อง ผล prefilter ที่มีขนาดใหญ่เท่ากันที่ล้มตัวเล็ก 3 x 3 ดูรูปที่ 4 ระยะปกติสอดแทรก ด้วยการกรอง 3 x 3 ยังสร้างภาพสำคัญที่ใช้ในการสุ่มตัวอย่างให้คำแนะนำ และเราได้ทิ้งนี้เปลี่ยนแปลง ใช้ prefilter ที่ลักษณะพิเศษภาพสำคัญของทางเลือกของสถานที่เก็บตัวอย่างใหม่ วัตถุประสงค์นั้นเพื่อ ลดสิ่งประดิษฐ์ภาพในภูมิภาคห่างจนกระทั่งความหนาแน่นของจุดที่สามารถยกระดับเพียงพอสำหรับตัว 3 x 3 ในการทำงาน ในการดำเนินของเรา prefilter ที่แพงจริงน้อยกว่าตัว 3 x 3 และใช้เพียง 10% ของเวลาปฏิบัติการแค render3.4. จุดขับไล่แค render ใช้แคชถาวรขนาด ของจุด และ ในฉบับ จุดจะยังคงอยู่ในแคชจนกว่าจะถูกเขียนทับ โดยจุดตัวอย่างใหม่ ลักษณะพิเศษเช่นการแรเงา nondiffuse หรือฉากการแก้ไขอาจทำให้สีของจุดจะกลายเป็นไม่ถูกต้อง หรือเก่า ถ้าอัตราตัวอย่างใหม่ที่ถูกคำนวณสำหรับแต่ละเฟรมจะต่ำมาก ข้อมูลเก่านี้อาจยังคงอยู่ในแคชของจุดเป็นเวลานาน เราได้เพิ่มระบบใหม่เพื่อให้จุดที่จะถูกเอาออกจากแคชแม้มีจุดไม่มีการเขียนทับ Evicting จุดสามารถจริงเร็วลู่เข้ารูป โดยการล้างข้อมูลเก่าออกได้เร็วขึ้น Each point has an associated age which is stored in a byte (0-255). At the beginning of each frame, all the existing points are aged by some increment. This increment is chosen based on the number of new points added to the cache such that on average a point should reach the age of 128 before being overwritten. But several conditions can cause points to age at a faster rate such as if the point is not visible in the current frame or if color changes are detected in nearby points in the image plane. These can cause a point to reach the maximum age of 255 at which point it is automatically evicted from the cache. In the future, additional aging penalties may further improve stale data eviction.3.5. Other OptimizationsWe have also rewritten our implementation to take advantage of the SIMD (Single Instruction, Multiple Data) instructions available through Intel’s MMX, SSE, and SSE 2 instruction set extensions1. These provides 8 and 16 byte vectors that can be used to operate on multiple data (e.g., four floats) in a single instruction. We can thus project four points at the same time or operate on the red, green, and blue channels of a pixel simultaneously. However it does require some rear_
การแปล กรุณารอสักครู่..
