1 /**************************************************************************\ 2 * Copyright (c) Kongsberg Oil & Gas Technologies AS 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * Redistributions of source code must retain the above copyright notice, 10 * this list of conditions and the following disclaimer. 11 * 12 * Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * Neither the name of the copyright holder nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 \**************************************************************************/ 32 33 #ifndef COIN_INTERNAL 34 #error this is a private header file 35 #endif /* !COIN_INTERNAL */ 36 37 #ifndef SO_VSMLOOKUP_GLSL_H 38 #define SO_VSMLOOKUP_GLSL_H 39 40 static const char VSMLOOKUP_shadersource[] = 41 "float VsmLookup(in vec4 map, in float dist, in float epsilon, float bleedthreshold)\n" 42 "{\n" 43 " float mapdist = map.x;\n" 44 "\n" 45 " // replace 0.0 with some factor > 0.0 to make the light affect even parts in shadow\n" 46 " float lit_factor = dist <= mapdist ? 1.0 : 0.0;\n" 47 " float E_x2 = map.y;\n" 48 " float Ex_2 = mapdist * mapdist;\n" 49 " float variance = min(max(E_x2 - Ex_2, 0.0) + epsilon, 1.0);\n" 50 "\n" 51 " float m_d = mapdist - dist;\n" 52 " float p_max = variance / (variance + m_d * m_d);\n" 53 "\n" 54 " p_max *= smoothstep(bleedthreshold, 1.0, p_max);\n" 55 "\n" 56 " return max(lit_factor, p_max);\n" 57 "}\n"; 58 59 #endif /* ! SO_VSMLOOKUP_GLSL_H */ 60