Difference between revisions of "TEST-STRCMP4CODES"

From SimsWiki
Jump to: navigation, search
 
Line 1: Line 1:
 
pass -clipAlways -modifiedEachFrameHint
 
pass -clipAlways -modifiedEachFrameHint
 
#fillmode wireframe
 
#fillmode wireframe
alphaBlend srcFactor(one) add dstFactor(one)
+
alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
       seti textureLights (numLightsOfType(environmentCube))          
+
       seti textureLights (numLightsOfType(environmentCube))
 +
      depthTest true -enableDepthWrite false         
 
    
 
    
 
shaderProgram -target vertexProgram -method compile -version 1_1
 
shaderProgram -target vertexProgram -method compile -version 1_1
Line 20: Line 21:
 
bindConstants 14 -bindingID allStandardLightData -constantCount 4 -constantType float
 
bindConstants 14 -bindingID allStandardLightData -constantCount 4 -constantType float
 
bindConstants 18 -bindingID cameraToGlobal -constantCount 3
 
bindConstants 18 -bindingID cameraToGlobal -constantCount 3
 +
bindConstants 21 -bindingID cameraToGeom -constantCount 3
 
          
 
          
 
         if (tsIsDay)         
 
         if (tsIsDay)         
Line 36: Line 38:
 
float4x3 cameraSpaceMatrix : register(c4);
 
float4x3 cameraSpaceMatrix : register(c4);
 
float4x3 cameraToGlobalMatrix : register(c18);
 
float4x3 cameraToGlobalMatrix : register(c18);
 +
float4x3 cameraToGeomMatrix : register(c21);
 +
 
 
 
             float4 nightColor: register(c25);
 
             float4 nightColor: register(c25);
Line 41: Line 45:
 
float4 lightDirection : register(c14);
 
float4 lightDirection : register(c14);
 
float4 lightColor : register(c15);
 
float4 lightColor : register(c15);
 +
float4 lightSpecular : register(c16);
 
const static float4 refractionWeights={1,1,2,0};
 
const static float4 refractionWeights={1,1,2,0};
 
 
Line 53: Line 58:
 
struct OutputVertex
 
struct OutputVertex
 
{
 
{
float4 clipPosition : POSITION;
+
float4 clipPosition : POSITION;
float4 diffuseColor: COLOR0;
+
float4 sPos        : TEXCOORD0;
float4 specularColor: COLOR1;
+
float2 Wave0        : TEXCOORD1;
float3 reflection : TEXCOORD0;
+
              float2 Wave1        : TEXCOORD2;
+
              float2 Wave2        : TEXCOORD3;
 +
              float2 Wave3        : TEXCOORD4;
 +
              float3 Eye          : TEXCOORD5;
 +
              float4 specular    : COLOR0;   
 
};
 
};
 
              
 
              
Line 73: Line 81:
 
posAndTime.w = frameInfo.w;
 
posAndTime.w = frameInfo.w;
 
 
float temp = dot(posAndTime, waveDataX);
+
float temp = dot(posAndTime, waveDataX);
+
float z = sin(temp) * waveDataX.z + inputVertex.position.z;
// z = h * sin(...)
+
temp = dot(posAndTime, waveDataY);
 
+
posAndTime.z =  z + sin(temp) * waveDataY.z;
float z;
+
posAndTime.w = 1.0f;
// scale temp to fit -pi +pi range
+
//temp = temp *  (1 / (2 * 3.14159)) + 0.5;
+
+
float3 waveNormal;
+
+
z = sin(temp) * waveDataX.z + inputVertex.position.z;
+
+
waveNormal.x = cos(temp) * waveDataHelper.x + inputVertex.normal.x;
+
+
temp = dot(posAndTime, waveDataY);
+
//temp = temp * (1 / (2 * 3.14159)) + 0.5;
+
+
z +sin(temp) * waveDataY.z;
+
+
waveNormal.y = cos(temp) * waveDataHelper.y + inputVertex.normal.y;
+
+
waveNormal.z = inputVertex.normal.z;
+
+
waveNormal = normalize(waveNormal);
+
+
posAndTime.w = 1.0;
+
posAndTime.z = z;
+
+
 
outputVertex.clipPosition = mul( posAndTime, clipSpaceMatrix);
 
outputVertex.clipPosition = mul( posAndTime, clipSpaceMatrix);
 +
outputVertex.sPos = float4(0.5f*(outputVertex.clipPosition.ww - outputVertex.clipPosition.xy), outputVertex.clipPosition.ww);
 
 
float3 cameraSpaceNormal = normalize(mul(waveNormal, cameraSpaceMatrix));
+
float3 waveNormal = normalize(inputVertex.normal + float3(cos(temp)*waveDataHelper.xy, 0));
 
+
        float3 cameraSpaceNormal = normalize(mul(waveNormal, cameraSpaceMatrix));
float3 cameraSpacePosition = mul( posAndTime, cameraSpaceMatrix);
+
float3 cameraSpacePosition = mul( posAndTime, cameraSpaceMatrix);
 +
