Difference between revisions of "TEST-STRCMP4CODES"

From SimsWiki
Jump to: navigation, search
 
(18 intermediate revisions by one user not shown)
Line 1: Line 1:
#
+
define TransparentMirrorReflection()
# Shaders for terrain tiles
+
   material
#
+
       if (viewerRenderType = $kRenderTypeShadow)
#
+
         create StandardShaderShadow()
 
+
setf  waterbumpMapScale    4.0
+
setv3 thumbnailMatDiffCoef (0.75, 0.93, 0.75)
+
seti  terrainMatLayer -2
+
 
+
# multiplier on terrain (grass/paints) both on the lot and
+
# lot skirts. (See lotSkirt.matShad.)
+
setc terrainMatDiffCoef (0.9, 0.9, 0.9)
+
 
+
# Specifies the number of tiles over which the paint & bump textures should be applied.
+
setf  canvasDetailTextureScale            4
+
setf  canvasBaseTextureScale            20
+
 
+
setf  paintTextureScale                  20
+
setf  paintDetailTextureScale            4.0
+
setb  hasCutout false
+
 
+
#==============================================================================
+
 
+
define TerrainCanvasShaderShaderVS_PS()
+
   pass
+
      fillmode $stdMatFillMode     
+
      depthTest true -enableDepthWrite true                 
+
     
+
       if ($hasCutout)                        
+
         depthTestFunction acceptIfEqual
+
 
       else
 
       else
         depthTestFunction acceptIfLessOrEqual
+
         if (viewerRenderType = $kRenderTypeThumbnail)
 +
            create TransparentBlankMirrorMaterial($kRenderTypeThumbnail)
 +
        else           
 +
            if (not $mirrorReflectionsEnabled)
 +
              set currentType (viewerRenderType)
 +
              create TransparentBlankMirrorMaterial($currentType)
 +
            else
 +
              create TransparentMirrorReflectionMaterial()
 +
            endif           
 +
        endif       
 
       endif
 
       endif
     
 
      shaderProgram -target vertexProgram -method compile -version 1_1
 
        bindConstants 0 -bindingID geomToClip -constantCount 4
 
bindConstants 4 -bindingID immediateData -data (1/$canvasBaseTextureScale, 1/$canvasDetailTextureScale, 0, 0)
 
 
shaderSource
 
  float4x4 clipSpaceMatrix  : register(c0);
 
  float4  textureConstants : register(c4);
 
 
struct InputVertex
 
{
 
float3 position: POSITION0;
 
float2 texcoord : TEXCOORD0;
 
};
 
 
struct OutputVertex
 
{
 
float4 clipPosition : POSITION;
 
float2 txBase  : TEXCOORD0;
 
float2 txDetail: TEXCOORD1;
 
};
 
 
OutputVertex VertexMain( InputVertex i)
 
{
 
  OutputVertex o;
 
  o.clipPosition = mul(float4(i.position, 1), clipSpaceMatrix);
 
  o.txBase  = i.texcoord * textureConstants.x;
 
  o.txDetail = i.texcoord * textureConstants.y;  
 
  return o;
 
}
 
endShaderSource 
 
      end # end shader program
 
     
 
     
 
      shaderProgram -target pixelProgram -method compile -version 1_1     
 
        shaderSource                           
 
            sampler base;
 
            sampler detail;
 
            struct cInputPixel
 
            {             
 
              float2 tcBase : TEXCOORD0;
 
              float2 tcDetail : TEXCOORD1;
 
            };
 
           
 
            float4 PixelMain(cInputPixel pi) : COLOR
 
            {       
 
              float4 baseColor  = tex2D(base, pi.tcBase);                                               
 
              float4 detailColor = tex2D(detail, pi.tcDetail);                             
 
              float4 result = (detailColor.a * detailColor) + ((1 - detailColor.a) * baseColor);             
 
              return result;                       
 
            }
 
        endShaderSource
 
      end # end shader program     
 
       
 
      sampler base
 
        texture "${texture}"
 
        textureAddressing tile tile
 
      end
 
     
 
      sampler detail
 
        texture "${texture}_detail"
 
        textureAddressing tile tile
 
      end     
 
 
   end
 
   end
 
enddef
 
enddef
  
define TerrainCanvasShaderShaderFF()
+
define TransparentBlankMirrorMaterial(renderType)
  pass -fixedFunction       
+
      fillmode $stdMatFillMode
+
     
+
      depthTest true -enableDepthWrite true                 
+
     
+
      if ($hasCutout)                       
+
        depthTestFunction acceptIfEqual
+
      else
+
        depthTestFunction acceptIfLessOrEqual
+
      endif
+
             
+
      stage
+
        texture "${texture}"
+
        textureAddressing tile tile
+
        ffTextureMatrix -scalev ($canvasBaseTextureScale, $canvasBaseTextureScale) -invert
+
        ffTextureCoordsSource 0
+
        textureBlend select(texture) select(texture)
+
      end
+
      stage
+
        texture "${texture}_detail"
+
        textureAddressing tile tile
+
        ffTextureMatrix -scalev ($canvasDetailTextureScale, $canvasDetailTextureScale) -invert
+
        ffTextureCoordsSource 0
+
        textureBlend lerpTextureAlpha(texture outRegister) select(outRegister)
+
      end
+
  end     
+
enddef
+
 
+
define TerrainCanvasShader()
+
  material
+
      shader -layer (($terrainMatLayer - 3) * 8)
+
        vertexFormatPred position      0 true
+
        vertexFormatPred normal        0 true
+
        vertexFormatPred texcoord      0 true
+
        viewerRenderTypePred viewerRenderType
+
       
+
        create DetermineHardwareSupport()
+
        if (viewerRenderType = $kRenderTypeShadowMap)
+
        create ShadowMapVS_PS()
+
      else
+
            if ($useHWShader1Path or $useHWShader2Path)
+
        create TerrainCanvasShaderShaderVS_PS()
+
        else 
+
              create TerrainCanvasShaderShaderFF()
+
            endif
+
        endif
+
      end
+
     
+
 
       shader
 
       shader
      end
+
        validateRenderShaderContext -viewerRenderType  &renderType
  end
+
enddef
+
 
+
#==============================================================================
+
 
+
define TerrainPaintShaderVS_PS()
+
  shader -layer (($terrainMatLayer - 2) * 8)
+
      vertexFormatPred position      0 true
+
      vertexFormatPred texcoord      0 true
+
      pass
+
        fillmode $stdMatFillMode
+
        alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
 
          
 
          
         alphaTest true 10
+
         pass              
        alphaTestFunction acceptIfGreater
+
             shaderProgram -target vertexProgram -method assemble
       
+
              bindConstants 0 -bindingID geomToClip -constantCount 4
        depthTest true -enableDepthWrite false
+
              shaderSource
       
+
                   vs_1_1
        if (viewerRenderType = $kRenderTypeImposter)
+
                   dcl_position v0
             depthTestFunction acceptIfLessOrEqual
+
                   m4x4 oPos, v0, c0
        else
+
               endShaderSource
             depthTestFunction acceptIfEqual
+
        endif
+
       
+
        shaderProgram -target vertexProgram -method compile -version 1_1
