Files
2026-02-21 16:45:37 +08:00

379 lines
9.1 KiB
C#

using UnityEngine;
public class RTP_LODmanager : MonoBehaviour
{
public TerrainShaderLod RTP_LODlevel;
public bool RTP_SHADOWS = true;
public bool RTP_SOFT_SHADOWS = true;
public bool show_first_features;
public bool show_add_features;
public bool RTP_NOFORWARDADD;
public bool RTP_NO_DEFERRED;
public bool RTP_FULLFORWARDSHADOWS;
public bool RTP_NOLIGHTMAP;
public bool RTP_NODIRLIGHTMAP;
public bool RTP_NODYNLIGHTMAP;
public bool NO_SPECULARITY;
public bool RTP_ADDSHADOW;
public bool RTP_CUT_HOLES;
public bool FIX_REFRESHING_ISSUE = true;
public bool RTP_USE_COLOR_ATLAS_FIRST;
public bool RTP_USE_COLOR_ATLAS_ADD;
public RTPFogType RTP_FOGTYPE;
public bool ADV_COLOR_MAP_BLENDING_FIRST;
public bool ADV_COLOR_MAP_BLENDING_ADD;
public bool RTP_UV_BLEND_FIRST = true;
public bool RTP_UV_BLEND_ADD = true;
public bool RTP_DISTANCE_ONLY_UV_BLEND_FIRST = true;
public bool RTP_DISTANCE_ONLY_UV_BLEND_ADD = true;
public bool RTP_NORMALS_FOR_REPLACE_UV_BLEND_FIRST = true;
public bool RTP_NORMALS_FOR_REPLACE_UV_BLEND_ADD = true;
public bool RTP_SUPER_DETAIL_FIRST = true;
public bool RTP_SUPER_DETAIL_ADD = true;
public bool RTP_SUPER_DETAIL_MULTS_FIRST;
public bool RTP_SUPER_DETAIL_MULTS_ADD;
public bool RTP_SNOW_FIRST;
public bool RTP_SNOW_ADD;
public bool RTP_SNW_CHOOSEN_LAYER_COLOR_FIRST;
public bool RTP_SNW_CHOOSEN_LAYER_COLOR_ADD;
public int RTP_SNW_CHOOSEN_LAYER_COLOR_NUM_FIRST = 7;
public int RTP_SNW_CHOOSEN_LAYER_COLOR_NUM_ADD = 7;
public bool RTP_SNW_CHOOSEN_LAYER_NORMAL_FIRST;
public bool RTP_SNW_CHOOSEN_LAYER_NORMAL_ADD;
public int RTP_SNW_CHOOSEN_LAYER_NORMAL_NUM_FIRST = 7;
public int RTP_SNW_CHOOSEN_LAYER_NORMAL_NUM_ADD = 7;
public RTPLodLevel MAX_LOD_FIRST = RTPLodLevel.PM;
public RTPLodLevel MAX_LOD_FIRST_PLUS4 = RTPLodLevel.SIMPLE;
public RTPLodLevel MAX_LOD_ADD = RTPLodLevel.PM;
public bool RTP_SHARPEN_HEIGHTBLEND_EDGES_PASS1_FIRST = true;
public bool RTP_SHARPEN_HEIGHTBLEND_EDGES_PASS2_FIRST;
public bool RTP_SHARPEN_HEIGHTBLEND_EDGES_PASS1_ADD = true;
public bool RTP_SHARPEN_HEIGHTBLEND_EDGES_PASS2_ADD;
public bool RTP_HEIGHTBLEND_AO_FIRST;
public bool RTP_HEIGHTBLEND_AO_ADD;
public bool RTP_EMISSION_FIRST;
public bool RTP_EMISSION_ADD;
public bool RTP_FUILD_EMISSION_WRAP_FIRST;
public bool RTP_FUILD_EMISSION_WRAP_ADD;
public bool RTP_HOTAIR_EMISSION_FIRST;
public bool RTP_HOTAIR_EMISSION_ADD;
public bool RTP_SHOW_OVERLAPPED;
public bool RTP_TRIPLANAR_FIRST;
public bool RTP_TRIPLANAR_ADD;
public bool RTP_NORMALGLOBAL;
public bool RTP_TESSELLATION;
public bool RTP_TESSELLATION_SAMPLE_TEXTURE;
public bool RTP_HEIGHTMAP_SAMPLE_BICUBIC = true;
public bool RTP_DETAIL_HEIGHTMAP_SAMPLE;
public bool RTP_TREESGLOBAL;
public bool RTP_USE_BUMPMAPS_FIRST = true;
public bool RTP_USE_BUMPMAPS_ADD = true;
public bool RTP_USE_PERLIN_FIRST;
public bool RTP_USE_PERLIN_ADD;
public bool RTP_COLOR_MAP_BLEND_MULTIPLY_FIRST = true;
public bool RTP_COLOR_MAP_BLEND_MULTIPLY_ADD = true;
public bool RTP_SIMPLE_FAR_FIRST = true;
public bool RTP_SIMPLE_FAR_ADD = true;
public bool RTP_CROSSPASS_HEIGHTBLEND;
public int[] UV_BLEND_ROUTE_NUM_FIRST = new int[8] { 0, 1, 2, 3, 4, 5, 6, 7 };
public int[] UV_BLEND_ROUTE_NUM_ADD = new int[8] { 0, 1, 2, 3, 4, 5, 6, 7 };
public bool RTP_HARD_CROSSPASS = true;
public bool RTP_MAPPED_SHADOWS_FIRST;
public bool RTP_MAPPED_SHADOWS_ADD;
public bool RTP_VERTICAL_TEXTURE_FIRST;
public bool RTP_VERTICAL_TEXTURE_ADD;
public bool RTP_ADDITIONAL_FEATURES_IN_FALLBACKS = true;
public bool RTP_4LAYERS_MODE;
public int numLayers;
public int numLayersProcessedByFarShader = 8;
public bool ADDPASS_IN_BLENDBASE;
public bool RTP_GLITTER_FIRST;
public bool RTP_GLITTER_ADD;
public bool RTP_WETNESS_FIRST;
public bool RTP_WETNESS_ADD;
public bool RTP_WET_RIPPLE_TEXTURE_FIRST;
public bool RTP_WET_RIPPLE_TEXTURE_ADD;
public bool RTP_CAUSTICS_FIRST;
public bool RTP_CAUSTICS_ADD;
public bool RTP_VERTALPHA_CAUSTICS;
public bool SIMPLE_WATER_FIRST;
public bool SIMPLE_WATER_ADD;
public bool RTP_USE_EXTRUDE_REDUCTION_FIRST;
public bool RTP_USE_EXTRUDE_REDUCTION_ADD;
private Shader terrain_shader;
private Shader terrain_shader_far;
private Shader terrain_shader_add;
private Shader terrain2geom_shader;
private Shader terrain_geomBlend_shader;
private Shader terrain2geom_geomBlend_shader;
private Shader terrain_geomBlend_GeometryBlend_BumpedDetailSnow;
private Shader geomblend_GeometryBlend_WaterShader_2VertexPaint_HB;
private Shader geomBlend_GeometryBlend_WaterShader_FlowMap_HB;
private Shader terrain_geomBlendActual_shader;
public bool dont_sync;
private void Awake()
{
RefreshLODlevel();
}
public void RefreshLODlevel()
{
ReliefTerrain[] array = (ReliefTerrain[])Object.FindObjectsOfType(typeof(ReliefTerrain));
ReliefTerrain reliefTerrain = null;
for (int i = 0; i < array.Length; i++)
{
if ((bool)array[i].GetComponent(typeof(Terrain)))
{
reliefTerrain = array[i];
break;
}
}
if (reliefTerrain != null && reliefTerrain.globalSettingsHolder != null)
{
if (terrain_shader == null)
{
terrain_shader = Shader.Find("Relief Pack/ReliefTerrain-FirstPass");
}
if (terrain_shader_add == null)
{
terrain_shader_add = Shader.Find("Hidden/Relief Pack/ReliefTerrain-AddPass");
}
}
else
{
if (terrain_shader == null)
{
terrain_shader = Shader.Find("Hidden/TerrainEngine/Splatmap/Lightmap-FirstPass");
}
if (terrain_shader_add == null)
{
terrain_shader_add = Shader.Find("Hidden/TerrainEngine/Splatmap/Lightmap-AddPass");
}
if (terrain_shader == null)
{
terrain_shader = Shader.Find("Nature/Terrain/Diffuse");
}
if (terrain_shader_add == null)
{
terrain_shader_add = Shader.Find("Hidden/TerrainEngine/Splatmap/Diffuse-AddPass");
}
}
if (terrain_shader_far == null)
{
terrain_shader_far = Shader.Find("Hidden/Relief Pack/ReliefTerrain-FarOnly");
}
if (terrain2geom_shader == null)
{
terrain2geom_shader = Shader.Find("Relief Pack/Terrain2Geometry");
}
if (terrain_geomBlend_shader == null)
{
terrain_geomBlend_shader = Shader.Find("Hidden/Relief Pack/ReliefTerrainGeometryBlendBase");
}
if (terrain2geom_geomBlend_shader == null)
{
terrain2geom_geomBlend_shader = Shader.Find("Hidden/Relief Pack/ReliefTerrain2GeometryBlendBase");
}
if (terrain_geomBlend_GeometryBlend_BumpedDetailSnow == null)
{
terrain_geomBlend_GeometryBlend_BumpedDetailSnow = Shader.Find("Relief Pack - GeometryBlend/Bumped Detail Snow");
}
if (geomblend_GeometryBlend_WaterShader_2VertexPaint_HB == null)
{
geomblend_GeometryBlend_WaterShader_2VertexPaint_HB = Shader.Find("Relief Pack - GeometryBlend/Water/2 Layers/ HeightBlend");
}
if (geomBlend_GeometryBlend_WaterShader_FlowMap_HB == null)
{
geomBlend_GeometryBlend_WaterShader_FlowMap_HB = Shader.Find("Relief Pack - GeometryBlend/Water/ FlowMap - HeightBlend");
}
int maximumLOD = 700;
if (RTP_LODlevel == TerrainShaderLod.POM)
{
if (RTP_SHADOWS)
{
if (RTP_SOFT_SHADOWS)
{
Shader.EnableKeyword("RTP_POM_SHADING_HI");
Shader.DisableKeyword("RTP_POM_SHADING_MED");
Shader.DisableKeyword("RTP_POM_SHADING_LO");
}
else
{
Shader.EnableKeyword("RTP_POM_SHADING_MED");
Shader.DisableKeyword("RTP_POM_SHADING_HI");
Shader.DisableKeyword("RTP_POM_SHADING_LO");
}
}
else
{
Shader.EnableKeyword("RTP_POM_SHADING_LO");
Shader.DisableKeyword("RTP_POM_SHADING_MED");
Shader.DisableKeyword("RTP_POM_SHADING_HI");
}
Shader.DisableKeyword("RTP_PM_SHADING");
Shader.DisableKeyword("RTP_SIMPLE_SHADING");
}
else if (RTP_LODlevel == TerrainShaderLod.PM)
{
Shader.DisableKeyword("RTP_POM_SHADING_HI");
Shader.DisableKeyword("RTP_POM_SHADING_MED");
Shader.DisableKeyword("RTP_POM_SHADING_LO");
Shader.EnableKeyword("RTP_PM_SHADING");
Shader.DisableKeyword("RTP_SIMPLE_SHADING");
}
else
{
Shader.DisableKeyword("RTP_POM_SHADING_HI");
Shader.DisableKeyword("RTP_POM_SHADING_MED");
Shader.DisableKeyword("RTP_POM_SHADING_LO");
Shader.DisableKeyword("RTP_PM_SHADING");
Shader.EnableKeyword("RTP_SIMPLE_SHADING");
}
if (terrain_shader != null)
{
terrain_shader.maximumLOD = maximumLOD;
}
if (terrain_shader_far != null)
{
terrain_shader_far.maximumLOD = maximumLOD;
}
if (terrain_shader_add != null)
{
terrain_shader_add.maximumLOD = maximumLOD;
}
if (terrain2geom_shader != null)
{
terrain2geom_shader.maximumLOD = maximumLOD;
}
if (terrain_geomBlend_shader != null)
{
terrain_geomBlend_shader.maximumLOD = maximumLOD;
}
if (terrain2geom_geomBlend_shader != null)
{
terrain2geom_geomBlend_shader.maximumLOD = maximumLOD;
}
if (terrain_geomBlend_GeometryBlend_BumpedDetailSnow != null)
{
terrain_geomBlend_GeometryBlend_BumpedDetailSnow.maximumLOD = maximumLOD;
}
if (geomblend_GeometryBlend_WaterShader_2VertexPaint_HB != null)
{
geomblend_GeometryBlend_WaterShader_2VertexPaint_HB.maximumLOD = maximumLOD;
}
if (geomBlend_GeometryBlend_WaterShader_FlowMap_HB != null)
{
geomBlend_GeometryBlend_WaterShader_FlowMap_HB.maximumLOD = maximumLOD;
}
}
}