{"id":13731688,"url":"https://github.com/m-schuetz/compute_rasterizer","last_synced_at":"2025-04-04T18:05:39.126Z","repository":{"id":39158102,"uuid":"201064787","full_name":"m-schuetz/compute_rasterizer","owner":"m-schuetz","description":"Rendering Point Clouds with Compute Shaders","archived":false,"fork":false,"pushed_at":"2023-02-02T12:22:42.000Z","size":39404,"stargazers_count":707,"open_issues_count":3,"forks_count":54,"subscribers_count":30,"default_branch":"master","last_synced_at":"2025-03-28T17:05:41.367Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m-schuetz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-07T14:16:47.000Z","updated_at":"2025-03-20T09:43:02.000Z","dependencies_parsed_at":"2023-02-17T19:45:56.074Z","dependency_job_id":null,"html_url":"https://github.com/m-schuetz/compute_rasterizer","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-schuetz%2Fcompute_rasterizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-schuetz%2Fcompute_rasterizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-schuetz%2Fcompute_rasterizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-schuetz%2Fcompute_rasterizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m-schuetz","download_url":"https://codeload.github.com/m-schuetz/compute_rasterizer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247226213,"owners_count":20904465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T02:01:35.953Z","updated_at":"2025-04-04T18:05:39.101Z","avatar_url":"https://github.com/m-schuetz.png","language":"C++","funding_links":[],"categories":["Graphics"],"sub_categories":[],"readme":"\r\n\u003ccenter\u003e\r\n\u003cimg src=\"docs/teaser.jpg\" width=\"50%\"\u003e\r\n\u003c/center\u003e\r\n\r\n# About\r\n\r\nThis repository contains the source code for our papers about real-time software rasterization of point clouds, which can be 10 to 100 times faster than GL_POINTS. This is possible because GL_POINTS is built upon the triangle-oriented rendering pipeline that is not optimal for pixel-sized points.\r\n\r\nThe basic idea is to spawn a compute shader that transforms points to screen space, encodes depth and color into a single 64 bit integer, and uses atomicMin to compute the closest point for each pixel. The color value is then extracted from the interleaved depth+color buffer and converted into a regular OpenGL texture for display. \r\n\r\nThe latest improvement also groups about 10k points into batches, and each compute workgroup(128 threads) renders a batch(10k points), i.e., each thread renders about 80 points. This allows several batch-level optimizations such as frustum culling, LOD rendering, and adaptive precision. Adaptive precision picks a sufficient coordinate precision (typically just 10 bit per axis) depending on the projected batch size, which boosts brute-force performance due to lower memory bandwidth requirements.\r\n\r\nThe main branch is a slightly more user friendly version that allows loading LAS files via drag\u0026drop. Other branches contain snapshots of the code made after evaluations for specific paper submissions:\r\n\r\n* [\"Software Rasterization of 2 Billion Points in Real-Time\"](https://www.cg.tuwien.ac.at/research/publications/2022/SCHUETZ-2022-PCC/) \u003cbr\u003e\r\nIn branch [compute_rasterizer_2022](https://github.com/m-schuetz/compute_rasterizer/tree/compute_rasterizer_2022)\u003cbr\u003e\r\n[paper](https://www.cg.tuwien.ac.at/research/publications/2022/SCHUETZ-2022-PCC/) - \u003ca href=\"https://www.youtube.com/watch?v=9h-ElMfVIOY\"\u003evideo\u003c/a\u003e\r\n\r\n* [\"Rendering Point Clouds with Compute Shaders and Vertex Order Optimization\"](https://www.cg.tuwien.ac.at/research/publications/2021/SCHUETZ-2021-PCC/)\u003cbr\u003e\r\nIn branch [compute_rasterizer_2021](https://github.com/m-schuetz/compute_rasterizer/tree/compute_rasterizer_2021)\r\n\r\n\r\n# Features and Limitations\r\n\r\n* Renders up to one billion points in about 8 milliseconds (hence 2 billion points in real-time, 60fps) on an RTX 3090.\r\n* You need to make sure not to load more than your GPU memory can handle. You'll need about 1.6GB for every 100 million points, plus 1GB or 2GB overhead. \r\n* Drag \u0026 Drop a LAS or LAZ files into the window to load it. Only RGB attributes are displayed.\r\n* Requires Windows and NVIDIA GPUs. Pull requests for AMD support are welcome.\r\n\r\n# Building\r\n\r\n* Clone the repository\r\n* Compile build/ComputeRasterizer.sln with Visual Studio 2022.\r\n* Run (ctrl + f5)\r\n\r\n\u003ctable\u003e\r\n\t\u003ctr\u003e\r\n\t\t\u003cth\u003eMethod\u003c/th\u003e\r\n\t\t\u003cth\u003eLocation\u003c/th\u003e\r\n\t\t\u003cth\u003e\u003c/th\u003e\r\n\t\u003c/tr\u003e\r\n\t\u003ctr\u003e\r\n\t\t\u003ctd\u003ebasic\u003c/td\u003e\r\n\t\t\u003ctd\u003e\u003ca href=\"./modules/compute_loop_las\"\u003e./modules/compute_loop_las\u003c/a\u003e\u003c/td\u003e\r\n\t\t\u003ctd\u003e\u003c/td\u003e\r\n\t\u003c/tr\u003e\r\n\t\u003ctr\u003e\r\n\t\t\u003ctd\u003eprefetch\u003c/td\u003e\r\n\t\t\u003ctd\u003e\u003ca href=\"./modules/compute_loop_las2\"\u003e./modules/compute_loop_las2\u003c/a\u003e\u003c/td\u003e\r\n\t\t\u003ctd\u003efastest, each thread fetches 4 points at a time\u003c/td\u003e\r\n\t\u003c/tr\u003e\r\n\t\u003ctr\u003e\r\n\t\t\u003ctd\u003ehqs\u003c/td\u003e\r\n\t\t\u003ctd\u003e\u003ca href=\"./modules/compute_loop_las_hqs\"\u003e./modules/compute_loop_las_hqs\u003c/a\u003e\u003c/td\u003e\r\n\t\t\u003ctd\u003eHigh-Quality Shading\u003c/td\u003e\r\n\t\u003c/tr\u003e\r\n\t\u003ctr\u003e\r\n\t\t\u003ctd\u003eLOD\u003c/td\u003e\r\n\t\t\u003ctd\u003e\u003ca href=\"./modules/compute_loop_nodes\"\u003e./modules/compute_loop_nodes\u003c/a\u003e\u003c/td\u003e\r\n\t\t\u003ctd\u003eSupport for the Potree LOD format\u003c/td\u003e\r\n\t\u003c/tr\u003e\r\n\t\u003ctr\u003e\r\n\t\t\u003ctd\u003eLOD hqs\u003c/td\u003e\r\n\t\t\u003ctd\u003e\u003ca href=\"./modules/compute_loop_nodes_hqs\"\u003e./modules/compute_loop_nodes_hqs\u003c/a\u003e\u003c/td\u003e\r\n\t\u003c/tr\u003e\r\n\u003c/table\u003e\r\n\r\n# Citing\r\n\u003cpre\u003e\r\n@article{SCHUETZ-2022-PCC,\r\n  title =      \"Software Rasterization of 2 Billion Points in Real Time\",\r\n  author =     \"Markus Sch\\\"{u}tz and Bernhard Kerbl and Michael Wimmer\",\r\n  year =       \"2022\",\r\n  month =      jul,\r\n  journal =    \"Proc. ACM Comput. Graph. Interact. Tech.\",\r\n  volume =     \"5\",\r\n  pages =      \"1--16\",\r\n  URL =        \"https://www.cg.tuwien.ac.at/research/publications/2022/SCHUETZ-2022-PCC/\",\r\n}\r\n\r\n@article{SCHUETZ-2021-PCC,\r\n  title =      \"Rendering Point Clouds with Compute Shaders and Vertex Order Optimization\",\r\n  author =     \"Markus Sch\\\"{u}tz and Bernhard Kerbl and Michael Wimmer\",\r\n  year =       \"2021\",\r\n  month =      jul,\r\n  doi =        \"10.1111/cgf.14345\",\r\n  journal =    \"Computer Graphics Forum\",\r\n  number =     \"4\",\r\n  volume =     \"40\",\r\n  pages =      \"115--126\",\r\n  keywords =   \"point-based rendering, compute shader, real-time rendering\",\r\n  URL =        \"https://www.cg.tuwien.ac.at/research/publications/2021/SCHUETZ-2021-PCC/\",\r\n}\r\n\r\n\u003cpre\u003e\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm-schuetz%2Fcompute_rasterizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm-schuetz%2Fcompute_rasterizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm-schuetz%2Fcompute_rasterizer/lists"}