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] 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;