From 3da075096fb2f0148bd216216bf50a79afe6ac1f Mon Sep 17 00:00:00 2001 From: floxay <57007485+floxay@users.noreply.github.com> Date: Wed, 24 Nov 2021 02:18:10 +0100 Subject: [PATCH 1/2] Valorant MRAE MRAS MRA MRS --- FModel/ViewModels/ModelViewerViewModel.cs | 40 ++++++++++++++++------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/FModel/ViewModels/ModelViewerViewModel.cs b/FModel/ViewModels/ModelViewerViewModel.cs index 06afded6..ba8c8478 100644 --- a/FModel/ViewModels/ModelViewerViewModel.cs +++ b/FModel/ViewModels/ModelViewerViewModel.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.IO; @@ -395,20 +395,36 @@ namespace FModel.ViewModels } case FGame.ShooterGame: { - // Valorant's Specular Texture Channels - // R Metallic - // G Specular - // B Roughness - unsafe + var packedPBRType = specular.Name[(specular.Name.LastIndexOf('_') + 1)..]; + switch (packedPBRType) { - var offset = 0; - fixed (byte* d = data) - for (var i = 0; i < mip.SizeX * mip.SizeY; i++) + case "MRAE": // R: Metallic, G: AO (0-127) & Emissive (128-255), B: Roughness (Character PBR) + unsafe { - (d[offset], d[offset+2]) = (d[offset+2], d[offset]); // swap R and B - (d[offset], d[offset+1]) = (d[offset+1], d[offset]); // swap B and G - offset += 4; + var offset = 0; + fixed (byte* d = data) + for (var i = 0; i < mip.SizeX * mip.SizeY; i++) + { + (d[offset], d[offset+2]) = (d[offset+2], d[offset]); // swap R and B + (d[offset], d[offset+1]) = (d[offset+1], d[offset]); // swap R and G + offset += 4; + } } + break; + case "MRAS": // R: Metallic, B: Roughness, B: AO, A: Specular (Legacy PBR) + case "MRA": // R: Metallic, B: Roughness, B: AO (Environment PBR) + case "MRS": // R: Metallic, G: Roughness, B: Specular (Weapon PBR) + unsafe + { + var offset = 0; + fixed (byte* d = data) + for (var i = 0; i < mip.SizeX * mip.SizeY; i++) + { + (d[offset], d[offset+2]) = (d[offset+2], d[offset]); // swap R and B + offset += 4; + } + } + break; } parameters.RoughnessValue = 1; parameters.MetallicValue = 1; From dce3d1fa17a2c5aafbd8ff87d28a2edd1f404ee9 Mon Sep 17 00:00:00 2001 From: floxay <57007485+floxay@users.noreply.github.com> Date: Wed, 24 Nov 2021 11:05:10 +0100 Subject: [PATCH 2/2] Brackets --- FModel/ViewModels/ModelViewerViewModel.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/FModel/ViewModels/ModelViewerViewModel.cs b/FModel/ViewModels/ModelViewerViewModel.cs index ba8c8478..f7630aaa 100644 --- a/FModel/ViewModels/ModelViewerViewModel.cs +++ b/FModel/ViewModels/ModelViewerViewModel.cs @@ -382,12 +382,14 @@ namespace FModel.ViewModels { var offset = 0; fixed (byte* d = data) + { for (var i = 0; i < mip.SizeX * mip.SizeY; i++) { d[offset] = 0; - (d[offset+1], d[offset+2]) = (d[offset+2], d[offset+1]); // swap G and B + (d[offset + 1], d[offset + 2]) = (d[offset + 2], d[offset + 1]); // swap G and B offset += 4; } + } } parameters.RoughnessValue = 1; parameters.MetallicValue = 1; @@ -403,12 +405,14 @@ namespace FModel.ViewModels { var offset = 0; fixed (byte* d = data) + { for (var i = 0; i < mip.SizeX * mip.SizeY; i++) { - (d[offset], d[offset+2]) = (d[offset+2], d[offset]); // swap R and B - (d[offset], d[offset+1]) = (d[offset+1], d[offset]); // swap R and G + (d[offset], d[offset + 2]) = (d[offset + 2], d[offset]); // swap R and B + (d[offset], d[offset + 1]) = (d[offset + 1], d[offset]); // swap R and G offset += 4; } + } } break; case "MRAS": // R: Metallic, B: Roughness, B: AO, A: Specular (Legacy PBR) @@ -418,11 +422,13 @@ namespace FModel.ViewModels { var offset = 0; fixed (byte* d = data) + { for (var i = 0; i < mip.SizeX * mip.SizeY; i++) { - (d[offset], d[offset+2]) = (d[offset+2], d[offset]); // swap R and B + (d[offset], d[offset + 2]) = (d[offset + 2], d[offset]); // swap R and B offset += 4; } + } } break; } @@ -440,11 +446,13 @@ namespace FModel.ViewModels { var offset = 0; fixed (byte* d = data) + { for (var i = 0; i < mip.SizeX * mip.SizeY; i++) { - (d[offset], d[offset+2]) = (d[offset+2], d[offset]); // swap R and B + (d[offset], d[offset + 2]) = (d[offset + 2], d[offset]); // swap R and B offset += 4; } + } } break; }