+
            bindConstants 0 -bindingID geomToClip -constantCount 4
+
  bindConstants 4 -bindingID immediateData -data (1/$canvasBaseTextureScale, 1/$canvasDetailTextureScale, $alphaMapScaleU, $alphaMapScaleV)
+
 
+
  shaderSource
+
      float4x4 clipSpaceMatrix  : register(c0);
+
      float4  textureConstants : register(c4);
+
 
+
  struct InputVertex
+
  {
+
  float3 position: POSITION0;
+
  float2 texcoord : TEXCOORD0;
+
  };
+
 
+
  struct OutputVertex
+
  {
+
  float4 clipPosition : POSITION;
+
  float2 txBase  : TEXCOORD0;
+
  float2 txDetail: TEXCOORD1;
+
  float2 txAlpha : TEXCOORD2;
+
  };
+
 
+
  OutputVertex VertexMain( InputVertex i)
+
  {
+
      OutputVertex o;
+
      o.clipPosition = mul(float4(i.position, 1), clipSpaceMatrix);
+
      o.txBase  = i.texcoord * textureConstants.x;
+
      o.txDetail = i.texcoord * textureConstants.y;  
+
      o.txAlpha  = i.texcoord.xy * textureConstants.zw;
+
      return o;
+
  }
+
  endShaderSource 
+
        end # end shader program
+
       
+
       
+
        shaderProgram -target pixelProgram -method compile -version 1_1     
+
            shaderSource                           
+
              sampler base;
+
              sampler detail;
+
              sampler alphaMap;
+
              struct cInputPixel
+
              {             
+
                   float2 tcBase : TEXCOORD0;
+
                   float2 tcDetail : TEXCOORD1;
+
                   float2 tcAlpha  : TEXCOORD2;
+
              };
+
             
+
              float4 PixelMain(cInputPixel pi) : COLOR
+
              {       
+
                  float4 baseColor  = tex2D(base, pi.tcBase);                                               
+
                  float4 detailColor = tex2D(detail, pi.tcDetail);                             
+
                  float4 alphaColor  = tex2D(alphaMap, pi.tcAlpha);
+
                  float4 result = (detailColor.a * detailColor) + ((1 - detailColor.a) * baseColor);             
+
                  result.a = alphaColor.a;
+
                  return result;                       
+
               }
+
            endShaderSource
+
        end # end shader program     
+
           
+
        sampler base
+
            texture $paintTexture
+
            textureAddressing tile tile
+
        end
+
       
+
        sampler detail
+
            texture "${paintTexture}_detail"
+
            textureAddressing tile tile
+
        end
+
       
+
        sampler alphaMap
+
            texture $alphaMap
+
            textureAddressing clamp clamp
+
        end     
+
      end
+
  end
+
enddef
+
 
+
define TerrainPaintShader(addDetail)
+
  shader -layer (($terrainMatLayer - 2) * 8)
+
      vertexFormatPred position      0 true
+
      vertexFormatPred texcoord      0 true
+
     
+
      pass -fixedFunction       
+
        fillmode $stdMatFillMode
+
 
+
        alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
       
+
        alphaTest true 10
+
        alphaTestFunction acceptIfGreater
+
       
+
        depthTest true -enableDepthWrite false
+
        if (viewerRenderType = $kRenderTypeImposter)
+
            depthTestFunction acceptIfLessOrEqual
+
        else
+
            depthTestFunction acceptIfEqual
+
        endif
+
       
+
        if (&addDetail)
+
            stage
+
              texture $paintTexture
+
              textureAddressing tile tile
+
              ffTextureMatrix -scalev ($paintTextureScale, $paintTextureScale) -invert
+
              textureTransformType vector2
+
              ffTextureCoordsSource 0
+
              textureBlend select(texture) select(outRegister)
+
            end
+
            stage
+
              texture "${paintTexture}_detail"
+
              textureAddressing tile tile
+
              ffTextureMatrix -scalev ($paintDetailTextureScale, $paintDetailTextureScale) -invert
+
              textureTransformType vector2
+
              ffTextureCoordsSource 0
+
              textureBlend lerpTextureAlpha(texture outRegister) select(outRegister)
+
            end
+
        else
+
            stage
+
              texture $paintTexture
+
              textureAddressing tile tile
+
              ffTextureMatrix -scalev ($paintTextureScale, $paintTextureScale) -invert
+
              textureTransformType vector2
+
              ffTextureCoordsSource 0
+
              textureBlend select(texture) select(outRegister)
+
            end
+
        endif
+
        stage
+
            texture $alphaMap
+
            textureAddressing clamp clamp
+
            ffTextureMatrix -scalev ($alphaMapScaleU, $alphaMapScaleV)
+
            ffTextureCoordsSource 0
+
            textureBlend select(outRegister) select(texture)
+
        end
+
      end     
+
  end
+
enddef
+
 
+
 
+
define TerrainPaint()
+
  material
+
      create DetermineHardwareSupport()
+
     
+
      if (viewerRenderType != $kRenderTypeShadowMap) 
+
        if ($useHWShader1Path or $useHWShader2Path)
+
      create TerrainPaintShaderVS_PS()
+
      else           
+
            create TerrainPaintShader(true)
+
            create TerrainPaintShader(false)
+
            shader
+
 
             end
 
             end
        endif     
 
      endif     
 
  end
 
enddef
 
 
 
#==============================================================================
 
define TerrainLightingVS_PS()
 
  pass
 
      fillmode $stdMatFillMode
 
      alphaBlend srcFactor(destColor) add dstFactor(zero)           
 
      depthTest true -enableDepthWrite false           
 
      depthTestFunction acceptIfEqual
 
     
 
      shaderProgram -target vertexProgram -method compile -version 1_1
 
        bindConstants 0 -bindingID geomToClip -constantCount 4
 
bindConstants 4 -bindingID immediateData -data (1/64, 0, 0, 0)
 
 
shaderSource
 
  float4x4 clipSpaceMatrix  : register(c0);
 
  float4  textureConstants : register(c4);  
 
 
struct InputVertex
 
{
 
float3 position: POSITION0;
 
float2 texcoord : TEXCOORD0;
 
};
 
 
struct OutputVertex
 
{
 
float4 clipPosition : POSITION;
 
float2 txBase  : TEXCOORD0;
 
};
 
 
OutputVertex VertexMain( InputVertex i)
 
{
 
  OutputVertex o;
 
  o.clipPosition = mul(float4(i.position, 1), clipSpaceMatrix);
 
  o.txBase  = i.texcoord * textureConstants.xx;  
 
  return o;
 
}
 
endShaderSource 
 
      end # end shader program
 
     
 
     
 
      shaderProgram -target pixelProgram -method compile -version 1_1
 
        bindConstants 0 -bindingID immediateData -data ($terrainMatDiffCoef.x, $terrainMatDiffCoef.y, $terrainMatDiffCoef.z, 1)       
 
       
 
        shaderSource 
 
            float4  terrainDiffCoef  : register(c0);
 
                                   
 
            sampler base;           
 
            struct cInputPixel
 
            {             
 
              float2 tcBase : TEXCOORD0;             
 
            };
 
           
 
            float4 PixelMain(cInputPixel pi) : COLOR
 
            {       
 
              float4 baseColor  = tex2D(base, pi.tcBase);                                                             
 
              float4 result = 2.0*(baseColor*terrainDiffCoef);             
 
              result.a = terrainDiffCoef.w;
 
              return result;                       
 
            }
 
        endShaderSource
 
      end # end shader program     
 
       
 
      sampler base
 
        texture "floorLightMap_0"  # at the moment is deterministically mapped to page 0
 
        textureAddressing tile tile
 
      end           
 
  end 
 
