ShaderRoof
From SimsWiki
EP5-SS 0xCD7FE87A 0x1C0532FA 0x9B41704F 0xFF5D60B5 # roof # # roof material definitions. # # material for roof preview when they're displayed define RoofPreviewMaterial() material shader -layer 9999 vertexFormatPred position 0 true vertexFormatPred normal 0 true vertexFormatPred blendindices 0 false vertexFormatPred targetindices 0 false pass -fixedFunction colorScalar (0.5, 0.4, 0.4, 1.0) create LightingStatesNoStdLights() depthTest true -enableDepthWrite true alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) stage textureBlend select(colorScalar) select(colorScalar) end end pass -fixedFunction create LightingStatesNoStdLights() fillmode wireframe cullmode none depthTest true -enableDepthWrite false colorScalar (0, 0, 0) stage textureBlend select(colorScalar) select(colorScalar) end end end end enddef define RoofPreviewMaterialBack() material shader -layer 9999 vertexFormatPred position 0 true vertexFormatPred normal 0 true vertexFormatPred blendindices 0 false vertexFormatPred targetindices 0 false pass -fixedFunction colorScalar (0.25, 0.1, 0.1, 1.0) create LightingStatesNoStdLights() depthTest true -enableDepthWrite true alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) stage textureBlend select(colorScalar) select(colorScalar) end end end end enddef define RoofPreviewMaterialStrip() material shader -layer 9999 vertexFormatPred position 0 true vertexFormatPred blendindices 0 false vertexFormatPred targetindices 0 false pass -fixedFunction colorScalar (1.0, 1.0, 1.0, 1.0) create LightingStatesNoStdLights() depthTest true -enableDepthWrite false stage textureBlend select(colorScalar) select(colorScalar) end end end end enddef define RoofPreviewMaterialUpperStrip() material shader -layer 9999 vertexFormatPred position 0 true vertexFormatPred blendindices 0 false vertexFormatPred targetindices 0 false pass -fixedFunction colorScalar (1.0, 0.0, 0.0, 1.0) create LightingStatesNoStdLights() depthTest true -enableDepthWrite false stage textureBlend select(colorScalar) select(colorScalar) end end end end enddef define RoofPreviewMaterialTopBoundary() material shader -layer 9999 vertexFormatPred position 0 true vertexFormatPred normal 0 true vertexFormatPred blendindices 0 false vertexFormatPred targetindices 0 false pass -fixedFunction colorScalar (0.4, 0, 0.1, 1.0) create LightingStatesNoStdLights() depthTest true -enableDepthWrite true alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) stage textureBlend select(colorScalar) select(colorScalar) end end pass -fixedFunction create LightingStatesNoStdLights() fillmode wireframe depthTest true -enableDepthWrite false colorScalar (0, 0, 0) stage textureBlend select(colorScalar) select(colorScalar) end end end end enddef define RoofBumps() material shader -layer 0 validateRenderShaderContext -vertexFormat position 0 required validateRenderShaderContext -vertexFormat normal 0 required validateRenderShaderContext -vertexFormat texcoord 0 required pass shaderProgram -target vertexProgram -method compile -version 2_0 bindConstants 0 -bindingID geomToClip -constantCount 4 bindConstants 4 -bindingID geomToCamera -constantCount 3 bindConstants 7 -bindingID cameraToGeom -constantCount 3 bindConstants 10 -bindingID allStandardLightData -constantCount 4 -constantType float bindConstants 14 -bindingID immediateData -data $stdMatDiffCoef bindConstants 15 -bindingID ambientLight -constantCount 1 -constantType float bindConstants 18 -bindingID allStandardLightData2 -constantCount 32 shaderSource float4x4 modelviewproj : register(c0); float4x3 modelview : register(c4); float4x3 modelviewInv : register(c7); // light direction float4 lightDir0 : register(c18); float4 lightDir1 : register(c19); float4 lightDir2 : register(c20); // light colors float4 lightCol0 : register(c26); float4 lightCol1 : register(c27); float4 lightCol2 : register(c28); float4 color : register(c14); float4 ambient : register(c15); struct a2v { float4 pos : POSITION; float3 normal : NORMAL; float2 txcoord : TEXCOORD0; float2 tangent : TEXCOORD1; }; struct v2f { float4 hpos : POSITION; float4 color : COLOR0; float4 ambient : COLOR1; float2 txcoord : TEXCOORD0; float3 lightDir0: TEXCOORD1; float3 lightDir1: TEXCOORD2; float3 lightDir2: TEXCOORD3; float3 lightCol0: TEXCOORD4; float3 lightCol1: TEXCOORD5; float3 lightCol2: TEXCOORD6; float3 normal : TEXCOORD7; }; v2f VertexMain(a2v IN) { v2f OUT; // vertex position in object space float4 pos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); // vertex position in clip space OUT.hpos = mul(pos, modelviewproj); float3 tangent = float3(IN.tangent.x, IN.tangent.y, 0); // compute binormal float3 binormal = normalize(cross(IN.normal, tangent)); // tangent space matrix float3x3 tbn = float3x3(tangent, binormal, IN.normal); // light direction in object space float3 lt0 = mul(lightDir0, (float3x3)modelviewInv); float3 lt1 = mul(lightDir1, (float3x3)modelviewInv); float3 lt2 = mul(lightDir2, (float3x3)modelviewInv); // light 0 direction in tangent space OUT.lightDir0 = normalize(mul(tbn, lt0)); OUT.lightDir1 = normalize(mul(tbn, lt1)); OUT.lightDir2 = normalize(mul(tbn, lt2)); OUT.lightCol0 = lightCol0; OUT.lightCol1 = lightCol1; OUT.lightCol2 = lightCol2; // copy texture coordinates OUT.txcoord=IN.txcoord.xy; OUT.color = color; OUT.color.a = 1; OUT.ambient = ambient; OUT.normal = IN.normal; return OUT; } endShaderSource end # end shader program shaderProgram -target pixelProgram -method compile -version 1_4 #-disassemble "c:\sims2ep3\hlslPS.txt" shaderSource sampler texmap; sampler normmap; sampler roofnoise; struct v2f { float4 hpos : POSITION; float4 color : COLOR0; float4 ambient : COLOR1; float2 txcoord : TEXCOORD0; float3 lightDir0: TEXCOORD1; float3 lightDir1: TEXCOORD2; float3 lightDir2: TEXCOORD3; float3 lightCol0: TEXCOORD4; float3 lightCol1: TEXCOORD5; //float3 lightCol2: TEXCOORD6; //float3 normal : TEXCOORD7; }; float4 PixelMain(v2f pi) : COLOR { // normal map float4 normal = tex2D(normmap, pi.txcoord); //bump.xyz = 4.0 * (bump.xyz - (0.5).xxx); // bump.z = pi.normal.z; //float3 normal = normalize(bump); // color map float4 color = tex2D(texmap, pi.txcoord); float diff0 = saturate(dot(pi.lightDir0, normal.xyz)); //float diff1 = saturate(dot(pi.lightDir1, normal.xyz)); //float diff2 = saturate(dot(pi.lightDir2, normal.xyz)); float4 finalColor; finalColor.rgb = diff0;//(diff0*pi.lightCol0 + diff1*pi.lightCol1 + diff2 + pi.ambient)*pi.color.rgb*color.rgb; finalColor.a = 1.0; return finalColor; } endShaderSource end sampler normmap texture "roof-manor-test-bump"#$stdMatNormalMapTextureName textureAddressing clamp clamp clamp end sampler 1#texmap texture $stdMatBaseTextureName textureAddressing clamp clamp clamp end end # end pass end #end shader end # end material enddef define RoofSnow() material shader -layer 2 validateRenderShaderContext -vertexFormat position 0 required validateRenderShaderContext -vertexFormat normal 0 required validateRenderShaderContext -vertexFormat texcoord 0 required validateRenderShaderContext -vertexFormat texcoord 1 required pass alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) cullmode $stdMatCullMode #fillmode wireframe shaderProgram -target vertexProgram -method compile -version 2_0 bindConstants 0 -bindingID geomToClip -constantCount 4 bindConstants 4 -bindingID geomToCamera -constantCount 3 bindConstants 7 -bindingID cameraToGeom -constantCount 3 bindConstants 15 -bindingID ambientLight -constantCount 1 -constantType float bindConstants 18 -bindingID allStandardLightData -constantCount 4 -constantType float shaderSource float4x4 modelviewproj : register(c0); float4x3 modelview : register(c4); float4x3 modelviewInv : register(c7); // light direction float4 lightDir0 : register(c18); float4 ambient : register(c15); struct a2v { float4 pos : POSITION; float3 normal : NORMAL; float2 tangent : TEXCOORD0; }; struct v2f { float4 hpos : POSITION; float4 color : TEXCOORD0; float3 camNormal : TEXCOORD1; float3 lightDir : TEXCOORD2; float3 R : TEXCOORD3; float3 tanLightDir : TEXCOORD4; float2 bumpCoords : TEXCOORD5; }; v2f VertexMain(a2v IN) { v2f OUT; // vertex position in object space float4 pos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); float3 tangent = float3(IN.tangent.x, IN.tangent.y, 0); // compute binormal float3 binormal = normalize(cross(IN.normal, tangent)); // tangent space matrix float3x3 tbn = float3x3(tangent, binormal, IN.normal); // light direction in object space float3 lt0 = mul(lightDir0, (float3x3)modelviewInv); // light 0 direction in tangent space OUT.tanLightDir = normalize(mul(tbn, lt0)); OUT.bumpCoords = float2(IN.pos.x, IN.pos.y); // vertex position in clip space OUT.hpos = mul(pos, modelviewproj); // copy texture coordinates OUT.camNormal = mul(IN.normal, (float3x3)modelview); float3 cameraSpacePosition = mul( pos, modelview); float3 viewVector = normalize(cameraSpacePosition); OUT.R = reflect(viewVector, OUT.camNormal); OUT.color.xyz = tangent*0.5f.xxx + 0.5f.xxx;//ambient.xyz; OUT.color.w = 1.0; OUT.lightDir.xyz = lightDir0.xyz; return OUT; } endShaderSource end # end shader program shaderProgram -target pixelProgram -method compile -version 2_0 # -disassemble "c:\sims2ep3\hlslPS.txt" shaderSource struct v2f { float4 hpos : POSITION; float4 color : TEXCOORD0; float3 camNormal : TEXCOORD1; float3 lightDir : TEXCOORD2; float3 R : TEXCOORD3; float3 tanLightDir : TEXCOORD4; float2 bumpCoords : TEXCOORD5; }; float4 PixelMain(v2f pi) : COLOR { return pi.color; //return float4(0, 0, 0, 1) + 0.8*max(dot(pi.camNormal, pi.lightDir), 0).xxxx + pi.color; } endShaderSource end end # end pass end #end shader end # end material enddef define RoofSnowPS2() shaderProgram -target pixelProgram -method compile -version 2_0 # -disassemble "c:\sims2ep5\hlslPS.txt" bindConstants 0 -bindingID ambientLight -constantCount 1 -constantType float shaderSource float3 ambientLight : register(c0); sampler normmap; struct v2f { float4 hpos : POSITION; float4 color : COLOR0; float4 tanHalfAngle : TEXCOORD0; float3 lightColor : TEXCOORD1; float3 tanLightDir : TEXCOORD2; float2 bumpCoords : TEXCOORD3; }; float4 PixelMain(v2f pi) : COLOR { float4 normal0 = 2.0f * (tex2D(normmap, pi.bumpCoords) - 0.5f); float4 normal1 = 2.0f * (tex2D(normmap, pi.bumpCoords*0.4) - 0.5f); float4 normal = 0.5f*(normal0+normal1); float diffuse = saturate(dot(pi.tanLightDir, normal.xyz))*0.6f; return float4(float3(diffuse.xxx*float3(0.9,0.9,1) + ambientLight.xxx*0.8)*pi.lightColor.xyz, 1.0); } endShaderSource end enddef define RoofSnowPS1() shaderProgram -target pixelProgram -method compile -version 1_1 # -disassemble "c:\sims2ep5\hlslPS.txt" bindConstants 0 -bindingID ambientLight -constantCount 1 -constantType float shaderSource float3 ambientLight : register(c0); sampler normmap; struct v2f { float4 hpos : POSITION; float4 color : COLOR0; float4 tanHalfAngle : TEXCOORD0; float3 lightColor : TEXCOORD1; float3 tanLightDir : TEXCOORD2; float2 bumpCoords : TEXCOORD3; }; float4 PixelMain(v2f pi) : COLOR { float4 normal = 2.0f * (tex2D(normmap, pi.bumpCoords) - 0.5f); float diffuse = saturate(dot(pi.tanLightDir, normal.xyz))*0.57f; return float4(float3(diffuse.xxx*float3(0.85,0.85,1) + ambientLight.xxx)*pi.lightColor.xyz, 1.0); } endShaderSource end enddef define RoofSnow2() material shader -layer -2 validateRenderShaderContext -vertexFormat position 0 required validateRenderShaderContext -vertexFormat normal 0 required validateRenderShaderContext -vertexFormat texcoord 0 required validateRenderShaderContext -vertexFormat texcoord 1 required pass alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) cullmode $stdMatCullMode #fillmode wireframe shaderProgram -target vertexProgram -method compile -version 1_1 bindConstants 0 -bindingID geomToClip -constantCount 4 bindConstants 4 -bindingID geomToCamera -constantCount 3 bindConstants 7 -bindingID cameraToGeom -constantCount 3 bindConstants 15 -bindingID ambientLight -constantCount 1 -constantType float bindConstants 18 -bindingID allStandardLightData -constantCount 4 -constantType float if (tsIsDay) bindConstants 10 -bindingID immediateData -data (1, 1, 1, 1) else bindConstants 10 -bindingID immediateData -data (0.47, 0.47, 1.2, 1) endif shaderSource float4x4 modelviewproj : register(c0); float4x3 modelview : register(c4); float4x3 modelviewInv : register(c7); // light direction float4 lightDir0 : register(c18); float4 lightColor0 : register(c10); float4 ambient : register(c15); struct a2v { float4 pos : POSITION; float3 normal : NORMAL; float2 tangent : TEXCOORD0; float2 bumpcoord : TEXCOORD1; }; struct v2f { float4 hpos : POSITION; float4 color : COLOR0; float4 tanHalfAngle : TEXCOORD0; float3 lightColor : TEXCOORD1; float3 tanLightDir : TEXCOORD2; float2 bumpCoords : TEXCOORD3; }; v2f VertexMain(a2v IN) { v2f OUT; // vertex position in object space float4 pos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); float3 tangent = float3(IN.tangent.x, IN.tangent.y, 0); // compute binormal float3 binormal = normalize(cross(IN.normal, tangent)); // tangent space matrix float3x3 tbn = float3x3(tangent, binormal, IN.normal); // light direction in object space float3 lt0 = mul(lightDir0, (float3x3)modelviewInv); // light 0 direction in tangent space OUT.tanLightDir = normalize(mul(tbn, lt0)); OUT.bumpCoords = float2(IN.bumpcoord.x, IN.bumpcoord.y); // compute tangent space view vector // object space view point float3 viewPoint = mul(float4(0, 0, 0, 1), modelviewInv).xyz; float3 viewVecObj = normalize(viewPoint - IN.pos.xyz); // object space light float3 lightDirObj = normalize(mul(lightDir0, (float3x3)modelviewInv)); // half angle vector in object space float3 halfWayVector = normalize(lightDirObj + viewVecObj); // transform half angle vector to tangent space OUT.tanHalfAngle.xyz = normalize(mul(tbn, halfWayVector)); // specular shadowing term OUT.tanHalfAngle.w = max(dot(halfWayVector, IN.normal), 0); // vertex position in clip space OUT.hpos = mul(pos, modelviewproj); OUT.color.xyz = ambient.xyz; OUT.color.w = 1.0; OUT.lightColor = lightColor0.xyz; return OUT; } endShaderSource end # end shader program if ($useHWShader1Path) create RoofSnowPS1() else create RoofSnowPS2() endif sampler normmap texture "snow-ground-bump" textureAddressing tile tile end end # end pass end #end shader end # end material enddef materialDefinition RoofPreview setDefinition StandardMaterial addParam stdMatSpecPower 0 addParam stdMatDiffCoef (0.4, 0.385, 0.38) addParam stdMatBaseTextureName roof-manor addParam stdMatBaseTextureEnabled true addParam stdMatCullMode none end materialDefinition RoofUnder setDefinition StandardMaterial addParam stdMatSpecPower 0 addParam stdMatDiffCoef (0.8, 0.8, 0.8) addParam stdMatBaseTextureName roof-manor-under addParam stdMatBaseTextureEnabled true addParam stdMatCullMode none end materialDefinition RoofTrim setDefinition StandardMaterial addParam stdMatSpecPower 0 addParam stdMatDiffCoef (0.8, 0.8, 0.8) addParam stdMatBaseTextureName roof-manor-trim addParam stdMatBaseTextureEnabled true addParam stdMatCullMode none end materialDefinition RoofPreviewTopBoundary setDefinition RoofPreviewMaterialTopBoundary end define RoofTopMaterial() material shader -layer 0 seti snowLevel tsHasSnow seti rainLevel tsHasRain if ($rainLevel >= 1) pass -fixedFunction -modifiedEachFrameHint else pass -fixedFunction endif setb doSkinning false setb doMorphing false setb cutoutPass false create CommonStandardMaterialSetup() stage create StandardShaderTextureState(Base) textureBlend multiplyScale2(texture outRegister) multiply(texture outRegister) end if ($rainLevel >= 1) # first pass at roof rain stage stage ffTextureCoordsSource 0 texture "causticstiled" textureMatrixAnimation -targetType fixedFunction -atrans sawtooth .1 0 (0,1) (0,0) colorScalar (1.0, 0.98, 1.0, .9) textureAddressing tile tile textureBlend lerpColorScalarAlpha(outRegister texture) lerpColorScalarAlpha(colorScalar) end endif end if ($snowLevel = 1 and viewerRenderType != $kRenderTypeImposter) pass -fixedFunction alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) depthTest true -enableDepthWrite false depthTestFunction acceptIfLessOrEqual create LightingStates() colorScalar (0.25, 0.25, 0.35, 1) stage texture "snow-light-roof-pass1" ffTextureCoordsSource fromPosition ffTextureMatrix -cameraToGlobal -scalev (6, 6) -invert textureAddressing tile tile textureFilterHint bilinear bilinear textureBlend multiplyAdd(texture diffuse colorScalar) select(texture) end end endif end end enddef define RoofSnowShader() create DetermineHardwareSupport() if (viewerRenderType != $kRenderTypeImposter) if ($useHWShader1Path or $useHWShader2Path) create RoofSnow2() else create RoofSnowFF() endif else create Null() endif enddef define RoofSnowFF() material shader -layer 0 pass -fixedFunction create LightingStates() create AttenuatedMatCoef(1) depthTest true -enableDepthWrite true colorScalar (1.0, 0.98, 1.0, 1) stage textureBlend multiply(colorScalar diffuse) select(texture) end #end stage end end end enddef materialDefinition RoofSnowMaterial setDefinition RoofSnowShader addParam stdMatCullMode none end # texture, lit, normal mappedm, no specular materialDefinition RoofTop setDefinition RoofTopMaterial addParam stdMatSpecPower 0 addParam stdMatDiffCoef (0.4, 0.385, 0.38) addParam stdMatBaseTextureName roof-manor addParam stdMatBaseTextureEnabled true addParam stdMatBaseTextureAddressingU clamp addParam stdMatBaseTextureAddressingV clamp addParam stdMatBaseTextureAddressingW clamp addParam stdMatCullMode none end materialDefinition RoofEdges setDefinition StandardMaterial addParam stdMatSpecPower 0 addParam stdMatDiffCoef (0.8, 0.8, 0.8) addParam stdMatBaseTextureName roof-manor-edges addParam stdMatBaseTextureEnabled true addParam stdMatCullMode none end # texture, lit, normal mappedm, no specular materialDefinition RoofTopThumbnail setDefinition StandardMaterial addParam stdMatSpecPower 0 addParam stdMatDiffCoef (0.8, 0.75, 0.75) addParam stdMatBaseTextureName roof-manor addParam stdMatBaseTextureEnabled true addParam stdMatNormalMapTextureName roof-manor-bump addParam stdMatNormalMapTextureEnabled true end # texture, lit, normal mappedm, no specular # modify this material for roof highlights materialDefinition RoofTopHighlight setDefinition StandardMaterial addParam stdMatSpecPower 0 addParam stdMatDiffCoef (0.4, 0.385, 0.38) addParam stdMatBaseTextureName roof-redtile addParam stdMatBaseTextureEnabled true addParam stdMatNormalMapTextureName roof-redtile-bump addParam stdMatNormalMapTextureEnabled true addParam stdMatBaseTextureAddressingU clamp addParam stdMatBaseTextureAddressingV clamp addParam stdMatBaseTextureAddressingW clamp addParam stdMatNormalMapTextureAddressingU clamp addParam stdMatNormalMapTextureAddressingV clamp addParam stdMatNormalMapTextureAddressingW clamp end ############################################################## # Roofs custom # define RoofMaterialFF() material shader -layer $roofLayer pass -fixedFunction create LightingStates() create AttenuatedMatCoef(1) ffDepthOffset 2 depthTest true -enableDepthWrite false stage texture $stdMatBaseTextureName textureAddressing clamp clamp ffTextureCoordsSource 0 textureBlend multiply(texture diffuse) select(texture) end #end stage end #pass end #end shader end #end material enddef materialDefinition RoofMaterialStrips addParam stdMatBaseTextureName roof-manor addParam stdMatDiffCoef (0.4, 0.385, 0.38) addParam stdMatSpecPower 0 addParam stdMatEmissiveCoef 0,0,0 addParam stdMatSpecCoef 0,0,0 addParam roofLayer 2 setDefinition RoofMaterialFF end