@@ -336,6 +336,10 @@ public ShaderInfo GetShaderInfo()
336
336
info . RenderBackfaces = true ;
337
337
}
338
338
339
+ var txul = TextureUsageList ;
340
+ var txdl = TextureDescriptorList ;
341
+ var shpl = ShaderParameterList ;
342
+
339
343
info . Preset = MtrlShaderPreset . Default ;
340
344
if ( info . Shader == MtrlShader . Standard )
341
345
{
@@ -347,7 +351,14 @@ public ShaderInfo GetShaderInfo()
347
351
{
348
352
if ( hasSpec )
349
353
{
350
- info . Preset = MtrlShaderPreset . DiffuseSpecular ;
354
+ if ( GetTextureUsage ( XivTexType . Specular ) != null )
355
+ {
356
+ info . Preset = MtrlShaderPreset . Monster ;
357
+ }
358
+ else
359
+ {
360
+ info . Preset = MtrlShaderPreset . DiffuseSpecular ;
361
+ }
351
362
} else
352
363
{
353
364
info . Preset = MtrlShaderPreset . DiffuseMulti ;
@@ -806,7 +817,7 @@ private void RegenerateTextureUsageList(ShaderInfo info)
806
817
{
807
818
SetTextureUsage ( XivTexType . Normal ) ;
808
819
SetTextureUsage ( XivTexType . Diffuse ) ;
809
- SetTextureUsage ( XivTexType . Multi ) ;
820
+ SetTextureUsage ( XivTexType . Decal ) ;
810
821
SetTextureUsage ( XivTexType . Specular ) ;
811
822
}
812
823
else
@@ -819,42 +830,36 @@ private void RegenerateTextureUsageList(ShaderInfo info)
819
830
else if ( info . Shader == MtrlShader . Standard )
820
831
{
821
832
SetTextureUsage ( XivTexType . Normal ) ;
822
- if ( info . Preset == MtrlShaderPreset . Default )
833
+ if ( info . Preset == MtrlShaderPreset . Default )
823
834
{
824
- SetTextureUsage ( XivTexType . Multi ) ;
835
+ SetTextureUsage ( XivTexType . Decal ) ;
825
836
826
- } else if ( info . Preset == MtrlShaderPreset . DiffuseMulti )
837
+ }
838
+ else if ( info . Preset == MtrlShaderPreset . DiffuseMulti )
827
839
{
828
840
// This seems to crash the game atm.
829
841
SetTextureUsage ( XivTexType . Diffuse ) ;
830
- SetTextureUsage ( XivTexType . Multi ) ;
831
- } else
832
- {
833
- SetTextureUsage ( XivTexType . Diffuse ) ;
834
- SetTextureUsage ( XivTexType . Multi ) ;
835
- }
836
- if ( info . HasDiffuse )
837
- {
842
+ SetTextureUsage ( XivTexType . Decal ) ;
838
843
}
839
- if ( info . HasMulti || info . HasSpec )
844
+ else if ( info . Preset == MtrlShaderPreset . Monster )
840
845
{
846
+ SetTextureUsage ( XivTexType . Diffuse ) ;
847
+ SetTextureUsage ( XivTexType . Decal ) ;
848
+
849
+ // This flag seems to convert Specular textures to Multi textures.
850
+ SetTextureUsage ( XivTexType . Specular ) ;
841
851
}
842
- if ( info . HasSpec )
852
+ else
843
853
{
844
- // What does this do? It's only found on extremely rare items with specular maps,
845
- // and if when we add it/touch it, it either totally breaks the specularity, or crashes.
846
- // And on the items it is involved in, adding/removing it seems to do nothing.
847
- // Might be a glass shader only value?
848
- // SetTextureUsage(XivTexType.Specular);
854
+ SetTextureUsage ( XivTexType . Diffuse ) ;
855
+ SetTextureUsage ( XivTexType . Decal ) ;
849
856
}
850
857
}
851
858
else
852
859
{
853
860
// This is uh... Glass shader? I think is the only fall through here.
854
861
SetTextureUsage ( XivTexType . Normal ) ;
855
- SetTextureUsage ( XivTexType . Diffuse ) ;
856
- SetTextureUsage ( XivTexType . Multi ) ;
857
- SetTextureUsage ( XivTexType . Specular ) ;
862
+ SetTextureUsage ( XivTexType . Decal ) ;
858
863
}
859
864
860
865
}
@@ -866,16 +871,14 @@ private void RegenerateShaderParameterList(ShaderInfo info)
866
871
{
867
872
var args = new Dictionary < MtrlShaderParameterId , List < float > > ( ) ;
868
873
869
- args . Add ( MtrlShaderParameterId . Common1 , null ) ;
870
- args . Add ( MtrlShaderParameterId . Common2 , null ) ;
874
+ args . Add ( MtrlShaderParameterId . AlphaLimiter , null ) ;
875
+ args . Add ( MtrlShaderParameterId . Occlusion , null ) ;
871
876
872
877
if ( info . Shader == MtrlShader . Skin )
873
878
{
874
879
args . Add ( MtrlShaderParameterId . SkinColor , null ) ;
875
880
args . Add ( MtrlShaderParameterId . SkinMatParamRow2 , null ) ;
876
881
args . Add ( MtrlShaderParameterId . SkinWetnessLerp , null ) ;
877
- //args.Add(MtrlShaderParameterId.SkinWetnessLerp, new List<float>() { 1.0f });
878
- //args.Add(MtrlShaderParameterId.SkinMatParamRow2, new List<float>() { 1.0f, 1.0f, 1.0f });
879
882
args . Add ( MtrlShaderParameterId . SkinUnknown2 , null ) ;
880
883
args . Add ( MtrlShaderParameterId . SkinFresnel , null ) ;
881
884
args . Add ( MtrlShaderParameterId . Reflection1 , null ) ;
@@ -896,10 +899,21 @@ private void RegenerateShaderParameterList(ShaderInfo info)
896
899
args . Add ( MtrlShaderParameterId . Face1 , null ) ;
897
900
}
898
901
}
899
- else if ( info . Shader == MtrlShader . Standard || info . Shader == MtrlShader . Glass )
902
+ else if ( info . Shader == MtrlShader . Standard )
900
903
{
901
- args . Add ( MtrlShaderParameterId . Equipment1 , null ) ;
902
- args . Add ( MtrlShaderParameterId . Reflection1 , null ) ;
904
+ if ( info . Preset == MtrlShaderPreset . Monster )
905
+ {
906
+ args . Remove ( MtrlShaderParameterId . AlphaLimiter ) ;
907
+ args . Remove ( MtrlShaderParameterId . Occlusion ) ;
908
+ args . Add ( MtrlShaderParameterId . AlphaLimiter , new List < float > ( ) { 0.5f } ) ;
909
+ args . Add ( MtrlShaderParameterId . Occlusion , new List < float > ( ) { 0.25f } ) ;
910
+ args . Add ( MtrlShaderParameterId . Hair1 , new List < float > ( ) { 0 } ) ;
911
+ }
912
+ else
913
+ {
914
+ args . Add ( MtrlShaderParameterId . Equipment1 , null ) ;
915
+ args . Add ( MtrlShaderParameterId . Reflection1 , null ) ;
916
+ }
903
917
}
904
918
else if ( info . Shader == MtrlShader . Iris )
905
919
{
@@ -924,6 +938,13 @@ private void RegenerateShaderParameterList(ShaderInfo info)
924
938
args [ MtrlShaderParameterId . SkinColor ] = new List < float > ( ) { 3f , 3f , 3f } ;
925
939
}
926
940
}
941
+ else if ( info . Shader == MtrlShader . Glass )
942
+ {
943
+ args . Remove ( MtrlShaderParameterId . AlphaLimiter ) ;
944
+ args . Remove ( MtrlShaderParameterId . Occlusion ) ;
945
+ args . Add ( MtrlShaderParameterId . AlphaLimiter , new List < float > ( ) { 0.25f } ) ;
946
+ args . Add ( MtrlShaderParameterId . Hair2 , new List < float > ( ) { 1.0f } ) ;
947
+ }
927
948
928
949
929
950
// Regenerate the list.
@@ -1468,6 +1489,7 @@ public enum MtrlShaderPreset
1468
1489
Face ,
1469
1490
FaceNoPores ,
1470
1491
FaceBright ,
1492
+ Monster ,
1471
1493
}
1472
1494
1473
1495
/// <summary>
@@ -1476,8 +1498,8 @@ public enum MtrlShaderPreset
1476
1498
/// </summary>
1477
1499
public enum MtrlShaderParameterId : uint
1478
1500
{
1479
- Common1 = 699138595 , // Used in every material. Overwriting bytes with 0s seems to have no effect.
1480
- Common2 = 1465565106 , // Used in every material. Overwriting bytes with 0s seems to have no effect.
1501
+ AlphaLimiter = 699138595 , // Used in every material. Overwriting bytes with 0s seems to have no effect.
1502
+ Occlusion = 1465565106 , // Used in every material. Overwriting bytes with 0s seems to have no effect.
1481
1503
1482
1504
SkinColor = 740963549 , // This skin args seem to be the same for all races.
1483
1505
SkinWetnessLerp = 2569562539 ,
@@ -1575,7 +1597,7 @@ public bool HasSpec
1575
1597
{
1576
1598
get
1577
1599
{
1578
- if ( Shader == MtrlShader . Standard && Preset == MtrlShaderPreset . DiffuseSpecular )
1600
+ if ( Shader == MtrlShader . Standard && ( Preset == MtrlShaderPreset . DiffuseSpecular || Preset == MtrlShaderPreset . Monster ) )
1579
1601
{
1580
1602
return true ;
1581
1603
} else if ( Shader == MtrlShader . Furniture || Shader == MtrlShader . DyeableFurniture )
@@ -1626,6 +1648,7 @@ public static List<MtrlShaderPreset> GetAvailablePresets(MtrlShader shader)
1626
1648
{
1627
1649
//presets.Add(MtrlShaderPreset.DiffuseMulti);
1628
1650
presets . Add ( MtrlShaderPreset . DiffuseSpecular ) ;
1651
+ presets . Add ( MtrlShaderPreset . Monster ) ;
1629
1652
} else if ( shader == MtrlShader . Skin )
1630
1653
{
1631
1654
presets . Add ( MtrlShaderPreset . BodyNoPores ) ;
0 commit comments