Grzegorz Wilczyński1,3, Mikołaj Zieliński2, Krzysztof Byrski1, Joanna Waczyńska1,3, Dominik Belter2, Przemysław Spurek1,3
1Jagiellonian University, 2Poznań University of Technology, 3IDEAS Research Institute,
IRIS (Intersection-aware Ray-based Implicit Editable Scenes) enables fast rendering and interactive shape editing for Neural Radiance Fields. It utilizes neural anchors—represented as 3D Gaussians—to guide neural evaluations. To eliminate the computational inefficiencies of standard proxy-guided NeRFs, IRIS introduces an analytical sampling strategy that precisely identifies ray-primitive intersections, effectively bypassing empty space. Additionally, we replace costly 3D spatial searches with a continuous feature aggregation mechanism. By interpolating latent attributes directly from sorted intersections along the ray, IRIS ensures strict geometric consistency while achieving high-fidelity visuals and flexible scene manipulation.
This project is developed as an extension for Nerfstudio. To get started, please install Nerfstudio along with its dependencies.
Then, install this repo with:
pip install -e .
ns-install-cli🚀 This will install the package in editable mode and kick off the Nerfstudio CLI installer to get you all set up and ready to go! 🎉
Note: If for some reason the method is not working right away for you it may mean tat you have to compile the OptiX code for your specific machine. In order to do so please refer to this instruction.
To test if everything was installed properly, you can run the lego demo.
# First train the model with (remember to have sparse_pc.ply, instruction written below)
ns-train iris --data data/lego --timestamp demo
# Export triangle soup
iris-export tetrahedrons --load-config outputs/lego/iris/demo/config.yml
# Prepare the animation with blender
blender -b blender/lego/Lego_demo.blend -P blender/lego/script.py
# Now you can render the animation
iris-render dataset --load-config outputs/lego/iris/demo/config.yml --rendered-output-names rgb --output-path edits/lego_demo --selected-camera-idx 50
# Render the video
cd edits/lego_demo
ffmpeg -framerate 24 -i %05d.jpg -c:v libx264 -pix_fmt yuv420p lego_demo.mp4By default, our method supports the NeRF Synthetic format. If you want to use your own data you need to put sparse_pc.ply in the dataset folder. For synthetic data you can use point cloud generated with 3DGS.
For real data please follow Nerfstudio data format. Like with synthetic data, you'll also need to place sparse_pc.ply in the dataset folder to initialize the network with a sparse point cloud (once again you can use 3DGS).
Example train commands:
# For nerf synthetic
ns-train iris --data <path_to_dataset>
# For MiP-NeRF but also other real data
ns-train iris_real --data <path_to_dataset>Example evaluation commands:
ns-eval \
--load_config <path_to_config_of_the_trained_model> \
--output-path <output_path_for_metrics_json> \
--render-output-path <output_path_for_renders>We use Blender for generating our animations. It is important to generate for each frame of your animation an *.ply file containing modified Gaussians obtained from the training. You can find them in the output folder of your training under the name step-<num_steps>_means.ply.
⚠️ It is very important to use only*.plyfiles since they don't change the order of vertices upon the save.
In the output folder of your trained model (usually named with the timestamp) create camera_path folder and put your *.ply file there. It is important to name them 00000.ply, 00001.ply, 00002.ply, etc.
Now you are ready to go and you can start rednering. You have two options right here:
iris-render dataset \
--load-config outputs/<path_to_your_config.yml> \
--output-path edits/<output_folder> \
--rendered-output-names rgb \
--selected-camera-idx <num_camera_from_test_data>- If you specify a camera index, all frames will be rendered from that viewpoint.
- If not, the tool renders from all test-time cameras.
If you found this work usefull, please consider citing:
@inproceedings{wilczynski2026iris,
title={IRIS: Intersection-aware Ray-based Implicit Editable Scenes},
author={Grzegorz Wilczyński and Mikołaj Zieliński and Krzysztof Byrski and Joanna Waczyńska and Dominik Belter and Przemysław Spurek},
year={2026},
eprint={2603.15368},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2603.15368},
}