enddef
 
 
define TerrainLighting()
 
  material
 
  create DetermineHardwareSupport()
 
 
      shader -layer (($terrainMatLayer - 1) * 8)
 
        vertexFormatPred position      0 true
 
        vertexFormatPred texcoord      0 true
 
        if (viewerRenderType != $kRenderTypeShadowMap)           
 
            if ($useHWShader2Path or $useHWShader1Path)
 
              create TerrainLightingVS_PS()
 
            else
 
              pass -fixedFunction           
 
                  fillmode $stdMatFillMode
 
 
                  alphaBlend srcFactor(destColor) add dstFactor(zero)
 
 
                  colorScalar $terrainMatDiffCoef 1  # important that alpha be one for ARGB capture.
 
 
                  ffDepthOffset 0
 
                  depthTest true -enableDepthWrite false           
 
                  depthTestFunction acceptIfEqual
 
 
                  stage
 
                    texture "floorLightMap_0"  # at the moment is deterministically mapped to page 0
 
                    # A page holds 64x64 tiles. A tile is one world unit wide.
 
                    ffTextureMatrix -scalev (1/64, 1/64)
 
                    textureTransformType vector2
 
                    ffTextureCoordsSource 0
 
                    textureBlend multiplyScale2(texture colorScalar) select(colorScalar)
 
                  end
 
              end                   
 
                         
 
              pass -fixedFunction
 
                  create LightingStatesNoStdLights()
 
                  fillmode $stdMatFillMode
 
 
                  alphaBlend srcFactor(zero) add dstFactor(one)
 
     
 
                  ffDepthOffset 0
 
                  depthTest true -enableDepthWrite false
 
                  alphaTest true 100
 
                  alphaTestFunction acceptIfLess
 
     
 
                  stage
 
                    texture "floorLightMap_0"  # at the moment is deterministically mapped to page 0
 
                    ffTextureMatrix -scalev (1/64, 1/64)
 
                    textureTransformType vector2
 
                    ffTextureCoordsSource 0
 
                    textureBlend select(texture) select(texture)
 
                  end
 
              end           
 
            endif       
 
        endif
 
      end
 
  end
 
enddef
 
 
#==============================================================================
 
define TerrainToolThumbnail()
 
  material
 
      shader -layer ($terrainMatLayer * 8)
 
        vertexFormatPred position      0 true
 
        vertexFormatPred normal        0 true
 
        vertexFormatPred texcoord      0 true
 
        vertexFormatPred blendindices  0 false
 
        vertexFormatPred targetindices 0 false
 
 
        pass -fixedFunction
 
            create LightingStates()
 
            alphaBlend srcFactor(srcAlpha) add dstFactor(zero)
 
            colorScalar $thumbnailMatDiffCoef
 
            fillmode $stdMatFillMode
 
 
              
 
              
 +
            colorScalar (0,0,0) 0.5
 
             stage
 
             stage
              texture $paintTexture
+
               textureBlend select(colorScalar) select(colorScalar)
              textureAddressing tile tile
+
             end          
               textureBlend multiplyScale2(texture diffuse) select(texture)
+
         end
             end  
+
       end    
         end      
+
       end
+
  end
+
 
enddef
 
enddef
  
define TerrainWaterShader(withBumpMap)
+
define TransparentMirrorReflectionMaterial()
  shader -layer 1
+
      vertexFormatPred position      0 true
+
      vertexFormatPred normal        0 true
+
      vertexFormatPred color        0 true
+
      vertexFormatPred texcoord      0 true
+
      vertexFormatPred blendindices  0 false
+
      vertexFormatPred targetindices 0 false
+
      viewerRenderTypePred viewerRenderType
+
       
+
      setb cubeMapSupport (queryBooleanGraphicsDeviceCap(hasCubeMapSupport)) 
+
      create DetermineHardwareSupport()           
+
 
        
 
        
       pass -fixedFunction       
+
       shader -layer -9998  # this material must render first
        # disable lighting, disable normalize normals, enable local viewer
+
         validateRenderShaderContext -viewerRenderType $kRenderTypeMirror  # reflection render
         if ($useSWVertexShaderPath)
+
            create LightingStatesNoStdLights()
+
        else
+
            create LightingStatesNoStdLightsParam(false true)           
+
        endif       
+
        alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)                 
+
  
         fillmode $stdMatFillMode
+
         pass -renderEachFrame
        colorScalar (1, 1, 1) -applyTextureLightColor 0 0                         
+
             renderTarget $reflectionRenderTarget -setViewport viewportFromParentRenderContext
                 
+
        stage
+
             if ($cubeMapSupport)
+
              texture reflectionoutdoorwater-envcube
+
              textureMIPFilterHint disabled
+
  
              ffTextureCoordsSource fromReflectionVector
+
            depthTest true -enableDepthWrite true
              textureTransformType vector3
+
              ffTextureMatrix -orientCameraToGlobal
+
  
              textureAddressing clamp clamp clamp
+
             applyStencilStateForOverlappingReflections
              textureBlend multiply(texture colorScalar) select(diffuse)
+
             else
+
              colorScalar (0.3,0.5,1.0)  -applyTextureLightColor 0 0   
+
              textureBlend select(colorScalar) select(diffuse)
+
            endif
+
        end         
+
      end 
+
     
+
      if (&withBumpMap)       
+
        pass -fixedFunction
+
            create LightingStatesNoStdLights()
+
            alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
            fillmode $stdMatFillMode
+
            colorScalar (1.0, 1.0, 1.0, 0.3) -applyTextureLightColor 0 0
+
       
+
            stage
+
              texture "water-1-bump"
+
              textureAddressing tile tile
+
              # -atrans waveformType cycles/sec offset (startU, startV)  (endU, endV)
+
              textureMatrixAnimation -targetType fixedFunction -aorigin (0, 0) -atrans sine 0.04 0 (0, 0) (1, 0)  -ascale sawtooth 1 0 ($waterbumpMapScale, $waterbumpMapScale)
+
              textureTransformType vector2
+
              ffTextureCoordsSource 0
+
              textureBlend select(texture) select(texture)
+
            end
+
 
+
            stage
+
              texture "water-2-bump"
+
              textureAddressing tile tile
+
              # -atrans waveformType cycles/sec offset (startU, startV)  (endU, endV)
+
              textureMatrixAnimation -targetType fixedFunction -aorigin (0, 0) -atrans sine 0.04 0 (1, 0) (0, 0)  -ascale sawtooth 1 0 ($waterbumpMapScale, $waterbumpMapScale)
+
              textureTransformType vector2
+
              ffTextureCoordsSource 0
+
              textureBlend multiply(texture outRegister) select(texture)
