Difference between revisions of "TEST-STRCMP4CODES"

From SimsWiki
Jump to: navigation, search
 
(12 intermediate revisions by one user not shown)
Line 1: Line 1:
 
+
define TransparentMirrorReflection()
 
+
  material
# ==============================================================================
+
      if (viewerRenderType = $kRenderTypeShadow)
 
+
        create StandardShaderShadow()
setf swvsWaterlineShift -0.50
+
      else
 
+
        if (viewerRenderType = $kRenderTypeThumbnail)
 
+
            create TransparentBlankMirrorMaterial($kRenderTypeThumbnail)
define NeighborhoodTerrainPrepWorkSWVS()
+
        else           
 
+
            if (not $mirrorReflectionsEnabled)
# this material does nothing but prep the z-buffer, and render black.
+
              set currentType (viewerRenderType)
 
+
              create TransparentBlankMirrorMaterial($currentType)
pass
+
            else
 
+
              create TransparentMirrorReflectionMaterial()
shaderProgram -target vertexProgram -method link
+
            endif           
 
+
        endif       
create BindsForSoftwareVSTransforms(false false)
+
      endif
shaderFragment TransformPositionRigidNoLighting2_x
+
  end
shaderFragment NoLighting2_x
+
end
+
+
colorScalar (0.0, 0.0, 0.0, 1.0)
+
     
+
stage
+
textureBlend select(colorScalar) select(colorScalar)
+
end
+
end
+
+
 
enddef
 
enddef
  
 
+
define TransparentBlankMirrorMaterial(renderType)
# ==============================================================================
+
      shader
# Used for those triangles in the canvas which are partially under water.
+
        validateRenderShaderContext -viewerRenderType  &renderType
#
+
       
define NeighborhoodWaterlineStraddleSWVS()
+
        pass            
 
+
            shaderProgram -target vertexProgram -method assemble
    vertexFormatPred position      0 true
+
              bindConstants 0 -bindingID geomToClip -constantCount 4
    vertexFormatPred normal        0 true
+
              shaderSource
    vertexFormatPred texcoord      0 true
+
                  vs_1_1
    viewerRenderTypePred $kRenderTypeReflection
+
                  dcl_position v0
 
+
                  m4x4 oPos, v0, c0
pass
+
              endShaderSource
shaderProgram -target vertexProgram -method link
+
            end
create BindsForSoftwareVSTransforms(false false)
+
           
bindConstants 11 -bindingID immediateData -data (0,0, 1.0/$waterHeight , -0.25) -constantType float
+
            colorScalar (0,0,0) 0.5
create TransformFragments(false false true false 0 0 false 2_x)
+
            stage
shaderFragment TerrainWaterMaskTexGenUVZero2_x
+
              textureBlend select(colorScalar) select(colorScalar)
end
+
            end          
+
        end
alphaBlend srcFactor(one) add dstFactor(srcAlpha)
+
      end     
cullmode none # so that reflections don't "creep under" edge of terrain
+
#colorScalar (0.0, 1.0, 0.1, 0.0)
+
 
+
#alphaTest true 128
+
#alphaTestFunction acceptIfGreater
+
 
+
depthTest true -enableDepthWrite true
+
depthTestFunction accept
+
+
stage
+
# above water -- clip by using depth-based 0/1 texture.
+
texture blackWhite
+
textureAddressing clamp clamp
+
textureFilterHint point point
+
textureMIPFilterHint disabled
+
         
+
textureBlend select(texture) select(texture)
+
end  
+
 
+
end
+
+
+
 
enddef
 
enddef
  
 +
define TransparentMirrorReflectionMaterial()
 +
     
 +
      shader -layer -9998  # this material must render first
 +
        validateRenderShaderContext -viewerRenderType $kRenderTypeMirror  # reflection render
  
 +
        pass -renderEachFrame
 +
            renderTarget $reflectionRenderTarget -setViewport viewportFromParentRenderContext
  
# used to render black on the straddle piece, so other passes can plop stuff on top.
+
            depthTest true -enableDepthWrite true
define NeighborhoodWaterlineStraddleStandardCameraSWVS()
+
  
 +
            applyStencilStateForOverlappingReflections
  
pass
+
            alphaBlend srcFactor(zero) add dstFactor(one)
shaderProgram -target vertexProgram -method link
+
create BindsForSoftwareVSTransforms(false false)
+
shaderFragment TransformPositionRigidNoLighting2_x
+
shaderFragment NoLighting2_x
+
end
+
+
#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
+
            cullmode none
textureBlend select(colorScalar) select(colorScalar)
+
end
+
  
end
+
            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
enddef
+
        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
# Material for terrain geometry that is partially or completely under water.
+
              textureTransformType vector3 homogeneous
define NeighborhoodUnderWaterTerrainSWVS()
+
              textureAddressing clamp clamp
 
+
              texture $reflectionRenderTarget
 
+
              textureBlend select(texture) select(colorScalar)
pass
+
            end
+
                     
shaderProgram -target vertexProgram -method assemble
+
        end
create BindsForSoftwareVSTransforms(false false)
+
      end
