From 0264011ad06960e7ce681813f877f322531e49a0 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Wed, 7 Mar 2018 22:24:37 +1100 Subject: [PATCH] Shader improvements for decal_dirt --- Rendering/Renderable.cs | 4 ++++ Rendering/Shaders/BasicShader.cs | 13 +++++++++++-- Shaders/BasicPS.cso | Bin 10240 -> 10520 bytes Shaders/BasicPS.hlsl | 7 +++++++ Todo.txt | 2 +- WorldForm.cs | 2 +- 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 174204e..1e29636 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -386,6 +386,7 @@ namespace CodeWalker.Rendering public Vector4 WindOverrideParams { get; set; } = Vector4.One; public Vector4 globalAnimUV0 { 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 float WaveOffset { get; set; } = 0; //for terrainfoam public float WaterHeight { get; set; } = 0; //for terrainfoam @@ -583,6 +584,9 @@ namespace CodeWalker.Rendering case MetaName.HeightOpacity: HeightOpacity = ((Vector4)param.Data).X; break; + case MetaName.DirtDecalMask: + DirtDecalMask = ((Vector4)param.Data); + break; } } diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index e798c2d..cca0412 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -73,6 +73,7 @@ namespace CodeWalker.Rendering public float specularFresnel; public float wetnessMultiplier; public uint SpecOnly; + public Vector4 TextureAlphaMask; } public struct BasicShaderInstGlobalMatrix { @@ -588,8 +589,11 @@ namespace CodeWalker.Rendering uint tintflag = 0; if (usetint) tintflag = 1; + Vector4 textureAlphaMask = Vector4.Zero; + uint decalflag = DecalMode ? 1u : 0u; uint windflag = geom.EnableWind ? 1u : 0u; uint emflag = geom.IsEmissive ? 1u : 0u; + uint pstintflag = tintflag; var shaderName = geom.DrawableGeom.Shader.Name; var shaderFile = geom.DrawableGeom.Shader.FileName; switch (shaderFile.Hash) @@ -606,9 +610,12 @@ namespace CodeWalker.Rendering case 2706821972://{mirror_decal.sps} //if (RenderMode == WorldRenderMode.Default) usediff = false; break; + case 2655725442://{decal_dirt.sps} + textureAlphaMask = geom.DirtDecalMask; + decalflag = 2; + break; } - uint pstintflag = tintflag; if (VSEntityVars.Vars.IsInstanced>0) { pstintflag = 1; @@ -631,7 +638,7 @@ namespace CodeWalker.Rendering PSGeomVars.Vars.EnableNormalMap = usebump ? 1u : 0u; PSGeomVars.Vars.EnableSpecMap = usespec ? 1u : 0u; PSGeomVars.Vars.EnableDetailMap = usedetl ? 1u : 0u; - PSGeomVars.Vars.IsDecal = DecalMode ? 1u : 0u; + PSGeomVars.Vars.IsDecal = decalflag; PSGeomVars.Vars.IsEmissive = emflag; PSGeomVars.Vars.IsDistMap = isdistmap ? 1u : 0u; PSGeomVars.Vars.bumpiness = geom.bumpiness; @@ -645,6 +652,7 @@ namespace CodeWalker.Rendering PSGeomVars.Vars.specularFresnel = geom.specularFresnel; PSGeomVars.Vars.wetnessMultiplier = geom.wetnessMultiplier; PSGeomVars.Vars.SpecOnly = geom.SpecOnly ? 1u : 0u; + PSGeomVars.Vars.TextureAlphaMask = textureAlphaMask; PSGeomVars.Update(context); PSGeomVars.SetPSCBuffer(context, 2); @@ -752,6 +760,7 @@ namespace CodeWalker.Rendering PSGeomVars.Vars.specularFresnel = 1.0f; PSGeomVars.Vars.wetnessMultiplier = 0.0f; PSGeomVars.Vars.SpecOnly = 0; + PSGeomVars.Vars.TextureAlphaMask = Vector4.Zero; PSGeomVars.Update(context); PSGeomVars.SetPSCBuffer(context, 2); diff --git a/Shaders/BasicPS.cso b/Shaders/BasicPS.cso index c9d9284507cb585fbcd16e9966a18ba3adbfd1e9..70a6f78b5a964e92b52f378e8a07583b00851e27 100644 GIT binary patch delta 722 zcmZvZ%PT~26vxjsX71eEFof>Rm^2Yt(`1IB5 z+xWa+zmbT@RY7Eh*22$JqA~~382q4|Xt=ApXLTo3sPq9$Alo8N{COv_OG(K`db3Ov z(_1o{tZuJ@JuDNR0spY^jwm2@WX)X%YRB#`?H1>tBcM6|&>8Uz8U=OzLzhLdU2`Wu zeZS}}mw;`FA<#WgTq9MNqb5BPNxRm23K~R|Yje-{7JOhAh_^v8gp^%l&-MuIhnlxA zPkR>+sFjTojT)4*OQk%Ws-8p5^>Zp=recrKQ*>!r?_zI1f^E3|QhqXz3C^YFyUC($Cxy0ZB zLp_F86RAHek^YDC*naYSq^={z^}^{q4~73E)}xs?CyGjsR@OkIyciiaD7V;?{e288 foBrfH&)2h2bM2v!5d9e^}2 z5Wrv$kPiZ9fV2;ghWP?!+M~%2fp&cZ%7#E?L8@W0Y?B2!#f2n50f?mc58LJ-PG!c) zZCpl-t2gi9TEfWXBMq_kGTY=d9z903%~N@rnKyF?&Jh>=0n`a~1OqRSoesp(lXq&E TbIJo*B0$Uzj2Q9B0-78EAgV=C diff --git a/Shaders/BasicPS.hlsl b/Shaders/BasicPS.hlsl index f55adfd..ca600f4 100644 --- a/Shaders/BasicPS.hlsl +++ b/Shaders/BasicPS.hlsl @@ -36,6 +36,7 @@ cbuffer PSGeomVars : register(b2) float specularFresnel; float wetnessMultiplier; 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 == 1) && (c.a <= 0.0)) discard; 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); } if (EnableTint > 0) diff --git a/Todo.txt b/Todo.txt index 226e7e1..df52606 100644 --- a/Todo.txt +++ b/Todo.txt @@ -101,13 +101,13 @@ done: [v.29] -Improved selected MLO instance display - portals, limbo room New Project Window RPF Explorer drag & drop Show vehicle wheels Snap to ground, snap to grid CodeWalker.Core library Improved GTA folder management +Improved selected MLO instance display - portals, limbo room entitySets - like mapDataGroups but for interiors..... in Mlo data World view - delete key - delete item! RPF Explorer Edit mode diff --git a/WorldForm.cs b/WorldForm.cs index 5aebede..8814803 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -53,7 +53,7 @@ namespace CodeWalker bool rendermaps = false; bool renderworld = false; 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; Vector3 prevworldpos = new Vector3(0, 0, 100); //also the start pos