float3 viewVector = normalize(-cameraSpacePosition);
 
 
float3 viewVector = normalize(-cameraSpacePosition);
+
float3 halfVector = normalize(viewVector + lightDirection);
 +
outputVertex.specular = lightSpecular*pow(dot(cameraSpaceNormal, halfVector), 50)*nightColor*lightColor*0.5;
 
 
float3 R = reflect(viewVector, cameraSpaceNormal);
 
 
 
outputVertex.reflection = mul( -R, cameraToGlobalMatrix);
+
float2 fTranslation=float2(fmod(frameInfo.w, 100)*0.005, fmod(frameInfo.w, 100)*0.005);
+
              float2 vTexCoords = posAndTime.xy*0.05;
+
               
float fresnel = dot(viewVector , cameraSpaceNormal);
+
              // Output bump layers texture coordinates   
+
              float fSinTranslation=sin(fTranslation*100)*0.005;
float rdotl = saturate(dot(R, lightDirection));
+
              float2 vTranslation0=fTranslation+fSinTranslation;
+
              float2 vTranslation1=fTranslation-fSinTranslation;
float I = pow(rdotl+0.1, 15); // fudge factor to punch up the highlights.
+
              float2 vTranslation2=fTranslation;
+
               
               nightColor = nightColor * 2;                          
+
              // Scale texture coordinates to get mix of low/high frequency details
                         
+
              outputVertex.Wave0.xy = vTexCoords.xy+fTranslation*2.0;
outputVertex.diffuseColor = ((1.0 - fresnel) * saturate(nightColor) * 0.5) * layerBlue;
+
              outputVertex.Wave1.xy = vTexCoords.xy*2.0+fTranslation*4.0;
+
               outputVertex.Wave2.xy = vTexCoords.xy*7.0+fTranslation*2.0;
outputVertex.specularColor = I;
+
              outputVertex.Wave3.xy = vTexCoords.xy*12.0+fTranslation;               
return(outputVertex);
+
                                   
 +
            // 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);
 +
 
 
 +
return(outputVertex);
 
}
 
}
  
Line 133: Line 133:
 
end # shaderProgram
 
end # shaderProgram
 
 
stage
+
shaderProgram -target pixelProgram -method compile -version 2_0             
texture $wmReflectionTexture
+
        shaderSource                           
textureAddressing clamp clamp clamp
+
            sampler reflect; 
textureBlend multiply(texture diffuse) select(diffuse)
+
            sampler bump;         
end
+
            struct cInputPixel
 +
            {             
 +
              float4 sPos        : TEXCOORD0;             
 +
              float2 Wave0        : TEXCOORD1;
 +
              float2 Wave1        : TEXCOORD2;
 +
              float2 Wave2        : TEXCOORD3;
 +
              float2 Wave3        : TEXCOORD4;
 +
              float3 Eye          : TEXCOORD5;
 +
              float4 specular    : COLOR0;
 +
            };
 +
           
 +
            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 * float3(0.1, 0.1, 1.0); 
 +
             
 +
              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.2, 5.0, facing);
 +
                             
 +
              vReflection.a = fresnel;             
 +
              return saturate(vReflection + float4(0.0, 0.25, 0.5, 0.0) + pi.specular);
 +
            }
 +
        endShaderSource
 +
      end                                                    
 
        
 
        
 +
      sampler reflect
 +
        texture "PoolReflection"
 +
        textureAddressing clamp clamp
 +
      end
 
        
 
        
addSpecular true
+
      sampler bump
+
        texture "poolShape-body-bump"
 +
        textureAddressing tile tile
 +
      end 
 +
           
 
end # end pass
 
end # end pass

Revision as of 21:18, 2 September 2007

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)         
        else
           bindConstants 25 -bindingID immediateData -data (0.2, 0.2, 0.2, 1)         
        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 lightDirection : register(c14); float4 lightColor : register(c15); float4 lightSpecular : register(c16); const static float4 refractionWeights={1,1,2,0};

const static float4 layerBlue={0.3, 0.7, 1.0, 1};

struct InputVertex { float3 position: POSITION0; float3 normal : NORMAL0; };

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;     

};


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; 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+fTranslation*2.0;
              outputVertex.Wave1.xy = vTexCoords.xy*2.0+fTranslation*4.0;
              outputVertex.Wave2.xy = vTexCoords.xy*7.0+fTranslation*2.0;
              outputVertex.Wave3.xy = vTexCoords.xy*12.0+fTranslation;                															

// 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);


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;
           };
           
           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 * float3(0.1, 0.1, 1.0);  
              
              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.2, 5.0, facing);
                             
              vReflection.a = fresnel;               
              return saturate(vReflection + float4(0.0, 0.25, 0.5, 0.0) + pi.specular);
           }
        endShaderSource
     end                                                     
     
     sampler reflect
        texture "PoolReflection"
        textureAddressing clamp clamp
     end		
     
     sampler bump
        texture "poolShape-body-bump"
        textureAddressing tile tile
     end   
           

end # end pass

Personal tools
Namespaces

Variants
Actions
Navigation
game select
Toolbox