提交 8f894886 编写于 作者: M Mr.doob

Updated builds.

上级 c1877e70
......@@ -17500,7 +17500,15 @@ THREE.ShaderChunk = {
"#ifdef USE_FOG",
" float depth = gl_FragCoord.z / gl_FragCoord.w;",
" #ifdef USE_LOGDEPTHBUF_EXT",
" float depth = gl_FragDepthEXT / gl_FragCoord.w;",
" #else",
" float depth = gl_FragCoord.z / gl_FragCoord.w;",
" #endif",
" #ifdef FOG_EXP2",
......@@ -19121,8 +19129,77 @@ THREE.ShaderChunk = {
"#endif"
].join("\n")
].join("\n"),
// LOGARITHMIC DEPTH BUFFER
// http://outerra.blogspot.com/2012/11/maximizing-depth-buffer-range-and.html
// WebGL doesn't support gl_FragDepth out of the box, unless the EXT_frag_depth extension is available. On platforms
// without EXT_frag_depth, we have to fall back on linear z-buffer in the fragment shader, which means that some long
// faces close to the camera may have issues. This can be worked around by tesselating the model more finely when
// the camera is near the surface.
logdepthbuf_pars_vertex: [
"#ifdef USE_LOGDEPTHBUF",
" #ifdef USE_LOGDEPTHBUF_EXT",
" varying float vFragDepth;",
" #endif",
" uniform float logDepthBufFC;",
"#endif",
].join('\n'),
logdepthbuf_vertex: [
"#ifdef USE_LOGDEPTHBUF",
" gl_Position.z = log2(max(1e-6, gl_Position.w + 1.0)) * logDepthBufFC;",
" #ifdef USE_LOGDEPTHBUF_EXT",
" vFragDepth = 1.0 + gl_Position.w;",
"#else",
" gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;",
" #endif",
"#endif"
].join("\n"),
logdepthbuf_pars_fragment: [
"#ifdef USE_LOGDEPTHBUF",
" uniform float logDepthBufFC;",
" #ifdef USE_LOGDEPTHBUF_EXT",
" #extension GL_EXT_frag_depth : enable",
" varying float vFragDepth;",
" #endif",
"#endif"
].join('\n'),
logdepthbuf_fragment: [
"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)",
" gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;",
"#endif"
].join("\n")
};
......@@ -19324,6 +19401,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
THREE.ShaderChunk[ "skinning_pars_vertex" ],
THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
......@@ -19343,6 +19421,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "morphtarget_vertex" ],
THREE.ShaderChunk[ "skinning_vertex" ],
THREE.ShaderChunk[ "default_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
THREE.ShaderChunk[ "worldpos_vertex" ],
THREE.ShaderChunk[ "envmap_vertex" ],
......@@ -19364,11 +19443,13 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "fog_pars_fragment" ],
THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
THREE.ShaderChunk[ "specularmap_pars_fragment" ],
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"void main() {",
" gl_FragColor = vec4( diffuse, opacity );",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
THREE.ShaderChunk[ "map_fragment" ],
THREE.ShaderChunk[ "alphatest_fragment" ],
THREE.ShaderChunk[ "specularmap_fragment" ],
......@@ -19424,6 +19505,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
THREE.ShaderChunk[ "skinning_pars_vertex" ],
THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
......@@ -19439,6 +19521,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "morphtarget_vertex" ],
THREE.ShaderChunk[ "skinning_vertex" ],
THREE.ShaderChunk[ "default_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
THREE.ShaderChunk[ "worldpos_vertex" ],
THREE.ShaderChunk[ "envmap_vertex" ],
......@@ -19468,11 +19551,13 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "fog_pars_fragment" ],
THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
THREE.ShaderChunk[ "specularmap_pars_fragment" ],
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"void main() {",
" gl_FragColor = vec4( vec3( 1.0 ), opacity );",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
THREE.ShaderChunk[ "map_fragment" ],
THREE.ShaderChunk[ "alphatest_fragment" ],
THREE.ShaderChunk[ "specularmap_fragment" ],
......@@ -19544,6 +19629,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
THREE.ShaderChunk[ "skinning_pars_vertex" ],
THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
......@@ -19561,6 +19647,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "morphtarget_vertex" ],
THREE.ShaderChunk[ "skinning_vertex" ],
THREE.ShaderChunk[ "default_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
" vViewPosition = -mvPosition.xyz;",
......@@ -19593,11 +19680,13 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "bumpmap_pars_fragment" ],
THREE.ShaderChunk[ "normalmap_pars_fragment" ],
THREE.ShaderChunk[ "specularmap_pars_fragment" ],
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"void main() {",
" gl_FragColor = vec4( vec3( 1.0 ), opacity );",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
THREE.ShaderChunk[ "map_fragment" ],
THREE.ShaderChunk[ "alphatest_fragment" ],
THREE.ShaderChunk[ "specularmap_fragment" ],
......@@ -19635,6 +19724,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "color_pars_vertex" ],
THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
......@@ -19650,6 +19740,7 @@ THREE.ShaderLib = {
" gl_Position = projectionMatrix * mvPosition;",
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
THREE.ShaderChunk[ "worldpos_vertex" ],
THREE.ShaderChunk[ "shadowmap_vertex" ],
......@@ -19666,11 +19757,13 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "map_particle_pars_fragment" ],
THREE.ShaderChunk[ "fog_pars_fragment" ],
THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"void main() {",
" gl_FragColor = vec4( psColor, opacity );",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
THREE.ShaderChunk[ "map_particle_fragment" ],
THREE.ShaderChunk[ "alphatest_fragment" ],
THREE.ShaderChunk[ "color_fragment" ],
......@@ -19706,6 +19799,7 @@ THREE.ShaderLib = {
"varying float vLineDistance;",
THREE.ShaderChunk[ "color_pars_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
......@@ -19716,6 +19810,8 @@ THREE.ShaderLib = {
" vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",
" gl_Position = projectionMatrix * mvPosition;",
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
"}"
].join("\n"),
......@@ -19732,6 +19828,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "color_pars_fragment" ],
THREE.ShaderChunk[ "fog_pars_fragment" ],
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"void main() {",
......@@ -19743,6 +19840,7 @@ THREE.ShaderLib = {
" gl_FragColor = vec4( diffuse, opacity );",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
THREE.ShaderChunk[ "color_fragment" ],
THREE.ShaderChunk[ "fog_fragment" ],
......@@ -19763,11 +19861,13 @@ THREE.ShaderLib = {
},
vertexShader: [
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
" gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
"}"
].join("\n"),
......@@ -19777,10 +19877,22 @@ THREE.ShaderLib = {
"uniform float mNear;",
"uniform float mFar;",
"uniform float opacity;",
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"void main() {",
" float depth = gl_FragCoord.z / gl_FragCoord.w;",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
" #ifdef USE_LOGDEPTHBUF_EXT",
" float depth = gl_FragDepthEXT / gl_FragCoord.w;",
" #else",
" float depth = gl_FragCoord.z / gl_FragCoord.w;",
" #endif",
" float color = 1.0 - smoothstep( mNear, mFar, depth );",
" gl_FragColor = vec4( vec3( color ), opacity );",
......@@ -19803,6 +19915,7 @@ THREE.ShaderLib = {
"varying vec3 vNormal;",
THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
......@@ -19810,6 +19923,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "morphtarget_vertex" ],
THREE.ShaderChunk[ "default_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
"}"
......@@ -19820,10 +19934,14 @@ THREE.ShaderLib = {
"uniform float opacity;",
"varying vec3 vNormal;",
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"void main() {",
" gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
"}"
].join("\n")
......@@ -19962,8 +20080,10 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
THREE.ShaderChunk[ "fog_pars_fragment" ],
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"void main() {",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
" gl_FragColor = vec4( vec3( 1.0 ), opacity );",
......@@ -20335,6 +20455,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "skinning_pars_vertex" ],
THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
......@@ -20422,6 +20543,8 @@ THREE.ShaderLib = {
" gl_Position = projectionMatrix * mvPosition;",
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
//
" vWorldPosition = worldPosition.xyz;",
......@@ -20458,6 +20581,8 @@ THREE.ShaderLib = {
"varying vec3 vWorldPosition;",
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
" vec4 worldPosition = modelMatrix * vec4( position, 1.0 );",
......@@ -20465,6 +20590,8 @@ THREE.ShaderLib = {
" gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
"}"
].join("\n"),
......@@ -20476,10 +20603,14 @@ THREE.ShaderLib = {
"varying vec3 vWorldPosition;",
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"void main() {",
" gl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
"}"
].join("\n")
......@@ -20502,6 +20633,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
THREE.ShaderChunk[ "skinning_pars_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
......@@ -20509,6 +20641,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "morphtarget_vertex" ],
THREE.ShaderChunk[ "skinning_vertex" ],
THREE.ShaderChunk[ "default_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
"}"
......@@ -20516,6 +20649,8 @@ THREE.ShaderLib = {
fragmentShader: [
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"vec4 pack_depth( const in float depth ) {",
" const vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );",
......@@ -20528,7 +20663,17 @@ THREE.ShaderLib = {
"void main() {",
" gl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
" #ifdef USE_LOGDEPTHBUF_EXT",
" gl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );",
" #else",
" gl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );",
" #endif",
//"gl_FragData[ 0 ] = pack_depth( gl_FragCoord.z / gl_FragCoord.w );",
//"float z = ( ( gl_FragCoord.z / gl_FragCoord.w ) - 3.0 ) / ( 4000.0 - 3.0 );",
......@@ -20569,6 +20714,7 @@ THREE.WebGLRenderer = function ( parameters ) {
_antialias = parameters.antialias !== undefined ? parameters.antialias : false,
_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,
_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,
_logarithmicDepthBuffer = parameters.logarithmicDepthBuffer !== undefined ? parameters.logarithmicDepthBuffer : false,
_clearColor = new THREE.Color( 0x000000 ),
_clearAlpha = 0;
......@@ -20729,6 +20875,7 @@ THREE.WebGLRenderer = function ( parameters ) {
var _glExtensionTextureFilterAnisotropic;
var _glExtensionCompressedTextureS3TC;
var _glExtensionElementIndexUint;
var _glExtensionFragDepth;
initGL();
......@@ -24645,6 +24792,7 @@ THREE.WebGLRenderer = function ( parameters ) {
fogExp: fog instanceof THREE.FogExp2,
sizeAttenuation: material.sizeAttenuation,
logarithmicDepthBuffer: _logarithmicDepthBuffer,
skinning: material.skinning,
maxBones: maxBones,
......@@ -24844,6 +24992,13 @@ THREE.WebGLRenderer = function ( parameters ) {
_gl.uniformMatrix4fv( p_uniforms.projectionMatrix, false, camera.projectionMatrix.elements );
if ( _logarithmicDepthBuffer ) {
_gl.uniform1f(p_uniforms.logDepthBufFC, 2.0 / (Math.log(camera.far + 1.0) / Math.LN2));
}
if ( camera !== _currentCamera ) _currentCamera = camera;
}
......@@ -26680,6 +26835,12 @@ THREE.WebGLRenderer = function ( parameters ) {
}
}
if ( _logarithmicDepthBuffer ) {
_glExtensionFragDepth = _gl.getExtension( 'EXT_frag_depth' );
}
};
function setDefaultGLState () {
......@@ -26962,6 +27123,10 @@ THREE.WebGLProgram = ( function () {
parameters.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "",
parameters.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "",
//_this._glExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "",
"uniform mat4 modelMatrix;",
"uniform mat4 modelViewMatrix;",
"uniform mat4 projectionMatrix;",
......@@ -27058,6 +27223,9 @@ THREE.WebGLProgram = ( function () {
parameters.shadowMapDebug ? "#define SHADOWMAP_DEBUG" : "",
parameters.shadowMapCascade ? "#define SHADOWMAP_CASCADE" : "",
parameters.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "",
//_this._glExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "",
"uniform mat4 viewMatrix;",
"uniform vec3 cameraPosition;",
""
......@@ -27124,6 +27292,13 @@ THREE.WebGLProgram = ( function () {
}
if ( parameters.logarithmicDepthBuffer ) {
identifiers.push('logDepthBufFC');
}
for ( var u in uniforms ) {
identifiers.push( u );
......@@ -27175,6 +27350,7 @@ THREE.WebGLProgram = ( function () {
};
} )();
THREE.WebGLShader = ( function () {
var addLineNumbers = function ( string ) {
......
因为 它太大了无法显示 source diff 。你可以改为 查看blob
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册