Shader improvements for decal_dirt

This commit is contained in:
dexyfex 2018-03-07 22:24:37 +11:00
parent a68523b2ef
commit 0264011ad0
6 changed files with 24 additions and 4 deletions

View File

@ -386,6 +386,7 @@ namespace CodeWalker.Rendering
public Vector4 WindOverrideParams { get; set; } = Vector4.One; public Vector4 WindOverrideParams { get; set; } = Vector4.One;
public Vector4 globalAnimUV0 { get; set; } = Vector4.Zero; public Vector4 globalAnimUV0 { get; set; } = Vector4.Zero;
public Vector4 globalAnimUV1 { get; set; } = Vector4.Zero; public Vector4 globalAnimUV1 { get; set; } = Vector4.Zero;
public Vector4 DirtDecalMask { get; set; } = Vector4.Zero;
public bool SpecOnly { get; set; } = false; public bool SpecOnly { get; set; } = false;
public float WaveOffset { get; set; } = 0; //for terrainfoam public float WaveOffset { get; set; } = 0; //for terrainfoam
public float WaterHeight { get; set; } = 0; //for terrainfoam public float WaterHeight { get; set; } = 0; //for terrainfoam
@ -583,6 +584,9 @@ namespace CodeWalker.Rendering
case MetaName.HeightOpacity: case MetaName.HeightOpacity:
HeightOpacity = ((Vector4)param.Data).X; HeightOpacity = ((Vector4)param.Data).X;
break; break;
case MetaName.DirtDecalMask:
DirtDecalMask = ((Vector4)param.Data);
break;
} }
} }

View File