+
            end
+
           
+
            stage
+
              # does this work out on GF2 due to reg combiners?
+
              textureBlend multiply(outRegister colorScalar) select(colorScalar)
+
            end
+
        end 
+
      endif
+
  end
+
enddef
+
  
 +
            alphaBlend srcFactor(zero) add dstFactor(one)
  
#==============================================================================
+
             cullmode none
define TerrainWater()
+
  material
+
      # only activate the water w/ bump shader for pixel shader capable HW     
+
      if (tsFrozenPond)
+
        create TerrainWaterFrozen()
+
      else
+
        if (queryIntegerGraphicsDeviceCap(maxPixelProgramVersionMajor) != 0)       
+
             create TerrainWaterShader(true)
+
        endif
+
        create TerrainWaterShader(false)  # fallback without bumps       
+
      endif
+
  end
+
enddef
+
  
define TerrainWaterFrozen()
+
            shaderProgram -target vertexProgram -method assemble           
  shader -layer 1
+
              bindConstants 0 -bindingID geomToClipFromParentView -constantCount 4
      pass -fixedFunction
+
              shaderSource
            create LightingStatesNoStdLightsParam(false false)                         
+
                  vs_1_1
        alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
                  dcl_position v0
        fillmode $stdMatFillMode
+
                  def c5, 1,0,0,1
        colorScalar (0.45, 0.45, 0.5, 0.475) -applyTextureLightColor 0 0
+
                   m4x4 r0,  v0, c0
       
+
                   mov oPos.x, -r0
        stage
+
                   mov oPos.yzw, r0                 
            texture "ice-pond-surface"
+
               endShaderSource
            textureAddressing tile tile                                                 
+
            end
            ffTextureCoordsSource fromPosition
+
            ffTextureMatrix -cameraToGlobal -scale (5) -invert
+
            textureBlend multiply(texture colorScalar) select(colorScalar)
+
        end                       
+
       
+
        stage
+
            texture "ice-pond-surface"
+
            textureAddressing tile tile                                                 
+
            ffTextureCoordsSource fromPosition
+
            ffTextureMatrix -cameraToGlobal -scale (17) -invert                   
+
            textureBlend multiplyAdd(texture colorScalar outRegister) add(colorScalar outRegister)
+
        end
+
      end                     
+
  end
+
enddef
+
 
+
#==============================================================================
+
 
+
define TerrainSnowShader() 
+
  create DetermineHardwareSupport()
+
  if ($useHWShader1Path or $useHWShader2Path)
+
create TerrainSnow()
+
else 
+
      create TerrainSnowFF()
+
  endif     
+
enddef
+
 
+
define TerrainSnowFF()
+
  material
+
      shader -layer 0
+
        pass -fixedFunction
+
            depthTest true -enableDepthWrite true
+
            if (tsIsDay)
+
              colorScalar (0.5, 0.5, 0.52, 1)
+
            else
+
              colorScalar (0.15, 0.15, 0.375, 1)
+
            endif
+
             
+
              stage                                       
+
                   texture "snow-ground-diffuse"
+
                  textureAddressing tile tile  
+
                   ffTextureCoordsSource fromPosition
+
                  ffTextureMatrix -cameraToGlobal -scalev (2, 2) -invert                           
+
                   textureBlend multiply(texture colorScalar) select(colorScalar)
+
               end           
+
             
+
              stage                                       
+
                  texture "snow-ground-diffuse"
+
                  textureAddressing tile tile 
+
                  ffTextureCoordsSource fromPosition
+
                  ffTextureMatrix -cameraToGlobal -scalev (13, 13) -invert                           
+
                  textureBlend multiplyAdd(texture colorScalar outRegister) select(colorScalar)
+
              end          
+
 
         end
 
         end
 
       end
 
       end
  end
 
enddef
 
  
define TerrainSnowPS1() 
+
       shader -layer 6
  shaderProgram -target pixelProgram -method compile -version 1_1 # -disassemble "c:\sims2ep5\hlslPS1_1.txt"                           
+
         validateRenderShaderContext -viewerRenderType $kRenderTypeNormal
       bindConstants 0 -bindingID cursorTerrainPosition -constantCount 1 -constantType float
+
         pass -modifiedEachFrameHint
      if (tsIsDay)       
+
             shaderProgram -target vertexProgram -method assemble           
         bindConstants 1 -bindingID immediateData -data (1.1, 1.1, 1.175, 1)       
+
              bindConstants 0 -bindingID geomToClip -constantCount 4
      else
+
              bindConstants 4 -bindingID clipToViewTarget -constantCount 4
        bindConstants 1 -bindingID immediateData -data (0.35, 0.35, 1.0, 1)       
+
              shaderSource
      endif
+
                  vs_1_1
           
+
                  dcl_position v0
      shaderSource
+
                  def c8,   -0.5, -0.5, 1, 1
        sampler normmap;
+
                  def c9,    0.5, 0.5, 0, 0  
                                                                                               
+
                  def c10,   0.25, 0.25, 0, 0
        float4 cursorPos : register(c0);
+
                  m4x4 r0,   v0, c0
        float4 colorFactor : register(c1);
+
                   mov oPos, r0
       
+
                  mul r2, c9, r0.w
        struct v2f
+
                  mad r4, r0, c8, r2
        {
+
                  rcp r3.x, c4.x                                 
            float4 hpos : POSITION;                           
+
                   rcp r3.y, c5.y
            float4 color : COLOR0;            
+
                  mov r3.zw, c9.zw
        float3 worldPos : COLOR1;              
+
                   mul r3, r3, c10
        float3 bumpCoords : TEXCOORD0;
+
                  mad r6, r0, r3, r4
        float3 tanLightDir : TEXCOORD1;                                
+
                  mov oT0, r6.xyww
        };
+
              endShaderSource              
 
+
            end
        float4 PixelMain(v2f pi) : COLOR
+
        {     
+
            float4 normal = 2.0f * (tex2D(normmap, pi.bumpCoords) - 0.5f); 
+
            float3 diffuse = saturate(dot(pi.tanLightDir, normal.xyz))*colorFactor.xyz;           
+
            return float4(diffuse.xyz + pi.color, 1.0f);                       
+
        }
+
      endShaderSource                                                                                                           
+
  end                                           
+
 
+
  sampler normmap
+
      texture "snow-ground-bump"
+
      textureAddressing tile tile
+
  end
+
 
+
enddef
+
 
+
define TerrainSnowPS2() 
+
  shaderProgram -target pixelProgram -method compile -version ${psVersion}_0  # -disassemble "c:\sims2ep5\hlslPS1_1.txt"                           
+
      bindConstants 0 -bindingID cursorTerrainPosition -constantCount 1 -constantType float                       
+
  if (tsIsDay)       
+
         bindConstants 1 -bindingID immediateData -data (1.1, 1.1, 1.175, 1)       
+
      else
+
        bindConstants 1 -bindingID immediateData -data (0.35, 0.35, 1.0, 1)       
+
      endif
+
 
+
      shaderSource                       
+
       
+
        sampler normmap;       
+
       
+
        float4 cursorPos : register(c0);
+
        float4 colorFactor : register(c1);
+
       
