{"id":50635079,"url":"https://github.com/PolyhedronStudio/Q2RTXPerimental","last_synced_at":"2026-06-23T21:01:24.720Z","repository":{"id":193373797,"uuid":"688394623","full_name":"PolyhedronStudio/Q2RTXPerimental","owner":"PolyhedronStudio","description":"My 'Experimental' fork of NVIDIA’s implementation of RTX ray-tracing in Quake II","archived":false,"fork":true,"pushed_at":"2026-05-20T16:30:01.000Z","size":52771,"stargazers_count":16,"open_issues_count":2,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-05-20T21:51:48.367Z","etag":null,"topics":["cpp-programming","cpp23","entity-system","fork","framework","game-development","iqm","modern","old-school","path-tracing","pathtracing","q2rtx","q2rtx-extended-shooter-template","quake2rtx","ray-tracing","raytracing","retro","rtx","trenchbroom","workflow"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"NVIDIA/Q2RTX","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PolyhedronStudio.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-09-07T09:00:35.000Z","updated_at":"2026-05-02T17:48:49.000Z","dependencies_parsed_at":"2023-09-26T08:23:44.319Z","dependency_job_id":null,"html_url":"https://github.com/PolyhedronStudio/Q2RTXPerimental","commit_stats":null,"previous_names":["polyhedronstudio/q2rtxperimental"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/PolyhedronStudio/Q2RTXPerimental","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PolyhedronStudio%2FQ2RTXPerimental","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PolyhedronStudio%2FQ2RTXPerimental/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PolyhedronStudio%2FQ2RTXPerimental/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PolyhedronStudio%2FQ2RTXPerimental/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PolyhedronStudio","download_url":"https://codeload.github.com/PolyhedronStudio/Q2RTXPerimental/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PolyhedronStudio%2FQ2RTXPerimental/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34706579,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cpp-programming","cpp23","entity-system","fork","framework","game-development","iqm","modern","old-school","path-tracing","pathtracing","q2rtx","q2rtx-extended-shooter-template","quake2rtx","ray-tracing","raytracing","retro","rtx","trenchbroom","workflow"],"created_at":"2026-06-07T02:00:18.361Z","updated_at":"2026-06-23T21:01:24.713Z","avatar_url":"https://github.com/PolyhedronStudio.png","language":"C++","funding_links":[],"categories":["FPS"],"sub_categories":[],"readme":"# Quake II RTXPerimental\n\n[![Builds](https://github.com/PolyhedronStudio/Q2RTXPerimental/actions/workflows/build-master.yml/badge.svg)](https://github.com/PolyhedronStudio/Q2RTXPerimental/actions/workflows/build-master.yml)\n\n**Quake II RTXPerimental** is my 'playing field', taking Q2RTX, while trying to modernize the code where possible. While doing so it becomes gradually necessary to move away from 'baseq2' and its data, on to providing our own basic game template instead.\n\nAnyone familiar with my previous/other project [Polyhedron](https://github.com/PolyhedronStudio/Polyhedron-Engine) will likely notice that I've enlisted features that can already be found there.\nFor various reasons I wish to actually reimplement these properly in this codebase.\n\nFor any questions, and/or following progress, feel free to join the [**Polyhedron/Q2RTXPerimental**](https://discord.gg/6Qc6wfmFMR) Discord.\nAlternatively, there is also the QuakeDev [**QuakeDev**](https://discord.gg/csCBGXVUmv) Discord channel.\n\n**Quake II RTX** is NVIDIA's attempt at implementing a fully functional \nversion of Id Software's 1997 hit game **Quake II** with RTX path-traced \nglobal illumination.\n\n**Quake II RTX** builds upon the [Q2VKPT](http://brechpunkt.de/q2vkpt) \nbranch of the Quake II open source engine. Q2VKPT was created by former \nNVIDIA intern Christoph Schied, a Ph.D. student at the Karlsruhe Institute \nof Technology in Germany.\n\nQ2VKPT, in turn, builds upon [Q2PRO](https://skuller.net/q2pro/), which is a \nmodernized version of the Quake II engine. Consequently, many of the settings \nand console variables that work for Q2PRO also work for Quake II RTX.\n\n## **Quake II RTXPerimental** Features/Todo/Contending Features:\n[Changelog](changelog.md) \n\n[Todo](todo.md)\n\n[Contending Todo Features](todo_future.md)\n\n## License\n\n**Quake II RTXPerimental** is licensed under the same licenses as seen below:\n\n**Quake II RTX** is licensed under the terms of the **GPL v.2** (GNU General Public License).\nYou can find the entire license in the [license.txt](license.txt) file.\n\nThe **Quake II** game data files remain copyrighted and licensed under the\noriginal id Software terms, so you cannot redistribute the pak files from the\noriginal game.\n\n## **Quake II RTX** Features\n\n**Quake II RTX** introduces the following features:\n  - Caustics approximation and coloring of light that passes through tinted glass\n  - Cutting-edge denoising technology\n  - Cylindrical projection mode\n  - Dynamic lighting for items such as blinking lights, signs, switches, elevators and moving objects\n  - Dynamic real-time \"time of day\" lighting\n  - Flare gun and other high-detail weapons\n  - High-quality screenshot mode\n  - Multi-GPU (SLI) support\n  - Multiplayer modes (deathmatch and cooperative)\n  - Optional two-bounce indirect illumination\n  - Particles, laser beams, and new explosion sprites\n  - Physically based materials, including roughness, metallic, emissive, and normal maps\n  - Player avatar (casting shadows, visible in reflections)\n  - Recursive reflections and refractions on water and glass, mirror, and screen surfaces\n  - Procedural environments (sky, mountains, clouds that react to lighting; also space)\n  - Sunlight with direct and indirect illumination\n  - Volumetric lighting (god-rays)\n\nYou can download functional builds of the game from [GitHub Releases](https://github.com/NVIDIA/Q2RTX/releases).\n\nLatest development builds can be found in the [Actions](https://github.com/NVIDIA/Q2RTX/actions/workflows/build.yml) tab.\nTo run a development build, download the artifact, extract it and put `q2rtx_media.pkz`, `blue_noise.pkz` and the `pak*.pak` files from the original game into `baseq2/`.\n\n## Additional Information\n\n  * [Announcement Article](https://www.nvidia.com/en-us/geforce/news/quake-ii-rtx-ray-tracing-vulkan-vkray-geforce-rtx/)\n  * [Ray-Tracing Deep Dive](https://www.nvidia.com/en-us/geforce/news/geforce-gtx-dxr-ray-tracing-available-now/)\n  * [Launch Trailer Video](https://www.youtube.com/watch?v=unGtBbhaPeU)\n  * [Path Tracer Overview Video](https://www.youtube.com/watch?v=BOltWXdV2XY)\n  * [GDC 2019 Presentation](https://www.gdcvault.com/play/1026185/)\n  * [Client Manual](doc/client.md)\n  * [Server Manual](doc/server.md)\n\nAlso, some source files have comments that explain various parts of the renderer:\n\n  * [asvgf.glsl](src/refresh/vkpt/shader/asvgf.glsl) explains the denoiser filters\n  * [checkerboard_interleave.comp](src/refresh/vkpt/shader/checkerboard_interleave.comp) shows how checkerboarded rendering facilitates path tracing on multiple GPUs and helps with water and glass surfaces\n  * [path_tracer.h](src/refresh/vkpt/shader/path_tracer.h) gives an overview of the path tracer\n  * [tone_mapping_histogram.comp](src/refresh/vkpt/shader/tone_mapping_histogram.comp) explains the tone mapping solution \n\n\n## Support and Feedback\n\n  * [GeForce.com Forums](https://forums.geforce.com/default/topic/1119082/geforce-rtx-20-series/quake-ii-rtx-installation-guide/)\n  * [Steam Community Hub](https://steamcommunity.com/app/1089130)\n  * [GitHub Issue Tracker](https://github.com/NVIDIA/Q2RTX/issues)\n\n## System Requirements\n\nIn order to build **Quake II RTXPerimental** you will need the following software\ninstalled on your computer (with at least the specified versions or more \nrecent ones).\n\n### Operating System\n\n|             | Windows    | Linux                          |\n|-------------|------------|--------------------------------|\n| Min Version | Win 7 x64  | Ubuntu 16.04 x86_64 or aarch64 |\n\nNote: only the Windows 10 version has been extensively tested.\n\nNote: distributions that are binary compatible with Ubuntu 16.04 should work as well.\n\nNote: Linux ppc64le is also known to work though not officially supported.\n\n### Software\n\n|                                                         | Min Version |\n|---------------------------------------------------------|-------------|\n| NVIDIA GPU driver \u003cbr\u003e https://www.geforce.com/drivers  | 460.82      |\n| AMD GPU driver \u003cbr\u003e https://www.amd.com/en/support      | 21.1.1      |\n| git \u003cbr\u003e https://git-scm.com/downloads                  | 2.15        |\n| CMake \u003cbr\u003e https://cmake.org/download/                  | 3.8         |\n| Vulkan SDK \u003cbr\u003e https://www.lunarg.com/vulkan-sdk/      | 1.2.162     |\n\n## Submodules\n\n* [zlib](https://github.com/madler/zlib)\n* [curl](https://github.com/curl/curl)\n* [SDL2](https://github.com/spurious/SDL-mirror)\n* [stb](https://github.com/nothings/stb)\n* [tinyobjloader-c](https://github.com/syoyo/tinyobjloader-c)\n* [Vulkan-Headers](https://github.com/KhronosGroup/Vulkan-Headers)\n* [glslang](https://github.com/KhronosGroup/glslang) (optional, see the `CONFIG_BUILD_GLSLANG` CMake option)\n* [openal-soft](https://github.com/kcat/openal-soft)\n\n## Build Instructions\n\n  1. Clone the repository and its submodules from git :\n\n     `git clone --recursive https://github.com/NVIDIA/Q2RTX.git `\n\n  2. Create a build folder named `build` under the repository root (`Q2RTX/build`)     \n\n     Note: this is required by the shader build rules.\n\n  3. Copy (or create a symbolic link) to the game assets folder (`Q2RTX/baseq2`) \n\n     Note: the asset packages are required for the engine to run.\n     Specifically, the `blue_noise.pkz` and `q2rtx_media.pkz` files or their extracted contents.\n     The package files can be found in the [GitHub releases](https://github.com/NVIDIA/Q2RTX/releases) or in the published builds of Quake II RTX.\n\n  4. Configure CMake with either the GUI or the command line and point the build at the `build` folder\n     created in step 2.\n\n     `cd build`  \n     `cmake ..`\n\n     **Note**: only 64-bit builds are supported, so make sure to select a 64-bit generator during the initial configuration of CMake.\n     \n     Note 2: when CMake is configuring `curl`, it will print warnings like `Found no *nroff program`. These can be ignored.\n\n  5. Build with Visual Studio on Windows, make on Linux, or the CMake command\n     line:\n\n     `cmake --build . `\n\n## Music Playback Support\n\nQuake II RTX supports music playback from OGG files, if they can be located. To enable music playback, copy the CD tracks into a `music` folder either next to the executable, or inside the game directory, such as `baseq2/music`. The files should use one of these two naming schemes:\n  - `music/02.ogg` for music copied directly from a game CD;\n  - `music/Track02.ogg` for music from the version of Quake II downloaded from [GOG](https://www.gog.com/game/quake_ii_quad_damage).\n\nIn the game, music playback is enabled when console variable `ogg_enable` is set to 1. Music volume is controlled by console varaible `ogg_volume`. Playback controls, such as selecting the track or putting it on pause, are available through the `ogg` command.\n\nMusic playback support is using code adapted from the [Yamagi Quake 2](https://www.yamagi.org/quake2/) engine.\n\n## Photo Mode\n\nWhen a single player game or demo playback is paused, normally with the `pause` key, the photo mode activates. \nIn this mode, denoisers and some other real-time rendering approximations are disabled, and the image is produced\nusing accumulation rendering instead. This means that the engine renders the same frame hundreds or thousands of times,\nwith different noise patterns, and averages the results. Once the image is stable enough, you can save a screenshot.\n\nIn addition to rendering higher quality images, the photo mode has some unique features. One of them is the\n**Depth of Field** (DoF) effect, which simulates camera aperture and defocus blur, or bokeh. In contrast with DoF effects\nused in real-time renderers found in other games, this implementation computes \"true\" DoF, which works correctly through reflections and refractions, and has no edge artifacts. Unfortunately, it produces a lot of noise instead, so thousands\nof frames of accumulation are often needed to get a clean picture. To control DoF in the game, use the mouse wheel and \n`Shift/Ctrl` modifier keys: wheel alone adjusts the focal distance, `Shift+Wheel` adjusts the aperture size, and `Ctrl` makes\nthe adjustments finer.\n\nAnother feature of the photo mode is free camera controls. Once the game is paused, you can move the camera and \ndetach it from the character. To move the camera, use the regular `W/A/S/D` keys, plus `Q/E` to move up and down. `Shift` makes\nmovement faster, and `Ctrl` makes it slower. To change orientation of the camera, move the mouse while holding the left \nmouse button. To zoom, move the mouse up or down while holding the right mouse button. Finally, to adjust camera roll,\nmove the mouse left or right while holding both mouse buttons.\n\nSettings for all these features can be found in the game menu. To adjust the settings from the console, see the\n`pt_accumulation_rendering`, `pt_dof`, `pt_aperture`, `pt_freecam` and some other similar console variables in the \n[Client Manual](doc/client.md).\n\n## Material System\n\nThe engine has a system for defining various properties for surface materials, such as textures, material kinds, flags, etc.\nMaterials are defined in `*.mat` files in a custom text-based format. The engine will read all `materials/*.mat` files from\nthe game directory (or directories when playing a non-base game) in alphabetic order, and materials in the later files override\nthe materials in the earlier files. Then the engine also reads a `\u003cmapname\u003e.mat` file when loading a map, and the materials\ndefined in the map-specific file override global materials - but only those used for map geometry, not models.\n\nThe `.mat` files consist of multiple material entries, where each entry can define multiple materials. For example:\n```\ntextures/e1u2/wslt1_5,\ntextures/e1u2/wslt1_6:\n    texture_base overrides/*.tga\n    texture_normals overrides/*_n.tga\n    texture_emissive overrides/*_light.tga\n    is_light 1\n    correct_albedo 1\n```\n\nThe above example defines two materials that will be used for surfaces that reference `.wal` files with the same base names,\nand for each of these materials it defines three textures. The `*` symbol in the texture definition is replaced with the\nmaterial base name, so either `wslt1_5` or `wslt1_6` in this example.\n\nWhen a material is not defined for a surface, the engine will look for textures with matching names and various extensions.\nFirst, it will look in the `overrides/` directory, then in the original texture path. Normal maps are searched with the `_n`\nsuffix, and emissive maps are searched with the `_light` suffix. If no replacement files are found, just the original base\ntexture will be used.\n\nMaterials can also use the automatic emissive texture generation feature. This is the case for undefined materials when the\n`pt_enable_surface_lights` console variable is nonzero: wall surfaces with the `CM_SURFACE_FLAG_LIGHT` flag (but not `CM_SURFACE_FLAG_SKY` or\n`CM_SURFACE_NODRAW`) will generate an emissive texture from the base texture and a threshold value, if no emissive texture is found,\nand marked with the `is_light` material flag.\nThe threshold value is set using the `pt_surface_lights_threshold` variable.\nFor defined materials you can the `synth_emissive` and `emissive_threshold` material properties to explicitly enable\nemissive texture generation.\n\nMaterials can be examined and modified at run time, using the `mat` command. For example, `mat print` will print the properties\nof the currently targeted material to the console. To get more usage information, use `mat help`.\n\n## MIDI Controller Support\n\nThe Quake II console can be remote operated through a UDP connection, which\nallows users to control in-game effects from input peripherals such as MIDI controllers. This is \nuseful for tuning various graphics parameters such as position of the sun, intensities of lights, \nmaterial parameters, filter settings, etc.\n\nYou can find a compatible MIDI controller driver [here](https://github.com/NVIDIA/korgi)\n\nTo enable remote access to your Quake II RTX client, you will need to set the following \nconsole variables _before_ starting the game, i.e. in the config file or through the command line:\n```\n rcon_password \"\u003cpassword\u003e\"\n backdoor \"1\"\n```\n\nNote: the password set here should match the password specified in the korgi configuration file.\n\nNote 2: enabling the rcon backdoor allows other people to issue console commands to your game from \nother computers, so choose a good password.\n\n## Test Model\n\nThe engine includes support for placing a test model in any location. You can use any MD2, MD3 or IQM model. Follow these steps to use this feature:\n\n  - To use the material sampling balls model, download the `shader_balls.pkz` package from the [Releases](https://github.com/NVIDIA/Q2RTX/releases) page. Place or extract that package into your `baseq2` folder.\n  - Run the game with the `cl_testmodel` variable set to the path of the test model.\n  - Use the `puttest` command to place the test model at the current player location.\n  - Adjust the test model animation speed with the `cl_testfps` variable and its opacity with the `cl_testalpha` variable.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPolyhedronStudio%2FQ2RTXPerimental","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FPolyhedronStudio%2FQ2RTXPerimental","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPolyhedronStudio%2FQ2RTXPerimental/lists"}