Difference between revisions of "TEST-STRCMP4CODES"

From SimsWiki
Jump to: navigation, search
 
(17 intermediate revisions by one user not shown)
Line 1: Line 1:
#
+
define TransparentMirrorReflection()
# Shaders for neighborhood
+
   material
#
+
       if (viewerRenderType = $kRenderTypeShadow)
#
+
         create StandardShaderShadow()
 
+
      else
# layers
+
         if (viewerRenderType = $kRenderTypeThumbnail)
# normal shadows are layer 2 (after opaques), tree shadows are moved to -2 to make them
+
             create TransparentBlankMirrorMaterial($kRenderTypeThumbnail)
#  render to the first buffer.  Tree shadows (-2) do not show up on fields (7).
+
         else           
seti nhoodWaterLayer            1
+
             if (not $mirrorReflectionsEnabled)
seti nhoodCanvasLayer          -8
+
              set currentType (viewerRenderType)
seti nhoodTreeShadowLayer      -2
+
               create TransparentBlankMirrorMaterial($currentType)
 
+
setf  neighborhoodMaterialScaleU 8.0  # defaults for neighborhood materials without these defined
+
setf  neighborhoodMaterialScaleV 8.0  # defaults for neighborhood materials without these defined
+
 
+
setf  nhoodWaterMap1Scale    7.0
+
setf  nhoodWaterMap1Speed    0.5
+
setf  nhoodWaterMap2Scale    5.0
+
setf  nhoodWaterMap2Speed    0.3
+
 
+
 
+
setv2 baseTexOffset (0.5, 0.5)
+
setv3 nhoodDiffCoef (0.75, 0.93, 0.75)
+
 
+
 
+
setf  nhoodPaintTextureScale  13      #Repeat distance of neighborhood textures in tiles.
+
                                    #NOTE: There is a related parameter called "TextureVariantGridSize" in
+
                                    #NeighborhoodTerrain.ini. You would normally (though not necessarily) want it to be
+
                                    #the same as this number.
+
setf  waterEdgeTextureScale  250.0  #Repeat distance in meters
+
setf  terrainEdgeTextureScale 100.0  #Repeat distance in meters
+
 
+
 
+
# Reflective water
+
setc  nhoodWaterReflColour  (0.55, .6, 0.65)
+
setc  lotSkirtWaterReflColour (0.65, 0.7, 0.85)
+
setf  nhoodWaterReflStrength  0.75
+
setf  nhoodWaterReflOffset    0.0020
+
 
+
# Standard water
+
setf nhoodWaterbumpMapScale 8.0
+
setf nhoodWaterAlpha        0.35
+
 
+
setb isDay true
+
setb isTerrainConcrete false
+
 
+
# water clipping plane
+
setf waterHeight 312.45
+
 
+
# underwater gradient texture
+
set  waterGradientTexture neighborhood-underwater-gradient
+
set  waterGradientTextureAdditive neighborhood-underwater-gradient-with-black
+
# depth at which the gradient starts to take effect
+
setf waterGradientZoneStart 0
+
# how far down the gradient goes from that point.
+
setf waterGradientZoneSize 40
+
 
+
set skyboxCubeMap neighborhood-sky2-envcube
+
 
+
# bump mapping
+
setv3 nhoodSunDir (-0.5, 1, 0.5)  # default -- should be set by code from the lighting.txt value
+
# overall kind-of brightness booster for bump map.
+
setf  bumpMapBoost 1.5
+
 
+
# ==============================================================================
+
# derived bump map quantities
+
define BiasedNormal(n bn)
+
   setf  nLen (sqrt(sqr($&{n}.x) + sqr($&{n}.y) + sqr($&{n}.z)))
+
  setv3 &{bn} ((0.5,0.5,0.5) * (($&{n} / $nLen.xxx) + (1,1,1)))
+
enddef
+
 
+
create BiasedNormal(nhoodSunDir nhoodSunDirBiased)
+
setv3 nhoodSunDirBiased ($nhoodSunDirBiased * $bumpMapBoost.xxx)
+
 
+
set terrainType "unset"
+
 
+
# defaults off, can be turned on at startup.
+
setb simpleTerrain false
+
setb isImposter false
+
 
+
include neighborhoodSWVS.matShad
+
 
+
# ==============================================================================
+
 
+
define NeighborhoodCanvas()
+
 
+
# this material does nothing but prep the z-buffer, and render black.
+
 
+
material
+
       if ($simpleTerrain)
+
         shader
+
        end
+
      endif
+
 
+
      shader -layer (($nhoodCanvasLayer) * 8)
+
       
+
        validateRenderShaderContext -vertexFormat  position      0 required
+
        validateRenderShaderContext -vertexFormat  normal        0 required
+
       
+
         if (not $isImposter)        
+
             validateRenderShaderContext -vertexFormat  texcoord      0 required
+
        endif
+
        viewerRenderTypePred viewerRenderType
+
           
+
        create DetermineHardwareSupport()
+
          
+
        if (strcmp("Concrete", "${terrainType}") = 0)
+
             setb isTerrainConcrete true
+
        endif
+
 
+
        if (not $isUnderWater or viewerRenderType != $kRenderTypeReflection)
+
            if ($useSWVertexShaderPath)
+
               create NeighborhoodTerrainPrepWorkSWVS()
+
 
             else
 
             else
               pass -fixedFunction
+
               create TransparentMirrorReflectionMaterial()
                  create LightingStatesNoStdLights()
+
             endif          
                 
+
         endif        
                  cullmode none # so that reflections don't "creep under" edge of terrain
+
                  colorScalar (0.0, 0.0, 0.0, 1.0)
+
                                   
+
                  if ($isImposter and $isTerrainConcrete)
+
                    ffDepthOffset -1
+
                  endif
+
 
+
                  stage
+
                    if (not $isImposter)
+
                        ffTextureCoordsSource fromPosition
+
                    endif
+
                    textureBlend select(colorScalar) select(outRegister)
+
                  end
+
              end
+
             endif
+
           
+
         endif
+
       
+
      end
+
  end
+
enddef
+
 
+
 
+
# ==============================================================================
+
# Used for those triangles in the canvas which are partially under water.
+
#
+
define NeighborhoodCanvasStraddle()
+
material
+
 
+
      if ($simpleTerrain)
+
        shader
+
        end
+
 
       endif
 
       endif
 
# material for reflection camera
 
 
      shader -layer (($nhoodCanvasLayer) * 8)
 
     
 
validateRenderShaderContext -vertexFormat  position      0 required
 
validateRenderShaderContext -vertexFormat  normal        0 required
 
validateRenderShaderContext -vertexFormat  texcoord      0 required
 
viewerRenderTypePred $kRenderTypeReflection
 
       
 
#Render the portion that is above water only
 
       
 
create DetermineHardwareSupport()
 
       
 
if ($useSWVertexShaderPath)
 
 
create NeighborhoodWaterlineStraddleSWVS()
 
 
else
 
       
 
pass -fixedFunction
 
create LightingStatesNoStdLights()
 
alphaBlend srcFactor(one) add dstFactor(zero)
 
cullmode none # so that reflections don't "creep under" edge of terrain
 
colorScalar (0.0, 0.0, 0.0, 1.0)
 
 
alphaTest true 128
 
alphaTestFunction acceptIfGreater
 
 
stage
 
# above water -- clip by using depth-based 0/1 texture.
 
texture blackWhite
 
textureAddressing clamp clamp
 
textureFilterHint point point
 
textureMIPFilterHint disabled
 
                 
 
ffTextureMatrix -cameraToGlobal -order zzzw -trans ($waterHeight - 0.5, 0) -invert
 
ffTextureCoordsSource fromPosition
 
textureBlend select(colorScalar) select(texture)
 
end
 
end
 
endif
 
 
end
 
     
 
     
 
     
 
      #material for standard camera 
 
      #shader -layer (-128)     
 
shader -layer (-128)
 
 
validateRenderShaderContext -vertexFormat  position      0 required
 