+
        struct v2f
+
        {
+
             float4 hpos : POSITION;                           
+
        float4 color : COLOR0;                                        
+
        float3 worldPos : COLOR1;             
+
        float2 bumpCoords : TEXCOORD0;                                 
+
        float3 tanLightDir : TEXCOORD1;                                     
+
        };
+
 
+
        float4 PixelMain(v2f pi) : COLOR
+
        {                                                 
+
            float4 normal0 = 2.0f * (tex2D(normmap, pi.bumpCoords) - 0.5f);                       
+
            float4 normal1 = 2.0f * (tex2D(normmap, pi.bumpCoords*0.4f) - 0.5f);
+
            float4 normal = 0.5f*(normal0+normal1);
+
            float3 diffuse0 = saturate(dot(pi.tanLightDir, normal.xyz))*colorFactor.xyz;           
+
           
+
            float3 diffVec = cursorPos-pi.worldPos;           
+
            diffVec *= 64.0f;
+
            float blend = saturate(dot(diffVec, diffVec));                                                                                               
+
            return float4(saturate(float3(diffuse0.xyz + pi.color.xxx)), blend);                       
+
        }
+
      endShaderSource
+
  end                                           
+
 
+
  sampler normmap
+
      texture "snow-ground-bump"
+
      textureAddressing tile tile
+
  end             
+
 
+
enddef
+
 
+
define TerrainSnowVS1()
+
  shaderProgram -target vertexProgram -method compile -version 1_1
+
      bindConstants 0 -bindingID geomToClip     -constantCount 4      
+
      bindConstants 4 -bindingID geomToCamera  -constantCount 3
+
bindConstants 7 -bindingID  cameraToGeom  -constantCount 3
+
bindConstants 15 -bindingID ambientLight -constantCount 1 -constantType float                        
+
bindConstants 18 -bindingID allStandardLightData -constantCount 4 -constantType float      
+
+
if (tsIsDay)       
+
        bindConstants 10 -bindingID immediateData -data (1.2, 1.2, 1.2, 1)       
+
      else
+
        bindConstants 10 -bindingID immediateData -data (0.64, 0.64, 1.1, 1)       
+
      endif
+
     
+
      bindConstants 12 -bindingID geomToGlobal -constantCount 3
+
                   
+
      bindConstants 22 -bindingID cameraToClipWithDepthOffset -constantCount 4 -data(0, 0, 0, 0)
+
+
shaderSource
+
float4x4 modelviewproj : register(c0);
+
float4x3 modelview : register(c4);
+
float4x3 modelviewInv : register(c7);            
+
        // light direction
+
float4 lightDir0 : register(c18);
+
float4 lightDir1 : register(c26);
+
float4x4 cameraToClipWithDOMatrix : register(c22);
+
        float4 ambient : register(c15);                                 
+
        float4x3 modelToWorld : register(c12);
+
     
+
struct a2v
+
        {
+
            float4 pos : POSITION;                   
+
            float3 normal : NORMAL;
+
            float2 tangent : TEXCOORD0;
+
            float2 bumpcoord : TEXCOORD1;                   
+
        };
+
 
+
        struct v2f
+
        {
+
            float4 hpos : POSITION;                                         
+
        float4 color : COLOR0;                                    
+
        float3 worldPos : COLOR1;        
+
        float2 bumpCoords : TEXCOORD0;
+
        float3 tanLightDir : TEXCOORD1;                                                                                                                                       
+
        };
+
       
+
        v2f VertexMain(a2v IN)
+
        {
+
        v2f OUT;
+
 
+
        // vertex position in object space
+
        float4 pos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0);  
+
       
+
        float3 tangent = float3(IN.tangent.x, IN.tangent.y, 0);
+
                         
+
        // compute binormal
+
        float3 binormal = normalize(cross(IN.normal, tangent));
+
       
+
        // tangent space matrix
+
        float3x3 tbn = float3x3(tangent, binormal, IN.normal);
+
       
+
        // light direction in object space                    
+
        float3 lt0 = mul(lightDir0, (float3x3)modelviewInv);
+
       
+
        // light 0 direction in tangent space                                    
+
        OUT.tanLightDir = normalize(mul(tbn, lt0));
+
                       
+
        OUT.bumpCoords = float2(IN.bumpcoord.x, IN.bumpcoord.y);
+
       
+
        // compute tangent space view vector
+
        // object space view point
+
        float3 viewPoint = mul(float4(0, 0, 0, 1), modelviewInv).xyz;
+
        float3 viewVecObj = normalize(viewPoint - IN.pos.xyz);
+
       
+
        // object space light
+
        float3 lightDirObj = normalize(mul(lightDir0, (float3x3)modelviewInv));
+
       
+
        // half angle vector in object space
+
        float3 halfWayVector = normalize(lightDirObj + viewVecObj);                    
+
       
+
        // transform half angle vector to tangent space
+
        //OUT.tanHalfAngle.xyz = normalize(mul(tbn, halfWayVector));
+
       
+
        // specular shadowing term
+
        //OUT.tanHalfAngle.w = max(dot(halfWayVector, IN.normal), 0);                    
+
       
+
        // vertex position in clip space
+
        float3 hposView = mul(pos, modelview);
+
            OUT.hpos = mul(float4(hposView, 1), cameraToClipWithDOMatrix);                                     
+
           
+
            // vertex position in world space
+
            OUT.worldPos = mul(pos, modelToWorld)/64.0f;                                           
+
                                                             
+
        OUT.color.xyz = ambient.xyz*0.3f;
+
        OUT.color.w = 1.0;        
+
        return OUT;
+
        }
+
                 
+
endShaderSource
+
  end # end shader program 
+
enddef
+
 
+
define TerrainSnow()
+
  material
+
      shader -layer 1       
+
        validateRenderShaderContext -vertexFormat position 0 required
+
        validateRenderShaderContext -vertexFormat normal 0 required
+
        validateRenderShaderContext -vertexFormat texcoord 0 required
+
        validateRenderShaderContext -vertexFormat texcoord 1 required
+
       
+
        create DetermineHardwareSupport()
+
                         
+
        pass
+
            alphaTest true 5
+
            alphaTestFunction acceptIfGreater
+
  
 
             alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
 
             alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
             depthTest true -enableDepthWrite true
+
             depthTest true -enableDepthWrite false
              
+
             colorScalar (0,0,0) 0.25
            create TerrainSnowVS1()
+
           
+
            if ($useHWShader1Path)
+
              create TerrainSnowPS1()
+
            elseif ($useHWShader2Path)             
+
              create TerrainSnowPS2()
+
            endif
+
                                                 
+
        end # end pass
+
       
+
      end #end shader
+
  end # end material
+
enddef
+
  
define XRayCursorMaterial()
 
  material
 
      shader -layer (0)
 
        pass -fixedFunction -modifiedEachFrameHint
 
            alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
 
            depthTest true -enableDepthWrite false
 
                       
 
            colorScalar (1, 1, 0, 0.0)
 
 
             stage
 
             stage
               textureBlend select(colorScalar) select(colorScalar)
