Restructure

This commit is contained in:
TerrificTrifid 2023-04-21 16:50:33 -05:00
parent 3d94e07a98
commit df6c31d45e

View File

@ -23,22 +23,22 @@ namespace NewHorizons.Builder.Body
Texture2D smoothnessMap; Texture2D smoothnessMap;
Texture2D normalMap; Texture2D normalMap;
Texture2D emissionMap; Texture2D emissionMap;
Texture2D tileBlendMap; Texture2D tileBlendMap = null;
Texture2D baseTextureTile; Texture2D baseTextureTile = null;
Texture2D baseSmoothnessTile; Texture2D baseSmoothnessTile = null;
Texture2D baseNormalTile; Texture2D baseNormalTile = null;
Texture2D redTextureTile; Texture2D redTextureTile = null;
Texture2D redSmoothnessTile; Texture2D redSmoothnessTile = null;
Texture2D redNormalTile; Texture2D redNormalTile = null;
Texture2D greenTextureTile; Texture2D greenTextureTile = null;
Texture2D greenSmoothnessTile; Texture2D greenSmoothnessTile = null;
Texture2D greenNormalTile; Texture2D greenNormalTile = null;
Texture2D blueTextureTile; Texture2D blueTextureTile = null;
Texture2D blueSmoothnessTile; Texture2D blueSmoothnessTile = null;
Texture2D blueNormalTile; Texture2D blueNormalTile = null;
Texture2D alphaTextureTile; Texture2D alphaTextureTile = null;
Texture2D alphaSmoothnessTile; Texture2D alphaSmoothnessTile = null;
Texture2D alphaNormalTile; Texture2D alphaNormalTile = null;
try try
{ {
if (!string.IsNullOrEmpty(module.heightMap) && !File.Exists(Path.Combine(mod.ModHelper.Manifest.ModFolderPath, module.heightMap))) if (!string.IsNullOrEmpty(module.heightMap) && !File.Exists(Path.Combine(mod.ModHelper.Manifest.ModFolderPath, module.heightMap)))
@ -73,22 +73,41 @@ namespace NewHorizons.Builder.Body
smoothnessMap = Load(module.smoothnessMap, "smoothnessMap", false); smoothnessMap = Load(module.smoothnessMap, "smoothnessMap", false);
normalMap = Load(module.normalMap, "normalMap", true); normalMap = Load(module.normalMap, "normalMap", true);
emissionMap = Load(module.emissionMap, "emissionMap", false); emissionMap = Load(module.emissionMap, "emissionMap", false);
tileBlendMap = Load(module.tileBlendMap, "tileBlendMap", false);
baseTextureTile = Load(module.baseTile.textureTile, "baseTile textureTile", false); if (useLOD)
baseSmoothnessTile = Load(module.baseTile.smoothnessTile, "baseTile smoothnessTile", false); {
baseNormalTile = Load(module.baseTile.normalTile, "baseTile normalTile", true); tileBlendMap = Load(module.tileBlendMap, "tileBlendMap", false);
redTextureTile = Load(module.redTile.textureTile, "redTile textureTile", false); if (module.baseTile != null)
redSmoothnessTile = Load(module.redTile.smoothnessTile, "redTile smoothnessTile", false); {
redNormalTile = Load(module.redTile.normalTile, "redTile normalTile", true); baseTextureTile = Load(module.baseTile.textureTile, "baseTile textureTile", false);
greenTextureTile = Load(module.greenTile.textureTile, "greenTile textureTile", false); baseSmoothnessTile = Load(module.baseTile.smoothnessTile, "baseTile smoothnessTile", false);
greenSmoothnessTile = Load(module.greenTile.smoothnessTile, "greenTile smoothnessTile", false); baseNormalTile = Load(module.baseTile.normalTile, "baseTile normalTile", true);
greenNormalTile = Load(module.greenTile.normalTile, "greenTile normalTile", true); }
blueTextureTile = Load(module.blueTile.textureTile, "blueTile textureTile", false); if (module.redTile != null)
blueSmoothnessTile = Load(module.blueTile.smoothnessTile, "blueTile smoothnessTile", false); {
blueNormalTile = Load(module.blueTile.normalTile, "blueTile normalTile", true); redTextureTile = Load(module.redTile.textureTile, "redTile textureTile", false);
alphaTextureTile = Load(module.alphaTile.textureTile, "alphaTile textureTile", false); redSmoothnessTile = Load(module.redTile.smoothnessTile, "redTile smoothnessTile", false);
alphaSmoothnessTile = Load(module.alphaTile.smoothnessTile, "alphaTile smoothnessTile", false); redNormalTile = Load(module.redTile.normalTile, "redTile normalTile", true);
alphaNormalTile = Load(module.alphaTile.normalTile, "alphaTile normalTile", true); }
if (module.greenTile != null)
{
greenTextureTile = Load(module.greenTile.textureTile, "greenTile textureTile", false);
greenSmoothnessTile = Load(module.greenTile.smoothnessTile, "greenTile smoothnessTile", false);
greenNormalTile = Load(module.greenTile.normalTile, "greenTile normalTile", true);
}
if (module.blueTile != null)
{
blueTextureTile = Load(module.blueTile.textureTile, "blueTile textureTile", false);
blueSmoothnessTile = Load(module.blueTile.smoothnessTile, "blueTile smoothnessTile", false);
blueNormalTile = Load(module.blueTile.normalTile, "blueTile normalTile", true);
}
if (module.alphaTile != null)
{
alphaTextureTile = Load(module.alphaTile.textureTile, "alphaTile textureTile", false);
alphaSmoothnessTile = Load(module.alphaTile.smoothnessTile, "alphaTile smoothnessTile", false);
alphaNormalTile = Load(module.alphaTile.normalTile, "alphaTile normalTile", true);
}
}
// If the texturemap is the same as the heightmap don't delete it #176 // If the texturemap is the same as the heightmap don't delete it #176
// Do the same with emissionmap // Do the same with emissionmap
@ -111,16 +130,7 @@ namespace NewHorizons.Builder.Body
var emissionColor = module.emissionColor?.ToColor() ?? Color.white; var emissionColor = module.emissionColor?.ToColor() ?? Color.white;
var level1 = MakeLODTerrain( var level1 = MakeLODTerrain(resolution, useLOD);
cubeSphere, heightMap, module.minHeight, module.maxHeight, resolution, stretch,
textureMap, smoothnessMap, module.smoothness, module.metallic, normalMap, module.normalStrength, emissionMap, emissionColor,
tileBlendMap,
module.baseTile.scale, baseTextureTile, baseSmoothnessTile, baseNormalTile, module.baseTile.normalStrength,
module.redTile.scale, redTextureTile, redSmoothnessTile, redNormalTile, module.redTile.normalStrength,
module.greenTile.scale, greenTextureTile, greenSmoothnessTile, greenNormalTile, module.greenTile.normalStrength,
module.blueTile.scale, blueTextureTile, blueSmoothnessTile, blueNormalTile, module.blueTile.normalStrength,
module.alphaTile.scale, alphaTextureTile, alphaSmoothnessTile, alphaNormalTile, module.alphaTile.normalStrength
);
var cubeSphereMC = cubeSphere.AddComponent<MeshCollider>(); var cubeSphereMC = cubeSphere.AddComponent<MeshCollider>();
cubeSphereMC.sharedMesh = level1.gameObject.GetComponent<MeshFilter>().mesh; cubeSphereMC.sharedMesh = level1.gameObject.GetComponent<MeshFilter>().mesh;
@ -128,16 +138,7 @@ namespace NewHorizons.Builder.Body
if (useLOD) if (useLOD)
{ {
var level2Res = (int)Mathf.Clamp(resolution / 2f, 1 /*cube moment*/, 100); var level2Res = (int)Mathf.Clamp(resolution / 2f, 1 /*cube moment*/, 100);
var level2 = MakeLODTerrain( var level2 = MakeLODTerrain(level2Res, false);
cubeSphere, heightMap, module.minHeight, module.maxHeight, level2Res, stretch,
textureMap, smoothnessMap, module.smoothness, module.metallic, normalMap, module.normalStrength, emissionMap, emissionColor,
default,
default, default, default, default, default,
default, default, default, default, default,
default, default, default, default, default,
default, default, default, default, default,
default, default, default, default, default
);
var LODGroup = cubeSphere.AddComponent<LODGroup>(); var LODGroup = cubeSphere.AddComponent<LODGroup>();
LODGroup.size = module.maxHeight; LODGroup.size = module.maxHeight;
@ -170,108 +171,104 @@ namespace NewHorizons.Builder.Body
if (deleteHeightmapFlag) ImageUtilities.DeleteTexture(mod, module.heightMap, heightMap); if (deleteHeightmapFlag) ImageUtilities.DeleteTexture(mod, module.heightMap, heightMap);
return cubeSphere; return cubeSphere;
}
// lol fuck the stack
private static MeshRenderer MakeLODTerrain(
GameObject root, Texture2D heightMap, float minHeight, float maxHeight, int resolution, Vector3 stretch,
Texture2D textureMap, Texture2D smoothnessMap, float smoothness, float metallic, Texture2D normalMap, float normalStrength, Texture2D emissionMap, Color emissionColor,
Texture2D tileBlendMap,
float baseScale, Texture2D baseTextureTile, Texture2D baseSmoothnessTile, Texture2D baseNormalTile, float baseNormalStrength,
float redScale, Texture2D redTextureTile, Texture2D redSmoothnessTile, Texture2D redNormalTile, float redNormalStrength,
float greenScale, Texture2D greenTextureTile, Texture2D greenSmoothnessTile, Texture2D greenNormalTile, float greenNormalStrength,
float blueScale, Texture2D blueTextureTile, Texture2D blueSmoothnessTile, Texture2D blueNormalTile, float blueNormalStrength,
float alphaScale, Texture2D alphaTextureTile, Texture2D alphaSmoothnessTile, Texture2D alphaNormalTile, float alphaNormalStrength
)
{
var LODCubeSphere = new GameObject("LODCubeSphere");
LODCubeSphere.AddComponent<MeshFilter>().mesh = CubeSphere.Build(resolution, heightMap, minHeight, maxHeight, stretch);
var cubeSphereMR = LODCubeSphere.AddComponent<MeshRenderer>(); MeshRenderer MakeLODTerrain(int resolution, bool useTriplanar)
var material = new Material(PlanetShader);
cubeSphereMR.material = material;
material.name = textureMap.name;
// string based property lookup. cry about it
material.mainTexture = textureMap;
material.SetFloat("_Smoothness", smoothness);
material.SetFloat("_Metallic", metallic);
material.SetTexture("_SmoothnessMap", smoothnessMap);
material.SetFloat("_BumpStrength", normalStrength);
material.SetTexture("_BumpMap", normalMap);
material.SetColor("_EmissionColor", emissionColor);
material.SetTexture("_EmissionMap", emissionMap);
material.SetTexture("_BlendMap", tileBlendMap);
if (baseTextureTile || baseSmoothnessTile || baseNormalTile)
{ {
material.EnableKeyword("BASE_TILE"); var LODCubeSphere = new GameObject("LODCubeSphere");
material.SetFloat("_BaseTileScale", baseScale);
material.SetTexture("_BaseTileAlbedo", baseTextureTile);
material.SetTexture("_BaseTileSmoothnessMap", baseSmoothnessTile);
material.SetFloat("_BaseTileBumpStrength", baseNormalStrength);
material.SetTexture("_BaseTileBumpMap", baseNormalTile);
}
else
{
material.DisableKeyword("BASE_TILE");
}
if (redTextureTile || redSmoothnessTile || redNormalTile)
{
material.EnableKeyword("RED_TILE");
material.SetFloat("_RedTileScale", redScale);
material.SetTexture("_RedTileAlbedo", redTextureTile);
material.SetTexture("_RedTileSmoothnessMap", redSmoothnessTile);
material.SetFloat("_RedTileBumpStrength", redNormalStrength);
material.SetTexture("_RedTileBumpMap", redNormalTile);
}
else
{
material.DisableKeyword("RED_TILE");
}
if (greenTextureTile || greenSmoothnessTile || greenNormalTile)
{
material.EnableKeyword("GREEN_TILE");
material.SetFloat("_GreenTileScale", greenScale);
material.SetTexture("_GreenTileAlbedo", greenTextureTile);
material.SetTexture("_GreenTileSmoothnessMap", greenSmoothnessTile);
material.SetFloat("_GreenTileBumpStrength", greenNormalStrength);
material.SetTexture("_GreenTileBumpMap", greenNormalTile);
}
else
{
material.DisableKeyword("GREEN_TILE");
}
if (blueTextureTile || blueSmoothnessTile || blueNormalTile)
{
material.EnableKeyword("BLUE_TILE");
material.SetFloat("_BlueTileScale", blueScale);
material.SetTexture("_BlueTileAlbedo", blueTextureTile);
material.SetTexture("_BlueTileSmoothnessMap", blueSmoothnessTile);
material.SetFloat("_BlueTileBumpStrength", blueNormalStrength);
material.SetTexture("_BlueTileBumpMap", blueNormalTile);
}
else
{
material.DisableKeyword("BLUE_TILE");
}
if (alphaTextureTile || alphaSmoothnessTile || alphaNormalTile)
{
material.EnableKeyword("ALPHA_TILE");
material.SetFloat("_AlphaTileScale", alphaScale);
material.SetTexture("_AlphaTileAlbedo", alphaTextureTile);
material.SetTexture("_AlphaTileSmoothnessMap", alphaSmoothnessTile);
material.SetFloat("_AlphaTileBumpStrength", alphaNormalStrength);
material.SetTexture("_AlphaTileBumpMap", alphaNormalTile);
}
else
{
material.DisableKeyword("ALPHA_TILE");
}
LODCubeSphere.transform.parent = root.transform; LODCubeSphere.AddComponent<MeshFilter>().mesh = CubeSphere.Build(resolution, heightMap, module.minHeight, module.maxHeight, stretch);
LODCubeSphere.transform.localPosition = Vector3.zero;
return cubeSphereMR; var cubeSphereMR = LODCubeSphere.AddComponent<MeshRenderer>();
var material = new Material(PlanetShader);
cubeSphereMR.material = material;
material.name = textureMap.name;
material.mainTexture = textureMap;
material.SetFloat("_Smoothness", module.smoothness);
material.SetFloat("_Metallic", module.metallic);
material.SetTexture("_SmoothnessMap", smoothnessMap);
material.SetFloat("_BumpStrength", module.normalStrength);
material.SetTexture("_BumpMap", normalMap);
material.SetColor("_EmissionColor", emissionColor);
material.SetTexture("_EmissionMap", emissionMap);
if (useTriplanar)
{
material.SetTexture("_BlendMap", tileBlendMap);
if (module.baseTile != null)
{
material.EnableKeyword("BASE_TILE");
material.SetFloat("_BaseTileScale", module.baseTile.scale);
material.SetTexture("_BaseTileAlbedo", baseTextureTile);
material.SetTexture("_BaseTileSmoothnessMap", baseSmoothnessTile);
material.SetFloat("_BaseTileBumpStrength", module.baseTile.normalStrength);
material.SetTexture("_BaseTileBumpMap", baseNormalTile);
}
else
{
material.DisableKeyword("BASE_TILE");
}
if (module.redTile != null)
{
material.EnableKeyword("RED_TILE");
material.SetFloat("_RedTileScale", module.redTile.scale);
material.SetTexture("_RedTileAlbedo", redTextureTile);
material.SetTexture("_RedTileSmoothnessMap", redSmoothnessTile);
material.SetFloat("_RedTileBumpStrength", module.redTile.normalStrength);
material.SetTexture("_RedTileBumpMap", redNormalTile);
}
else
{
material.DisableKeyword("RED_TILE");
}
if (module.greenTile != null)
{
material.EnableKeyword("GREEN_TILE");
material.SetFloat("_GreenTileScale", module.greenTile.scale);
material.SetTexture("_GreenTileAlbedo", greenTextureTile);
material.SetTexture("_GreenTileSmoothnessMap", greenSmoothnessTile);
material.SetFloat("_GreenTileBumpStrength", module.greenTile.normalStrength);
material.SetTexture("_GreenTileBumpMap", greenNormalTile);
}
else
{
material.DisableKeyword("GREEN_TILE");
}
if (module.blueTile != null)
{
material.EnableKeyword("BLUE_TILE");
material.SetFloat("_BlueTileScale", module.blueTile.scale);
material.SetTexture("_BlueTileAlbedo", blueTextureTile);
material.SetTexture("_BlueTileSmoothnessMap", blueSmoothnessTile);
material.SetFloat("_BlueTileBumpStrength", module.blueTile.normalStrength);
material.SetTexture("_BlueTileBumpMap", blueNormalTile);
}
else
{
material.DisableKeyword("BLUE_TILE");
}
if (module.alphaTile != null)
{
material.EnableKeyword("ALPHA_TILE");
material.SetFloat("_AlphaTileScale", module.alphaTile.scale);
material.SetTexture("_AlphaTileAlbedo", alphaTextureTile);
material.SetTexture("_AlphaTileSmoothnessMap", alphaSmoothnessTile);
material.SetFloat("_AlphaTileBumpStrength", module.alphaTile.normalStrength);
material.SetTexture("_AlphaTileBumpMap", alphaNormalTile);
}
else
{
material.DisableKeyword("ALPHA_TILE");
}
}
LODCubeSphere.transform.parent = cubeSphere.transform;
LODCubeSphere.transform.localPosition = Vector3.zero;
return cubeSphereMR;
}
} }
} }
} }