Home

Awesome

ABOUT THIS REPO

This is a port to HLSL-based Unity shaders of the brilliant GLSL-based "psrdnoise" repo provided at https://github.com/stegu/psrdnoise by Stefan Gustavson, from the 2021 research paper by Stefan Gustavson and Ian McEwan. Please see the original repo's README comments and MIT license details below this section. I myself am far from being any sort of competent mathematician and so the implementation details are way beyond my understanding, but I have included the technical articles from the original repo for anybody interested in the mathematical explanations, as well as the original GLSL code. This repo exists mostly to provide a convenient Unity port of their functionality.

The repo is provided as a full Unity 2021.3 project, with materials and shaders for:

Simply import the relevant folders for the render pipeline your project uses, or import everything and delete whatever you don't need. You may be prompted to update the Shader Graphs if using a newer version of Unity or of your SRP package of choice.

For the two SRP versions, the ported HLSL is fed into Shader Graph through the use of custom nodes. Some simple Shader Graphs and materials are provided which give examples of how to use these nodes in your own more complex shaders, or you can just use the materials provided. The builtin shaders simply reference the HLSL into appropriate surface shader format.

There are a number of noise variants provided as individual shaders and materials, based on the various documentation web examples provided in the original repo, which have been converted to HLSL as well. These variants are:

Each of these variants has its own material, one for each render pipeline, identifiable by the suffixes _Builtin, _URP, or _HDRP. An example, similarly-named scene is also provided for each of these, with the quad on the left showing the full noise pattern for a given (usually seamless) scale, and then the four smaller quads on the right showing how that same pattern can be recreated by tiling smaller sections together, using a halving of the scale and a shift on the tiling offset values. This proof of concept demonstrates how to break up a given noise pattern into smaller chunks, for example when trying to create an infinite world where seamless edges between tiles are important.

One of the best things about psrdnoise is that it can be made seamless, infinite, or periodic. All of the materials have some common shader parameters:

Right, that's enough from me. I do hope you find some value in this port, and if you wish to express your gratitude, please do so to the original authors of the psrdnoise algorithm rather than to me. The README contents from the source repo https://github.com/stegu/psrdnoise will now follow below.

The above usage notes copyright 2022 Shannon Rowe (chmodseven)

psrdnoise

Tiling simplex flow noise in 2-D and 3-D compatible with GLSL 1.20 (WebGL 1.0) and above.

A WGSL port is in the "src" directory with the GLSL versions, and it seems to be working (yields the same results as the corresponding GLSL functions), but I have only done a minimal amount of testing. If you find bugs, please report them in the "Issues" section.

A variant of 2-D noise which is compatible with "mediump" 16-bit float precision has been added to the repository. (A 3-D version is more tricky. No promises yet.) As with the WGSL port, bug reports and general feedback on the code is appreciated.

A scientific article on this is published in Journal of Computer Graphics Techniques, JCGT. Code is in the src/ folder, and there are some live WebGL examples and a tutorial on how to use these functions on the accompanying Github Pages site.

The infamous troll-owned patent on Simplex Noise finally expired in January 2022, but none of these functions implement any of the patented methods. That patent was arguably never valid in the first place, because I would argue that its primary claim is demonstrably false. In any case, it's a moot point now.

LICENSE

The entire content of the docs/ folder is in the public domain, with the exception of GLSL shader code that comes with an MIT license as specified in the code comments.

All GLSL code in this repository is published under the permissive MIT license:

Copyright 2021 Stefan Gustavson and Ian McEwan

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

UNITY PORT LICENSE

All HLSL ported code and Shader Graph nodes/graphs and materials in this repository are published under the permissive MIT license:

Copyright 2022 Shannon Rowe (chmodseven)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.