+
              textureTransformType vector3 homogeneous
 +
              textureAddressing clamp clamp
 +
              texture $reflectionRenderTarget
 +
               textureBlend select(texture) select(colorScalar)
 
             end
 
             end
 +
                     
 
         end
 
         end
 
       end
 
       end
  end
 
enddef
 
 
define LightSnowDayPS(psFullVersion)
 
  shaderProgram -target pixelProgram -method compile -version &psFullVersion
 
      if ($singlePass)
 
        bindConstants 0 -bindingID immediateData -data (0, 0, 0, 0) -constantType float
 
      else
 
        bindConstants 0 -bindingID immediateData -data (1, 0, 0, 0) -constantType float
 
      endif
 
 
        
 
        
       shaderSource   
+
       shader -layer 6     
         float scale2Factor : register(c0);       
+
         validateRenderShaderContext -viewerRenderType $kRenderTypeNormal
                               
+
         pass -modifiedEachFrameHint
         sampler base;            
+
            shaderProgram -target vertexProgram -method assemble            
        sampler base2;
+
              bindConstants 0 -bindingID geomToClip -constantCount 4
        struct cInputPixel
+
              bindConstants 4 -bindingID clipToViewTarget -constantCount 4
        {             
+
              shaderSource
            float2 txScale1  : TEXCOORD0;
+
                  vs_1_1
float2 txScale2  : TEXCOORD1;
+
                  dcl_position v0
        };
+
                  def c8,    -0.5, -0.5, 1, 1
       
+
                  def c9,    0.5,  0.5, 0, 0
        float4 PixelMain(cInputPixel pi) : COLOR
+
                  def c10,    0.25, 0.25, 0, 0
        {       
+
                  m4x4 r0,  v0,  c0
            float4 scale1Color = tex2D(base, pi.txScale1);                                               
+
                  mov oPos, r0
            float4 scale2Color = tex2D(base2, pi.txScale2)*scale2Factor.x;                             
+
                  mul r2, c9, r0.w
            float4 result = (scale1Color + scale2Color);           
+
                  mad r4, r0, c8, r2
            return result;                       
+
                  rcp r3.x, c4.x                                  
        }
+
                  rcp r3.y, c5.y
      endShaderSource
+
                  mov r3.zw, c9.zw
  end # end shader program     
+
                  mul r3, r3, c10
enddef
+
                  mad r1, r0, r3, r4
 +
                  rcp r1.w, r1.w
 +
                  mul oT0.xy, r1.w, r1.xy
 +
              endShaderSource              
 +
            end
  
define LightSnowNightPS(psFullVersion)
+
            alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
  shaderProgram -target pixelProgram -method compile -version &psFullVersion
+
            depthTest true -enableDepthWrite false
      if ($singlePass)
+
            colorScalar (0,0,0) 0.25
        bindConstants 0 -bindingID immediateData -data (0, 0, 0, 0) -constantType float
+
      else
+
        bindConstants 0 -bindingID immediateData -data (1, 1, 0, 0) -constantType float
+
      endif
+
     
+
      shaderSource   
+
        float2 scale2Factor : register(c0);       
+
                               
+
        sampler base; 
+
        sampler base2;
+
        sampler lightMap;         
+
        struct cInputPixel
+
        {             
+
            float2 txScale1  : TEXCOORD0;
+
float2 txScale2  : TEXCOORD1;
+
float2 txltMap  : TEXCOORD2;
+
        };
+
       
+
        float4 PixelMain(cInputPixel pi) : COLOR
+
        {       
+
            float4 scale1Color = tex2D(base, pi.txScale1);                                               
+
            scale1color.xyz = scale1color.xyz;
+
            float4 scale2Color = tex2D(base2, pi.txScale2)*scale2Factor.x;
+
            float4 result = (scale1Color + scale2Color);             
+
            float4 lightMapColor = tex2D(lightMap, pi.txltMap);
+
            return float4(result.xyz*lightMapColor.xyz, result.w);                       
+
        }
+
      endShaderSource
+
  end # end shader program     
+
enddef
+
  
 
+
            stage
define LightSnowVS_PS()
+
              textureAddressing clamp clamp
  pass
+
              texture $reflectionRenderTarget
      alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
              textureBlend select(texture) select(colorScalar)
      depthTest true -enableDepthWrite false     
+
             end
      depthTestFunction acceptIfEqual
+
              
     
+
      shaderProgram -target vertexProgram -method compile -version 1_1
+
        bindConstants 0 -bindingID geomToClip -constantCount 4
+
        bindConstants 4 -bindingID geomToGlobal -constantCount 3
+
        bindConstants 8 -bindingID immediateData -data (1/(($scaleStage1).x), 1/(($scaleStage1).y), 1/(($scaleStage2).x), 1/(($scaleStage2).y)) -constantType float
+
+
shaderSource
+
  float4x4 clipSpaceMatrix  : register(c0);  
+
  float4x3 modelToWorld : register(c4);
+
  float4 scaleData : register(c8);
+
+
struct InputVertex
+
{
+
float3 position: POSITION0;
+
float2 txCoord : TEXCOORD0;
+
};
+
+
struct OutputVertex
+
{
+
float4 clipPosition : POSITION;
+
float2 txScale1  : TEXCOORD0;
+
float2 txScale2  : TEXCOORD1;
+
float2 txltMap    : TEXCOORD2;
+
};
+
+
OutputVertex VertexMain( InputVertex i)
+
{
+
  OutputVertex o;
+
  o.clipPosition = mul(float4(i.position, 1), clipSpaceMatrix);
+
  float3 worldPos = mul(float4(i.position.xyz, 1.0f), modelToWorld);
+
  o.txScale1  = worldPos.xy * scaleData.xy;
+
  o.txScale2  = worldPos.xy * scaleData.zw;
+
  o.txltMap  = i.txCoord;
+
  return o;
+
}
+
endShaderSource 
+
      end # end shader program
+
     
+
      if (tsIsDay)
+
        if ($useHWShader1Path)
+
      create LightSnowDayPS("1_1")
+
      else 
+
             create LightSnowDayPS(${psVersion}_0)
+
        endif
+
      else
+
        if ($useHWShader1Path)
+
      create LightSnowNightPS("1_1")
+
      else 
+
            create LightSnowNightPS(${psVersion}_0)
+
        endif
+
      endif
+
       
+
      sampler base
+
        texture "${snowTexture}"
+
        textureAddressing tile tile
+
      end
+
     
+
      sampler base2
+
        texture "${snowTexture2}"
+
        textureAddressing tile tile
+
      end
+
     
+
      if (not tsIsDay)
+
        sampler lightMap
+
             texture "floorLightMap_${page}"
+
            textureAddressing tile tile
+
 
         end
 
         end
      endif
 
  end
 