validateRenderShaderContext -vertexFormat  normal        0 required
 
validateRenderShaderContext -vertexFormat  texcoord      0 required
 
viewerRenderTypePred $kRenderTypeNormal
 
       
 
create DetermineHardwareSupport()
 
       
 
if ($useSWVertexShaderPath)
 
create NeighborhoodWaterlineStraddleStandardCameraSWVS()
 
else
 
       
 
#Render the portion that is above water only
 
pass -fixedFunction
 
create LightingStatesNoStdLights()
 
alphaBlend srcFactor(one) add dstFactor(zero)
 
cullmode none # so that reflections don't "creep under" edge of terrain
 
colorScalar (0.0, 0.0, 0.0, 1.0)
 
 
stage
 
textureBlend select(colorScalar) select(outRegister)
 
end
 
end
 
endif
 
 
end
 
     
 
end
 
enddef
 
 
# ==============================================================================
 
# Material for terrain geometry that is partially or completely under water.
 
define NeighborhoodWaterTerrain()
 
material
 
 
 
      if ($simpleTerrain)
 
        shader
 
        end
 
      endif
 
     
 
shader -layer (($nhoodCanvasLayer + 2) * 8)
 
validateRenderShaderContext -vertexFormat  position      0 required
 
validateRenderShaderContext -vertexFormat  normal        0 required
 
validateRenderShaderContext -vertexFormat  texcoord      0 required
 
viewerRenderTypePred viewerRenderType
 
 
 
create DetermineHardwareSupport()
 
 
if (viewerRenderType != $kRenderTypeReflection)       
 
 
if ($useSWVertexShaderPath)
 
create NeighborhoodUnderWaterTerrainSWVS()
 
 
else
 
 
pass -fixedFunction
 
 
 
create LightingStatesNoStdLights()
 
 
alphaBlend srcFactor(destColor) add dstFactor(zero)
 
cullmode none # so that reflections don't "creep under" edge of terrain
 
# apply depth-based gradient texture to terrain that is under water.
 
stage
 
texture $waterGradientTexture
 
 
if ($cubeMapSupport)
 
  textureAddressing tile clamp
 
else
 
  textureAddressing clamp clamp
 
endif
 
                   
 
set d ($waterHeight - $waterGradientZoneStart)
 
set s (-$waterGradientZoneSize)
 
ffTextureMatrix -cameraToGlobal -order xzyw -scale $s -trans (0, $d) -invert
 
ffTextureCoordsSource fromPosition
 
textureBlend select(texture) select(outRegister)
 
end
 
end
 
 
endif
 
 
endif
 
 
end
 
end
 
enddef
 
 
# ==============================================================================
 
 
define NeighborhoodTerrainPaintShader()
 
  shader -layer (($nhoodCanvasLayer + 1) * 8)
 
      validateRenderShaderContext -vertexFormat  position      0 required
 
      validateRenderShaderContext -vertexFormat  normal        0 required
 
           
 
        if (not $isImposter)
 
            validateRenderShaderContext -vertexFormat  texcoord      0 required
 
        endif
 
 
  create DetermineHardwareSupport()
 
 
 
  if (strcmp("Concrete", "${terrainType}") = 0)
 
            setb isTerrainConcrete true
 
        endif
 
 
 
  if ($useSWVertexShaderPath)
 
  create NeighborhoodMainTerrainShaderSWVS()
 
 
 
  else
 
 
  pass -fixedFunction
 
 
 
  create LightingStatesNoStdLights()
 
  alphaBlend srcFactor(srcAlpha) add dstFactor(one)
 
  cullmode none # so that reflections don't "creep under" edge of terrain
 
 
 
  if ($isImposter and $isTerrainConcrete)
 
                  ffDepthOffset -1
 
              endif
 
                     
 
  colorScalar $nhoodSunDirBiased
 
         
 
  depthTest true -enableDepthWrite false
 
  depthTestFunction acceptIfEqual
 
 
 
  seti snowLevel (tsHasSnow)
 
 
 
  if ($snowLevel = 1)
 
      set weatherSuffix "-LSNOW"
 
  elseif ($snowLevel = 2)
 
                  set weatherSuffix "-HSNOW"
 
              else
 
                  set weatherSuffix ""
 
              endif
 
             
 
  stage
 
  texture $alphaMap
 
  textureAddressing clamp clamp
 
 
 
                  if ($isImposter)
 
  ffTextureMatrix -cameraToGlobal -scalev ((0.1 * $alphaMapScaleU), (0.1 * $alphaMapScaleV))
 
  ffTextureCoordsSource fromPosition
 
  else
 
      ffTextureMatrix -scalev ($alphaMapScaleU, $alphaMapScaleV)
 
      ffTextureCoordsSource 0
 
  endif
 
  textureBlend select(outRegister) select(texture)
 
  end
 
 
 
  stage  
 
  texture "${paintTexture}${weatherSuffix}"
 
  textureAddressing tile tile
 
  if ($isImposter)
 
  ffTextureMatrix -cameraToGlobal -scalev ((10.0 * $nhoodPaintTextureScale), (10.0 * $nhoodPaintTextureScale)) -invert
 
  ffTextureCoordsSource fromPosition
 
  else
 
      ffTextureMatrix -scalev ($nhoodPaintTextureScale, $nhoodPaintTextureScale) -invert
 
      ffTextureCoordsSource 0
 
  endif
 
  textureBlend select(texture outRegister) select(outRegister)
 
  end
 
  end     
 
        endif
 
 
end
 
enddef
 
 
define NeighborhoodTerrainPaint()
 
  material
 
     
 
      if ($simpleTerrain)
 
        shader
 
        end
 
      endif
 
     
 
      create NeighborhoodTerrainPaintShader()
 
 
   end
 
   end
 
enddef
 
enddef
 
  
# ==============================================================================
+
define TransparentBlankMirrorMaterial(renderType)
 
+
      shader
set ratioH 1  # default material parameter value
+
        validateRenderShaderContext -viewerRenderType &renderType
set ratioW 1  # default material parameter value
+
       
set useReflection 1 # default material parameter value
+
         pass           
define NeighborhoodWater()
+
             shaderProgram -target vertexProgram -method assemble
  material
+
               bindConstants 0 -bindingID geomToClip -constantCount 4
      # never draw water in its reflection. Already handled by code.
+
               shaderSource
 
+
                   vs_1_1
      if ($simpleTerrain)
+
                  dcl_position v0
         shader -layer $nhoodWaterLayer
+
                  m4x4 oPos, v0, c0
             pass -fixedFunction
+
               endShaderSource
               colorScalar (0.3, 0.4,0.8) 1.0
+
               stage
+
                   textureBlend select(colorScalar) select(colorScalar)
+
               end
