Difference between revisions of "TEST-STRCMP4CODES"

From SimsWiki
Jump to: navigation, search
Line 1: Line 1:
#
+
define LotSkirtPSWater()
# Materials used for lamps, mostly for broken states
+
    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
  
materialDefinition brokenLampSparkFlash
+
bindConstants 0 -bindingID geomToClip -constantCount 4
  setDefinition StandardMaterial
+
bindConstants 4 -bindingID geomToCamera -constantCount 3
  addParam stdMatLayer 5
+
  addParam stdMatLightingEnabled false
+
  addParam stdMatAlphaBlendMode additive
+
  addParam stdMatAlphaTestEnabled false
+
  addParam stdMatAlphaMultiplier  3
+
  addParam stdMatBaseTextureAlphaReplicate true
+
  addParam stdMatDiffCoef (1, 1, 1)
+
  addParam stdMatBaseTextureEnabled true
+
  addParam stdMatBaseTextureName fireflyParticle-alpha
+
  addParam stdMatEmissiveCoef (1, 1, 1)
+
  addParam stdMatBaseTextureAddressingU clamp
+
  addParam stdMatBaseTextureAddressingV clamp
+
end
+
  
 +
bindConstants 7 -bindingID frameInfo
  
materialDefinition sparks
+
bindConstants 11 -bindingID immediateData -data ($wmXRepeat, 0, $wmXWaveHeight, $wmXSpeed)
  setDefinition StandardMaterial
+
bindConstants 12 -bindingID immediateData -data (0, $wmYRepeat, $wmYWaveHeight, $wmYSpeed)
  addParam stdMatLayer 5
+
  addParam stdMatLightingEnabled false
+
  addParam stdMatAlphaBlendMode additive
+
  addParam stdMatAlphaTestEnabled false
+
  addParam stdMatAlphaMultiplier  3
+
  addParam stdMatBaseTextureAlphaReplicate true
+
  addParam stdMatDiffCoef (0.85, 0.7, .46)
+
  addParam stdMatBaseTextureEnabled true
+
  addParam stdMatBaseTextureName fireflyParticle-alpha
+
  addParam stdMatEmissiveCoef (0.8,0.56, .46)
+
  addParam stdMatBaseTextureAddressingU clamp
+
  addParam stdMatBaseTextureAddressingV clamp
+
end
+
  
 +
# 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
  
materialDefinition brokenLampSmoke2
+
shaderSource
  setDefinition StandardMaterial
+
  addParam stdMatLayer 9
+
  addParam stdMatLightingEnabled false
+
  addParam stdMatAlphaBlendMode blend
+
  addParam stdMatAlphaTestEnabled false
+
  addParam stdMatAlphaMultiplier  0.08
+
  addParam stdMatBaseTextureAlphaReplicate false
+
  addParam stdMatDiffCoef (0.85, 0.7, .46)
+
  addParam stdMatBaseTextureEnabled true
+
  addParam stdMatBaseTextureName brokenLampSmoke
+
  addParam stdMatEmissiveCoef (0.8,0.56, .46)
+
  addParam stdMatBaseTextureAddressingU clamp
+
  addParam stdMatBaseTextureAddressingV clamp
+
end
+
  
 +
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);
  
materialDefinition brokenLampSmoke
+
// Get bump layers
  setDefinition StandardMaterial
+
float3 vBumpTexA = tex2D(bump, pi.Wave0.xy).xyz;
  addParam stdMatLayer 15
+
float3 vBumpTexB = tex2D(bump, pi.Wave1.xy).xyz;
  addParam stdMatLightingEnabled false
+
float3 vBumpTexC = tex2D(bump, pi.Wave2.xy).xyz;
  addParam stdMatAlphaBlendMode blend
+
float3 vBumpTexD = tex2D(bump, pi.Wave3.xy).xyz;
  addParam stdMatAlphaTestEnabled false
+
               
  addParam stdMatAlphaMultiplier  0.1
+
// Average bump layers
  addParam stdMatBaseTextureAlphaReplicate false
+
float3 vBumpTex=normalize(2.0 * (vBumpTexA.xyz + vBumpTexB.xyz + vBumpTexC.xyz + vBumpTexD.xyz)-4.0);
  addParam stdMatDiffCoef (.388, .312, .204)
+
               
  addParam stdMatBaseTextureEnabled true
+
// Apply individual bump scale for refraction and reflection               
  addParam stdMatBaseTextureName brokenLampSmoke
+
float3 vReflBump = vBumpTex.xyz ;
  addParam stdMatEmissiveCoef (388, .312, .204)
+
float4 vReflection = tex2Dproj(reflect, pi.sPos + float4(vReflBump.xy, 0.0f, 0.0f));//*0.001 + float4(2.0*vBumpTexD-1.0f.xxx, 1);
  addParam stdMatBaseTextureAddressingU clamp
+
             
  addParam stdMatBaseTextureAddressingV clamp
+
// Compute Fresnel term
end
+
float NdotL = max(dot(vEye, vReflBump), 0);
 
+
float facing = (1.0 - NdotL);
 
+
float fresnel = Fresnel(NdotL, 0.1, 0.5, facing);
materialDefinition brokenLampFlash
+
         
  setDefinition StandardMaterial
+
vReflection.a = fresnel * 0.5;
  addParam stdMatLayer 19
+
  addParam stdMatLightingEnabled false
+
return saturate(vReflection + pi.colorTint);
  addParam stdMatAlphaBlendMode additive
+
}
  addParam stdMatAlphaTestEnabled false
+
endShaderSource
  addParam stdMatAlphaMultiplier  3
+
end                                                   
  addParam stdMatBaseTextureAlphaReplicate true
+
     
  addParam stdMatDiffCoef (1, 1, 1)
+
sampler reflect
  addParam stdMatBaseTextureEnabled true
+
texture "OceanReflection"
  addParam stdMatBaseTextureName brokenlampflash-alpha
+
textureAddressing clamp clamp
  addParam stdMatEmissiveCoef (1, 1, 1)
+
end
  addParam stdMatBaseTextureAddressingU clamp
+
     
  addParam stdMatBaseTextureAddressingV clamp
+
sampler bump
end
+
texture "poolShape-body-bump"
 
+
textureAddressing tile tile
 
+
end 
materialDefinition brokenLampElectricalArcs
+
           
  setDefinition StandardMaterial
+
end # end pass
  addParam stdMatLayer 13
+
end
  addParam stdMatLightingEnabled false
+
enddef
  addParam stdMatAlphaBlendMode additive
+
  addParam stdMatAlphaTestEnabled false
+
  addParam stdMatAlphaMultiplier  3
+
  addParam stdMatBaseTextureAlphaReplicate true
+
  addParam stdMatDiffCoef (1, 1, 1)
+
  addParam stdMatBaseTextureEnabled true
+
  addParam stdMatBaseTextureName brokenlampelectricalarcs
+
  addParam stdMatEmissiveCoef (1, 1, 1)
+
  addParam stdMatBaseTextureAddressingU clamp
+
  addParam stdMatBaseTextureAddressingV clamp
+
end
+

Revision as of 05:01, 7 September 2007

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

Personal tools
Namespaces

Variants
Actions
Navigation
game select
Toolbox