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
- 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 No Meet strange behavior - Glfw3 and GLEW if you want to compile with GUI
- x64 Ubuntu or Windows
- Nvidia GPU that support sm_75 or sm_86
If the render result is strange and incorrect, try to use CUDA 11.0 and disable RTX30XX
option no matter what card you are using. If you know why this happened, please help us fix it!
Test with Geforce RTX2000 series, RTX3000 series, Quadro A5000 GPU.
- Install CUDA 11.x.
- Unzip 'tools/curand include.rar' into your cuda include directory.
- Run CMake to generate project, use
-T cuda=<PATH/TO/CUDA/toolkit>
to select cuda version. - If you are using RTX30 series, enable the
RTX30XX
option. - Enable
RPNN
option if you want to compare with it. - Compile your project, it may stuck for a while.
- Linux currently don't support build with GUI.
- Install CUDA 11.x.
- Install glew and glfw3 if you need GUI support. (Remember to install x64 version)
- Run CMake to generate project, use
-T cuda=<PATH/TO/CUDA/toolkit>
to select 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 RTX30 series, enable the
RTX30XX
option. - Enable
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 comparation 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(...)