enddef
 
 
define LightSnowFF()
 
  pass -fixedFunction       
 
      alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
 
      fillmode $stdMatFillMode           
 
      depthTest true -enableDepthWrite false                       
 
     
 
      if ($kRaiseLightSnowFF)
 
        ffDepthOffset 2
 
        depthTestFunction acceptIfLessOrEqual     
 
      else
 
        depthTestFunction acceptIfEqual     
 
      endif     
 
             
 
      stage
 
        texture $snowTexture
 
        textureAddressing tile tile
 
        ffTextureCoordsSource fromPosition
 
        ffTextureMatrix -cameraToGlobal -scalev $scaleStage1 -invert             
 
        textureBlend select(texture) select(texture)
 
 
       end
 
       end
     
 
      if (not $singlePass)         
 
        stage
 
            texture $snowTexture2
 
            textureAddressing tile tile
 
            ffTextureMatrix  -cameraToGlobal -scalev $scaleStage2 -invert
 
            ffTextureCoordsSource fromPosition
 
            textureBlend add(texture outRegister) add(outRegister texture)
 
        end
 
      else
 
        # a dummy stage so if the shader has to fail it should fail
 
        stage           
 
            texture "floorLightMap_${page}"
 
            textureBlend select(outRegister) select(outRegister)
 
        end
 
      endif     
 
 
     
 
      if (not tsIsDay)
 
        stage
 
            texture "floorLightMap_${page}"
 
            textureAddressing tile tile
 
            ffTextureCoordsSource 0                                           
 
            textureBlend multiplyScale2(texture outRegister) select(outRegister)
 
        end
 
      endif
 
     
 
      # a dummy stage so if the shader has to fail it should fail
 
      stage           
 
        texture "floorLightMap_${page}"
 
        textureBlend select(outRegister) select(outRegister)
 
      end
 
 
 
  end     
 
 
enddef
 
enddef
  
define LightSnowFFLowEnd()
+
#---------------------------------------------------------------------------------------------------------------#
  pass -fixedFunction       
+
      alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
      fillmode $stdMatFillMode           
+
      depthTest true -enableDepthWrite false                 
+
      ffDepthOffset 1
+
      depthTestFunction acceptIfLessOrEqual     
+
     
+
      if (tsIsDay)       
+
        colorScalar (1, 1, 1, 1)       
+
      else
+
        colorScalar (0.17, 0.17, 0.43, 1)       
+
      endif
+
             
+
      stage
+
        texture $snowTexture
+
        textureAddressing tile tile
+
        ffTextureCoordsSource fromPosition
+
        ffTextureMatrix -cameraToGlobal -scalev $scaleStage1 -invert             
+
        textureBlend multiply(texture colorScalar) select(texture)
+
      end
+
     
+
      if (not $singlePass)         
+
        stage
+
            texture $snowTexture
+
            textureAddressing tile tile
+
            ffTextureMatrix  -cameraToGlobal -scalev $scaleStage2 -invert
+
            ffTextureCoordsSource fromPosition
+
            textureBlend multiplyAdd(texture colorScalar outRegister) add(outRegister texture)
+
        end
+
      else
+
        stage
+
            texture $snowTexture
+
            textureAddressing tile tile
+
            ffTextureCoordsSource fromPosition
+
            ffTextureMatrix -cameraToGlobal -scalev $scaleStage1 -invert             
+
            textureBlend multiplyAdd(texture colorScalar outRegister) select(outRegister)
+
        end
+
      endif     
+
  
  end     
+
materialDefinition transparent_mirror_reflection
enddef
+
   setDefinition TransparentMirrorReflection
 
+
define LightSnow()
+
  material
+
      setv2 scaleStage1 (23, 23)
+
      setv2 scaleStage2 (17, 17)
+
     
+
      if (tsHasHail)
+
        set snowTexture "hail-ground-surface"
+
        set snowTexture2 "hail-ground-surface"
+
        setv2 scaleStage1 (4, 4)
+
        setv2 scaleStage2 (3, 3)
+
      endif
+
 
+
      shader -layer (-1)
+
        create DetermineHardwareSupport()           
+
        if ((not $kRaiseLightSnowFF and $useHWShader1Path) or $useHWShader2Path)
+
      create LightSnowVS_PS()
+
      else 
+
            create LightSnowFF() # can use more than two stages
+
        endif
+
      end
+
     
+
      shader -layer (-1)      #if the above shader fails for some reason
+
        create LightSnowFFLowEnd()
+
      end
+
  end 
+
enddef
+
 
+
materialDefinition TerrainSnowMaterial
+
   setDefinition TerrainSnowShader   
+
 
end
 
end
 
materialDefinition RoadSnowMaterial
 
  setDefinition LightSnow
 
  addParam snowTexture snow-light-pass2 
 
  addParam snowTexture2 snow-light-pass1 
 
  addParam singlePass true
 
  addParam page 0
 
end
 
 
materialDefinition LightSnowMaterial
 
  setDefinition LightSnow
 
  addParam snowTexture snow-light-pass2
 
  addParam snowTexture2 snow-light-pass1
 
  addParam singlePass false
 
  addParam page 0 
 
end
 
 
materialDefinition terrainLightingMaterial
 
  setDefinition TerrainLighting
 
end
 
 
materialDefinition waterOnTerrain
 
  setDefinition TerrainWater
 
end
 
 
materialDefinition XrayCursorBoxDirtyRectMaterial
 
  setDefinition XRayCursorMaterial
 
end
 
 
define GeneralSnowMaterialFF()
 
  material     
 
      shader -layer ($stdMatLayer)
 
        pass -fixedFunction           
 
            create LightingStatesParam(false false)     
 
            setv3 half (0.5,0.5,0.5)
 
            if ($stdMatSpecPower != 0)
 
        ffMatCoef -amb ($stdMatDiffCoef * $half) -ambAlpha $stdMatAlphaMultiplier -diff ($stdMatDiffCoef * $half) -diffAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower
 
        addSpecular true
 
        else
 
        ffMatCoef -amb ($stdMatDiffCoef * $half) -ambAlpha $stdMatAlphaMultiplier -diff ($stdMatDiffCoef * $half) -diffAlpha $stdMatAlphaMultiplier -spec (0,0,0) -specPow 0
 
        endif
 
       
 
        create StandardShaderFBAlphaState($stdMatAlphaBlendMode)
 
                       
 
       
 
        stage
 
            texture $stdMatBaseTextureName
 
            textureBlend multiplyScale2(diffuse texture) select(texture)
 
        end        
 
       
 
        if (tsIsDay)
 
        colorScalar $colorToAdd
 
            stage            
 
              textureBlend add(outRegister colorScalar) select(outRegister)
 
            end                
 
        endif
 
       
 
      end
 
           
 
      end
 
  end
 
enddef
 
 
define GeneralReflectiveMaterial()
 
  create StandardMaterial()
 
enddef
 
 
materialDefinition puddle_liquid_rain
 
  setDefinition GeneralReflectiveMaterial
 
  addParam deprecatedStdMatInvDiffuseCoeffMultiplier 1.2
 
  addParam forceHighQualitySkinning 0
 
  addParam forceIgnoreShapeBlend 0
 
  addParam reflectivity 0.1
 
  addParam stdMatAlphaBlendMode blend
 
  addParam stdMatAlphaMultiplier 0.5
 
  addParam stdMatAlphaRefValue 127
 
  addParam stdMatAlphaTestEnabled 0
 
  addParam stdMatBaseTextureAlphaReplicate 0
 
  addParam stdMatCullMode cullClockwise
 
  addParam stdMatDiffCoef 0.39,0.46,0.49
 
  addParam stdMatEmissiveCoef 0,0,0
 
  addParam stdMatEnvCubeBlurFactor 0.000000
 
  addParam stdMatEnvCubeCoef 0.3,0.3,0.3
 
  addParam stdMatEnvCubeLockedToCamera 0
 
  addParam stdMatEnvCubeMode reflection
 
  addParam stdMatEnvCubeTextureName reflectionkitchenhighcontrast-envcube
 
  addParam stdMatFillMode solid
 
  addParam stdMatLayer 0
 
  addParam stdMatLightingEnabled 1
 
  addParam stdMatMinLightRangeHint 4
 
  addParam stdMatSpecCoef 0.54,0.72,0.76
 
  addParam stdMatSpecPower 22     
 
  addParam stdMatAddLayer -10
 
