提交 e7dc951e 编写于 作者: M Mr.doob 提交者: GitHub

Merge pull request #10497 from kevineschmidt/bugfix-10341-fix-fog-calculation

Fixing #10341 by directly using the camera space coordinate for
......@@ -266,6 +266,7 @@ THREE.ShaderSkin = {
THREE.ShaderChunk[ "common" ],
THREE.ShaderChunk[ "lights_pars" ],
THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
THREE.ShaderChunk[ "fog_pars_vertex" ],
"void main() {",
......@@ -281,6 +282,7 @@ THREE.ShaderSkin = {
"gl_Position = projectionMatrix * mvPosition;",
THREE.ShaderChunk[ "shadowmap_vertex" ],
THREE.ShaderChunk[ "fog_vertex" ],
"}"
......@@ -569,6 +571,7 @@ THREE.ShaderSkin = {
"varying vec3 vViewPosition;",
THREE.ShaderChunk[ "common" ],
THREE.ShaderChunk[ "fog_pars_vertex" ],
"void main() {",
......@@ -597,7 +600,10 @@ THREE.ShaderSkin = {
"#endif",
"}"
THREE.ShaderChunk[ "fog_vertex" ],
"}",
].join( "\n" ),
......
......@@ -268,6 +268,7 @@ THREE.ShaderTerrain = {
"varying vec3 vViewPosition;",
THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
THREE.ShaderChunk[ "fog_pars_vertex" ],
"void main() {",
......@@ -312,6 +313,7 @@ THREE.ShaderTerrain = {
"vNormal = normalMatrix * normalTex;",
THREE.ShaderChunk[ "shadowmap_vertex" ],
THREE.ShaderChunk[ "fog_vertex" ],
"}"
......
......@@ -32,12 +32,17 @@ THREE.ShaderLib[ 'water' ] = {
'varying vec4 mirrorCoord;',
'varying vec3 worldPosition;',
THREE.ShaderChunk[ "fog_pars_vertex"],
'void main()',
'{',
' mirrorCoord = modelMatrix * vec4( position, 1.0 );',
' worldPosition = mirrorCoord.xyz;',
' mirrorCoord = textureMatrix * mirrorCoord;',
' gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',
THREE.ShaderChunk[ "fog_vertex"],
'}'
].join( '\n' ),
......
......@@ -75,6 +75,8 @@ THREE.OutlineEffect = function ( renderer, parameters ) {
var vertexShaderChunk = [
"#include <fog_pars_vertex>",
"uniform float outlineThickness;",
"vec4 calculateOutline( vec4 pos, vec3 objectNormal, vec4 skinned ) {",
......@@ -113,7 +115,9 @@ THREE.OutlineEffect = function ( renderer, parameters ) {
" gl_Position = calculateOutline( gl_Position, objectNormal, skinned );",
"#else",
" gl_Position = calculateOutline( gl_Position, objectNormal, vec4( transformed, 1.0 ) );",
"#endif"
"#endif",
"#include <fog_vertex>"
].join( "\n" );
......
......@@ -46,6 +46,7 @@ THREE.PhongNode.prototype.build = function( builder ) {
"#endif",
THREE.ShaderChunk[ "common" ],
THREE.ShaderChunk[ "fog_parse_vertex" ],
THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
THREE.ShaderChunk[ "skinning_pars_vertex" ],
THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
......@@ -66,7 +67,8 @@ THREE.PhongNode.prototype.build = function( builder ) {
"#endif",
THREE.ShaderChunk[ "begin_vertex" ]
THREE.ShaderChunk[ "begin_vertex" ],
THREE.ShaderChunk[ "fog_vertex" ]
];
if ( transform ) {
......
......@@ -51,6 +51,7 @@ THREE.StandardNode.prototype.build = function( builder ) {
"#endif",
THREE.ShaderChunk[ "common" ],
THREE.ShaderChunk[ "fog_pars_vertex" ],
THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
THREE.ShaderChunk[ "skinning_pars_vertex" ],
THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
......@@ -71,7 +72,8 @@ THREE.StandardNode.prototype.build = function( builder ) {
"#endif",
THREE.ShaderChunk[ "begin_vertex" ]
THREE.ShaderChunk[ "begin_vertex" ],
THREE.ShaderChunk[ "fog_vertex" ]
];
if ( transform ) {
......
......@@ -28,6 +28,8 @@ import envmap_fragment from './ShaderChunk/envmap_fragment.glsl';
import envmap_pars_fragment from './ShaderChunk/envmap_pars_fragment.glsl';
import envmap_pars_vertex from './ShaderChunk/envmap_pars_vertex.glsl';
import envmap_vertex from './ShaderChunk/envmap_vertex.glsl';
import fog_vertex from './ShaderChunk/fog_vertex.glsl';
import fog_pars_vertex from './ShaderChunk/fog_pars_vertex.glsl';
import fog_fragment from './ShaderChunk/fog_fragment.glsl';
import fog_pars_fragment from './ShaderChunk/fog_pars_fragment.glsl';
import gradientmap_pars_fragment from './ShaderChunk/gradientmap_pars_fragment.glsl';
......@@ -137,6 +139,8 @@ export var ShaderChunk = {
envmap_pars_fragment: envmap_pars_fragment,
envmap_pars_vertex: envmap_pars_vertex,
envmap_vertex: envmap_vertex,
fog_vertex: fog_vertex,
fog_pars_vertex: fog_pars_vertex,
fog_fragment: fog_fragment,
fog_pars_fragment: fog_pars_fragment,
gradientmap_pars_fragment: gradientmap_pars_fragment,
......
#ifdef USE_FOG
#ifdef USE_LOGDEPTHBUF_EXT
float depth = gl_FragDepthEXT / gl_FragCoord.w;
#else
float depth = gl_FragCoord.z / gl_FragCoord.w;
#endif
#ifdef FOG_EXP2
float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );
float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );
#else
float fogFactor = smoothstep( fogNear, fogFar, depth );
float fogFactor = smoothstep( fogNear, fogFar, fogDepth );
#endif
......
#ifdef USE_FOG
uniform vec3 fogColor;
varying float fogDepth;
#ifdef FOG_EXP2
......@@ -10,6 +11,7 @@
uniform float fogNear;
uniform float fogFar;
#endif
#endif
\ No newline at end of file
#endif
#ifdef USE_FOG
varying float fogDepth;
#endif
#ifdef USE_FOG
fogDepth = -mvPosition.z;
#endif
\ No newline at end of file
......@@ -5,6 +5,7 @@ varying float vLineDistance;
#include <common>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
......@@ -19,5 +20,6 @@ void main() {
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
#include <fog_vertex>
}
......@@ -3,6 +3,7 @@
#include <uv2_pars_vertex>
#include <envmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
......@@ -33,5 +34,6 @@ void main() {
#include <worldpos_vertex>
#include <clipping_planes_vertex>
#include <envmap_vertex>
#include <fog_vertex>
}
......@@ -15,6 +15,7 @@ varying vec3 vLightFront;
#include <bsdfs>
#include <lights_pars>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
......@@ -44,5 +45,6 @@ void main() {
#include <envmap_vertex>
#include <lights_lambert_vertex>
#include <shadowmap_vertex>
#include <fog_vertex>
}
......@@ -14,6 +14,7 @@ varying vec3 vViewPosition;
#include <displacementmap_pars_vertex>
#include <envmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
......@@ -51,5 +52,6 @@ void main() {
#include <worldpos_vertex>
#include <envmap_vertex>
#include <shadowmap_vertex>
#include <fog_vertex>
}
......@@ -13,6 +13,7 @@ varying vec3 vViewPosition;
#include <uv2_pars_vertex>
#include <displacementmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
......@@ -50,5 +51,6 @@ void main() {
#include <worldpos_vertex>
#include <shadowmap_vertex>
#include <fog_vertex>
}
......@@ -3,6 +3,7 @@ uniform float scale;
#include <common>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <shadowmap_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
......@@ -23,5 +24,6 @@ void main() {
#include <clipping_planes_vertex>
#include <worldpos_vertex>
#include <shadowmap_vertex>
#include <fog_vertex>
}
......@@ -311,6 +311,7 @@ function WebGLProgram( renderer, code, material, parameters ) {
prefixVertex = [
'precision ' + parameters.precision + ' float;',
'precision ' + parameters.precision + ' int;',
......@@ -323,6 +324,9 @@ function WebGLProgram( renderer, code, material, parameters ) {
'#define GAMMA_FACTOR ' + gammaFactorDefine,
'#define MAX_BONES ' + parameters.maxBones,
( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',
( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',
parameters.map ? '#define USE_MAP' : '',
parameters.envMap ? '#define USE_ENVMAP' : '',
......@@ -667,4 +671,4 @@ function WebGLProgram( renderer, code, material, parameters ) {
}
export { WebGLProgram };
\ No newline at end of file
export { WebGLProgram };
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册