|
|
| (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 |