WebGL lightMap与AoMap与第二层UV

496 阅读1分钟
  • 顶点着色器里定义uv2
#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )
    attribute vec2 uv2;
    varying vec2 vUv2;
    uniform mat3 uv2Transform;
#endif
#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )
    vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;
#endif
  • 片元着色器里定义
#if defined( RE_IndirectDiffuse )
    #ifdef USE_LIGHTMAP
        vec4 lightMapTexel = texture2D( lightMap, vUv2 );
        vec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;
        #ifndef PHYSICALLY_CORRECT_LIGHTS
            lightMapIrradiance *= PI;
        #endif
        irradiance += lightMapIrradiance;
    #endif
    #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )
        iblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );
    #endif
#endif
#ifdef USE_AOMAP
    float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;
    reflectedLight.indirectDiffuse *= ambientOcclusion;
    #if defined( USE_ENVMAP ) && defined( STANDARD )
        float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );
        reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );
    #endif
#endif