+
 
             end
 
             end
        end
 
      endif
 
 
 
      # First option: reflection mapped water.
 
      if ($useReflection)
 
 
        shader -layer $nhoodWaterLayer
 
            validateRenderShaderContext -vertexFormat  position      0 required
 
            validateRenderShaderContext -vertexFormat  normal        0 required
 
            validateRenderShaderContext -vertexFormat  texcoord      0 required
 
            viewerRenderTypePred viewerRenderType
 
 
            ################################################################################
 
            # Three pass/2 texture rippled reflection -- does not run on GeF2 only 2 stages (for GeF4+)
 
            pass -fixedFunction -modifiedEachFrameHint
 
           
 
           
 
              alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
 
              colorScalar $nhoodWaterReflColour $nhoodWaterReflStrength
 
              depthTest true -enableDepthWrite false
 
             
 
              stage
 
                  ffTextureCoordsSource fromPosition
 
                  ffTextureMatrix -cameraToClip -scalev ((-0.5 * $ratioW), (-0.5 * $ratioH)) -trans (0.5, 0.5)
 
                  textureAddressing clamp clamp
 
                  texture "ScreenReflection"
 
                 
 
                  textureBlend multiply(texture colorScalar) select(outRegister) tempRegister
 
              end
 
              stage
 
                  ffTextureCoordsSource fromPosition
 
                  ffTextureMatrix -cameraToClip -scalev ((-0.5 * $ratioW), (-0.5 * $ratioH)) -trans (0.5 + $nhoodWaterReflOffset, 0.5 + $nhoodWaterReflOffset)
 
                  textureAddressing clamp clamp
 
                 
 
                  texture "ScreenReflection"
 
                  textureBlend multiply(texture colorScalar) select(outRegister)
 
              end           
 
              stage
 
                  texture "neighborhood-water-1"
 
                  textureAddressing tile tile
 
                  # -atrans waveformType cycles/sec offset (startU, startV)  (endU, endV)
 
                  textureMatrixAnimation -targetType fixedFunction -atrans sawtooth ($nhoodWaterMap1Speed / $nhoodWaterMap1Scale) 0 (0, 0) ($nhoodWaterMap1Scale, 0) -ascale sawtooth 1 0 ($nhoodWaterMap1Scale, $nhoodWaterMap1Scale)
 
                  ffTextureCoordsSource 0
 
                  textureBlend lerpTextureAlpha(tempRegister outRegister) select(colorScalar)
 
              end
 
            end
 
        end
 
       
 
        shader -layer $nhoodWaterLayer
 
            validateRenderShaderContext -vertexFormat  position      0 required
 
            validateRenderShaderContext -vertexFormat  normal        0 required
 
            validateRenderShaderContext -vertexFormat  texcoord      0 required
 
            viewerRenderTypePred viewerRenderType
 
 
            ################################################################################
 
            # Two stage case since the three stage case above fails on most low end hardware because of its third stage (GF2).
 
            pass -fixedFunction -modifiedEachFrameHint
 
           
 
           
 
              alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
 
              colorScalar $nhoodWaterReflColour $nhoodWaterReflStrength
 
              depthTest true -enableDepthWrite false
 
             
 
              stage
 
                  ffTextureCoordsSource fromPosition
 
                  ffTextureMatrix -cameraToClip -scalev ((-0.5 * $ratioW), (-0.5 * $ratioH)) -trans (0.5, 0.5)
 
                  textureAddressing clamp clamp
 
                  texture "ScreenReflection"
 
                 
 
                  textureBlend multiply(texture colorScalar) select(outRegister)
 
              end
 
             
 
              stage
 
                  texture "neighborhood-water-1"
 
                  textureAddressing tile tile
 
                  # -atrans waveformType cycles/sec offset (startU, startV)  (endU, endV)
 
                  #textureMatrixAnimation -targetType fixedFunction -atrans sawtooth ($nhoodWaterMap1Speed / $nhoodWaterMap1Scale) 0 (0, 0) ($nhoodWaterMap1Scale, 0) -ascale sawtooth 1 0 ($nhoodWaterMap1Scale, $nhoodWaterMap1Scale)
 
                  ffTextureCoordsSource 0
 
                  textureBlend lerpTextureAlpha(outRegister outRegister) select(colorScalar)
 
              end
 
             
 
            end
 
        end
 
       
 
      endif
 
     
 
      ################################################################################
 
      # fallback: no reflection.
 
      shader -layer ($nhoodWaterLayer)
 
        viewerRenderTypePred viewerRenderType
 
       
 
        create DetermineHardwareSupport()
 
       
 
        pass -fixedFunction
 
  # For now, we are diabling the lighting since we simply want to use the vertex colors.
 
  create LightingStatesNoStdLightsParam(false true)
 
  alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
 
 
 
            colorScalar (.4, .6, .9, .6)     
 
 
              
 
              
             fillmode $stdMatFillMode
+
             colorScalar (0,0,0) 0.5
 
             stage
 
             stage
               #texture reflectionoutdoorwater-envcube
+
               textureBlend select(colorScalar) select(colorScalar)
              if ($cubeMapSupport)
+
             end          
                  texture $skyboxCubeMap
+
                  textureMIPFilterHint disabled
+
 
+
                  ffTextureCoordsSource fromReflectionVector
+
                  ffTextureMatrix -orientCameraToGlobal
+
 
+
                  textureAddressing clamp clamp clamp
+
                  textureBlend multiply(texture colorScalar) select(colorScalar)
+
              else
+
                  textureBlend select(colorScalar) select(colorScalar)
+
              endif
+
             end
+
        end 
+
+
      end
+
+
+
      ################################################################################
+
      # Final fallback.
+
#<shader -layer ($nhoodWaterLayer)
+
viewerRenderTypePred viewerRenderType
+
+
pass -fixedFunction
+
+
fillmode $stdMatFillMode
+
create LightingStatesNoStdLights()
+
alphaBlend srcFactor(one) add dstFactor(srcAlpha)
+
colorScalar (.2, .3, .5, .05)     
+
stage
+
textureBlend select(colorScalar) select(colorScalar)
+
end
+
end
+
+
+
end#>
+
+
        create NeighborhoodWaterSWVS()
+
               
+
     
+
end
+
+
enddef
+
 
+
 
+
# ==============================================================================
+
# The layer ID for this should be lower than "nhoodWaterLayer" Id because we want the farther side of the water box should be
+
# drawn as well.
+
# the layer ID of any under-water objects (so
+
define NeighborhoodWaterEdge()
+
 
+
  material
+
      if ($simpleTerrain)
+
        shader
+
 
         end
 
         end
       endif
+
       end      
     
+
     
+
      shader -layer (($nhoodWaterLayer - 1) * 8)
+
        validateRenderShaderContext -vertexFormat  position     0 required
+
        validateRenderShaderContext -vertexFormat  texcoord      0 required
+
       
+
        pass -fixedFunction
+
            create LightingStates()
+
            alphaBlend srcFactor(one) add dstFactor(zero)
+
            cullmode cullCounterClockwise
+
 
+
            stage
+
              texture $waterEdgeTexture
+
              textureAddressing tile tile
+
              ffTextureMatrix -scalev (1/$waterEdgeTextureScale, 1/$waterEdgeTextureScale)
+
              ffTextureCoordsSource 0
+
              textureBlend select(texture) select(diffuse)
+
            end
+
        end   
+
         
+
      end
+
  end
+
 
+
 
enddef
 
enddef
  
# ==============================================================================
+
define TransparentMirrorReflectionMaterial()
define NeighborhoodTerrainEdge()
+
  material
+
 
+
      if ($simpleTerrain)
+
        shader
+
        end
+
      endif
+
 
        
 
        
       shader -layer (($nhoodCanvasLayer + 13) * 8)
+
       shader -layer -9998  # this material must render first
        validateRenderShaderContext -vertexFormat  position      0 required
+
         validateRenderShaderContext -viewerRenderType $kRenderTypeMirror # reflection render
         validateRenderShaderContext -vertexFormat  normal        0 required
+
        validateRenderShaderContext -vertexFormat texcoord      0 required
+
  
         pass -fixedFunction
+
         pass -renderEachFrame
             create LightingStates()
+
             renderTarget $reflectionRenderTarget -setViewport viewportFromParentRenderContext
            alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
            stage
+
              texture $terrainEdgeTexture
+
              textureAddressing tile tile
+
              ffTextureMatrix -scalev (1/$terrainEdgeTextureScale, 1/$terrainEdgeTextureScale)
+
              ffTextureCoordsSource 0
+
              textureBlend multiply(texture diffuse) select(texture)
+
            end
+
        end     
+
       
+
      end
+
  end
+
enddef
+
  
#==============================================================================
+
            depthTest true -enableDepthWrite true
define NHoodTerrainLighting()
+
  
  set terrainRepresentativeTexture "lottexture-test-01_detail"
+
            applyStencilStateForOverlappingReflections
  
material
+
            alphaBlend srcFactor(zero) add dstFactor(one)
