Difference between revisions of "ShaderNeighborhoodswvs"
From SimsWiki
(EP0-TS2) |
(EP6-BV) |
||
(5 intermediate revisions by one user not shown) | |||
Line 1: | Line 1: | ||
<pre> | <pre> | ||
− | + | EP6-BV | |
0xCD7FE87A | 0xCD7FE87A | ||
0x1C0532FA | 0x1C0532FA | ||
Line 7: | Line 7: | ||
0xFF226023 | 0xFF226023 | ||
# neighborhoodswvs | # neighborhoodswvs | ||
− | |||
# ============================================================================== | # ============================================================================== | ||
Line 187: | Line 186: | ||
pass | 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 | |
− | end | + | 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) | alphaBlend srcFactor(srcAlpha) add dstFactor(one) | ||
Line 229: | Line 249: | ||
define NeighborhoodWaterSWVS() | define NeighborhoodWaterSWVS() | ||
− | shader -layer (($waterLayer) * | + | shader -layer (($waterLayer) * 18 + 17) |
validateRenderShaderContext -viewerRenderType viewerRenderType | validateRenderShaderContext -viewerRenderType viewerRenderType | ||
Line 339: | Line 359: | ||
setf textureScale (1.0/($waterHeight)) | setf textureScale (1.0/($waterHeight)) | ||
setv4 texgenData ($textureScale, 1, $waterHeight, -0.5) | setv4 texgenData ($textureScale, 1, $waterHeight, -0.5) | ||
− | bindConstants 11 -bindingID immediateData -data $texgenData | + | bindConstants 11 -bindingID immediateData -data $texgenData |
shaderSource | shaderSource | ||
Line 345: | Line 365: | ||
def c12,0, 0.5 ,1,2 | def c12,0, 0.5 ,1,2 | ||
− | def c13, 0.0078125, 0. | + | def c13, 0.0078125, 0.00078125, 0, 0 |
dcl_position v0 | dcl_position v0 | ||
− | dcl_texcoord v1 | + | endShaderSource |
− | + | ||
+ | if (not $isImposter) | ||
+ | shaderSource "dcl_texcoord v1" | ||
+ | endif | ||
+ | |||
+ | shaderSource | ||
m4x4 oPos, v0, c4 | m4x4 oPos, v0, c4 | ||
Line 354: | Line 379: | ||
add oT0.xy, r0, -c11.ww ; shift by 0.5, so that the 'clip texture', ends up at the water level. | 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 | end | ||
Latest revision as of 06:41, 9 September 2007
EP6-BV 0xCD7FE87A 0x1C0532FA 0x9C954B3C 0xFF226023 # neighborhoodswvs # ============================================================================== setf swvsWaterlineShift -0.50 define NeighborhoodTerrainPrepWorkSWVS() # this material does nothing but prep the z-buffer, and render black. pass shaderProgram -target vertexProgram -method link create BindsForSoftwareVSTransforms(false false) shaderFragment TransformPositionRigidNoLighting2_x shaderFragment NoLighting2_x end colorScalar (0.0, 0.0, 0.0, 1.0) stage textureBlend select(colorScalar) select(colorScalar) end end enddef # ============================================================================== # Used for those triangles in the canvas which are partially under water. # define NeighborhoodWaterlineStraddleSWVS() vertexFormatPred position 0 true vertexFormatPred normal 0 true vertexFormatPred texcoord 0 true viewerRenderTypePred $kRenderTypeReflection pass shaderProgram -target vertexProgram -method link create BindsForSoftwareVSTransforms(false false) bindConstants 11 -bindingID immediateData -data (0,0, 1.0/$waterHeight , -0.25) -constantType float create TransformFragments(false false true false 0 0 false 2_x) shaderFragment TerrainWaterMaskTexGenUVZero2_x end alphaBlend srcFactor(one) add dstFactor(srcAlpha) 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 # used to render black on the straddle piece, so other passes can plop stuff on top. define NeighborhoodWaterlineStraddleStandardCameraSWVS() pass 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 textureBlend select(colorScalar) select(colorScalar) end end enddef # ============================================================================== # Material for terrain geometry that is partially or completely under water. define NeighborhoodUnderWaterTerrainSWVS() pass shaderProgram -target vertexProgram -method assemble create BindsForSoftwareVSTransforms(false false) setf normalizerScale (1.0/($waterHeight)) setv4 texgenData ($normalizerScale, 1, $waterHeight, -0.5) bindConstants 11 -bindingID immediateData -data $texgenData 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 endShaderSource 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 enddef #============================================================================== # the last pass that applies the terrain lightmap across the neighborhood, but not underwater 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