{"id":13732051,"url":"https://github.com/NVIDIA/VisRTX","last_synced_at":"2025-05-08T06:31:13.009Z","repository":{"id":41186828,"uuid":"176825781","full_name":"NVIDIA/VisRTX","owner":"NVIDIA","description":"NVIDIA OptiX based implementation of ANARI","archived":false,"fork":false,"pushed_at":"2024-10-25T02:30:32.000Z","size":6057,"stargazers_count":242,"open_issues_count":6,"forks_count":24,"subscribers_count":23,"default_branch":"main","last_synced_at":"2024-10-29T18:10:40.891Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/NVIDIA.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-20T22:19:17.000Z","updated_at":"2024-10-28T02:56:07.000Z","dependencies_parsed_at":"2023-09-25T20:57:30.990Z","dependency_job_id":"7eafa027-3abd-4604-a5ce-dcafee3e7fbc","html_url":"https://github.com/NVIDIA/VisRTX","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NVIDIA%2FVisRTX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NVIDIA%2FVisRTX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NVIDIA%2FVisRTX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NVIDIA%2FVisRTX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NVIDIA","download_url":"https://codeload.github.com/NVIDIA/VisRTX/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224707613,"owners_count":17356364,"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:44.872Z","updated_at":"2025-05-08T06:31:13.001Z","avatar_url":"https://github.com/NVIDIA.png","language":"C++","readme":"# VisRTX\n\n![VisRTX Teaser](teaser.png)\n\nVisRTX is an experimental, scientific visualization-focused implementation of\nthe [Khronos ANARI standard](https://www.khronos.org/anari), and is developed by\nthe HPC Visualization Developer Technology team at NVIDIA.\n\nVisRTX is designed to track ongoing developments of the ANARI standard and\nprovide usable extensions where possible. Prospective backend implementors of\nANARI are encouraged to use VisRTX as a much more complete example of a\nGPU-accelerated, ray tracing based implementation of ANARI.\n\nNote that the ANARI implementation of VisRTX is a complete rewrite from previous\nversions. Please refer to the `v0.1.6` release of VisRTX for the previous\nimplementation.\n\nPlease do not hesitate to provide feedback by [opening an\nissue](https://github.com/NVIDIA/VisRTX/issues/new)!\n\n## Build + Install\n\nVisRTX is supported on both Linux and Windows.\n\n### Core ANARI Library\n\nBuilding VisRTX requires the following:\n\n- CMake 3.17+\n- C++17 compiler\n- NVIDIA Driver 530+\n- CUDA 12+\n- [ANARI-SDK](https://github.com/KhronosGroup/ANARI-SDK)\n\nBuilding VisRTX is done through invoking CMake on the source directory from a\nstand alone build directory. This might look like\n\n```bash\nmkdir build \u0026\u0026 cd build\ncmake -DCMAKE_INSTALL_PREFIX=path/to/desired/install /path/to/visrtx/source\nmake\nmake install\n```\n\nThe OptiX and ANARI-SDK dependencies can be found via placing their installation\nlocations on `CMAKE_PREFIX_PATH`, either as an environment variable or a CMake\nvariable.\n\nThe build will result in a single `libanari_library_visrtx` library that will\ninstall to `${CMAKE_INSTALL_PREFIX}/lib`, and is usable with any ANARI app if\neither it is installed to the same location as the ANARI-SDK or\n`libanari_library_visrtx` is placed on `LD_LIBRARY_PATH` respectively.\n\n### Provided Examples\n\nVisRTX comes with a simple, single-file tutorial application that show how to\nuse VisRTX through the ANARI API. It is always enabled as it only requires the\nANARI SDK and compiles very quickly.\n\nVisRTX also comes with an optional interactive example application that gives\napplication developers a sense of what VisRTX has to offer. To enable the\ninteractive example, simply turn on the `VISRTX_BUILD_INTERACTIVE_EXAMPLE`\noption in your local CMake build.  This can be done with adding\n`-DVISRTX_BUILD_INTERACTIVE_EXAMPLE=ON` to the CMake command above, or done with\neither of the interactive CMake programs (`ccmake` or `cmake-gui`).\n\nThe interactive example requires [GLFW](https://www.glfw.org/) as an additional\ndependency.\n\n# Feature Overview\n\nThe following sections describes details of VisRTX's ANARI completeness,\nprovided extensions, and known missing extensions to add in the future.\n\n## Queryable ANARI Extensions\n\nIn addition to standard `ANARI_KHR` extensions, the following extensions are\nalso implemented in the `visrtx` device. Note that all extensions are subject to\nchange.\n\n#### \"ANARI_NV_ARRAY_CUDA\" (experimental)\n\nThis extension indicates that applications can use pointers to CUDA device\nmemory when created shared and captured arrays when using VisRTX. All the normal\nrules for shared and captured array data still apply.\n\n#### \"ANARI_NV_FRAME_BUFFERS_CUDA\"\n\nThis extension indicates that raw CUDA GPU buffers from frame objects can be\nmapped for applications which are already using CUDA. The following additional\nchannels can be mapped:\n\n- `\"colorCUDA\"`\n- `\"depthCUDA\"`\n\nGPU pointers returned by `anariMapFrame()` are device pointers intended to be\nkept on the device. Applications which desire to copy data from the device back\nto the host should instead map the ordinary `color` and `depth` channels.\n\n#### \"ANARI_VISRTX_INSTANCE_ATTRIBUTES\" (experimental)\n\nThis extension indicates that all attributes can be set as a single\n`ANARI_FLOAT32_VEC4` value on the instance, which overrides any values on the\ngeometries within the instanced group.\n\n#### \"ANARI_VISRTX_SPATIAL_FIELD_NANOVDB\" (experimental)\n\nThis extension adds the ability to render\n[NanoVDB](https://developer.nvidia.com/nanovdb) spatial fields. This subtype\ntakes a single array parameter called `data`, where the array is of type `UINT8`\ncontaining the raw bytes containing of the grid data. Currently `float`,\n`nanovdb::Fp4/8/16/N` grids are supported.\n\n#### \"ANARI_VISRTX_TRIANGLE_FACE_VARYING_ATTRIBUTES\" (experimental)\n\nThis extension indicates that additional attribute mappings are available for\nthe `triangle` geometry subtype. Specifically, the following face-unique vertex\nattribute arrays can be specified:\n\n- `faceVarying.normal`\n- `faceVarying.color`\n- `faceVarying.attribute0`\n- `faceVarying.attribute1`\n- `faceVarying.attribute2`\n- `faceVarying.attribute3`\n\nEach `faceVarying` attribute array is indexed by 3 * `primID` + `{0, 1, 2}`,\ngiving each triangle primitive a unique set of 3 vertex attributes. This follows\nthe USD definition of \"face-varying\" interpolated primvars.\n\nIf a `faceVarying` attribute array is present, it takes precedence over `vertex`\nand `primitive` attribute arrays when they are also present.\n\n## Additional ANARI Parameter and Property Extensions\n\nThe following section describes what additional parameters and properties can be\nused on various ANARI objects.\n\n#### Device\n\nThe device itself can take a single `INT32` parameter `\"cudaDevice\"` to select\nwhich CUDA GPU should be used for rendering. Once this value has been set _and_\nthe implementation has initialized CUDA for itself, then changing this to\nanother value will be ignored (a warning will tell you this if it happens). The\ndevice will initialize CUDA for itself if any object gets created from the\ndevice.\n\n#### Frame\n\nThe following properties are available to query on `ANARIFrame`:\n\n| Name           | Type  | Description                                           |\n|:---------------|:------|:------------------------------------------------------|\n| numSamples     | INT32 | get the number of pixel samples currently accumulated |\n| nextFrameReset | BOOL  | query whether the next frame will reset accumulation  |\n\nThe `numSamples` property is the lower bound of pixel samples taken when the\n`checkerboard` renderer parameter (see below) is enabled because not every pixel\nwill have the same number of samples accumulated.\n\nThe `nextFrameReset` property can give the application feedback for when\naccumulation is about to reset in the next frame. When the property is queried\nand the current frame is complete, all committed objects since the last\nrendering operation will be internally updated (may be expensive).\n\n## List of Implemented ANARI Extensions\n\nThe following extensions are either partially or fully implemented by VisRTX:\n\n- `KHR_ARRAY1D_REGION`\n- `KHR_CAMERA_DEPTH_OF_FIELD`\n- `KHR_CAMERA_ORTHOGRAPHIC`\n- `KHR_CAMERA_PERSPECTIVE`\n- `KHR_DEVICE_SYNCHRONIZATION`\n- `KHR_FRAME_ACCUMULATION`\n- `KHR_FRAME_CHANNEL_PRIMITIVE_ID`\n- `KHR_FRAME_CHANNEL_OBJECT_ID`\n- `KHR_FRAME_CHANNEL_INSTANCE_ID`\n- `KHR_FRAME_COMPLETION_CALLBACK`\n- `KHR_GEOMETRY_CONE`\n- `KHR_GEOMETRY_CURVE`\n- `KHR_GEOMETRY_CYLINDER`\n- `KHR_GEOMETRY_QUAD`\n- `KHR_GEOMETRY_SPHERE`\n- `KHR_GEOMETRY_TRIANGLE`\n- `KHR_INSTANCE_TRANSFORM`\n- `KHR_INSTANCE_TRANSFORM_ARRAY`\n- `KHR_LIGHT_DIRECTIONAL`\n- `KHR_LIGHT_HDRI`\n- `KHR_LIGHT_POINT`\n- `KHR_LIGHT_SPOT`\n- `KHR_MATERIAL_MATTE`\n- `KHR_MATERIAL_PHYSICALLY_BASED`\n- `KHR_RENDERER_AMBIENT_LIGHT`\n- `KHR_RENDERER_BACKGROUND_COLOR`\n- `KHR_RENDERER_BACKGROUND_IMAGE`\n- `KHR_SAMPLER_IMAGE1D`\n- `KHR_SAMPLER_IMAGE2D`\n- `KHR_SAMPLER_IMAGE3D`\n- `KHR_SAMPLER_PRIMITIVE`\n- `KHR_SAMPLER_TRANSFORM`\n- `KHR_SPATIAL_FIELD_STRUCTURED_REGULAR`\n- `KHR_VOLUME_TRANSFER_FUNCTION1D`\n- `EXT_SAMPLER_COMPRESSED_IMAGE2D`\n- `EXT_SAMPLER_COMPRESSED_FORMAT_BC123`\n- `EXT_SAMPLER_COMPRESSED_FORMAT_BC45`\n- `NV_ARRAY_CUDA`\n- `NV_FRAME_BUFFERS_CUDA`\n- `VISRTX_INSTANCE_ATTRIBUTES`\n- `VISRTX_SPATIAL_FIELD_NANOVDB`\n- `VISRTX_TRIANGLE_BACK_FACE_CULLING`\n- `VISRTX_TRIANGLE_FACE_VARYING_ATTRIBUTES`\n\nFor any found bugs in extensions that are implemented, please [open an\nissue](https://github.com/NVIDIA/VisRTX/issues/new)!\n","funding_links":[],"categories":["Uncategorized","Graphics"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNVIDIA%2FVisRTX","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNVIDIA%2FVisRTX","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNVIDIA%2FVisRTX/lists"}