← Open Source
BachiLi

redner

Differentiable rendering without approximation.

Model DevelopmentArchitectureNASL
Open on GitHub
Momentum
+0stars in 24 hours0.0%
1.45k
Stars
145
Forks
+1
This week
17
Contributors
Created 2018-11-10 · Updated 2026-10-13 · #10308 today
Top developers
BachiLiSuperShinyEyesfrancoisruty

BachiLi/redner is ranked 10,308 with 1,447 stars.

Same-category comparison

BachiLi/redner is ranked 10,308 among these 8 peers; liyaguang/DCRNN is ranked 10,306.

Same-category comparison
NameRankMetrics
mit-han-lab/proxylessnas10,300
Language:
C++
Stars:
1,450
Forks:
281
Description:
[ICLR 2019] ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware.
google-deepmind/rlax10,302
Language:
Python
Stars:
1,449
Forks:
110
bigscience-workshop/Megatron-DeepSpeed10,305
Language:
Python
Stars:
1,448
Forks:
225
Description:
Ongoing research training transformer language models at scale, including: BERT & GPT-2.
liyaguang/DCRNN10,306
Language:
Python
Stars:
1,448
Forks:
426
Description:
Implementation of Diffusion Convolutional Recurrent Neural Network in Tensorflow.
megvii-research/ML-GCN10,311
Language:
Python
Stars:
1,446
Forks:
346
Description:
PyTorch implementation of Multi-Label Image Recognition with Graph Convolutional Networks, CVPR 2019.
nilearn/nilearn10,312
Language:
Python
Stars:
1,445
Forks:
690
Description:
Machine learning for NeuroImaging in Python.
AshwinRJ/Federated-Learning-PyTorch10,314
Language:
Python
Stars:
1,442
Forks:
459
Description:
Implementation of Communication-Efficient Learning of Deep Networks from Decentralized Data.
rail-berkeley/softlearning10,318
Language:
Python
Stars:
1,440
Forks:
249
Description:
Softlearning is a reinforcement learning framework for training maximum entropy policies in continuous domains. Includes the official implementation of the Soft Actor-Critic algorithm.
Key parameters and specifications
Key parameters and specifications
ParameterValue
LanguageNASL
CategoryModel Development
SubcategoryArchitecture
Keywords3D
Stars1,447
Forks145
Contributors17
Created date2018-11-10
Updated date2026-10-13
Stars in 1 day0
Stars in 7 days1
Rank10,308
Previous rank10,313
Rank change5
7-day stars rank9,838
Previous 7-day stars rank9,901
7-day stars rank change63
Total stars rank8,334
Previous total stars rank8,325
Total stars rank change-9
CountryUSA
README summary

redner: Differentiable rendering without approximation redner is a differentiable renderer that can take the derivatives of rendering outputs with respect to arbitrary scene parameters, that is, you can backpropagate from the image to your 3D scene. One of the major usages of redner is inverse rendering (hence the name redner) through gradient descent. You can also use redner in a fast deferred rendering mode for local shading: in this mode it still has correct gradient estimation and more elaborate material

models compared to most differentiable renderers out there. For more details on the renderer, what it can do, and the techniques it use for computing the derivatives, please take a look at the paper: Differentiable Monte Carlo Ray Tracing through Edge Sampling, Tzu-Mao Li, Miika Aittala, Fredo Durand, Jaakko Lehtinen. Since the submission we have improved the renderer quite a bit. In particular we implemented a CUDA backend and accelerated the continuous derivatives significantly by replacing automatic differentiation with

manually-derived derivatives. See Tzu-Mao Li's thesis for even more details. Also see the "News" section below for the changelog. Installation With either PyTorch (any version >= 1. 0) installed in your current Python environment. For GPU accelerated version (Linux and Windows, CUDA version >= 10. 0): otherwise (Windows, Linux and OS X): Windows version only supports PyTorch and not TensorFlow at the moment. Documentation A good starting point to learn how to use redner is to look at the wiki

. You can also take a look at the tests directories (PyTorch and TensorFlow) to have some ideas. 04/01/2020 - Added a camera distortion model. TensorFlow support is pending with some compilation issues. 02/27/2020 - Fixed a bug in BRDF derivatives. Thanks Markus Worchel again for reporting this. 02/02/2020 - Fixed a serious bug for G-buffer rendering ( Thanks Markus Worchel for reporting this. 02/01/2020 - Preliminary Windows support for GPU is available thanks to Markus Worchel

again. 01/08/2020 - Significantly improves the memory usage of mipmapping. Now you can use large textures (say 4096x4096) relatively safely. 12/15/2019 - Fixed a GC-related bug on the PyTorch rendering code in 0. 12/12/2019 - Preliminary Windows support (CPU-only) is available thanks to the contribution of Markus Worchel. 12/09/2019 - Added many tutorials in wiki using Google colab. 12/09/2019 - Fixed a bug in the Wavefront obj loader. 12/01/2019 - Redo the

build systems and setup Python wheel installation. Redner is now on PyPI ( and 11/04/2019 - Added a "generic texture" field in the material which can have arbitrary number of channels. This can be useful for deep learning application where the texture is generated by a network, and the output is fed into another network for further processing. Thanks François Ruty for the suggestion and the help on implementation. 11/04/2019 - Fixed several bugs in the OBJ/Mitsuba

loaders introduced by the and change. 10/19/2019 - Added vertex color support. 10/08/2019 - Added automatic uv computation

Frequently asked questions

How many stars and forks are recorded?

BachiLi/redner has 1,447 stars and 145 forks.

What is the repository rank?

BachiLi/redner is ranked 10,308.

What language and category are recorded?

BachiLi/redner has 1,447 stars, uses NASL and belongs to Model Development.

Which repository is closest in rank?

BachiLi/redner is compared with liyaguang/DCRNN, ranked 10,306 with 1,448 stars.

README

redner: Differentiable rendering without approximation

redner is a differentiable renderer that can take the derivatives of rendering outputs with respect to arbitrary scene parameters, that is, you can backpropagate from the image to your 3D scene. One of the major usages of redner is inverse rendering (hence the name redner) through gradient descent. What sets redner apart are: 1) it computes correct rendering gradients stochastically without any approximation by properly considering the discontinuities, and 2) it has a physically-based mode -- which means it can simulate photons and produce realistic lighting phenomena, such as shadow and global illumination, and it handles the derivatives of these features correctly. You can also use redner in a fast deferred rendering mode for local shading: in this mode it still has correct gradient estimation and more elaborate material models compared to most differentiable renderers out there.

For more details on the renderer, what it can do, and the techniques it use for computing the derivatives, please take a look at the paper: Differentiable Monte Carlo Ray Tracing through Edge Sampling, Tzu-Mao Li, Miika Aittala, Fredo Durand, Jaakko Lehtinen. Since the submission we have improved the renderer quite a bit. In particular we implemented a CUDA backend and accelerated the continuous derivatives significantly by replacing automatic differentiation with manually-derived derivatives. See Tzu-Mao Li's thesis for even more details. Also see the "News" section below for the changelog.

Installation

With either PyTorch (any version >= 1.0) or TensorFlow (version >= 2.0) installed in your current Python environment. For GPU accelerated version (Linux and Windows, CUDA version >= 10.0):

pip install redner-gpu

otherwise (Windows, Linux and OS X):

pip install redner

Windows version only supports PyTorch and not TensorFlow at the moment.

You can also build from source. See the wiki for building instructions.

Documentation

A good starting point to learn how to use redner is to look at the wiki. The API documetation is here. You can also take a look at the tests directories (PyTorch and TensorFlow) to have some ideas.

News

