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 06: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