shader -layer (($nhoodCanvasLayer + 3) * 8)
+
validateRenderShaderContext -vertexFormat  position      0 required
+
validateRenderShaderContext -vertexFormat  normal        0 required
+
+
if (not $isImposter)
+
  validateRenderShaderContext -vertexFormat  texcoord      0 required
+
endif
+
+
  
        if (strcmp("Concrete", "${terrainType}") = 0)
+
             cullmode none
             setb isTerrainConcrete true
+
        endif
+
     
+
        if ($simpleTerrain)
+
       
+
            if (strcmp("Desert", "${terrainType}") = 0)
+
              set terrainRepresentativeTexture "lottexture-canvas-desert"
+
            endif
+
       
+
            shader
+
              pass -fixedFunction                 
+
  ffDepthOffset -1                
+
  
                  stage
+
            shaderProgram -target vertexProgram -method assemble           
    texture "nhoodLightMap"   
+
              bindConstants 0 -bindingID geomToClipFromParentView -constantCount 4
    if ($isImposter)
+
              shaderSource
      ffTextureMatrix -cameraToGlobal -scalev (1280, 1280) -invert
+
                  vs_1_1
      ffTextureCoordsSource fromPosition
+
                   dcl_position v0
  else
+
                   def c5, 1,0,0,1
      ffTextureMatrix -scalev (128, 128) -invert
+
                   m4x4 r0,   v0,  c0
      ffTextureCoordsSource 0
+
                  mov oPos.x, -r0
  endif
+
                   mov oPos.yzw, r0                 
                       
+
               endShaderSource
                    textureBlend select(texture) select(texture)
+
                   end
+
                    
+
                   stage
+
    texture $terrainRepresentativeTexture   
+
    if ($isImposter)
+
      ffTextureMatrix -cameraToGlobal -scalev (160, 160) -invert
+
      ffTextureCoordsSource fromPosition
+
  else
+
      ffTextureMatrix -scalev (16, 16) -invert
+
      ffTextureCoordsSource 0
+
  endif
+
   
+
                    #textureBlend multiply(texture outRegister) select(outRegister)
+
                    textureBlend select(texture outRegister) select(outRegister)
+
                   end
+
               end
+
 
             end
 
             end
           
+
         end
         endif
+
     
+
 
+
create DetermineHardwareSupport()
+
+
if ($useSWVertexShaderPath)
+
create NeighborhoodTerrainLightingSWVS()
+
else
+
pass -fixedFunction
+
+
create LightingStatesNoStdLights()
+
+
# standard Lightmap * dest
+
alphaBlend srcFactor(destColor) add dstFactor(zero)
+
+
# if the outbound 'clip' texture has 0 in it, don't emit those pixels.
+
alphaTest true 127
+
alphaTestFunction acceptIfGreater
+
+
+
fillmode $stdMatFillMode
+
+
if ($isImposter and $isTerrainConcrete)
+
  ffDepthOffset -1        
+
      endif
+
           
+
depthTestFunction acceptIfEqual
+
            # emit the lightmap
+
stage
+
texture "nhoodLightMap"
+
if ($isImposter)
+
  ffTextureMatrix -cameraToGlobal -scalev (1280, 1280) -invert
+
  ffTextureCoordsSource fromPosition
+
else
+
  ffTextureMatrix -scalev (128, 128) -invert
+
  ffTextureCoordsSource 0
+
endif
+
+
if (tsHasSnow >= 1)
+
  colorScalar (0.3, 0.3, 0.35, 0)
+
  else
+
      colorScalar (0, 0, 0, 0)
+
  endif
+
+
textureBlend add(texture colorScalar) select(texture)
+
end
+
+
# modulate by the 'above water' texture, which is a 2x1 texture with black and white in it.
+
+
stage
+
# above water -- clip by using depth-based 0/1 texture.
+
texture blackWhite
+
textureAddressing clamp clamp
+
textureFilterHint point point
+
textureMIPFilterHint disabled
+
                 
+
if ( $isImposter)
+
  ffTextureMatrix -cameraToGlobal -order zzzw -trans ($waterHeight - 10, 0) -invert
+
              else
+
  ffTextureMatrix -cameraToGlobal -order zzzw -trans ($waterHeight - 0.5, 0) -invert
+
endif
+
ffTextureCoordsSource fromPosition
+
textureBlend multiply(texture:alphaReplicate outRegister) select(texture)
+
end
+
end
+
endif  
+
end
+
end
+
+
enddef
+
 
+
 
+
# ==============================================================================
+
 
+
define NHoodTerrainHighlightMaterial()
+
  material
+
      shader -layer (($nhoodCanvasLayer + 9) * 8)
+
        validateRenderShaderContext -vertexFormat  position      0 required
+
        validateRenderShaderContext -vertexFormat  normal        0 required
+
        validateRenderShaderContext -vertexFormat  texcoord      0 required
+
 
+
create DetermineHardwareSupport()
+
+
if ($useSWVertexShaderPath)
+
create NeighborhoodTerrainHighlightSWVS()
+
else
+
pass -fixedFunction
+
create LightingStates()
+
alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
fillmode $stdMatFillMode
+
  colorScalar (1, 1, 1, $highlightAlpha)
+
           
+
stage
+
texture $highlightTexture
+
textureAddressing tile tile
+
textureBlend select(texture) multiply(texture colorScalar)
+
end
+
end   
+
endif
+
 
+
 
       end
 
       end
  end
 
enddef
 
  
# ==============================================================================
+
       shader -layer 6
define NHoodTerrainOutlineHighlightMaterial()
+
         validateRenderShaderContext -viewerRenderType $kRenderTypeNormal
  material
+
         pass -modifiedEachFrameHint
       shader -layer (($nhoodCanvasLayer + 10) * 8)
+
            shaderProgram -target vertexProgram -method assemble           
         validateRenderShaderContext -vertexFormat  position      0 required
+
              bindConstants 0 -bindingID geomToClip -constantCount 4
         validateRenderShaderContext -vertexFormat  normal        0 required
+
              bindConstants 4 -bindingID clipToViewTarget -constantCount 4
        validateRenderShaderContext -vertexFormat texcoord      0 required
+
              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
  
pass -fixedFunction
+
            alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
  create LightingStatesNoStdLights()
+
            depthTest true -enableDepthWrite false
alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
            colorScalar (0,0,0) 0.25
fillmode $stdMatFillMode
+
depthTest true -enableDepthWrite false
+
           
+
stage
+
texture $texture
+
textureAddressing clamp clamp
+
ffTextureCoordsSource 0
+
textureBlend select(texture) select(texture)
+
end
+
end   
+
+
      end
+
  end
+
enddef
+
  
# ==============================================================================
 
setb nhoodIsPartlyUnderwater false
 
define PartiallyUnderWaterMaterial()
 
 
  seti vt viewerRenderType
 
 
 
## prevents the thumbnails of rocks and such from being 'under water', by punting to standard material.
 
  # thumbnails are rendered at 0,0,0, but water tends to be above them at 312 ft/yards whatever.
 
 
 
if (viewerRenderType = $kRenderTypeThumbnail)
 
create StandardMaterial()     
 
    else
 
    create UnderWaterShadingMaterial()
 
endif
 
 
enddef
 
 
define UnderWaterShadingMaterial()
 
 
 
  material
 
      shader -layer (($nhoodCanvasLayer + 4) * 8)
 
        validateRenderShaderContext -vertexFormat  position 0 required
 
        validateRenderShaderContext -vertexFormat  normal  0 required
 
        validateRenderShaderContext -viewerRenderType viewerRenderType
 
 
 
        if ($stdMatBaseTextureEnabled)
 
            validateRenderShaderContext -vertexFormat  texcoord 0 required
 
        endif
 
 
 
 
 
 
        pass -fixedFunction
 
 
 
            ffMatCoef -amb $stdMatDiffCoef -ambAlpha $stdMatAlphaMultiplier -diff $stdMatDiffCoef  -diffAlpha $stdMatAlphaMultiplier -emit $stdMatEmissiveCoef -emitAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower
 
 
 
            create StandardShaderFBAlphaState($stdMatAlphaBlendMode)
 
            fillmode $stdMatFillMode
 
            cullmode $stdMatCullMode
 
 
 
            create LightingStates()                       
 
                       
 
 
             stage
 
             stage
               create StandardShaderTextureState(Base)             