@ -73,6 +73,7 @@ namespace CodeWalker.Rendering
public float specularFresnel; public float specularFresnel;
public float wetnessMultiplier; public float wetnessMultiplier;
public uint SpecOnly; public uint SpecOnly;
public Vector4 TextureAlphaMask;
} }
public struct BasicShaderInstGlobalMatrix public struct BasicShaderInstGlobalMatrix
{ {
@ -588,8 +589,11 @@ namespace CodeWalker.Rendering
uint tintflag = 0; uint tintflag = 0;
if (usetint) tintflag = 1; if (usetint) tintflag = 1;
Vector4 textureAlphaMask = Vector4.Zero;
uint decalflag = DecalMode ? 1u : 0u;
uint windflag = geom.EnableWind ? 1u : 0u; uint windflag = geom.EnableWind ? 1u : 0u;
uint emflag = geom.IsEmissive ? 1u : 0u; uint emflag = geom.IsEmissive ? 1u : 0u;
uint pstintflag = tintflag;
var shaderName = geom.DrawableGeom.Shader.Name; var shaderName = geom.DrawableGeom.Shader.Name;
var shaderFile = geom.DrawableGeom.Shader.FileName; var shaderFile = geom.DrawableGeom.Shader.FileName;
switch (shaderFile.Hash) switch (shaderFile.Hash)
@ -606,9 +610,12 @@ namespace CodeWalker.Rendering
case 2706821972://{mirror_decal.sps} case 2706821972://{mirror_decal.sps}
//if (RenderMode == WorldRenderMode.Default) usediff = false; //if (RenderMode == WorldRenderMode.Default) usediff = false;
break; break;
case 2655725442://{decal_dirt.sps}
textureAlphaMask = geom.DirtDecalMask;
decalflag = 2;
break;
} }
uint pstintflag = tintflag;
if (VSEntityVars.Vars.IsInstanced>0) if (VSEntityVars.Vars.IsInstanced>0)
{ {
pstintflag = 1; pstintflag = 1;
@ -631,7 +638,7 @@ namespace CodeWalker.Rendering
PSGeomVars.Vars.EnableNormalMap = usebump ? 1u : 0u; PSGeomVars.Vars.EnableNormalMap = usebump ? 1u : 0u;
PSGeomVars.Vars.EnableSpecMap = usespec ? 1u : 0u; PSGeomVars.Vars.EnableSpecMap = usespec ? 1u : 0u;
PSGeomVars.Vars.EnableDetailMap = usedetl ? 1u : 0u; PSGeomVars.Vars.EnableDetailMap = usedetl ? 1u : 0u;
PSGeomVars.Vars.IsDecal = DecalMode ? 1u : 0u; PSGeomVars.Vars.IsDecal = decalflag;
PSGeomVars.Vars.IsEmissive = emflag; PSGeomVars.Vars.IsEmissive = emflag;
PSGeomVars.Vars.IsDistMap = isdistmap ? 1u : 0u; PSGeomVars.Vars.IsDistMap = isdistmap ? 1u : 0u;
PSGeomVars.Vars.bumpiness = geom.bumpiness; PSGeomVars.Vars.bumpiness = geom.bumpiness;
@ -645,6 +652,7 @@ namespace CodeWalker.Rendering
PSGeomVars.Vars.specularFresnel = geom.specularFresnel; PSGeomVars.Vars.specularFresnel = geom.specularFresnel;
PSGeomVars.Vars.wetnessMultiplier = geom.wetnessMultiplier; PSGeomVars.Vars.wetnessMultiplier = geom.wetnessMultiplier;
PSGeomVars.Vars.SpecOnly = geom.SpecOnly ? 1u : 0u; PSGeomVars.Vars.SpecOnly = geom.SpecOnly ? 1u : 0u;
PSGeomVars.Vars.TextureAlphaMask = textureAlphaMask;
PSGeomVars.Update(context); PSGeomVars.Update(context);
PSGeomVars.SetPSCBuffer(context, 2); PSGeomVars.SetPSCBuffer(context, 2);
@ -752,6 +760,7 @@ namespace CodeWalker.Rendering
PSGeomVars.Vars.specularFresnel = 1.0f; PSGeomVars.Vars.specularFresnel = 1.0f;
PSGeomVars.Vars.wetnessMultiplier = 0.0f; PSGeomVars.Vars.wetnessMultiplier = 0.0f;
PSGeomVars.Vars.SpecOnly = 0; PSGeomVars.Vars.SpecOnly = 0;
PSGeomVars.Vars.TextureAlphaMask = Vector4.Zero;
PSGeomVars.Update(context); PSGeomVars.Update(context);
PSGeomVars.SetPSCBuffer(context, 2); PSGeomVars.SetPSCBuffer(context, 2);

Binary file not shown.

View File

@ -36,6 +36,7 @@ cbuffer PSGeomVars : register(b2)
float specularFresnel; float specularFresnel;
float wetnessMultiplier; float wetnessMultiplier;
uint SpecOnly; uint SpecOnly;
float4 TextureAlphaMask;
} }
@ -77,6 +78,12 @@ float4 main(VS_OUTPUT input) : SV_TARGET
if ((IsDecal == 0) && (c.a <= 0.33)) discard; if ((IsDecal == 0) && (c.a <= 0.33)) discard;
if ((IsDecal == 1) && (c.a <= 0.0)) discard; if ((IsDecal == 1) && (c.a <= 0.0)) discard;
if(IsDecal==0) c.a = 1; if(IsDecal==0) c.a = 1;
if (IsDecal == 2)
{
float4 mask = TextureAlphaMask * c;
c.a = saturate(mask.r + mask.g + mask.b + mask.a);
c.rgb = 0;
}
c.a = saturate(c.a*AlphaScale); c.a = saturate(c.a*AlphaScale);
} }
if (EnableTint > 0) if (EnableTint > 0)

View File

@ -101,13 +101,13 @@ done:
[v.29] [v.29]
Improved selected MLO instance display - portals, limbo room
New Project Window New Project Window
RPF Explorer drag & drop RPF Explorer drag & drop
Show vehicle wheels Show vehicle wheels
Snap to ground, snap to grid Snap to ground, snap to grid
CodeWalker.Core library CodeWalker.Core library
Improved GTA folder management Improved GTA folder management
Improved selected MLO instance display - portals, limbo room
entitySets - like mapDataGroups but for interiors..... in Mlo data entitySets - like mapDataGroups but for interiors..... in Mlo data
World view - delete key - delete item! World view - delete key - delete item!
RPF Explorer Edit mode RPF Explorer Edit mode

View File

@ -53,7 +53,7 @@ namespace CodeWalker
bool rendermaps = false; bool rendermaps = false;
bool renderworld = false; bool renderworld = false;
int startupviewmode = 0; //0=world, 1=ymap, 2=model int startupviewmode = 0; //0=world, 1=ymap, 2=model
string modelname = "dt1_tc_dufo_core";//"dt1_11_fount_decal";// string modelname = "dt1_tc_dufo_core";//"dt1_11_fount_decal";//"v_22_overlays";//
string[] ymaplist; string[] ymaplist;
Vector3 prevworldpos = new Vector3(0, 0, 100); //also the start pos Vector3 prevworldpos = new Vector3(0, 0, 100); //also the start pos