Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IRIS: Intersection-aware Ray-based Implicit Editable Scenes

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,

arXiv Project Page

Overview

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.

⚙️ Installation

This project is developed as an extension for Nerfstudio. To get started, please install Nerfstudio along with its dependencies.

nerfstudio

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.

Running the demo

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.mp4

Data preparation

Synthetic data

By 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.

Real data

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).

Training the network

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>

Evaluating model

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>

Rendering results

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 *.ply files 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:

Dataset Render

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.

Citations

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}, 
  }

About

Official implemenation of IRIS: Intersection-aware Ray-based Implicit Editable Scenes

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages