A C++/DirectX 11 implementation of "A Scalable and Production Ready Sky and Atmosphere Rendering Technique"

Atmosphere Renderer

A C++/DirectX 11 implementation of "A Scalable and Production Ready Sky and Atmosphere Rendering Technique"

Features

  • interactive edition of atmosphere model parameters
  • efficient generation of low-resolution sky-view LUT and aerial perspective LUT
  • volumetric shadow

Build

git clone --recursive https://github.com/AirGuanZ/AtmosphereRenderer.git
cd AtmosphereRenderers
mkdir build
cd build
cmake ..

Control

  • move: W, A, S, D, Space, LShift
  • show/hide cursor: Ctrl.

Performance

Crucial shader performance measured on NVIDIA GTX 1060:

  • Sky-view LUT generation (64 * 64): 0.036 ms
  • Aerial perspective LUT generation without volume shadow (64 * 64 * 32): 0.03 ms
  • Aerial perspective LUT generation with volume shadow (200 * 150 * 32): 0.2 ms

Shaders can actually be further optimized by replacing feature flags in constant buffers with compile-time macros.

Using LUTs with higher resolution or ray marching with more number of steps results in better quality and of course, lower performance.

Screenshots

Tips

  • Planet-scale rendering are not considered. Thus the sky may become strange when camera is out of the atmosphere.
  • Terrain renderer is just used to show the aerial perspective effect (transmittance and in-scattering), so multi-scattering related to terrain is simply ignored.
  • Terrain occlusion is ignored when computing multi-scattering LUT.
  • Sunlight is approximated as a directional light when computing atmosphere scattering. Thus a very big sun disk will always have an unnatural appearance.
Similar Resources

Sandbox for graphics paper implementation

Sandbox for graphics paper implementation

Graphics Experiments 適当にグラフィックス関連の論文などを読んで実装・検証したものを置きます。 I'll randomly put something for implementing/validating graphics papers here. 実装 / Implement

Dec 28, 2022

A heterogeneous OpenCL implementation of AutoDock Vina

Vina-GPU A heterogeneous OpenCL implementation of AutoDock Vina Compiling and Running Note: at least one GPU card is required and make sure the versio

Dec 12, 2022

Implementation of light baking system for ray tracing based on Activision's UberBake

Vulkan Light Bakery MSU Graphics Group Student's Diploma Project Treefonov Andrey [GitHub] [LinkedIn] EARLY STAGES OF DEVELOPMENT Project Goal The goa

Dec 27, 2022

An implementation of OpenGL 3.x-ish in clean C

An implementation of OpenGL 3.x-ish in clean C

PortableGL "Because of the nature of Moore's law, anything that an extremely clever graphics programmer can do at one point can be replicated by a mer

Jan 7, 2023

Deno gl - WIP Low-level OpenGL (GLFW) bindings and WebGL API implementation for Deno.

deno_gl WIP Low-level OpenGL (GLFW) bindings and WebGL API implementation for Deno. Building Make dist directory if it doesn't exist. Build gl helper

Jun 11, 2022

A C++ implementation of Fast Simulation of Mass-Spring Systems

A C++ implementation of Fast Simulation of Mass-Spring Systems

Fast Mass-Spring System Simulator A C++ implementation of Fast Simulation of Mass-Spring Systems [1], rendered with OpenGL. The dynamic inverse proced

Dec 27, 2022

Implementation of Peter Shirley's Ray Tracing In One Weekend book using Vulkan and NVIDIA's RTX extension.

Implementation of Peter Shirley's Ray Tracing In One Weekend book using Vulkan and NVIDIA's RTX extension.

Ray Tracing In Vulkan My implementation of Peter Shirley's Ray Tracing in One Weekend books using Vulkan and NVIDIA's RTX extension (formerly VK_NV_ra

Dec 31, 2022

Source code for pbrt, the renderer described in the third edition of "Physically Based Rendering: From Theory To Implementation", by Matt Pharr, Wenzel Jakob, and Greg Humphreys.

pbrt, Version 3 This repository holds the source code to the version of pbrt that is described in the third edition of Physically Based Rendering: Fro

Jan 7, 2023

A standalone Dear ImGui node graph implementation.

A standalone Dear ImGui node graph implementation.

ImNodes A standalone Dear ImGui node graph implementation. Library provides core features needed to create a node graph, while leaving it to the user

Dec 15, 2022
The DirectX Shader Compiler project includes a compiler and related tools used to compile High-Level Shader Language (HLSL) programs into DirectX Intermediate Language (DXIL) representation

DirectX Shader Compiler The DirectX Shader Compiler project includes a compiler and related tools used to compile High-Level Shader Language (HLSL) pr

Jan 3, 2023
DirectX shader bytecode cross compiler

HLSLcc DirectX shader bytecode cross compiler. Originally based on https://github.com/James-Jones/HLSLCrossCompiler. This library takes DirectX byteco

Dec 29, 2022
Playground for DirectX 11 / 12 simple graphics demo examples ...

graphicsdemoskeleton Playground for DirectX 11 / 12 simple graphics demo examples ... If anyone from Microsoft reads this: C99 support is broken in Di

Dec 10, 2022
DirectX 11 and 12 library that provides a scalable and GCN-optimized solution for deferred shadow filtering

AMD ShadowFX The ShadowFX library provides a scalable and GCN-optimized solution for deferred shadow filtering. Currently the library supports uniform

Dec 9, 2022
A real-time DirectX 11 renderer. The renderer is named by my girlfriend's english name.
A real-time DirectX 11 renderer. The renderer is named by my girlfriend's english name.

sophia Sophia is a real-time DirectX 11 renderer. It is not quite a rich graphics engine, only packages some low-level DirectX functions and contains

Dec 11, 2021
This repo contains the DirectX Graphics samples that demonstrate how to build graphics intensive applications on Windows.
This repo contains the DirectX Graphics samples that demonstrate how to build graphics intensive applications on Windows.

DirectX-Graphics-Samples This repo contains the DirectX 12 Graphics samples that demonstrate how to build graphics intensive applications for Windows

Dec 26, 2022
✖🌱 A DirectX 12 starter repo that you could use to get the ball rolling.
✖🌱 A DirectX 12 starter repo that you could use to get the ball rolling.

DirectX 12 Seed A DirectX 12 repo you can use to get started with your own renderer. Setup First install: Git CMake Visual Studio Then type the follow

Dec 6, 2022
Minimal A* implementation in C. No dynamic memory allocation.

Micro A Star Path Finder This is a minimal A* path finder implementation in C, without any dynamic memory allocation. Usage The maximum size of the ma

Dec 24, 2022
Fast C++ implementation with JSI binding of MD5 for React Native

react-native-quick-md5 Brazingly fast C++ implementation with JSI binding of MD5 for React Native. Confirmed that it's 10x faster than using spark-md5

Nov 22, 2022
An open-source implementation of Autodesk's FBX

SmallFBX An open-source implementation of Autodesk's FBX that is capable of import & export mesh, blend shape, skin, and animations. Mainly intended t

Dec 21, 2022