Genesys's Recent Forum Activity

  • Hi,

    I have this water shader HLSL code:

    struct WaterVertexToPixel
    
    {
    
    float4 Position : POSITION;
    
    float4 ReflectionMapSamplingPos : TEXCOORD1;
    
    float2 BumpMapSamplingPos : TEXCOORD2;
    
    float4 RefractionMapSamplingPos : TEXCOORD3;
    
    float4 Position3D : TEXCOORD4;
    
    };
    
    struct WaterPixelToFrame
    
    {
    
    float4 Color : COLOR0;
    
    };
    
    WaterVertexToPixel WaterVS(float4 inPos : POSITION, float2 inTex: TEXCOORD)
    
    {
    
    WaterVertexToPixel Output = (WaterVertexToPixel)0;
    
    float4�4 preViewProjection = mul (xView, xProjection);
    
    float4�4 preWorldViewProjection = mul (xWorld, preViewProjection);
    
    float4�4 preReflectionViewProjection = mul (xReflectionView, xProjection);
    
    float4�4 preWorldReflectionViewProjection = mul (xWorld, preReflectionViewProjection);
    
    Output.Position = mul(inPos, preWorldViewProjection);
    
    Output.ReflectionMapSamplingPos = mul(inPos, preWorldReflectionViewProjection);
    
    Output.RefractionMapSamplingPos = mul(inPos, preWorldViewProjection);
    
    Output.Position3D = inPos;
    
    float4 absoluteTexCoords = float4(inTex, 0, 1);
    
    float4 rotatedTexCoords = mul(absoluteTexCoords, xWindDirection);
    
    float2 moveVector = float2(0, 1);
    
    // moving the water
    
    Output.BumpMapSamplingPos = rotatedTexCoords.xy/xWaveLength + xTime*xWindForce*moveVector.xy;
    
    return Output;
    
    }
    
    WaterPixelToFrame WaterPS(WaterVertexToPixel PSIn)
    
    {
    
    WaterPixelToFrame Output = (WaterPixelToFrame)0;
    
    float2 ProjectedTexCoords;
    
    ProjectedTexCoords.x = PSIn.ReflectionMapSamplingPos.x/PSIn.ReflectionMapSamplingPos.w/2.0f + 0.5f;
    
    ProjectedTexCoords.y = -PSIn.ReflectionMapSamplingPos.y/PSIn.ReflectionMapSamplingPos.w/2.0f + 0.5f;
    
    // sampling the bump map
    
    float4 bumpColor = tex2D(WaterBumpMapSampler, PSIn.BumpMapSamplingPos);
    
    // perturbation of the color
    
    float2 perturbation = xWaveHeight*(bumpColor.rg � 0.5f);
    
    // the final texture coordinates
    
    float2 perturbatedTexCoords = ProjectedTexCoords + perturbation;
    
    float4 reflectiveColor = tex2D(ReflectionSampler, perturbatedTexCoords);
    
    float2 ProjectedRefrTexCoords;
    
    ProjectedRefrTexCoords.x = PSIn.RefractionMapSamplingPos.x/PSIn.RefractionMapSamplingPos.w/2.0f + 0.5f;
    
    ProjectedRefrTexCoords.y = -PSIn.RefractionMapSamplingPos.y/PSIn.RefractionMapSamplingPos.w/2.0f + 0.5f;
    
    float2 perturbatedRefrTexCoords = ProjectedRefrTexCoords + perturbation;
    
    float4 refractiveColor = tex2D(RefractionSampler, perturbatedRefrTexCoords);
    
    float3 eyeVector = normalize(xCamPos � PSIn.Position3D);
    
    float3 normalVector = float3(0,0,1);
    
    /////////////////////////////////////////////////
    
    // FRESNEL TERM APPROXIMATION
    
    /////////////////////////////////////////////////
    
    float fresnelTerm = (float)0;
    
    if ( fresnelMode == 0 )
    
    {
    
    fresnelTerm = 1-dot(eyeVector, normalVector)*1.3f;
    
    } else
    
    if ( fresnelMode == 1 )
    
    {
    
    fresnelTerm = 0.02+0.97f*pow((1-dot(eyeVector, normalVector)),5);
    
    } else
    
    if ( fresnelMode == 2 )
    
    {
    
    float fangle = 1.0f+dot(eyeVector, normalVector);
    
    fangle = pow(fangle,5);
    
    // fresnelTerm = fangle*50;
    
    fresnelTerm = 1/fangle;
    
    }
    
    // fresnelTerm = (1/pow((fresnelTerm+1.0f),5))+0.2f; //
    
    //Hardness factor � user input
    
    fresnelTerm = fresnelTerm * xDrawMode;
    
    //just to be sure that the value is between 0 and 1;
    
    fresnelTerm = fresnelTerm < 0? 0 : fresnelTerm;
    
    fresnelTerm = fresnelTerm > 1? 1 : fresnelTerm;
    
    // creating the combined color
    
    float4 combinedColor = refractiveColor*(1-fresnelTerm) + reflectiveColor*(fresnelTerm);
    
    /////////////////////////////////////////////////
    
    // WATER COLORING
    
    /////////////////////////////////////////////////
    
    float4 dullColor = float4(0.1f, 0.1f, 0.2f, 1.0f);
    
    float dullBlendFactor = xdullBlendFactor;
    
    Output.Color = (dullBlendFactor*dullColor + (1-dullBlendFactor)*combinedColor);
    
    /////////////////////////////////////////////////
    
    // Specular Highlights
    
    /////////////////////////////////////////////////
    
    float4 speccolor;
    
    float3 lightSourceDir = normalize(float3(0.1f,0.6f,0.5f));
    
    float3 halfvec = normalize(eyeVector+lightSourceDir+float3(perturbation.x*specPerturb,perturbation.y*specPerturb,0));
    
    float3 temp = 0;
    
    temp.x = pow(dot(halfvec,normalVector),specPower);
    
    speccolor = float4(0.98,0.97,0.7,0.6);
    
    speccolor = speccolor*temp.x;
    
    speccolor = float4(speccolor.x*speccolor.w,speccolor.y*speccolor.w,speccolor.z*speccolor.w,0);
    
    Output.Color = Output.Color + speccolor;
    
    return Output;
    
    }
    
    technique Water
    
    {
    
    pass Pass0
    
    {
    
    VertexShader = compile vs_2_0 WaterVS();
    
    PixelShader = compile ps_2_0 WaterPS();
    
    }
    
    }[/code:2191t6d9]
    
    And I would like to use it in Construct, but can someone convert this to make it work on Construct?
    
    When I try to use it in Construct, it gives to me an error about something like a perspective projection..
    
    Help, please?
  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
Genesys's avatar

Genesys

Member since 7 May, 2009

None one is following Genesys yet!

Trophy Case

  • 15-Year Club

Progress

15/44
How to earn trophies