+
               textureTransformType vector3 homogeneous
               textureBlend multiply(texture outRegister) multiply(texture outRegister)              
+
              textureAddressing clamp clamp
 +
              texture $reflectionRenderTarget
 +
               textureBlend select(texture) select(colorScalar)
 
             end
 
             end
           
+
                     
            #################################################################
+
            if ($stdMatIsPartlyUnderwater and tsIsInNeighborhood)
+
              if (viewerRenderType = $kRenderTypeReflection)
+
                  alphaTest true 128
+
                  alphaTestFunction acceptIfGreater
+
                  stage
+
                    # above water -- clip by using depth-based 0/1 texture.
+
                    texture blackWhite
+
                    textureAddressing clamp clamp
+
                    textureFilterHint point point
+
                    textureMIPFilterHint disabled
+
                       
+
                    ffTextureMatrix -cameraToGlobal -order zzzw -trans ($waterHeight - 0.5, 0) -invert
+
                    ffTextureCoordsSource fromPosition
+
                    textureBlend multiply(texture outRegister) select(texture)
+
                  end
+
              else
+
                  stage
+
                    # would we want to source this from somewhere?
+
                    texture $waterGradientTexture
+
                    textureAddressing tile clamp
+
                   
+
                    set d ($waterHeight - $waterGradientZoneStart)
+
                    set s (-$waterGradientZoneSize)
+
                    ffTextureMatrix -cameraToGlobal -order xzyw -scale $s -trans (0, $d) -invert
+
                    ffTextureCoordsSource fromPosition
+
                    textureBlend multiply(texture outRegister) select(outRegister)
+
                  end       
+
              endif
+
            else
+
              # if we are in lot mode and we want to fade this shape
+
              if (numLightsOfType(${kShapeColorLight}) != 0)
+
                  alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
                  depthTest true -enableDepthWrite false
+
                  colorScalar (1, 1, 1, 1) -applyShapeColor 0
+
                  stage
+
                    textureBlend select(outRegister) select(colorScalar)
+
                  end
+
              endif
+
            endif
+
            #################################################################
+
 
         end
 
         end
       
 
        seti weatherLightCount (numLightsOfType(${kWeatherLight}))
 
       
 
 
       end
 
       end
 
        
 
        
      # fallback shader, no darken by depth, since "FromPosition" tends to be totally FUBAR  in SWVP.
+
       shader -layer 6     
       shader -layer (($nhoodCanvasLayer + 4) * 8)
+
        validateRenderShaderContext -viewerRenderType $kRenderTypeNormal
     
+
        pass -modifiedEachFrameHint
pass -fixedFunction
+
             shaderProgram -target vertexProgram -method assemble           
 
+
              bindConstants 0 -bindingID geomToClip -constantCount 4
             ffMatCoef -amb $stdMatDiffCoef -ambAlpha $stdMatAlphaMultiplier -diff $stdMatDiffCoef  -diffAlpha $stdMatAlphaMultiplier -emit $stdMatEmissiveCoef -emitAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower
+
              bindConstants 4 -bindingID clipToViewTarget -constantCount 4
    
+
              shaderSource
            create StandardShaderFBAlphaState($stdMatAlphaBlendMode)
+
                  vs_1_1
            fillmode $stdMatFillMode
+
                  dcl_position v0
            cullmode $stdMatCullMode
+
                  def c8,    -0.5, -0.5, 1, 1
 
+
                  def c9,    0.5,  0.5, 0, 0
            create LightingStates()
+
                  def c10,   0.25, 0.25, 0, 0
           
+
                  m4x4 r0,  v0,  c0
            stage
+
                  mov oPos, r0
              create StandardShaderTextureState(Base)             
+
                  mul r2, c9, r0.w
               textureBlend multiply(texture outRegister) multiply(texture outRegister)
+
                  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
 
             end
           
 
            # if we are in lot mode and we want to fade this shape
 
            if (not tsIsInNeighborhood and numLightsOfType(${kShapeColorLight}) != 0)
 
              alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
 
              depthTest true -enableDepthWrite false
 
              colorScalar (1, 1, 1, 1) -applyShapeColor 0
 
              stage
 
                  textureBlend select(outRegister) select(colorScalar)
 
              end
 
            endif
 
           
 
end
 
 
     
 
      end
 
  
  end
+
            alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
            depthTest true -enableDepthWrite false
enddef
+
            colorScalar (0,0,0) 0.25
  
 
+
             stage
 
+
              textureAddressing clamp clamp
# ===================================================================================
+
              texture $reflectionRenderTarget
define ImposterArrowMaterial()
+
              textureBlend select(texture) select(colorScalar)
  material
+
      shader -layer (($nhoodCanvasLayer + 11) * 8)
+
       
+
        validateRenderShaderContext -vertexFormat  position      0 required
+
        validateRenderShaderContext -vertexFormat  normal        0 required
+
        validateRenderShaderContext -vertexFormat  texcoord      0 required
+
 
+
pass -fixedFunction
+
  create LightingStatesNoStdLights()
+
alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
fillmode $stdMatFillMode
+
             # TODO: change this, cannot turn off depth since that is used for dirty rect
+
depthTest false -enableDepthWrite false
+
           
+
stage
+
texture $texture
+
textureAddressing tile tile
+
ffTextureCoordsSource 0
+
textureBlend select(texture) select(texture)
+
end
+
end   
+
      end
+
  end
+
enddef
+
 
+
# ===================================================================================
+
 
+
define NeighborhoodTreeGUOBMaterial()
+
 
+
# $stdMatTextureName
+
# $stdMatAlphaMulitplier
+
 
+
  # TODO: fix these so that they are not hardcoded, must be passed through content
+
  set  textureName      "genericroundsoftguob-alpha"
+
  setf alphaMultiplier  0.65
+
 
+
  # try using vs_2_sw on the trees since sw vs is not as susceptible to state changes
+
 
+
  # this only handles tree GUOBs in the nhood.
+
  material
+
 
+
      #the engine will try this shader first..
+
      shader -layer $nhoodTreeShadowLayer
+
        # shadows can never be seen in reflections (they're on the ground)
+
        viewerRenderTypePred $kRenderTypeReflection false
+
     
+
        pass
+
          alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
          depthTest true -enableDepthWrite false
+
         
+
            shaderProgram -target vertexProgram -method assemble
+
              bindConstants 0 -bindingID geomToClip -constantCount 4
+
              shaderSource
+
                vs_1_1
+
                dcl_position v0
+
                dcl_texcoord v1
+
                m4x4 oPos, v0, c0
+
                mov oT0, v1
+
               
+
              endShaderSource
+
            end
+
         
+
            shaderProgram -target pixelProgram -method assemble
+
              shaderSource
+
                  ps_1_1
+
                  def c0,1,1,1,$alphaMultiplier
+
                  tex t0
+
                  mul r0,t0, c0
+
              endShaderSource
+
             
+
 
             end
 
             end
 
              
 
              
            sampler 0
+
        end
              texture $textureName
+
              textureAddressing clamp clamp clamp
+
            end
+
        end
+
 
       end
 
       end
     
 
  # and fall back to this one if it can't render the above.
 
  shader -layer $nhoodTreeShadowLayer
 
        # shadows can never be seen in reflections (they're on the ground)
 
        viewerRenderTypePred $kRenderTypeReflection false
 
     
 
        pass -fixedFunction
 
          alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
 
          depthTest true -enableDepthWrite false
 
         
 
          colorScalar (1,1,1, $alphaMultiplier)
 
         
 
          stage
 
              texture $textureName
 
              textureAddressing clamp clamp clamp
 
              textureBlend select(texture) multiply(texture colorScalar)
 
          end
 
        end
 
  end
 
   
 
  end
 
 
 
