diff --git a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp index 6c94e0743..e5025cf30 100644 --- a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp +++ b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp @@ -446,7 +446,7 @@ void TerrainDetailMapFeatHLSL::processPix( Vector &component } // Add to the blend total. - meta->addStatement( new GenOp( " @ = max( @, @ );\r\n", blendTotal, blendTotal, detailBlend ) ); + meta->addStatement( new GenOp( " @ += @;\r\n", blendTotal, detailBlend ) ); // If we had a parallax feature... then factor in the parallax // amount so that it fades out with the layer blending. diff --git a/Engine/source/terrain/terrRender.cpp b/Engine/source/terrain/terrRender.cpp index 61b844380..4355591a7 100644 --- a/Engine/source/terrain/terrRender.cpp +++ b/Engine/source/terrain/terrRender.cpp @@ -170,9 +170,10 @@ bool TerrainBlock::_initBaseShader() desc.zDefined = true; desc.zWriteEnable = false; desc.zEnable = false; - desc.setBlend( true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha ); + desc.setBlend( true, GFXBlendSrcAlpha, GFXBlendOne ); desc.cullDefined = true; desc.cullMode = GFXCullNone; + desc.colorWriteAlpha = false; mBaseShaderSB = GFX->createStateBlock( desc ); return true; @@ -251,6 +252,8 @@ void TerrainBlock::_updateBaseTexture(bool writeToCache) mBaseTarget->attachTexture( GFXTextureTarget::Color0, blendTex ); GFX->setActiveRenderTarget( mBaseTarget ); + GFX->clear( GFXClearTarget, ColorI(0,0,0,255), 1.0f, 0 ); + GFX->setTexture( 0, mLayerTex ); mBaseShaderConsts->setSafe( mBaseLayerSizeConst, (F32)mLayerTex->getWidth() ); diff --git a/Templates/Empty/game/shaders/common/terrain/terrain.hlsl b/Templates/Empty/game/shaders/common/terrain/terrain.hlsl index 328acae7f..8ce497012 100644 --- a/Templates/Empty/game/shaders/common/terrain/terrain.hlsl +++ b/Templates/Empty/game/shaders/common/terrain/terrain.hlsl @@ -32,9 +32,12 @@ float calcBlend( float texId, float2 layerCoord, float layerSize, float4 layerSa float4 diff = saturate( abs( layerSample - texId ) ); float noBlend = any( 1 - diff ); - // Use step to see if any of the layer samples + // Check if any of the layer samples // match the current texture id. - float4 factors = step( texId, layerSample ); + float4 factors = 0; + for(int i = 0; i < 4; i++) + if(layerSample[i] == texId) + factors[i] = 1; // This is a custom bilinear filter. diff --git a/Templates/Full/game/shaders/common/terrain/terrain.hlsl b/Templates/Full/game/shaders/common/terrain/terrain.hlsl index 328acae7f..8ce497012 100644 --- a/Templates/Full/game/shaders/common/terrain/terrain.hlsl +++ b/Templates/Full/game/shaders/common/terrain/terrain.hlsl @@ -32,9 +32,12 @@ float calcBlend( float texId, float2 layerCoord, float layerSize, float4 layerSa float4 diff = saturate( abs( layerSample - texId ) ); float noBlend = any( 1 - diff ); - // Use step to see if any of the layer samples + // Check if any of the layer samples // match the current texture id. - float4 factors = step( texId, layerSample ); + float4 factors = 0; + for(int i = 0; i < 4; i++) + if(layerSample[i] == texId) + factors[i] = 1; // This is a custom bilinear filter.