|
@@ -1,16 +1,16 @@
|
|
|
/**
|
|
|
* @author zz85 / https://github.com/zz85
|
|
|
- *
|
|
|
- * Based on "A Practical Analytic Model for Daylight"
|
|
|
+ *
|
|
|
+ * Based on "A Practical Analytic Model for Daylight"
|
|
|
* aka The Preetham Model, the de facto standard analytic skydome model
|
|
|
* http://www.cs.utah.edu/~shirley/papers/sunsky/sunsky.pdf
|
|
|
- *
|
|
|
+ *
|
|
|
* First implemented by Simon Wallner
|
|
|
* http://www.simonwallner.at/projects/atmospheric-scattering
|
|
|
- *
|
|
|
+ *
|
|
|
* Improved by Martin Upitis
|
|
|
* http://blenderartists.org/forum/showthread.php?245954-preethams-sky-impementation-HDR
|
|
|
- *
|
|
|
+ *
|
|
|
* Three.js integration by zz85 http://twitter.com/blurspline
|
|
|
*/
|
|
|
|
|
@@ -30,13 +30,11 @@ THREE.ShaderLib['sky'] = {
|
|
|
vertexShader: [
|
|
|
|
|
|
"varying vec3 vWorldPosition;",
|
|
|
- "varying vec2 vUv;",
|
|
|
|
|
|
"void main() {",
|
|
|
|
|
|
"vec4 worldPosition = modelMatrix * vec4( position, 1.0 );",
|
|
|
"vWorldPosition = worldPosition.xyz;",
|
|
|
- "vUv = uv;",
|
|
|
|
|
|
"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
|
|
|
|
|
@@ -46,12 +44,9 @@ THREE.ShaderLib['sky'] = {
|
|
|
|
|
|
fragmentShader: [
|
|
|
|
|
|
-
|
|
|
"uniform sampler2D skySampler;",
|
|
|
"uniform vec3 sunPosition;",
|
|
|
"varying vec3 vWorldPosition;",
|
|
|
- "varying vec2 vUv;",
|
|
|
-
|
|
|
|
|
|
"vec3 cameraPos = vec3(0., 0., 0.);",
|
|
|
"// uniform sampler2D sDiffuse;",
|
|
@@ -67,7 +62,6 @@ THREE.ShaderLib['sky'] = {
|
|
|
"uniform float mieCoefficient;",
|
|
|
"uniform float mieDirectionalG;",
|
|
|
|
|
|
-
|
|
|
"vec3 sunDirection = normalize(sunPosition);",
|
|
|
"float reileighCoefficient = reileigh;",
|
|
|
|
|
@@ -165,9 +159,9 @@ THREE.ShaderLib['sky'] = {
|
|
|
"// luminance = 1.0 ;// vWorldPosition.y / 450000. + 0.5; //sunPosition.y / 450000. * 1. + 0.5;",
|
|
|
|
|
|
"// gl_FragColor = vec4(sunfade, sunfade, sunfade, 1.0);",
|
|
|
-
|
|
|
+
|
|
|
"reileighCoefficient = reileighCoefficient - (1.0* (1.0-sunfade));",
|
|
|
-
|
|
|
+
|
|
|
"float sunE = sunIntensity(dot(sunDirection, up));",
|
|
|
|
|
|
"// extinction (absorbtion + out scattering) ",
|
|
@@ -210,7 +204,7 @@ THREE.ShaderLib['sky'] = {
|
|
|
"vec2 uv = vec2(phi, theta) / vec2(2.0*pi, pi) + vec2(0.5, 0.0);",
|
|
|
"// vec3 L0 = texture2D(skySampler, uv).rgb+0.1 * Fex;",
|
|
|
"vec3 L0 = vec3(0.1) * Fex;",
|
|
|
-
|
|
|
+
|
|
|
"// composition + solar disc",
|
|
|
"//if (cosTheta > sunAngularDiameterCos)",
|
|
|
"float sundisk = smoothstep(sunAngularDiameterCos,sunAngularDiameterCos+0.00002,cosTheta);",
|
|
@@ -219,25 +213,25 @@ THREE.ShaderLib['sky'] = {
|
|
|
|
|
|
|
|
|
"vec3 whiteScale = 1.0/Uncharted2Tonemap(vec3(W));",
|
|
|
-
|
|
|
+
|
|
|
"vec3 texColor = (Lin+L0); ",
|
|
|
"texColor *= 0.04 ;",
|
|
|
"texColor += vec3(0.0,0.001,0.0025)*0.3;",
|
|
|
-
|
|
|
+
|
|
|
"float g_fMaxLuminance = 1.0;",
|
|
|
"float fLumScaled = 0.1 / luminance; ",
|
|
|
"float fLumCompressed = (fLumScaled * (1.0 + (fLumScaled / (g_fMaxLuminance * g_fMaxLuminance)))) / (1.0 + fLumScaled); ",
|
|
|
|
|
|
"float ExposureBias = fLumCompressed;",
|
|
|
-
|
|
|
+
|
|
|
"vec3 curr = Uncharted2Tonemap((log2(2.0/pow(luminance,4.0)))*texColor);",
|
|
|
"vec3 color = curr*whiteScale;",
|
|
|
|
|
|
"vec3 retColor = pow(color,vec3(1.0/(1.2+(1.2*sunfade))));",
|
|
|
|
|
|
-
|
|
|
+
|
|
|
"gl_FragColor.rgb = retColor;",
|
|
|
-
|
|
|
+
|
|
|
"gl_FragColor.a = 1.0;",
|
|
|
"}",
|
|
|
|
|
@@ -250,9 +244,9 @@ THREE.Sky = function () {
|
|
|
var skyShader = THREE.ShaderLib[ "sky" ];
|
|
|
var skyUniforms = THREE.UniformsUtils.clone( skyShader.uniforms );
|
|
|
|
|
|
- var skyMat = new THREE.ShaderMaterial( {
|
|
|
- fragmentShader: skyShader.fragmentShader,
|
|
|
- vertexShader: skyShader.vertexShader,
|
|
|
+ var skyMat = new THREE.ShaderMaterial( {
|
|
|
+ fragmentShader: skyShader.fragmentShader,
|
|
|
+ vertexShader: skyShader.vertexShader,
|
|
|
uniforms: skyUniforms,
|
|
|
side: THREE.BackSide
|
|
|
} );
|
|
@@ -265,5 +259,4 @@ THREE.Sky = function () {
|
|
|
this.mesh = skyMesh;
|
|
|
this.uniforms = skyUniforms;
|
|
|
|
|
|
-
|
|
|
};
|