end
 
 
materialDefinition puddle_liquid_blue
 
  setDefinition GeneralReflectiveMaterial
 
  addParam deprecatedStdMatInvDiffuseCoeffMultiplier 1.2
 
  addParam forceHighQualitySkinning 0
 
  addParam forceIgnoreShapeBlend 0
 
  addParam reflectivity 0.1
 
  addParam stdMatAlphaBlendMode blend
 
  addParam stdMatAlphaMultiplier 0.5
 
  addParam stdMatAlphaRefValue 127
 
  addParam stdMatAlphaTestEnabled 0
 
  addParam stdMatBaseTextureAlphaReplicate 0
 
  addParam stdMatCullMode cullClockwise
 
  addParam stdMatDiffCoef 0.23,0.41,0.49
 
  addParam stdMatEmissiveCoef 0,0,0
 
  addParam stdMatEnvCubeBlurFactor 0.000000
 
  addParam stdMatEnvCubeCoef 0.1,0.1,0.1
 
  addParam stdMatEnvCubeLockedToCamera 0
 
  addParam stdMatEnvCubeMode reflection
 
  addParam stdMatEnvCubeTextureName reflectionkitchenhighcontrast-envcube
 
  addParam stdMatFillMode solid
 
  addParam stdMatLayer 0
 
  addParam stdMatLightingEnabled 1
 
  addParam stdMatMinLightRangeHint 4
 
  addParam stdMatSpecCoef 0.55,0.55,0.55
 
  addParam stdMatSpecPower 6.1 
 
  addParam stdMatAddLayer -10
 
end
 
 
 
#endshader
 

Latest revision as of 05:44, 9 July 2009

define TransparentMirrorReflection()

  material
     if (viewerRenderType = $kRenderTypeShadow)
        create StandardShaderShadow()
     else
        if (viewerRenderType = $kRenderTypeThumbnail)
           create TransparentBlankMirrorMaterial($kRenderTypeThumbnail)
        else            
           if (not $mirrorReflectionsEnabled)
              set currentType (viewerRenderType)
              create TransparentBlankMirrorMaterial($currentType)
           else
              create TransparentMirrorReflectionMaterial()
           endif            
        endif         
     endif
  end

enddef

define TransparentBlankMirrorMaterial(renderType)

     shader
        validateRenderShaderContext -viewerRenderType  &renderType
        
        pass             
           shaderProgram -target vertexProgram -method assemble
              bindConstants 0 -bindingID geomToClip -constantCount 4
              shaderSource
                 vs_1_1
                 dcl_position v0
                 m4x4 oPos, v0, c0
              endShaderSource
           end
           
           colorScalar (0,0,0) 0.5
           stage
              textureBlend select(colorScalar) select(colorScalar)
           end            
        end
     end      

enddef

define TransparentMirrorReflectionMaterial()

     shader -layer -9998   # this material must render first
        validateRenderShaderContext -viewerRenderType $kRenderTypeMirror  # reflection render
        pass -renderEachFrame
           renderTarget $reflectionRenderTarget -setViewport viewportFromParentRenderContext
           depthTest true -enableDepthWrite true
           applyStencilStateForOverlappingReflections
           alphaBlend srcFactor(zero) add dstFactor(one)
           cullmode none
           shaderProgram -target vertexProgram -method assemble            
              bindConstants 0 -bindingID geomToClipFromParentView -constantCount 4
              shaderSource
                 vs_1_1
                 dcl_position v0
                 def c5, 1,0,0,1
                 m4x4 r0,   v0,  c0
                 mov oPos.x,  -r0
                 mov oPos.yzw, r0                  
              endShaderSource
           end
        end
     end
     shader -layer 6
        validateRenderShaderContext -viewerRenderType $kRenderTypeNormal
        pass -modifiedEachFrameHint
           shaderProgram -target vertexProgram -method assemble            
              bindConstants 0 -bindingID geomToClip -constantCount 4
              bindConstants 4 -bindingID clipToViewTarget -constantCount 4
              shaderSource
                 vs_1_1
                 dcl_position v0
                 def c8,    -0.5, -0.5, 1, 1
                 def c9,     0.5,  0.5, 0, 0 
                 def c10,    0.25, 0.25, 0, 0
                 m4x4 r0,   v0,  c0
                 mov oPos, r0
                 mul r2, c9, r0.w
                 mad r4, r0, c8, r2
                 rcp r3.x, c4.x                                   
                 rcp r3.y, c5.y
                 mov r3.zw, c9.zw
                 mul r3, r3, c10
                 mad r6, r0, r3, r4
                 mov oT0, r6.xyww
              endShaderSource               
           end
           alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
           depthTest true -enableDepthWrite false
           colorScalar (0,0,0) 0.25
           stage
              textureTransformType vector3 homogeneous
              textureAddressing clamp clamp
              texture $reflectionRenderTarget
              textureBlend select(texture) select(colorScalar)
           end
                      
        end
     end
     
     shader -layer 6      
        validateRenderShaderContext -viewerRenderType $kRenderTypeNormal
        pass -modifiedEachFrameHint
           shaderProgram -target vertexProgram -method assemble            
              bindConstants 0 -bindingID geomToClip -constantCount 4
              bindConstants 4 -bindingID clipToViewTarget -constantCount 4
              shaderSource
                 vs_1_1
                 dcl_position v0
                 def c8,    -0.5, -0.5, 1, 1
                 def c9,     0.5,  0.5, 0, 0
                 def c10,    0.25, 0.25, 0, 0
                 m4x4 r0,   v0,  c0
                 mov oPos, r0
                 mul r2, c9, r0.w
                 mad r4, r0, c8, r2
                 rcp r3.x, c4.x                                   
                 rcp r3.y, c5.y
                 mov r3.zw, c9.zw
                 mul r3, r3, c10
                 mad r1, r0, r3, r4
                 rcp r1.w, r1.w
                 mul oT0.xy, r1.w, r1.xy
              endShaderSource               
           end
           alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
           depthTest true -enableDepthWrite false
           colorScalar (0,0,0) 0.25
           stage
              textureAddressing clamp clamp
              texture $reflectionRenderTarget
              textureBlend select(texture) select(colorScalar)
           end
           
        end
     end

enddef

  1. ---------------------------------------------------------------------------------------------------------------#

materialDefinition transparent_mirror_reflection

  setDefinition TransparentMirrorReflection

end

Personal tools
Namespaces

Variants
Actions
Navigation
game select
Toolbox