enddef
 
enddef
  
#=======================================================================================
+
#---------------------------------------------------------------------------------------------------------------#
define NeighborhoodBuildingMaterial()
+
  material 
+
      shader -layer 0 
+
        setb isDay tsIsDay
+
        setb shouldShow (($showOnDay and $isDay) or ((not $showOnDay) and (not $isDay)))
+
        if ($shouldShow)
+
            pass -fixedFunction   
+
             
+
              if (numLightsOfType(${kShapeColorLight}) > 0)             
+
                  alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
                  depthTest true -enableDepthWrite false             
+
                  colorScalar (1, 1, 1, 1) -applyShapeColor 0
+
              else
+
                  colorScalar (1, 1, 1, 1)
+
              endif   
+
             
+
             
+
              if ($isDay) #lighting is only applied at day time
+
                  ffLighting -enable true -localViewer false -normalizeNormals false
+
                  create NonStandardLighting()           
+
                  ffMatCoef -amb (0.8,0.8,0.8) -ambAlpha 1.0 -diff (0.8,0.8,0.8) -diffAlpha 1.0 -spec (0,0,0) -specPow 0
+
             
+
                  stage
+
                    ffTextureCoordsSource 0
+
                    texture $texMaterial
+
                    textureBlend multiply(texture diffuse) multiply(texture colorScalar)
+
                  end
+
              else
+
                  stage
+
                    ffTextureCoordsSource 0
+
                    texture $texMaterial
+
                    textureBlend select(texture) multiply(texture colorScalar)
+
                  end
+
              endif
+
            end           
+
        endif
+
      end
+
  end 
+
enddef
+
#============================================================================================
+
 
+
# make tree shadows render to an opaque (but blended layer) so they drop into the static layer
+
# this overrides the texture name and alpha blend level.
+
 
+
materialDefinition neighborhood_roundshadow
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
 
+
# rectangular shadows are used by the car shadows, until can pass the existing texture name onto the material,
+
# leave those shadows as transparent layer 7 that will get alpha sorted, etc.
+
#materialDefinition neighborhood_rectangularshadow
+
#  setDefinition NeighborhoodTreeGUOBMaterial
+
#end
+
 
+
# forest
+
materialDefinition forest_01_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
materialDefinition forest_02_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
 
+
 
+
# oak
+
materialDefinition treeoak01_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
materialDefinition treeoak02_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
materialDefinition treeoak03_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
materialDefinition treeoak04_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
materialDefinition treeoak05_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
materialDefinition treeoak06_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
 
+
# scrub oak
+
materialDefinition neighborhoodtreescruboak_shadows_alpha
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
 
+
# birch
+
materialDefinition treebirch01_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
 
+
end
+
materialDefinition treebirch02_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
 
+
end
+
materialDefinition treebirch03_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
 
+
end
+
materialDefinition treebirch04_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
materialDefinition treebirch05_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
materialDefinition treebirch06_shadows
+
  setDefinition NeighborhoodTreeGUOBMaterial
+
end
+
 
+
# TODO: need to redefine the tree shaders, at least skip in reflections
+
#  this is also causing massive batch count for main view (scrolling)
+
# all trees should be combined into a single part/texture atlas with their shadows
+
# render them after the terrain
+
#materialDefinition treeoak01_diffuse
+
#  setDefinition StandardMaterial
+
#end
+
 
+
 
+
# ===================================================================================
+
 
+
materialDefinition neighborhood-canvas-outOfWater
+
  setDefinition NeighborhoodCanvas
+
  addParam  isUnderWater false
+
end
+
 
+
materialDefinition neighborhood-canvas-underwater
+
  setDefinition NeighborhoodCanvas
+
  addParam  isUnderWater true
+
end
+
 
+
materialDefinition neighborhood-canvas-straddle
+
  setDefinition NeighborhoodCanvasStraddle
+
end
+
 
+
materialDefinition neighborhood-underwater-terrain
+
  setDefinition NeighborhoodWaterTerrain
+
end
+
 
+
materialDefinition waterEdgeBoxMaterial
+
  setDefinition NeighborhoodWaterEdge
+
  addParam waterEdgeTexture "neighborhood-sides-water"
+
end
+
 
+
materialDefinition terrainEdgeBoxMaterial
+
  setDefinition NeighborhoodTerrainEdge
+
  addParam terrainEdgeTexture "neighborhood-sides-dirt"
+
end
+
 
+
materialDefinition nhoodTerrainLightingMaterial
+
  setDefinition NHoodTerrainLighting
+
end
+
 
+
materialDefinition nhoodTerrainLightingMaterialImposter
+
  setDefinition NHoodTerrainLighting
+
  addParam isImposter true
+
end
+
 
+
materialDefinition nhoodReflectionSkybox
+
  setDefinition SkyboxCompositionPassMaterial
+
  addParam skyboxCubeTexture $skyboxCubeMap
+
end
+
 
+
materialDefinition lotSkirtReflectionSkybox
+
  setDefinition SkyboxCompositionPassMaterial
+
  addParam skyboxCubeTexture $skyboxCubeMap
+
end
+
 
+
materialDefinition lotPlacementArrow
+
  setDefinition ImposterArrowMaterial
+
  addParam texture lot-placement-arrow
+
end
+
 
+
# Material used in highlighting the terrain to depict a house for which no imposter exists yet.
+
materialDefinition DefaultResidentialLotImposterMaterial
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lothighlight-residential"
+
  addParam highlightAlpha 0.5
+
end
+
 
+
materialDefinition DefaultCommunityLotImposterMaterial
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lothighlight-community"
+
  addParam highlightAlpha 0.5
+
end
+
 
+
 
+
# Material used in creating a terrain thumbnail for a lot for which no imposter exists yet.
+
materialDefinition DefaultLotThumbnailMaterial
+
  setDefinition StandardMaterial
+
  addParam stdMatBaseTextureEnabled "true"
+
  addParam stdMatBaseTextureName "lotselection-done"
+
  addParam stdMatLightingEnabled true
+
  addParam stdMatDiffCoef (1, 1, 1)
+
end
+
 
+
materialDefinition bridge_sides
+
#  setDefinition StandardMaterial
+
  setDefinition PartiallyUnderWaterMaterial
+
  addParam stdMatAlphaBlendMode none
+
  addParam stdMatBaseTextureEnabled true
+
  addParam stdMatBaseTextureName bridge-sides
+
  addParam stdMatDiffCoef (0.8, 0.8, 0.8)
+
  addParam stdMatIsPartlyUnderwater true
+
end
+
 
+
materialDefinition cliff_boulder_material
+
#  setDefinition StandardMaterial
+
  setDefinition PartiallyUnderWaterMaterial
+
  addParam stdMatAlphaBlendMode none
+
  addParam stdMatBaseTextureEnabled true
+
  addParam stdMatBaseTextureName nh-test-cliff
+
  addParam stdMatDiffCoef (0.8, 0.8, 0.8)
+
  addParam stdMatIsPartlyUnderwater true
+
end
+
 
+
materialDefinition plesiosaur_skin_material
+
#  setDefinition StandardMaterial
+
  setDefinition PartiallyUnderWaterMaterial
+
  addParam stdMatAlphaBlendMode none
+
  addParam stdMatBaseTextureEnabled true
+
  addParam stdMatBaseTextureName plesiosaur-skin
+
  addParam stdMatDiffCoef (0.8, 0.8, 0.8)
+
  addParam stdMatIsPartlyUnderwater true
+
 
+
  # these are mvoing objects, need to be at or above layer 0
+
  addParam nhoodCanvasLayer -4
+
 
+
end
+
 
+
materialDefinition neighborhood_bouyside_material
+
#  setDefinition StandardMaterial
+
  setDefinition PartiallyUnderWaterMaterial
+
  addParam stdMatAlphaBlendMode none
+
  addParam stdMatBaseTextureEnabled true