06/12/2020 - Python 3.8 support.
04/01/2020 - Added a camera distortion model.
03/17/2020 - Pip package for Windows! Currently only with PyTorch support. TensorFlow support is pending with some compilation issues.
02/27/2020 - Fixed a bug in BRDF derivatives. This affects normal mapping the most. Thanks Markus Worchel again for reporting this.
02/02/2020 - Fixed a serious bug for G-buffer rendering (https://github.com/BachiLi/redner/issues/93). Thanks Markus Worchel for reporting this.
02/01/2020 - Preliminary Windows support for GPU is available thanks to Markus Worchel again.
01/08/2020 - Significantly improves the memory usage of mipmapping. Now you can use large textures (say 4096x4096) relatively safely.
12/15/2019 - Fixed a GC-related bug on the PyTorch rendering code in 0.1.30. Please update.
12/12/2019 - Preliminary Windows support (CPU-only) is available thanks to the contribution of Markus Worchel.
12/09/2019 - Added many tutorials in wiki using Google colab. Added a sphinx-generated documentation.
12/09/2019 - Fixed a bug in the Wavefront obj loader. Thanks Dejan Azinović for reporting!
12/01/2019 - Redo the build systems and setup Python wheel installation. Redner is now on PyPI (https://pypi.org/project/redner-gpu/ and https://pypi.org/project/redner/).
11/04/2019 - Added a "generic texture" field in the material which can have arbitrary number of channels. This can be useful for deep learning application where the texture is generated by a network, and the output is fed into another network for further processing. See test_multichannels.py for usages. Thanks François Ruty for the suggestion and the help on implementation.
11/04/2019 - Fixed several bugs in the OBJ/Mitsuba loaders introduced by the uv_indices and normal_indices change.
10/19/2019 - Added vertex color support. See test_vertex_color.py.
10/08/2019 - Added automatic uv computation through the xatlas library. See the compute_uvs function in shape.py and test_compute_uvs.py.
10/08/2019 - Slightly changed the Shape class interface. The constructor order is different and it now takes extra 'uv_indices' and 'normal_indices' arguments for dealing with seams in UV mapping and obj loading. See pyredner/shape.py and tutorial 2.
09/22/2019 - We now handle inconsistencies between shading normals and geometry normals more gracefully (instead of just return zero in most cases). This helps with rendering models in the wild, say, models in ShapeNet.
09/21/2019 - Fixed a serious buffer overrun bug in the deferred rendering code when there is no radiance output channel. If things didn't work for you, maybe try again.
08/16/2019 - Added docker files for easier installation. Thanks Seyoung Park for the contribution again. Also I significantly improved the wiki installation guide.
08/13/2019 - Added normal map support. See tests/test_teapot_normal_map.py.
08/10/2019 - Significantly simplified the derivatives accumulation code (segmented reduction -> atomics). Also GPU backward pass got 20~30% speedup.
08/07/2019 - Fixed a roughness texture bug.
07/27/2019 - Tensorflow 1.14 support! Currently only support eager execution. We will support graph execution after tensorflow 2.0 becomes stable. See tests_tensorflow for examples (I recommend starting from tests_tensorflow/test_single_triangle.py). The CMake files should automatically detect tensorflow in python and install corresponding files. Tutorials are work in progress. Lots of thanks go to Seyoung Park for the contribution!
06/25/2019 - Added orthographic cameras (see examples/two_d_mesh.py).
05/13/2019 - Fixed quite a few bugs related to camera derivatives. If something didn't work for you before, maybe try again.
04/28/2019 - Added QMC support (see tests/test_qmc.py and the documentation in pyredner.serialize_scene()).
04/01/2019 - Now support multi-GPU (see pyredner.set_device).
03/31/2019 - Brought back the hierarchical edge sampling method in the paper.
02/02/2019 - The wiki now contains a series of tutorial. The plan is to further expand the examples.

Dependencies

redner depends on a few libraries/systems, which are all included in the repository:

Roadmap

The current development plan is to enhance the renderer. Following features will be added in the near future (not listed in any particular order):

  • More BSDFs e.g. glass/GGX
  • Support for edge shared by more than two triangles (The code currently assumes every triangle edge is shared by at most two triangles. If your mesh doesn't satisfy this, you can preprocess it in other mesh processing softwares such as MeshLab)
  • Source-to-source automatic differentiation
  • EWA filtering, covariance tracing
  • Russian roulette
  • Distribution effects: depth of field/motion blur
  • Proper pixel filter (currently only support 1x1 box filter)
  • Volumetric path tracing (e.g. http://www.cs.cornell.edu/projects/translucency/#acquisition-sa13)
  • Spectral rendering
  • Gradient visualization
  • Spherical light sources

Citation

@article{Li:2018:DMC,
    title = {Differentiable Monte Carlo Ray Tracing through Edge Sampling},
    author = {Li, Tzu-Mao and Aittala, Miika and Durand, Fr{\'e}do and Lehtinen, Jaakko},
    journal = {ACM Trans. Graph. (Proc. SIGGRAPH Asia)},
    volume = {37},
    number = {6},
    pages = {222:1--222:11},
    year = {2018}
}

If you have any questions/comments/bug reports, feel free to open a github issue or e-mail to the author Tzu-Mao Li (tzumao@mit.edu)

Nearby in the ranking
Similar items