MRPNN is a neural volumetric renderer that can render high-order volumetric scattering in real time. See our paper for more details. SIG23: Deep Real-time Volumetric Rendering Using Multi-feature Fusion
Project page | Supplementary doc | Dataset for demo
- CUDA 11.x
Version Compatible Info 11.0 Yes* CUDA11.0 Only support sm_75 11.1 Yes Recommended 11.2 Yes Recommended 11.3 Yes* 11.3 update 1 fix a compile error 11.4~11.7 Not Sure 11.8 Yes* After commit 324eae2241bfb51cae606f4e626d48ce1e0afdca - Glfw3 and GLEW if you want to compile with GUI
- x64 Ubuntu or Windows
- Nvidia GPU that supports sm_75 or sm_86
Test with Geforce RTX2000 series, RTX3000 series, RTX4000 series, and Quadro A5000 GPU.
- Install CUDA 11.x.
- Unzip 'tools/curand include.rar' into your cuda include directory.
- Run CMake to generate the project, and use
-T cuda=<PATH/TO/CUDA/toolkit>
to select a cuda version. - If you are using the RTX3000 series (or another sm_86 card), enable the
RTX30XX
option. - Enable the
RPNN
option if you want to compare with it. - Compile your project, it may stuck for a while.
- Linux currently doesn't support build with GUI.
- Install CUDA 11.x.
- Install glew and glfw3 if you need GUI support. (Remember to install the x64 version)
- Run CMake to generate the project, and use
-T cuda=<PATH/TO/CUDA/toolkit>
to select a cuda version. - If you are using CUDA 11.0~11.3, you may also need to have MSVC v14.25 and using
-T version=14.25
. - If you are using the RTX3000 series, enable the
RTX30XX
option. - Enable the
RPNN
option if you want to compare with it. - Check the
GUI
option if needed. - Compile your project, it may stuck for a while.
- Download test data from OneDrive.
- Unzip them to
./TestCase/
. - Run the Test.
The bias comparison is only supported on Windows!
- Download Cloud0.rar.
- Unzip it to
./TestCase/
. - Build project with GUI option on.
- Run the VolumeRender.
VolumeRender v(/*volumeric data resolution*/512);
// filling volume with a sphere centered at (0.5,0.5,0.5)
v.SetDatas([](int x, int y, int z, float u, float v, float w) {
float dis = distance(make_float3(0.5f, 0.5f, 0.5f), make_float3(u,v,w));
return dis < 0.25 ? 1.0f : 0;
});
// Call Update after changing volumetric data.
v.Update();
// Call render to generate result in memory (array of float3 colors)
v.Render(...)
// or create a camera of this volume
Camera cam(v);
// and use camera to render to file
cam.RenderToFile(...)
@inproceedings{ MRPNN:SIG:2023,
author = {Jinkai Hu and Chengzhong Yu and Hongli Liu and Ling-qi Yan and Yiqian Wu and Xiaogang Jin},
title = {Deep Real-time Volumetric Rendering Using Multi-feature Fusion},
booktitle = {{SIGGRAPH} '23: Special Interest Group on Computer Graphics and Interactive Techniques Conference, Los Angeles CA, United States, August 6 - 10, 2023},
publisher = {{ACM}},
year = {2023}
}