GithubHelp home page GithubHelp logo

bundas102 / falcor-hermite-heightmap Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 60.92 MB

License: BSD 3-Clause "New" or "Revised" License

Batchfile 0.30% PowerShell 0.10% Python 5.41% Shell 0.12% C++ 93.26% C 0.31% HLSL 0.31% Cuda 0.05% CSS 0.01% Smarty 0.13%

falcor-hermite-heightmap's Introduction

Hermite Interpolation of Heightmaps

The Parallax Project

Parallax mapping example

This project contains the implementation for the following Eurographics 2022 Short Paper: Quick cone map generation on the GPU, Gábor Valasek and Róbert Bán. Our project was created in Falcor. You can find the Falcor 4.4 readme below ours. Our project is Samples > Parallax.

This project (https://github.com/Bundas102/falcor-hermite-heightmap) contains the implementation for the Eurographics 2022 Poster: Hermite interpolation of heightmaps, Róbert Bán and Gábor Valasek, https://diglib.eg.org:443/handle/10.2312/egp20221017

Check out https://github.com/Bundas102/falcor-conemap for our other project based on the same application for the Eurpgraphics 2022 Short Paper: Quick cone map generation on the GPU, Gábor Valasek and Róbert Bán, https://diglib.eg.org:443/handle/10.2312/egs20221021

Building and running the project

  • Open Falcor.sln with Visual Studio
  • Change the Startup Project to Samples > Parallax in the Solution Explorer
  • Build & Run – this will build the Falcor project as a dependency automatically

Overview

Handled Textures menu

  • The project renders a single square (two triangles) and uses parallax mapping techniques to apply a height map to achieve a detailed surface.
  • The program handles three textures: a height map, a cone map and, an albedo/diffuse texture. Either the height map or the cone map is used at any time for parallax mapping.
  • The height map can be loaded from an image file, or it can be generated procedurally from a height function.
  • The cone map can be generated from the height map.

Render Settings

Render Settings menu

Rendering is done by a primary search and then a refinement phase. See Displacement Mapping on the GPU — State of the Art for an overview.

The primary search is defined by PARALLAX_FUN:

  • 0: Bump mapping – no search
  • 1: Parallax mapping – a single parallax step
  • 2: Linear search – uniformly divide the ray interval into Max step number parts
  • 3: Cone step mapping – uses the cone map for space skipping

The refinement is defined by REFINE_FUN:

  • 0: No refinement
  • 1: Linear approx – assumes the surface is linear between the last two steps
  • 2: Binary search – halves the interval between the last two steps Max refine step number times

HEIGHT_SOURCE is the height value used during the primary search and refinement steps.

  • 0: Texture lookup - bilinear – this is the traditional sampling strategy
  • 1: Hermite interpolation – the interpolation method incorporates the derivatives, the method is described in our poster

NORMAL_SOURCE is the calculation method for the shading normal.

  • 0: Num. appr. from heightmap – traditional approximation from the height map
  • 1: Texture lookup - bilinear – since we only store the first two coordinates of the normals, this method does not give a usable result
  • 2: Hermite interpolation – the exact normal vectors of the Hermite interpolated surface

Procedural height map generation

Procedural Heightmap Generation menu

The generated heightmap is created from a height function defined in ProceduralHeightmap.cs.slang. Select the used function with HEIGHT_FUN. Derivatives are calculated alongside the height values using automatic differentiation. The encoded normal is then saved to the green and blue channels of the height texture.

The project contains two functions by default, but feel free to create your own:

  1. Write the height function mapping [0,1]² texture coordinates to [0,1] height values – in ProceduralHeightmap.cs.slang
  2. Extend the preprocessor switch with the new entry – in ProceduralHeightmap.cs.slang
  3. Extend the GUI list kHeightFunList with the new function – in Parallax.cpp

Cone map generation

Conemap Generation menu

Create a cone map from the loaded height map. The cone map is selected for use upon generation, but the render method does not change automatically, so you might have to set PARALLAX_FUN in Render Settings to 3: Cone step mapping to make use of the cone map.

The normal vectors from the height map are copied to the blue and alpha channels of the cone map if the height map was created from a height function. If the height map was loaded from file then an approximated normal is calculated and written into the cone map.

Load image

Load Image menu

Load a height map or an albedo texture from an image file. The height values are expected to be in the red channel of the texture.

Debug view

Debug Texture View menu

The selected texture is rendered to the square using point (nearest neighbor) sampling. If the texture has multiple MIP levels, the desired level is selectable.

The RED, GREEN and BLUE settings are the channels of the rendered color. Some common presets are accessible through the buttons under the channel settings.

For cone maps the red channel contains the height values and the green channel has the cones (tangent of the half openening angle). If normals are present, the green and blue channels (for height maps) / the blue and alpha channels (for cone maps) contain the first two coordinates of the normal vector encoded with a linear transformation from [-1,1] to [0,1].



Falcor 4.4

Falcor is a real-time rendering framework supporting DirectX 12. It aims to improve productivity of research and prototype projects.

Features include:

  • Abstracting many common graphics operations, such as shader compilation, model loading, and scene rendering
  • DirectX Raytracing abstraction
  • Render Graph system
  • Python scripting
  • Common rendering effects such as shadows and post-processing effects
  • Unbiased path tracer

The included path tracer requires NVAPI. Please make sure you have it set up properly, otherwise the path tracer won't work. You can find the instructions below.

Prerequisites

Optional:

  • Windows 10 Graphics Tools. To run DirectX 12 applications with the debug layer enabled, you must install this. There are two ways to install it:
    • Click the Windows button and type Optional Features, in the window that opens click Add a feature and select Graphics Tools.
    • Download an offline package from here. Choose a ZIP file that matches the OS version you are using (not the SDK version used for building Falcor). The ZIP includes a document which explains how to install the graphics tools.
  • NVAPI (see below)

NVAPI installation

After cloning the repository, head over to https://developer.nvidia.com/nvapi and download the latest version of NVAPI (this build is tested against version R440). Extract the content of the zip file into Source/Externals/.packman/ and rename R470-developer to nvapi.

Finally, set _ENABLE_NVAPI to 1 in Source/Falcor/Core/FalcorConfig.h

CUDA Support

If you want to use CUDA C/C++ code as part of a Falcor project, then refer to the README located in the Source/Samples/CudaInterop/ for instructions on how to set up your environment to use CUDA with Falcor.

If you want to execute Slang-based shader code through CUDA using CUDAProgram, then you will need to copy or link the root directory of the CUDA SDK under Source/Externals/.packman/, as a directory named CUDA. Then, set _ENABLE_CUDA to 1 in Source/Falcor/Core/FalcorConfig.h

OptiX Support

If you want to use Falcor's OptiX functionality (specifically the OptiXDenoiser render pass), then refer to the README location in Source/Samples/OptixDenoiser for instructions on setting up your environment to use OptiX with Falcor.

In particular, you will need to copy or link the root directory of the OptiX SDK under Source/Externals/, as a directory named optix (i.e., Source/Externals/optix/include/optix.h should exist). Then, set _ENABLE_OPTIX to 1 in Source/Falcor/Core/FalcorConfig.h

Falcor Configuration

FalcorConfig.h contains some flags which control Falcor's behavior.

  • _LOG_ENABLED - Enable/disable log messages. By default, it is set to 1.
  • _PROFILING_ENABLED - Enable/Disable the internal CPU/GPU profiler. By default, it is set to 1.

Resources

Citation

If you use Falcor in a research project leading to a publication, please cite the project. The BibTex entry is

@Misc{Kallweit21,
   author =      {Simon Kallweit and Petrik Clarberg and Craig Kolb and Kai-Hwa Yao and Theresa Foley and Lifan Wu and Lucy Chen and Tomas Akenine-Moller and Chris Wyman and Cyril Crassin and Nir Benty},
   title =       {The {Falcor} Rendering Framework},
   year =        {2021},
   month =       {08},
   url =         {https://github.com/NVIDIAGameWorks/Falcor},
   note =        {\url{https://github.com/NVIDIAGameWorks/Falcor}}
}

falcor-hermite-heightmap's People

Contributors

bundas102 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.