Merge commit '29be88d60d654193926add496d2d851f7c217356' into project/gltf_development

meow-7.2.2
Brad Linden 2024-05-15 15:41:24 -07:00
commit 3cb329d4fa
7 changed files with 14 additions and 19 deletions

View File

@ -2,6 +2,8 @@
## Tiling
The southwest corner of a region with PBR materials should exactly match up with the bottom left corner of the material texture(s).
If two adjacent regions have the same PBR terrain settings, then:
- There should not be seams between the two regions at their shared border

View File

@ -35,7 +35,7 @@ uniform float minimum_alpha;
void main()
{
float alpha = texture(diffuseMap,vary_texcoord0.xy).a;
float alpha = texture(diffuseMap,vary_texcoord0.xy).a * vertex_color.a;
if (alpha < minimum_alpha)
{

View File

@ -69,12 +69,16 @@ void main()
mirrorClip(vary_position);
vec4 basecolor = texture(diffuseMap, base_color_texcoord.xy).rgba;
basecolor.rgb = srgb_to_linear(basecolor.rgb);
basecolor *= vertex_color;
if (basecolor.a < minimum_alpha)
{
discard;
}
vec3 col = vertex_color.rgb * srgb_to_linear(basecolor.rgb);
vec3 col = basecolor.rgb;
// from mikktspace.com
vec3 vNt = texture(bumpMap, normal_texcoord.xy).xyz*2.0-1.0;
@ -108,7 +112,7 @@ void main()
//emissive = tnorm*0.5+0.5;
// See: C++: addDeferredAttachments(), GLSL: softenLightF
frag_data[0] = max(vec4(col, 0.0), vec4(0)); // Diffuse
frag_data[1] = max(vec4(spec.rgb,vertex_color.a), vec4(0)); // PBR linear packed Occlusion, Roughness, Metal.
frag_data[1] = max(vec4(spec.rgb,0.0), vec4(0)); // PBR linear packed Occlusion, Roughness, Metal.
frag_data[2] = vec4(tnorm, GBUFFER_FLAG_HAS_PBR); // normal, environment intensity, flags
frag_data[3] = max(vec4(emissive,0), vec4(0)); // PBR sRGB Emissive
}

View File

@ -98,7 +98,7 @@ void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, ou
haze_glow = max(haze_glow, .001); // set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot)
haze_glow *= glow.x;
// higher glow.x gives dimmer glow (because next step is 1 / "angle")
haze_glow = clamp(pow(haze_glow, glow.z), -10, 10);
haze_glow = clamp(pow(haze_glow, glow.z), -100000, 100000);
// glow.z should be negative, so we're doing a sort of (1 / "angle") function
// add "minimum anti-solar illumination"

View File

@ -431,7 +431,6 @@ void LLDrawPoolTerrain::renderFullShaderPBR(bool local_materials)
LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
llassert(shader);
// Like for PBR materials, PBR terrain texture transforms are defined by
// the KHR_texture_transform spec, but with the following notable
@ -446,7 +445,6 @@ void LLDrawPoolTerrain::renderFullShaderPBR(bool local_materials)
// i.e. this isn't fully compliant with KHR_texture_transform, but is
// compliant when all texture infos used by a material have the same
// texture transform.
LLGLTFMaterial::TextureTransform::PackTight transforms_packed[terrain_material_count];
for (U32 i = 0; i < terrain_material_count; ++i)
{

View File

@ -1261,11 +1261,11 @@ bool LLFace::getGeometryVolume(const LLVolume& volume,
{
color = tep->getGLTFRenderMaterial()->mBaseColor;
}
if (rebuild_color)
if (rebuild_color)
{ //decide if shiny goes in alpha channel of color
if (tep &&
!isInAlphaPool()) // <--- alpha channel MUST contain transparency, not shiny
!isInAlphaPool() && tep->getGLTFRenderMaterial() == nullptr) // <--- alpha channel MUST contain transparency, not shiny
{
LLMaterial* mat = tep->getMaterialParams().get();

View File

@ -77,16 +77,7 @@ void LLFetchedGLTFMaterial::bind(LLViewerTexture* media_tex)
{
if (mAlphaMode == LLGLTFMaterial::ALPHA_MODE_MASK)
{
// dividing the alpha cutoff by transparency here allows the shader to compare against
// the alpha value of the texture without needing the transparency value
if (mBaseColor.mV[3] > 0.f)
{
min_alpha = mAlphaCutoff / mBaseColor.mV[3];
}
else
{
min_alpha = 1024.f;
}
min_alpha = mAlphaCutoff;
}
shader->uniform1f(LLShaderMgr::MINIMUM_ALPHA, min_alpha);
}