summaryrefslogtreecommitdiff
path: root/GeometryVsTerrainBlend.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-03-13 11:00:58 +0800
committerchai <215380520@qq.com>2024-03-13 11:00:58 +0800
commit6ce8b9e22fc13be34b442c7b6af48b42cd44275a (patch)
treeb38119d2acf0a982cb67e381f146924b9bfc3b3f /GeometryVsTerrainBlend.cs
+init
Diffstat (limited to 'GeometryVsTerrainBlend.cs')
-rw-r--r--GeometryVsTerrainBlend.cs215
1 files changed, 215 insertions, 0 deletions
diff --git a/GeometryVsTerrainBlend.cs b/GeometryVsTerrainBlend.cs
new file mode 100644
index 0000000..20ab882
--- /dev/null
+++ b/GeometryVsTerrainBlend.cs
@@ -0,0 +1,215 @@
+using UnityEngine;
+
+[AddComponentMenu("Relief Terrain/Geometry Blend")]
+[SelectionBase]
+[RequireComponent(typeof(MeshFilter))]
+public class GeometryVsTerrainBlend : MonoBehaviour
+{
+ public double UpdTim;
+
+ private int progress_count_max;
+
+ private int progress_count_current;
+
+ private const int progress_granulation = 1000;
+
+ private string progress_description = string.Empty;
+
+ public float blend_distance = 0.1f;
+
+ public GameObject blendedObject;
+
+ public bool VoxelBlendedObject;
+
+ public float _DeferredBlendGloss = 0.8f;
+
+ [HideInInspector]
+ public bool undo_flag;
+
+ [HideInInspector]
+ public bool paint_flag;
+
+ [HideInInspector]
+ public int paint_mode;
+
+ [HideInInspector]
+ public float paint_size = 0.5f;
+
+ [HideInInspector]
+ public float paint_smoothness;
+
+ [HideInInspector]
+ public float paint_opacity = 1f;
+
+ [HideInInspector]
+ public RTPColorChannels vertex_paint_channel = RTPColorChannels.A;
+
+ [HideInInspector]
+ public int addTrisSubdivision;
+
+ [HideInInspector]
+ public float addTrisMinAngle;
+
+ [HideInInspector]
+ public float addTrisMaxAngle = 90f;
+
+ private Vector3[] paint_vertices;
+
+ private Vector3[] paint_normals;
+
+ private int[] paint_tris;
+
+ private Transform underlying_transform;
+
+ private MeshRenderer underlying_renderer;
+
+ [HideInInspector]
+ public RaycastHit paintHitInfo;
+
+ [HideInInspector]
+ public bool paintHitInfo_flag;
+
+ [HideInInspector]
+ private Texture2D tmp_globalColorMap;
+
+ [HideInInspector]
+ public Vector3[] normals_orig;
+
+ [HideInInspector]
+ public Vector4[] tangents_orig;
+
+ [HideInInspector]
+ public bool baked_normals;
+
+ [HideInInspector]
+ public Mesh orig_mesh;
+
+ [HideInInspector]
+ public Mesh pmesh;
+
+ [HideInInspector]
+ public bool shader_global_blend_capabilities;
+
+ [HideInInspector]
+ public float StickOffset = 0.03f;
+
+ [HideInInspector]
+ public bool Sticked;
+
+ [HideInInspector]
+ public bool StickedOptimized = true;
+
+ [HideInInspector]
+ public bool ModifyTris;
+
+ [HideInInspector]
+ public bool BuildMeshFlag;
+
+ [HideInInspector]
+ public bool RealizePaint_Flag;
+
+ [HideInInspector]
+ public string save_path = string.Empty;
+
+ [HideInInspector]
+ public bool isBatched;
+
+ private Renderer _renderer;
+
+ private void Start()
+ {
+ SetupValues();
+ }
+
+ private void GetRenderer()
+ {
+ if (!_renderer)
+ {
+ _renderer = GetComponent<Renderer>();
+ }
+ }
+
+ public void SetupValues()
+ {
+ if (!blendedObject || (!(blendedObject.GetComponent(typeof(MeshRenderer)) != null) && !(blendedObject.GetComponent(typeof(Terrain)) != null)))
+ {
+ return;
+ }
+ if (underlying_transform == null)
+ {
+ underlying_transform = base.transform.Find("RTP_blend_underlying");
+ }
+ if (underlying_transform != null)
+ {
+ GameObject gameObject = underlying_transform.gameObject;
+ underlying_renderer = (MeshRenderer)gameObject.GetComponent(typeof(MeshRenderer));
+ }
+ if (!(underlying_renderer != null) || !(underlying_renderer.sharedMaterial != null))
+ {
+ return;
+ }
+ ReliefTerrain reliefTerrain = (ReliefTerrain)blendedObject.GetComponent(typeof(ReliefTerrain));
+ if ((bool)reliefTerrain)
+ {
+ Material sharedMaterial = underlying_renderer.sharedMaterial;
+ reliefTerrain.RefreshTextures(sharedMaterial);
+ reliefTerrain.globalSettingsHolder.Refresh(sharedMaterial);
+ if (sharedMaterial.HasProperty("RTP_DeferredAddPassSpec"))
+ {
+ sharedMaterial.SetFloat("RTP_DeferredAddPassSpec", _DeferredBlendGloss);
+ }
+ if ((bool)reliefTerrain.controlA)
+ {
+ sharedMaterial.SetTexture("_Control", reliefTerrain.controlA);
+ }
+ if ((bool)reliefTerrain.ColorGlobal)
+ {
+ sharedMaterial.SetTexture("_Splat0", reliefTerrain.ColorGlobal);
+ }
+ if ((bool)reliefTerrain.NormalGlobal)
+ {
+ sharedMaterial.SetTexture("_Splat1", reliefTerrain.NormalGlobal);
+ }
+ if ((bool)reliefTerrain.TreesGlobal)
+ {
+ sharedMaterial.SetTexture("_Splat2", reliefTerrain.TreesGlobal);
+ }
+ if ((bool)reliefTerrain.BumpGlobalCombined)
+ {
+ sharedMaterial.SetTexture("_Splat3", reliefTerrain.BumpGlobalCombined);
+ }
+ }
+ Terrain terrain = (Terrain)blendedObject.GetComponent(typeof(Terrain));
+ if ((bool)terrain)
+ {
+ underlying_renderer.lightmapIndex = terrain.lightmapIndex;
+ underlying_renderer.lightmapScaleOffset = terrain.lightmapScaleOffset;
+ underlying_renderer.realtimeLightmapIndex = terrain.realtimeLightmapIndex;
+ underlying_renderer.realtimeLightmapScaleOffset = terrain.realtimeLightmapScaleOffset;
+ }
+ else
+ {
+ underlying_renderer.lightmapIndex = blendedObject.GetComponent<Renderer>().lightmapIndex;
+ underlying_renderer.lightmapScaleOffset = blendedObject.GetComponent<Renderer>().lightmapScaleOffset;
+ underlying_renderer.realtimeLightmapIndex = blendedObject.GetComponent<Renderer>().realtimeLightmapIndex;
+ underlying_renderer.realtimeLightmapScaleOffset = blendedObject.GetComponent<Renderer>().realtimeLightmapScaleOffset;
+ }
+ if (Sticked)
+ {
+ if ((bool)terrain)
+ {
+ GetComponent<Renderer>().lightmapIndex = terrain.lightmapIndex;
+ GetComponent<Renderer>().lightmapScaleOffset = terrain.lightmapScaleOffset;
+ GetComponent<Renderer>().realtimeLightmapIndex = terrain.realtimeLightmapIndex;
+ GetComponent<Renderer>().realtimeLightmapScaleOffset = terrain.realtimeLightmapScaleOffset;
+ }
+ else
+ {
+ GetComponent<Renderer>().lightmapIndex = blendedObject.GetComponent<Renderer>().lightmapIndex;
+ GetComponent<Renderer>().lightmapScaleOffset = blendedObject.GetComponent<Renderer>().lightmapScaleOffset;
+ GetComponent<Renderer>().realtimeLightmapIndex = blendedObject.GetComponent<Renderer>().realtimeLightmapIndex;
+ GetComponent<Renderer>().realtimeLightmapScaleOffset = blendedObject.GetComponent<Renderer>().realtimeLightmapScaleOffset;
+ }
+ }
+ }
+}