mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-03 12:44:26 -07:00
161 lines
5.6 KiB
C#
161 lines
5.6 KiB
C#
|
|
// Alloy Physical Shader Framework
|
||
|
|
// Copyright 2013-2017 RUST LLC.
|
||
|
|
// http://www.alloy.rustltd.com/
|
||
|
|
|
||
|
|
using System;
|
||
|
|
using System.IO;
|
||
|
|
using UnityEditor;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
namespace Alloy
|
||
|
|
{
|
||
|
|
// This stores information used by the asset re-importer;
|
||
|
|
// to rebuild Mip Maps with corrected roughness information.
|
||
|
|
public class AlloyCustomImportObject : ScriptableObject
|
||
|
|
{
|
||
|
|
[HideInInspector]
|
||
|
|
public Vector4 ChannelValues = new Vector4(0.0f, 0.0f, 0.5f, 0.0f);
|
||
|
|
|
||
|
|
public string[] TexturesGUID = {"", "", "", ""};
|
||
|
|
public string NormalGUID;
|
||
|
|
|
||
|
|
public bool[] DoInvert = {false, false, false, false};
|
||
|
|
|
||
|
|
|
||
|
|
public float VarianceBias;
|
||
|
|
|
||
|
|
public int Width;
|
||
|
|
public int Height;
|
||
|
|
|
||
|
|
public bool DoAutoRegenerate;
|
||
|
|
public TextureValueChannelMode[] SelectedModes = {
|
||
|
|
TextureValueChannelMode.Texture,
|
||
|
|
TextureValueChannelMode.Texture,
|
||
|
|
TextureValueChannelMode.Gray,
|
||
|
|
TextureValueChannelMode.Texture
|
||
|
|
};
|
||
|
|
|
||
|
|
Texture2D[] m_textures;
|
||
|
|
public static readonly int[] s_Resolutions = {0, 32, 64, 128, 256, 512, 1024, 2048, 4096};
|
||
|
|
[HideInInspector] public int MaxResolution = 0;
|
||
|
|
|
||
|
|
|
||
|
|
/// ///LEGACY:
|
||
|
|
public bool IsDetailMap;
|
||
|
|
public bool IsTerrainMap;
|
||
|
|
/// ///
|
||
|
|
|
||
|
|
[SerializeField]
|
||
|
|
PackedMapDefinition m_packMode;
|
||
|
|
|
||
|
|
public PackedMapDefinition PackMode {
|
||
|
|
get {
|
||
|
|
if (m_packMode == null) {
|
||
|
|
var defintion = AlloyMaterialMapChannelPacker.GlobalDefinition;
|
||
|
|
|
||
|
|
if (IsDetailMap) {
|
||
|
|
m_packMode = defintion.DetailPack;
|
||
|
|
}else if (IsTerrainMap) {
|
||
|
|
m_packMode = defintion.TerrainPack;
|
||
|
|
} else {
|
||
|
|
m_packMode = defintion.PackedPack;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return m_packMode;
|
||
|
|
}
|
||
|
|
set { m_packMode = value; }
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
Texture2D m_normalTex;
|
||
|
|
public Texture2D NormalMapTexture {
|
||
|
|
get {
|
||
|
|
if (m_normalTex == null) {
|
||
|
|
m_normalTex =
|
||
|
|
AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(NormalGUID), typeof(Texture2D)) as Texture2D;
|
||
|
|
}
|
||
|
|
|
||
|
|
return m_normalTex;
|
||
|
|
}
|
||
|
|
set {
|
||
|
|
m_normalTex = value;
|
||
|
|
NormalGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(value));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public void SetTextures(Texture2D[] textures, Texture2D normalMap) {
|
||
|
|
m_textures = textures;
|
||
|
|
NormalMapTexture = normalMap;
|
||
|
|
|
||
|
|
TexturesGUID = new string[textures.Length];
|
||
|
|
|
||
|
|
for (int i = 0; i < textures.Length; ++i) {
|
||
|
|
TexturesGUID[i] = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(textures[i]));
|
||
|
|
}
|
||
|
|
|
||
|
|
NormalGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(normalMap));
|
||
|
|
}
|
||
|
|
|
||
|
|
public Texture2D GetTexture(int index) {
|
||
|
|
if (m_textures == null || m_textures.Length == 0) {
|
||
|
|
m_textures = new Texture2D[4];
|
||
|
|
}
|
||
|
|
|
||
|
|
if (m_textures[index] == null) {
|
||
|
|
m_textures[index] =
|
||
|
|
AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(TexturesGUID[index]), typeof (Texture2D)) as Texture2D;
|
||
|
|
}
|
||
|
|
|
||
|
|
return m_textures[index];
|
||
|
|
}
|
||
|
|
|
||
|
|
public const int DefaultOutputWidth = 32,
|
||
|
|
DefaultOutputHeight = 32,
|
||
|
|
DefaultOutputMipmapCount = 1;
|
||
|
|
|
||
|
|
public Vector2 GetOutputSize() {
|
||
|
|
int width = DefaultOutputWidth;
|
||
|
|
int height = DefaultOutputHeight;
|
||
|
|
|
||
|
|
// Pick output texture dimensions based on the largest input texture.
|
||
|
|
for (int i = 0; i < 4; ++i) {
|
||
|
|
var texture = GetTexture(i);
|
||
|
|
|
||
|
|
if (SelectedModes[i] == TextureValueChannelMode.Texture && texture != null) {
|
||
|
|
// So we can accomodate rectangles, if need be.
|
||
|
|
width = Math.Max(width, texture.width);
|
||
|
|
height = Math.Max(height, texture.height);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (NormalMapTexture != null) {
|
||
|
|
width = Math.Max(width, NormalMapTexture.width);
|
||
|
|
height = Math.Max(height, NormalMapTexture.height);
|
||
|
|
}
|
||
|
|
|
||
|
|
return new Vector2(width, height);
|
||
|
|
}
|
||
|
|
|
||
|
|
public void GenerateMap() {
|
||
|
|
string path = AssetDatabase.GetAssetPath(this).Replace(".asset", ".png");
|
||
|
|
|
||
|
|
var tempTex = new Texture2D(4, 4, TextureFormat.ARGB32, true);
|
||
|
|
AssetDatabase.DeleteAsset(path);
|
||
|
|
File.WriteAllBytes(path, tempTex.EncodeToPNG());
|
||
|
|
AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);
|
||
|
|
}
|
||
|
|
|
||
|
|
public void SetTexture(Texture2D selTex, int texIndex) {
|
||
|
|
TexturesGUID[texIndex] = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(selTex));
|
||
|
|
m_textures[texIndex] = selTex;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void ClearCache() {
|
||
|
|
m_textures[0] = null;
|
||
|
|
m_textures[1] = null;
|
||
|
|
m_textures[2] = null;
|
||
|
|
m_textures[3] = null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|