+
     
setf normalizerScale (1.0/($waterHeight))
+
      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
  
setv4 texgenData ($normalizerScale, 1, $waterHeight, -0.5)
+
            alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
+
            depthTest true -enableDepthWrite false
bindConstants 11 -bindingID immediateData -data $texgenData
+
            colorScalar (0,0,0) 0.25
+
shaderSource
+
vs_1_1
+
+
def c12,0, 0.5 ,1,2
+
dcl_position v0
+
+
m4x4 oPos, v0, c4    ; geom to clip
+
+
mad r0.xyz, v0.zzz, -c11.xxx, c11.yy    ; normalize this from 0 to 1.
+
+
mov oT0.xy, r0
+
+
add oT1.xy, r0, -c11.ww    ; shift by 0.5, so that the 'clip texture', ends up at the water level.
+
  
mov oD0, c12.y
+
            stage
endShaderSource
+
              textureAddressing clamp clamp
+
              texture $reflectionRenderTarget
end
+
               textureBlend select(texture) select(colorScalar)
+
            end
alphaBlend srcFactor(zero) add dstFactor(srcColor)
+
           
+
cullmode none # so that reflections don't "creep under" edge of terrain
+
+
alphaTest true 128
+
alphaTestFunction acceptIfGreater
+
 
+
# apply depth-based gradient texture to terrain that is under water.
+
 
+
+
stage
+
texture $waterGradientTexture
+
textureAddressing clamp clamp
+
textureBlend multiply(diffuse texture) select(outRegister)
+
end
+
 
+
 
+
stage
+
texture blackWhite
+
textureAddressing clamp clamp
+
textureFilterHint point point
+
textureMIPFilterHint disabled
+
textureBlend select(outRegister) select(texture)
+
end
+
+
#<
+
stage
+
textureBlend select(diffuse) select(diffuse)
+
end
+
#>
+
 
+
end
+
+
enddef
+
 
+
# ==============================================================================
+
# renders the terrain colors. The geometry is a patchwork 'quilt' of sorts, with overlapping edges
+
# this overlapping is handled by alpha blending
+
 
+
 
+
define NeighborhoodMainTerrainShaderSWVS()
+
 
+
 
+
pass
+
  if (not $isImposter)
+
  shaderProgram -target vertexProgram -method link
+
  create BindsForSoftwareVSTransforms(false false)
+
 
+
  setv4 texgenData (1.0/$nhoodPaintTextureScale, 1.0/$nhoodPaintTextureScale, $alphaMapScaleU, $alphaMapScaleV )
+
 
+
  bindConstants 11 -bindingID immediateData -data  $texgenData -constantType float
+
  # no morphs, skins or normals
+
  shaderFragment TransformPositionRigidNoLighting2_x
+
  shaderFragment TerrainPaintTexGen2_x
+
  end
+
else
+
  shaderProgram -target vertexProgram -method assemble
+
  create BindsForSoftwareVSTransforms(false false)
+
 
+
  setv4 texgenData (1.0/$nhoodPaintTextureScale, 1.0/$nhoodPaintTextureScale, $alphaMapScaleU, $alphaMapScaleV )
+
  bindConstants 11 -bindingID immediateData -data $texgenData
+
 
+
  shaderSource
+
  vs_1_1
+
 
+
  def c12,0, 0.5 ,1,2
+
  def c13, 0.0076923, 0.25, 0, 0
+
  dcl_position v0  
+
  m4x4 oPos, v0, c4
+
                             
+
               mov oT0.xy, c13.yy
+
              mul oT1.xy, c11.xy, v0.xy
+
            endShaderSource
+
  end
+
endif
+
+
alphaBlend srcFactor(srcAlpha) add dstFactor(one)
+
cullmode none # so that reflections don't "creep under" edge of terrain
+
                   
+
#colorScalar $nhoodSunDirBiased
+
       
+
depthTest true -enableDepthWrite false
+
depthTestFunction acceptIfEqual
+
+
colorScalar 1.0,1.0,1.0,1.0
+
+
stage
+
texture $alphaMap
+
textureAddressing clamp clamp
+
textureBlend select(colorScalar) select(texture)
+
end
+
+
stage
+
texture $paintTexture
+
textureAddressing tile tile
+
textureBlend multiply(texture outRegister) select(outRegister)
+
end  
+
end
+
+
enddef
+
 
+
 
+
 
+
 
+
# ==============================================================================
+
 