+
  addParam stdMatBaseTextureName neighborhood_bouyside
+
  addParam stdMatDiffCoef (0.8, 0.8, 0.8)
+
  addParam stdMatIsPartlyUnderwater true
+
 
+
  # these are mvoing objects, need to be at or above layer 0
+
  addParam nhoodCanvasLayer -4
+
end
+
 
+
 
+
materialDefinition RelationshipArchGreen
+
  setDefinition StandardMaterial
+
  addParam  stdMatSpecPower 20
+
  addParam  stdMatDiffCoef (0.3, 1, 0.3)
+
  addParam  stdMatSpecCoef (1, 1, 1)
+
  addParam  stdMatAlphaMultiplier 0.6
+
  addParam  stdMatAlphaBlendMode blend
+
end
+
 
+
materialDefinition housePlacementOKHighlight
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lotselection-good"
+
  addParam highlightAlpha 0.15
+
end
+
+
materialDefinition housePlacementNotOKHighlight
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lotselection-bad"
+
  addParam highlightAlpha 0.15
+
end
+
 
+
materialDefinition roadIndicatorOK
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lothighlight-roadghost-good"
+
  addParam highlightAlpha 0.75
+
end
+
 
+
materialDefinition roadIndicatorNotOK
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lothighlight-roadghost-bad"
+
  addParam highlightAlpha 0.75
+
end
+
 
+
materialDefinition DefaultLotHighlight
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lotselection-good"
+
  addParam highlightAlpha 0.25
+
end
+
 
+
materialDefinition ResidentialLotHighlight
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lothighlight-residential"
+
  addParam highlightAlpha 0.40
+
end
+
 
+
materialDefinition CommunityLotHighlight
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lothighlight-community"
+
  addParam highlightAlpha 0.40
+
end
+
 
+
materialDefinition DormLotHighlight
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lothighlight-dorm"
+
  addParam highlightAlpha 0.40
+
end
+
 
+
materialDefinition NotOKLotHighlight
+
  setDefinition NHoodTerrainHighlightMaterial
+
  addParam highlightTexture "lotselection-bad"
+
  addParam highlightAlpha 0.40
+
end
+
 
+
materialDefinition neighborhoodbuildingres1_windows_night
+
  setDefinition NeighborhoodBuildingMaterial
+
  addParam texMaterial neighborhoodbuildingres1_repeat-surface-night
+
  addParam showOnDay false
+
end
+
 
+
materialDefinition neighborhoodbuildingres1_windows_day
+
  setDefinition NeighborhoodBuildingMaterial
+
  addParam texMaterial neighborhoodbuildingres1_repeat-surface
+
  addParam showOnDay true
+
end
+
 
+
# this is commented out because the UI renders this without use of the material
+
#materialDefinition ZoomConePyramid
+
#  setDefinition ZoomConeMaterial
+
#  addParam baseColor (1.0, 1.0, 1.0, 0.5)
+
#end
+
 
+
define LotSkirtPSWater()
+
    shader -layer ($poolWaterLayer+1)
+
        validateRenderShaderContext -vertexFormat position 0 required
+
pass -clipAlways -modifiedEachFrameHint
+
#fillmode wireframe
+
alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
seti textureLights (numLightsOfType(environmentCube)) 
+
depthTest true -enableDepthWrite false         
+
 
+
shaderProgram -target vertexProgram -method compile -version 1_1
+
 
+
bindConstants 0 -bindingID geomToClip -constantCount 4
+
bindConstants 4 -bindingID geomToCamera -constantCount 3
+
 
+
bindConstants 7 -bindingID frameInfo
+
 
+
bindConstants 11 -bindingID immediateData -data ($wmXRepeat, 0, $wmXWaveHeight, $wmXSpeed)
+
bindConstants 12 -bindingID immediateData -data (0, $wmYRepeat, $wmYWaveHeight, $wmYSpeed)
+
 
+
# pre-evaluate these
+
setf xscale (-$wmXRepeat * $wmXWaveHeight)
+
setf yscale (-$wmYRepeat * $wmYWaveHeight)
+
bindConstants 13 -bindingID immediateData -data ($xscale,$yscale, 1,0)
+
bindConstants 14 -bindingID allStandardLightData -constantCount 4 -constantType float
+
bindConstants 18 -bindingID cameraToGlobal -constantCount 3
+
bindConstants 21 -bindingID cameraToGeom -constantCount 3
+
+
if (tsIsDay)     
+
bindConstants 25 -bindingID immediateData -data (0.75, 0.75, 0.75, 1)
+
bindConstants 28 -bindingID immediateData -data (-0.3, 0.1, 0.1, 0.0)       
+
else
+
bindConstants 25 -bindingID immediateData -data (0.2, 0.2, 0.2, 1)
+
bindConstants 28 -bindingID immediateData -data (-0.3, -0.2, -0.1, 0.0)     
+
endif
+
 
+
shaderSource
+
 
+
float4 frameInfo : register(c7);
+
float4 waveDataX : register(c11);
+
float4 waveDataY : register(c12);
+
float4 waveDataHelper : register(c13);
+
float4x4 clipSpaceMatrix : register(c0);
+
float4x3 cameraSpaceMatrix : register(c4);
+
float4x3 cameraToGlobalMatrix : register(c18);
+
float4x3 cameraToGeomMatrix : register(c21);
+
+
float4 nightColor: register(c25);
+
float4 waterTint: register(c28);
+
           
+
float4 lightDirection : register(c14);
+
float4 lightColor : register(c15);
+
float4 lightSpecular : register(c16);
+
+
const static float4 refractionWeights={1,1,2,0};
+
const static float4 layerBlue={1.0, 1.0, 1.0, 1.0};
+
+
struct InputVertex
+
{
+
float3 position: POSITION0;
+
float3 normal : NORMAL0;
+
float2 alpha  : TEXCOORD1;
+
};
+
+
struct OutputVertex
+
{
+
float4 clipPosition : POSITION;
+
float4 sPos        : TEXCOORD0;
+
float2 Wave0        : TEXCOORD1;
+
float2 Wave1        : TEXCOORD2;
+
float2 Wave2        : TEXCOORD3;
+
float2 Wave3        : TEXCOORD4;
+
float3 Eye          : TEXCOORD5;
+
float4 specular    : COLOR0; 
+
float4 colorTint    : COLOR1;
+
};
+
           
