home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar 2005 April
/
Gamestar_72_2005-04_dvd.iso
/
Dema
/
Liquidator
/
Liquidator.tma
/
data
/
renderer
/
sfx.fx
< prev
next >
Wrap
Text File
|
2004-12-10
|
20KB
|
523 lines
#ifndef __SFX_FX__
#define __SFX_FX__
#define MESHARRAY_FADE_RANGE arrayMeshArrayData[vsc_mesharray_const].x
#define MESHARRAY_FADE_DISTANCE arrayMeshArrayData[vsc_mesharray_const].y
#define MESHARRAY_CAM_POS arrayMeshArrayData[vsc_mesharray_campos].xyz
//#define MESHARRAY_IN_INDEX g_fFixedUser0.w
#define MESHARRAY_IN_S g_fFixedUser0.xyz
int Float2Int(float v)
{
//return D3DCOLORtoUBYTE4((v + 0.2f)/ 255.001953f );
return floor(v);
}
float GetDistanceFraction(float fDist, float fFadeDist, float fFadeRange){
float fFraction = (fDist - fFadeDist) / fFadeRange;
return clamp(fFraction, 0.0f, 1.0f);
}
void MeshArrayTransform( uniform bool m_bNeedNormal, uniform bool m_bNeedTangent ){
int index = Float2Int(g_fFixedUser0.w);
float3 color = arrayMeshArrayData[index + vsc_mesharray_data + 3];
g_fColor0.xyz += color;
//g_fVertexLightColor.xyz += color;;
float4 k1 = arrayMeshArrayData[index + vsc_mesharray_data];
float4 k2 = arrayMeshArrayData[index + vsc_mesharray_data + 1];
float4 k3 = arrayMeshArrayData[index + vsc_mesharray_data + 2];
float3 fPos;
g_fVertexPosition.w = 1.0f;//1.0f;
fPos.x = dot(g_fVertexPosition, k1);
fPos.y = dot(g_fVertexPosition, k2);
fPos.z = dot(g_fVertexPosition, k3);
g_fVertexPosition.xyz = fPos;
float fLenght = length(MESHARRAY_CAM_POS - g_fVertexPosition.xyz);
float fFadeDistance = MESHARRAY_FADE_DISTANCE;
float fFadeRange = MESHARRAY_FADE_RANGE;
float fFraction = GetDistanceFraction(fLenght, fFadeDistance, fFadeRange);// (fLenght - fCullDistance) / fFadeDistance;
g_fColor0.w = lerp( g_fColor0.w, 0.005f, fFraction);
if (m_bNeedNormal) {
float3 fArrayNormal;
fArrayNormal.x = dot(g_fNormal, k1);
fArrayNormal.y = dot(g_fNormal, k2);
fArrayNormal.z = dot(g_fNormal, k3);
g_fNormal = fArrayNormal;
//g_fNormal = normalize(g_fNormal);
}
if (m_bNeedTangent) {
float3 fArrayS;
fArrayS.x = dot(MESHARRAY_IN_S, k1);
fArrayS.y = dot(MESHARRAY_IN_S, k2);
fArrayS.z = dot(MESHARRAY_IN_S, k3);
g_fS = fArrayS;
g_fT = normalize(cross(g_fS, g_fNormal));
g_fSxT = g_fNormal;
}
}
#define VEGETATION_BEND_FACTOR arrayVegetationData[vsc_vegetation_const].x
#define VEGETATION_TIME arrayVegetationData[vsc_vegetation_const].y
#define VEGETATION_FADE_RANGE arrayVegetationData[vsc_vegetation_const].z
#define VEGETATION_FADE_DISTANCE arrayVegetationData[vsc_vegetation_const].w
#define VEGETATION_CAM_POS arrayVegetationData[vsc_vegetation_campos].xyz
//#define VEGETATION_IN_INDEX g_fFixedUser0.x
#define VEGETATION_IN_BEND g_fFixedUser0.y
void VegetationTransform( uniform bool m_bNeedNormal, uniform bool m_bNeedTangent ){
int index = Float2Int(g_fFixedUser0.x);
float3 posOffset = arrayVegetationData[index + vsc_vegetation_data];
g_fVertexPosition.xyz = g_fVertexPosition.xyz + posOffset;
g_fVertexPosition.w = 1.0f;
float3 avmSumLight = arrayVegetationData[index + vsc_vegetation_data + 1];
g_fColor1.xyz += avmSumLight;
float fPhase = 6.2831853071795864f * (VEGETATION_TIME * 0.5f + (g_fVertexPosition.x + g_fVertexPosition.z) / 10.0f);
float s,c;
sincos(fPhase,s,c);
float fBend = VEGETATION_BEND_FACTOR * VEGETATION_IN_BEND;
g_fVertexPosition.x += fBend * s;
g_fVertexPosition.z += fBend * c;
float fLenght = length(VEGETATION_CAM_POS - g_fVertexPosition.xyz);
float fFadeDistance = VEGETATION_FADE_DISTANCE;
float fFadeRange = VEGETATION_FADE_RANGE;
float fFraction = GetDistanceFraction(fLenght, fFadeDistance, fFadeRange);// (fLenght - fCullDistance) / fFadeDistance;
g_fColor0.w = lerp( g_fColor0.w, 0.005f, fFraction);
}
float2 CalculateVertexOffset(in float2 vTexCoord, in float fPolarity)
{
float2 offset = -2.0f * vTexCoord + 1.0f;
offset.x *= fPolarity;
return offset;
}
void AureolTransform( uniform bool bNeedNormal, uniform bool bNeedTangent ){
float fRadius = arrayAureolData[vsc_aureol_bbconst].x;
float fPolarity = arrayAureolData[vsc_aureol_bbconst].z;
float2 offset = fRadius * CalculateVertexOffset(g_fTexCoords[0].xy, fPolarity);
float co = arrayAureolData[vsc_aureol_bbconst2].x;
float si = arrayAureolData[vsc_aureol_bbconst2].y;
float3 offSetRot;
offSetRot.x = offset.x * co - offset.y * si;
offSetRot.y = offset.x * si + offset.y * co;
offSetRot.z = 0.0f;
float3 viewOffset;
viewOffset.x = dot((float3)arrayAureolData[vsc_sfx_matViewInv4x3+0], offSetRot);
viewOffset.y = dot((float3)arrayAureolData[vsc_sfx_matViewInv4x3+1], offSetRot);
viewOffset.z = dot((float3)arrayAureolData[vsc_sfx_matViewInv4x3+2], offSetRot);
g_fVertexPosition.xyz = arrayAureolData[vsc_aureol_origin].xyz + viewOffset.xyz;
g_fVertexPosition.w = 1.0f;
float fFade = arrayAureolData[vsc_aureol_bbconst].y;
g_fColor0 = arrayAureolData[vsc_aureol_diffuse] * fFade;
}
void ProjectorTransform( uniform bool m_bNeedNormal, uniform bool m_bNeedTangent ){
float fHalfWidth = arrayProjectorData[vsc_projector_bbconst].x;
float3 eyePos;
eyePos.x = arrayProjectorData[vsc_sfx_matViewInv4x3+0].w;
eyePos.y = arrayProjectorData[vsc_sfx_matViewInv4x3+1].w;
eyePos.z = arrayProjectorData[vsc_sfx_matViewInv4x3+2].w;
float3 up = arrayProjectorData[vsc_projector_up];
float3 origin = arrayProjectorData[vsc_projector_origin];
float3 vEyeObjDir = eyePos - origin;
float3 right = fHalfWidth * normalize( cross(up, vEyeObjDir) );
float fPolarity = arrayProjectorData[vsc_projector_bbconst].z;
float2 offset = CalculateVertexOffset(g_fTexCoords[0].xy, fPolarity);
g_fVertexPosition.xyz = origin + offset.x * right + offset.y * up;
g_fVertexPosition.w = 1.0f;
float fFade = arrayProjectorData[vsc_projector_bbconst].y;
g_fColor0 = arrayProjectorData[vsc_projector_diffuse] * fFade;
}
void LensFlareTransform( uniform bool bNeedNormal, uniform bool bNeedTangent ){
float fPolarity = arrayLensFlareData[vsc_lensflare_bbconst].z;
float fRadius = arrayLensFlareData[vsc_lensflare_bbconst].x;
float3 offset;
offset.xy = fRadius * CalculateVertexOffset(g_fTexCoords[0].xy, fPolarity);
offset.z = 0.0f;
float3 viewOffset;
viewOffset.x = dot((float3)arrayLensFlareData[vsc_sfx_matViewInv4x3+0], offset);
viewOffset.y = dot((float3)arrayLensFlareData[vsc_sfx_matViewInv4x3+1], offset);
viewOffset.z = dot((float3)arrayLensFlareData[vsc_sfx_matViewInv4x3+2], offset);
g_fVertexPosition.xyz = arrayLensFlareData[vsc_lensflare_origin].xyz + viewOffset.xyz;
g_fVertexPosition.w = 1.0f;
float fFade = arrayLensFlareData[vsc_lensflare_bbconst].y;
g_fColor0 = arrayLensFlareData[vsc_lensflare_diffuse] * fFade;
}
void LightingTransform( uniform bool bNeedNormal, uniform bool bNeedTangent ){
#define vsc_lightning_startwidth arrayLightingData[vsc_lightning_const1].xxxx
#define vsc_lightning_endwidth arrayLightingData[vsc_lightning_const1].yyyy
#define vsc_lightning_half arrayLightingData[vsc_lightning_const1].zzzz
#define vsc_lightning_one arrayLightingData[vsc_lightning_const1].wwww
#define vsc_lightning_numsegments arrayLightingData[vsc_lightning_const2].xxxx
#define vsc_lightning_srtradius arrayLightingData[vsc_lightning_const2].yyyy
#define vsc_lightning_midradius arrayLightingData[vsc_lightning_const2].zzzz
#define vsc_lightning_endradius arrayLightingData[vsc_lightning_const2].wwww
#define in_pos g_fFixedUser0
#define in_part g_fFixedUser1.x
#define in_flag g_fFixedUser1.y
float3 tmp0,tmp1,tmp2;
tmp1.x = arrayLightingData[vsc_lightning_const2].z - arrayLightingData[vsc_lightning_const2].y;
tmp1.y = arrayLightingData[vsc_lightning_const2].w - arrayLightingData[vsc_lightning_const2].z;
tmp0.x = ( g_fFixedUser1.x >= 0.5f ) ? 1.0f : 0.0f;
tmp0.y = 1.0f - tmp0.x;
//
tmp2.x = arrayLightingData[vsc_lightning_const2].z * tmp0.x;
tmp2.x = arrayLightingData[vsc_lightning_const2].y * tmp0.y + tmp2.x;
//
tmp1.y = tmp1.y * tmp0.x;
tmp1.x = tmp1.x * tmp0.y + tmp1.y;
//
tmp2.y = -0.5f * tmp0.x + in_part;
tmp2.y = tmp2.y * tmp1.x;
tmp2.y = tmp2.y + tmp2.y;
//
tmp0.x = tmp2.x + tmp2.y;
tmp0.y = -tmp0.x;
//tmp2.x = dot( arrayLightingData[vsc_lightning_const2].zy,tmp0.xy);
//tmp1.x = dot(tmp1.xy,tmp0.xy);
//tmp2.y = ( ( (-0.5 * tmp0.x) + g_fFixedUser1.x) * tmp1.x) * 2.0;
//tmp0.x = tmp2.x + tmp2.y;
//tmp0.y = -tmp0.x;
float3 vecPos,vDxyz,vDeltaCPS,vp,vDepth,vDxyzNormal;
vecPos = min(g_fFixedUser0, (float3)tmp0.x);
vecPos = max(vecPos,(float3)tmp0.y);
vDxyz = arrayLightingData[vsc_lightning_endpos] - arrayLightingData[vsc_lightning_startpos];
vDeltaCPS = arrayLightingData[vsc_lightning_campos] - vDxyz;
vp = normalize(cross(vDxyz,vDeltaCPS));
vDepth = normalize(cross(vDxyz,vp));
vDxyzNormal = normalize(vDxyz);
tmp0.x = dot(vDxyzNormal,vecPos);
tmp1 = (-vDxyzNormal * (float3)tmp0.x) + vecPos;
tmp0.x = dot(vDepth, tmp1);
tmp1 = (-vDepth * (float3)tmp0.x) + tmp1;
tmp0.x = lerp(arrayLightingData[vsc_lightning_const1].x,arrayLightingData[vsc_lightning_const1].y,g_fFixedUser1.x);
tmp2.x = g_fFixedUser1.y - 0.5f;
tmp1 = ((vp * (float3)tmp0.x) * (float3)tmp2.x) + tmp1;
tmp2 = lerp(arrayLightingData[vsc_lightning_startpos],arrayLightingData[vsc_lightning_endpos],(float3)g_fFixedUser1.x);
g_fVertexPosition.xyz = tmp1 + tmp2;
g_fVertexPosition.w = 1.0f;
g_fTexCoords[0].xy = g_fFixedUser1.yx;
g_fTexCoords[0].z = 0.0f;
g_fTexCoords[0].w = 1.0f;
g_fColor0 = lerp( arrayLightingData[vsc_lightning_startcolor],arrayLightingData[vsc_lightning_endcolor],(float4)g_fFixedUser1.x);
}
//--------------------------------------------------------------------------
// Particle systems
// ~~~~~~~~~~~~~~~~
void CalculateParticlePosAndVelocity(in float fDeltaTime, out float3 pos, out float3 vel)
{
float3 pos0 = g_fFixedUser1.xyz;
float3 vel0 = g_fFixedUser2.xyz;
float fCloneKefficient = arrayParticlesData[vsc_particles_const2].z;
float3 gravity = arrayParticlesData[vsc_particles_const3].xyz;
vel = vel0 + gravity * fDeltaTime;
pos = vel0 * fDeltaTime + pos0 + gravity * fDeltaTime * fDeltaTime * 0.5f + vel * fCloneKefficient;
}
void CalculateParticlePos(in float fDeltaTime, out float3 pos)
{
float3 vel;
CalculateParticlePosAndVelocity(fDeltaTime, pos, vel);
}
float CalculateParticleRadius(in float fFraction) {
float fStartRadius = arrayParticlesData[vsc_particles_const2].x;
float fEndRadius = arrayParticlesData[vsc_particles_const2].y;
return lerp(fStartRadius, fEndRadius, fFraction);
}
float4 CalculateParticleColor(in float fFraction) {
float4 startColor = g_fFixedUser3;
float4 endColor = g_fFixedUser4;
return lerp(startColor, endColor, fFraction);
}
//--------------------------------------------------------------------------
void ParticleAxisBillBoardTransform( uniform bool bNeedNormal, uniform bool bNeedTangent ){
float fCurrentTime = arrayParticlesData[vsc_particles_const3].w;
float fTime0 = g_fFixedUser0.x;
float fDeltaTime = fCurrentTime - fTime0;
float fLiveTime = g_fFixedUser0.y - fTime0;
float fFraction = fDeltaTime / fLiveTime;
float3 vel;
float3 origin;
CalculateParticlePosAndVelocity(fDeltaTime, origin, vel);
g_fColor0 = CalculateParticleColor(fFraction);
float fPolarity = arrayParticlesData[vsc_particles_const2].w;
float2 offset = CalculateVertexOffset(g_fTexCoords[0].xy, fPolarity);
float3 eyePos;
eyePos.x = arrayParticlesData[vsc_sfx_matViewInv4x3+0].w;
eyePos.y = arrayParticlesData[vsc_sfx_matViewInv4x3+1].w;
eyePos.z = arrayParticlesData[vsc_sfx_matViewInv4x3+2].w;
float fRadius = CalculateParticleRadius(fFraction);
float3 up = 0.5f * fRadius * normalize(vel);
float3 vEyeObjDir = eyePos - origin;
float3 right = 0.5f * fRadius * normalize( cross(vEyeObjDir, up) );
g_fVertexPosition.xyz = origin + offset.x * right + offset.y * up;
g_fVertexPosition.w = 1.0f;
}
//--------------------------------------------------------------------------
void ParticleBillBoardTransform( uniform bool bNeedNormal, uniform bool bNeedTangent){
float fCurrentTime = arrayParticlesData[vsc_particles_const3].w;
float fTime0 = g_fFixedUser0.x;
float fDeltaTime = fCurrentTime - fTime0;
float fLiveTime = g_fFixedUser0.y - fTime0;
float fFraction = fDeltaTime / fLiveTime;
CalculateParticlePos(fDeltaTime, g_fVertexPosition.xyz);
g_fVertexPosition.w = 1.0f;
g_fColor0 = CalculateParticleColor(fFraction);
float fRadius = CalculateParticleRadius(fFraction);
float3 offset;
float fPolarity = arrayParticlesData[vsc_particles_const2].w;
offset.xy = fRadius * 0.5f * CalculateVertexOffset(g_fTexCoords[0].xy, fPolarity);
offset.z = 0.0f;
float3 viewOffset;
viewOffset.x = dot((float3)arrayParticlesData[vsc_sfx_matViewInv4x3+0], offset);
viewOffset.y = dot((float3)arrayParticlesData[vsc_sfx_matViewInv4x3+1], offset);
viewOffset.z = dot((float3)arrayParticlesData[vsc_sfx_matViewInv4x3+2], offset);
g_fVertexPosition.xyz += viewOffset.xyz;
}
//--------------------------------------------------------------------------
void ParticlePointSpriteTransform( uniform bool bNeedNormal, uniform bool bNeedTangent ){
float fCurrentTime = arrayParticlesData[vsc_particles_const3].w;
float fTime0 = g_fFixedUser0.x;
float fDeltaTime = fCurrentTime - fTime0;
float fLiveTime = g_fFixedUser0.y - fTime0;
float fFraction = fDeltaTime / fLiveTime;
CalculateParticlePos(fDeltaTime, g_fVertexPosition.xyz);
g_fVertexPosition.w = 1.0f;
g_fColor0 = CalculateParticleColor(fFraction);
float4 fWRow;
fWRow.x = matProjection[0][3];
fWRow.y = matProjection[1][3];
fWRow.z = matProjection[2][3];
fWRow.w = matProjection[3][3];
float fRadius = CalculateParticleRadius(fFraction);
float fViewPortScale = arrayParticlesData[vsc_particles_const2].w;
g_fPSize = (fRadius * fViewPortScale) / dot(g_fVertexPosition, fWRow);
g_fTexCoords[0].xyz = 0.0f;
g_fTexCoords[0].w = 1.0f;
}
void GrassTransform( uniform bool bNeedNormal, uniform bool bNeedTangent ){
float3 r_tmp,r_n,r_tan,r_bend;
float4 r_splineX,r_splineY,r_splineZ,r_nProj;
float4 r_bendProjected,ru,r_pos,r_u;
r_n = cross(g_fFixedUser1,g_fFixedUser2);
r_bend = arrayGrassData[vsc_grass_bend];
float3x4 rMat;
rMat[0] = arrayGrassData[vsc_grass_dynamicbendmatrix0];
rMat[1] = arrayGrassData[vsc_grass_dynamicbendmatrix1];
rMat[2] = arrayGrassData[vsc_grass_dynamicbendmatrix2];
r_tmp.xyz = mul(rMat,g_fFixedUser0);
r_tmp.y = -r_tmp.y;
r_bend = r_tmp * (float3)arrayGrassData[vsc_grass_bendparameters].x + r_bend;
r_bendProjected.x = dot(r_bend,g_fFixedUser1);
r_bendProjected.y = dot(r_bend,g_fFixedUser2);
r_bendProjected.xy = clamp(r_bendProjected.xy,-arrayGrassData[vsc_grass_bendparameters].yy,arrayGrassData[vsc_grass_bendparameters].yy);
r_bendProjected.zw = max(r_bendProjected.xy,-r_bendProjected.xy);
r_bendProjected.z = max(r_bendProjected.z,-r_bendProjected.w);
r_splineX = arrayGrassData[vsc_grass_spline0] * (float4)r_bendProjected.x;
r_splineY = arrayGrassData[vsc_grass_spline1] * (float4)r_bendProjected.y;
r_splineZ = arrayGrassData[vsc_grass_spline2];
r_u.x = 1.0f;
r_u.y = g_fFixedUser4.x * g_fFixedUser4.x;
r_u.zw = g_fFixedUser4.x;
r_u.xw = r_u.yxxx * r_u.zxxx;
r_pos.x = dot(r_u,r_splineX);
r_pos.y = dot(r_u,r_splineY);
r_pos.z = dot(r_u,r_splineZ);
r_pos.w = 1.0f;
r_pos.xyz = (float3)r_pos * (float3)g_fFixedUser4.z;
r_tmp = (r_n * (float3)r_pos.z) + g_fFixedUser0;
r_tmp = (g_fFixedUser1 * (float3)r_pos.x) + r_tmp;
r_pos.xyz = (g_fFixedUser2 * (float3)r_pos.y) + r_tmp;
r_nProj.y = dot((float3)arrayGrassData[vsc_grass_worldmatrix0],r_n);
r_nProj.x = dot((float3)arrayGrassData[vsc_grass_worldmatrix1],-r_n);
r_nProj.z = 0.0f;
r_nProj.w = 1.0f;
float r_projRadius;
float r_projScale;
r_projRadius = g_fFixedUser4.y * arrayGrassData[vsc_grass_shaderparameters].x;
r_projScale = rsqrt( dot((float3)r_nProj,(float3)r_nProj)) * r_projRadius;
r_nProj = r_nProj * r_projScale;
float4 r_outPos;
float4x4 rViewMatrix;
rViewMatrix[0] = arrayGrassData[vsc_grass_projectionmatrix0];
rViewMatrix[1] = arrayGrassData[vsc_grass_projectionmatrix1];
rViewMatrix[2] = arrayGrassData[vsc_grass_projectionmatrix2];
rViewMatrix[3] = arrayGrassData[vsc_grass_projectionmatrix3];
r_outPos = mul(rViewMatrix,r_pos);
g_fVertexPosition = (r_nProj * arrayGrassData[vsc_grass_constants].yyxx) + r_outPos;
g_fTexCoords[0].xy = g_fFixedUser3.xy;
g_fTexCoords[0].z = 0.0f;
g_fTexCoords[0].w = 1.0f;
g_fColor0 = arrayGrassData[vsc_grass_diffuse];
}
void SurfaceTransform( uniform bool bNeedNormal, uniform bool bNeedTangent ){
if( bNeedNormal ){
g_fNormal = normalize(g_fNormal);
}
if( bNeedTangent ){
g_fSxT = normalize(g_fNormal - cross(g_fS,g_fT));
}
}
void ShiningHClipTransform( uniform bool bNeedNormal, uniform bool bNeedTangent ){
float4 rPos;
rPos.xyz = arrayShiningData[vsc_position];
rPos.w = 1.0f;
float4x4 rViewMat;
rViewMat[0] = arrayShiningData[vsc_vmat0+0];
rViewMat[1] = arrayShiningData[vsc_vmat0+1];
rViewMat[2] = arrayShiningData[vsc_vmat0+2];
rViewMat[3] = arrayShiningData[vsc_vmat0+3];
rPos = mul(rViewMat,rPos);
float2 rTmpPos = g_fFixedUser0.xy * arrayShiningData[vsc_constshine].zw;
float2 rTmp1 = g_fFixedUser2.xx * arrayShiningData[vsc_constshine].yy + g_fFixedUser2.yy * arrayShiningData[vsc_constshine].xx;
rPos.xy = rTmpPos * rTmp1 + rPos.xy;
//float2 rTmpPos,rTmp1;
//rTmpPos = g_fFixedUser0.xy * arrayShiningData[vsc_constshine].zw;
//rTmp1 = dot( g_fFixedUser2.yx,arrayShiningData[vsc_constshine].xy);
//rPos.xy = rTmpPos * rTmp1 + rPos.xy;
//float4x4 rViewMat;
rViewMat[0] = arrayShiningData[vsc_pmat0+0];
rViewMat[1] = arrayShiningData[vsc_pmat0+1];
rViewMat[2] = arrayShiningData[vsc_pmat0+2];
rViewMat[3] = arrayShiningData[vsc_pmat0+3];
g_fVertexPosition = mul(rViewMat,rPos );
g_fColor0 = lerp( arrayShiningData[vsc_startshinediffuse],arrayShiningData[vsc_endshinediffuse],(float4)g_fFixedUser1.x);
g_fTexCoords[0].xy = g_fFixedUser1.xy;
g_fTexCoords[0].z = 0.0f;
g_fTexCoords[0].w = 1.0f;
}
void MarkTransform( uniform bool bNeedNormal, uniform bool bNeedTangent ){
float4x4 rViewMat;
rViewMat[0] = arrayMarkData[vsc_mark_wrldmtx+0];
rViewMat[1] = arrayMarkData[vsc_mark_wrldmtx+1];
rViewMat[2] = arrayMarkData[vsc_mark_wrldmtx+2];
rViewMat[3] = arrayMarkData[vsc_mark_wrldmtx+3];
g_fVertexPosition = mul(rViewMat,g_fVertexPosition);
g_fVertexPosition.w = 1.0f;
g_fVertexPosition.xyz = ((arrayMarkData[vsc_mark_eyepos] - g_fVertexPosition) * (float3)arrayMarkData[vsc_mark_bbconst].y) + (float3)g_fVertexPosition;
g_fColor0 = lerp( arrayMarkData[vsc_mark_startcolor] ,arrayMarkData[vsc_mark_endcolor],(float4)arrayMarkData[vsc_mark_bbconst].x);
}
void ExtenedMeshDoffuse( uniform bool bNeedNormal, uniform bool bNeedTangent ){
g_fColor0 = arrayMarkData[vsc_mark_bbconst];
}
#endif //__SFX_FX__