mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Restructure
This commit is contained in:
parent
3d94e07a98
commit
df6c31d45e
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user