+
+
+
OutputVertex VertexMain( InputVertex inputVertex)
+
{
+
// Do Y-direction waves
+
// r0 = (x, y, z, t)
+
+
OutputVertex outputVertex;
+
+
float4 posAndTime;
+
posAndTime.xyz = inputVertex.position;
+
posAndTime.w = frameInfo.w;
+
+
float temp = dot(posAndTime, waveDataX);
+
float z = sin(temp) * waveDataX.z + inputVertex.position.z;
+
temp = dot(posAndTime, waveDataY);
+
posAndTime.z =  z + sin(temp) * waveDataY.z ;//-0.1f; //The -.01 is a fudge factor to remove some of the edge creep associated with moving the height of the wave. -tom
+
posAndTime.w = 1.0f;
+
+
outputVertex.clipPosition = mul( posAndTime, clipSpaceMatrix);
+
outputVertex.sPos = float4(0.5f*(outputVertex.clipPosition.ww - outputVertex.clipPosition.xy), outputVertex.clipPosition.ww);
+
+
float3 waveNormal = normalize(inputVertex.normal + float3(cos(temp)*waveDataHelper.xy, 0));
+
float3 cameraSpaceNormal = normalize(mul(waveNormal, cameraSpaceMatrix));
+
float3 cameraSpacePosition = mul( posAndTime, cameraSpaceMatrix);
+
float3 viewVector = normalize(-cameraSpacePosition);
+
+
float3 halfVector = normalize(viewVector + lightDirection);
+
outputVertex.specular = lightSpecular*pow(dot(cameraSpaceNormal, halfVector), 50)*nightColor*lightColor*0.5;
+
+
+
float2 fTranslation=float2(fmod(frameInfo.w, 100)*0.005, fmod(frameInfo.w, 100)*0.005);
+
float2 vTexCoords = posAndTime.xy*0.05;
+
               
+
// Output bump layers texture coordinates   
+
float fSinTranslation=sin(fTranslation*100)*0.005;
+
float2 vTranslation0=fTranslation+fSinTranslation;
+
float2 vTranslation1=fTranslation-fSinTranslation;
+
float2 vTranslation2=fTranslation;
+
               
+
// Scale texture coordinates to get mix of low/high frequency details
+
outputVertex.Wave0.xy = vTexCoords.xy*0.01+fTranslation*2.0;
+
outputVertex.Wave1.xy = vTexCoords.xy+fTranslation*2.5;
+
outputVertex.Wave2.xy = vTexCoords.xy+fTranslation*-2.3;
+
outputVertex.Wave3.xy = vTexCoords.xy*0.1+fTranslation*1.5;               
+
                                   
+
// compute binormal
+
float3 binormal = normalize(cross(waveNormal, float3(1.0f, 0.0f, 0.0f)));            
+
float3 tangent = normalize(cross(binormal, waveNormal));
+
           
+
// tangent space matrix
+
float3x3 objToTangentSpace = float3x3(tangent, binormal, waveNormal);
+
           
+
float3 viewVectorInObjSpace = mul(viewVector, (float3x3)cameraToGeomMatrix);
+
           
+
outputVertex.Eye.xyz = mul(objToTangentSpace, viewVectorInObjSpace);
+
outputVertex.colorTint = waterTint;
+
outputVertex.colorTint.a = inputVertex.alpha.xxxx;
+
// outputVertex.color = waterTint.xxxx;
+
+
return(outputVertex);
+
}
+
+
endShaderSource 
+
end # shaderProgram
+
+
shaderProgram -target pixelProgram -method compile -version 2_0             
+
shaderSource                           
+
sampler reflect; 
+
sampler bump;         
+
struct cInputPixel
+
{             
+
float4 sPos        : TEXCOORD0;             
+
float2 Wave0        : TEXCOORD1;
+
float2 Wave1        : TEXCOORD2;
+
float2 Wave2        : TEXCOORD3;
+
float2 Wave3        : TEXCOORD4;
+
float3 Eye          : TEXCOORD5;
+
float4 specular    : COLOR0;
+
float4 colorTint    : COLOR1;
+
};
+
           
+
float Fresnel(float NdotL, float fresnelBias, float fresnelPow, float facing)
+
{             
+
return max(fresnelBias + (1.0f - fresnelBias)*pow(facing, fresnelPow), 0.0);
+
}
+
           
+
float4 PixelMain(cInputPixel pi) : COLOR
+
{       
+
float3 vEye = normalize(pi.Eye);
+
 
+
// Get bump layers
+
float3 vBumpTexA = tex2D(bump, pi.Wave0.xy).xyz;
+
float3 vBumpTexB = tex2D(bump, pi.Wave1.xy).xyz;
+
float3 vBumpTexC = tex2D(bump, pi.Wave2.xy).xyz;
+
float3 vBumpTexD = tex2D(bump, pi.Wave3.xy).xyz;
+
               
+
// Average bump layers
+
float3 vBumpTex=normalize(2.0 * (vBumpTexA.xyz + vBumpTexB.xyz + vBumpTexC.xyz + vBumpTexD.xyz)-4.0);
+
               
+
// Apply individual bump scale for refraction and reflection               
+
float3 vReflBump = vBumpTex.xyz ;
+
float4 vReflection = tex2Dproj(reflect, pi.sPos + float4(vReflBump.xy, 0.0f, 0.0f));//*0.001 + float4(2.0*vBumpTexD-1.0f.xxx, 1);
+
             
+
// Compute Fresnel term
+
float NdotL = max(dot(vEye, vReflBump), 0);
+
float facing = (1.0 - NdotL);
+
float fresnel = Fresnel(NdotL, 0.1, 0.5, facing);
+
         
+
vReflection.a = fresnel * 0.5;
+
+
return saturate(vReflection + pi.colorTint);
+
}
+
endShaderSource
+
end                                                   
+
     
+
sampler reflect
+
texture "OceanReflection"
+
textureAddressing clamp clamp
+
end
+
     
+
sampler bump
+
texture "poolShape-body-bump"
+
textureAddressing tile tile
+
end 
+
           
+
end # end pass
+
end
+
enddef
+
 
+
define LotSkirtWater()
+
material     
+
create DetermineHardwareSupport()
+
 
+
if ($useHWShader2Path)
+
create LotSkirtPSWater()
+
else
+
 
+
shader -layer $nhoodWaterLayer
+
validateRenderShaderContext -vertexFormat  position      0 required
+
validateRenderShaderContext -vertexFormat  normal        0 required
+
validateRenderShaderContext -vertexFormat  texcoord      0 required
+
viewerRenderTypePred viewerRenderType
+
           
+
pass -fixedFunction
+
   
+
alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
colorScalar $lotSkirtWaterReflColour 0.50
+
depthTest true -enableDepthWrite false                       
+
   
+
#tring to remove warble I think it may be caused by depth bias.
+
#ffDepthOffset -2
+
   
+
stage
+
ffTextureCoordsSource fromPosition
+
ffTextureMatrix -cameraToClip -scalev ((-0.5 * $ratioW), (-0.5 * $ratioH)) -trans (0.5, 0.5)
+
textureAddressing clamp clamp
+
texture "ScreenReflection"
+
       
+
textureBlend multiply(texture colorScalar) multiply(diffuse colorScalar)
+
end               
+
               
+
end
+
end   
+
endif
+
  end
+
enddef
+
 
+
define LotSkirtWaterNoReflection()
+
  material
+
      # fallback: no reflection.
+
      shader -layer ($nhoodWaterLayer)
+
        viewerRenderTypePred viewerRenderType
+
       
+
        create DetermineHardwareSupport()
+
       
+
        pass -fixedFunction
+
  # For now, we are diabling the lighting since we simply want to use the vertex colors.
+
  create LightingStatesNoStdLightsParam(false true)
+
  alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
 
+
            colorScalar (.4, .6, .9, .4)     
+
           
+
            #tring to remove warble I think it may be caused by depth bias.
+
            #ffDepthOffset -2                             
+
           
+
            fillmode $stdMatFillMode
+
            stage
+
              #texture reflectionoutdoorwater-envcube
+
              if ($cubeMapSupport)
+
                  texture $skyboxCubeMap
+
                  textureMIPFilterHint disabled
+
 
+
                  ffTextureCoordsSource fromReflectionVector
+
                  ffTextureMatrix -orientCameraToGlobal
+
 
+
                  textureAddressing clamp clamp clamp
+
                  textureBlend multiply(texture colorScalar) select(colorScalar)
+
              else
+
                  textureBlend select(colorScalar) multiply(diffuse colorScalar)
+
              endif
+
            end 
+
        end 
+
      end
+
  end             
+
enddef
+
 
+
materialDefinition lotSkirtSea
+
  setDefinition LotSkirtWater 
+
  addParam stdMatLightingEnabled false
+
  addParam stdMatLayer 0
+
 
+
  addParam stdMatDiffCoef (1, 1, 1) 
+
 
+
  addParam wmReflectionTexture swimming_pool-envcube
+
 
+
  addParam wmTransparency 0.4
+
 
+
  addParam wmXSpeed        3
+
  addParam wmXRepeat      5
+
  addParam wmXWaveHeight  0.001
+
 
+
  addParam wmYSpeed        3
+
  addParam wmYRepeat      6
+
  addParam wmYWaveHeight  0.001
+
 
+
end
+
  
materialDefinition lotSkirtSeaNoReflection
+
materialDefinition transparent_mirror_reflection
   setDefinition LotSkirtWaterNoReflection 
+
   setDefinition TransparentMirrorReflection
 
end
 
end

Latest revision as of 00: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