+
define NeighborhoodWaterSWVS()
+
shader -layer (($waterLayer) * 18 + 17)
+
+
validateRenderShaderContext -viewerRenderType viewerRenderType
+
+
pass
+
+
fillmode $stdMatFillMode
+
+
alphaBlend srcFactor(one) add dstFactor(srcAlpha)
+
+
shaderProgram -target vertexProgram -method assemble
+
create BindsForSoftwareVSTransforms(false false)
+
shaderSource
+
+
vs_1_1
+
+
def c50, 0, 0.5,1,2
+
def c11, 0,0,1,0
+
def c12, 0.2,0.5,0.7, 0.1
+
dcl_position v0
+
dcl_normal v1
+
m4x3 r0.xyz, v0, c8  ; to camera space
+
m3x3 r3.xyz, v1, c8
+
+
mov r0.w, c50.z
+
m4x4 oPos, r0, c0    ; camera to clip
+
+
dp3 r1.w, r0, r0
+
rsq r1, r1.w
+
mul r1, r1.w, r0 ; r1= view vector.
+
+
dp3 r2, r3, -r1 ; view dot normal
+
max r2, r2, c50.x
+
+
add r3, c50.z, -r2
+
+
mul oD0.xyz, r3, c12
+
mov oD0.w, r2
+
+
endShaderSource
+
end
+
+
+
stage
+
textureBlend select(diffuse) select(diffuse)
+
end
+
end
+
+
+
end
+
enddef
+
 
+
 
+
# ==============================================================================
+
# The layer ID for this should be lower than "waterLayer" 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 NeighborhoodWaterEdgeSWS()
+
 
+
pass
+
 
+
alphaBlend srcFactor(one) add dstFactor(zero)
+
cullmode none # we want to render the father side of the water edge also
+
           
+
stage
+
texture $waterEdgeTexture
+
textureAddressing tile tile
+
#ffTextureMatrix -scalev (1/$waterEdgeTextureScale, 1/$waterEdgeTextureScale)
+
#ffTextureCoordsSource 0
+
textureBlend select(texture) select(diffuse)
+
end
+
end
+
+
enddef
+
 
+
# ==============================================================================
+
# a terrain edge is a 'slice' or 'cover plate' for the terrain when viewed edge-on, since the terrain is not infinite in all directions.
+
 
+
define NeighborhoodTerrainEdgeSWVS()
+
 
+
pass
+
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
 
enddef
  
 +
#---------------------------------------------------------------------------------------------------------------#
  
#==============================================================================
+
materialDefinition transparent_mirror_reflection
# the last pass that applies the terrain lightmap across the neighborhood, but not underwater
+
  setDefinition TransparentMirrorReflection
 
+
end
 
+
define NeighborhoodTerrainLightingSWVS()
+
 
+
pass
+
shaderProgram -target vertexProgram -method assemble
+
create BindsForSoftwareVSTransforms(false false)
+
 
+
setf textureScale (1.0/($waterHeight))
+
setv4 texgenData ($textureScale, 1, $waterHeight, -0.5)
+
bindConstants 11 -bindingID immediateData -data $texgenData
+
+
shaderSource
+
vs_1_1
+
+
def c12,0, 0.5 ,1,2
+
def c13, 0.0078125, 0.00078125, 0, 0
+
dcl_position v0
+
        endShaderSource
+
       
+
        if (not $isImposter)                 
+
shaderSource  "dcl_texcoord v1"
+
        endif
+
 
+
        shaderSource
+
m4x4 oPos, v0, c4
+
+
mad r0.xyz, v0.zzz, -c11.xxx, c11.yy    ; normalize this from 0 to 1.
+
+
add oT0.xy, r0, -c11.ww    ; shift by 0.5, so that the 'clip texture', ends up at the water level.
+
+
  endShaderSource
+
 
+
        if ($isImposter)           
+
            shaderSource               
+
              mul oT1.xy, v0.xy, c13.yy
+
            endShaderSource
+
        else
+
            shaderSource "mul oT1.xy, v1, c13.xx"
+
        endif
+
+
end
+
+
# setup for SRC * DEST, standard lightmap.
+
+
alphaBlend srcFactor(destColor) add dstFactor(zero)
+
+
alphaTest true 128
+
alphaTestFunction acceptIfGreater
+
 
+
fillmode $stdMatFillMode
+
+
# not really important to do this?
+
+
depthTest true -enableDepthWrite false
+
      depthTestFunction acceptIfEqual
+
+
colorScalar (1,1,1,1)
+
 
+
stage
+
# if below water -- get black from this texture.
+
texture blackWhite
+
textureAddressing clamp clamp
+
textureFilterHint point point
+
textureMIPFilterHint disabled
+
textureBlend select(texture:alphaReplicate) select(texture:invert)
+
                 
+
end
+
           
+
stage
+
texture "nhoodLightMap"
+
textureBlend multiply(texture outRegister:alphaReplicate) select(outRegister)
+
end 
+
 
+
end
+
 
+
 
+
enddef
+
 
+
 
+
# ==============================================================================
+
# for rendering Lots, and when the lot creation tool is being used, this material renders the glowing-gridded rectangles
+
 
+
define NeighborhoodTerrainHighlightSWVS()
+
 
+
pass
+
+
shaderProgram -target vertexProgram -method link
+
create BindsForSoftwareVSTransforms(false false)
+
#setv4 texgenData (1,  1, 0.0, 0.0)
+
+
#bindConstants 11 -bindingID immediateData -data $texgenData
+
+
shaderFragment TransformPositionRigidNoLighting2_x
+
shaderFragment NoTextureMagic2_x
+
+
end
+
+
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   
+
+
enddef
+

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