Removed reflection probe volume.

This commit is contained in:
Alexander Filippov 2022-12-20 05:59:08 +01:00
parent a7db7735e7
commit 00ff703a1b
5 changed files with 1 additions and 305 deletions

View File

@ -1,172 +0,0 @@
#if COM_UNITY_MODULES_PHYSICS
using UnityEditor;
using UnityEngine;
namespace Utils
{
public class ReflectionProbeVolumeEditor : MonoBehaviour
{
[CustomEditor(typeof(ReflectionProbeVolume), true)]
public class EventManagerEditor : Editor
{
private SerializedProperty resolution;
private SerializedProperty offset;
private SerializedProperty threshold;
private SerializedProperty blendDistance;
private void OnEnable()
{
resolution = serializedObject.FindProperty("resolution");
offset = serializedObject.FindProperty("offset");
threshold = serializedObject.FindProperty("threshold");
blendDistance = serializedObject.FindProperty("blendDistance");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(resolution);
EditorGUILayout.PropertyField(offset);
EditorGUILayout.PropertyField(threshold);
EditorGUILayout.PropertyField(blendDistance);
serializedObject.ApplyModifiedProperties();
EditorGUILayout.Space();
if (GUILayout.Button("Place"))
{
Place();
}
}
private void Place()
{
var voxelSize = resolution.intValue;
var offset = this.offset.floatValue;
var threshold = this.threshold.floatValue;
var blendDistance = this.blendDistance.floatValue;
ReflectionProbeVolume reflectionProbeVolume = (ReflectionProbeVolume)target;
var transform = reflectionProbeVolume.transform;
//Gizmos.DrawWireCube(transform.position, transform.localScale);
var startPos = transform.position + transform.right * transform.localScale.x / 2 + transform.up * transform.localScale.y / 2 + transform.forward * transform.localScale.z / 2;
var xVar = transform.localScale.x / voxelSize / 2f;
var zVar = transform.localScale.z / voxelSize / 2f;
var data = new Vector3[voxelSize, voxelSize];
//Gizmos.color = Color.blue;
for (int x = 0; x < voxelSize; x++)
{
for (int z = 0; z < voxelSize; z++)
{
var rayPos = startPos - transform.right * xVar - transform.forward * zVar;
if (Physics.Raycast(rayPos, Vector2.down, out RaycastHit hit))
{
var point = hit.point + Vector3.up * offset;
data[x, z] = point;
}
zVar += transform.localScale.z / voxelSize;
}
xVar += transform.localScale.x / voxelSize;
zVar = transform.localScale.z / voxelSize / 2f;
}
CheckSquare(data, 5, voxelSize, threshold, blendDistance, transform);
CheckSquare(data, 4, voxelSize, threshold, blendDistance, transform);
CheckSquare(data, 3, voxelSize, threshold, blendDistance, transform);
CheckSquare(data, 2, voxelSize, threshold, blendDistance, transform);
for (int x = 0; x < voxelSize; x++)
{
for (int z = 0; z < voxelSize; z++)
{
if (data[x, z].x != float.PositiveInfinity)
{
var go = new GameObject("Reflection Probe Size: 1");
go.transform.SetParent(transform);
go.transform.position = data[x, z];
var reflectionProbe = go.AddComponent(typeof(ReflectionProbe)) as ReflectionProbe;
reflectionProbe.resolution = 16;
reflectionProbe.center = new Vector3(0f, transform.position.y - data[x, z].y, 0f);
reflectionProbe.size = new Vector3(transform.localScale.x / voxelSize + blendDistance, transform.localScale.y, transform.localScale.z / voxelSize + blendDistance);
}
}
}
Undo.RegisterFullObjectHierarchyUndo(reflectionProbeVolume.gameObject, "Place Reflection Probes");
}
private void CheckSquare(Vector3[,] data, int size, int voxelSize, float threshold, float blendDistance, Transform transform)
{
for (int x = 0; x < voxelSize; x++)
{
for (int z = 0; z < voxelSize; z++)
{
if (x + size <= voxelSize && z + size <= voxelSize)
{
bool valid = true;
var point = Vector3.zero;
for (int i = 0; i < size; i++)
{
for (int k = 0; k < size; k++)
{
var pos = data[x + i, z + k];
if (pos != Vector3.positiveInfinity)
{
if (Compare(data[x, z].y, pos.y, threshold))
{
point += pos;
}
else
{
valid = false;
}
}
}
}
if (valid)
{
point /= size * size;
var go = new GameObject("Reflection Probe Size: " + size);
go.transform.SetParent(transform);
go.transform.position = point;
var reflectionProbe = go.AddComponent(typeof(ReflectionProbe)) as ReflectionProbe;
if (size == 2)
{
reflectionProbe.resolution = 16;
}
else if (size == 3)
{
reflectionProbe.resolution = 32;
}
else if (size == 4)
{
reflectionProbe.resolution = 32;
}
else if (size == 5)
{
reflectionProbe.resolution = 64;
}
reflectionProbe.center = new Vector3(0f, transform.position.y - point.y, 0f);
reflectionProbe.size = new Vector3(transform.localScale.x / voxelSize * size + blendDistance, transform.localScale.y, transform.localScale.z / voxelSize * size + blendDistance);
for (int i = 0; i < size; i++)
{
for (int k = 0; k < size; k++)
{
data[x + i, z + k] = Vector3.positiveInfinity;
}
}
}
}
}
}
}
private bool Compare(float arg0, float arg1, float threshold)
{
return Mathf.Abs(arg0 - arg1) < threshold;
}
}
}
}
#endif

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: a77b3177fd3b4754cb1b855b831c5424
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,110 +0,0 @@
#if COM_UNITY_MODULES_PHYSICS
using System.Diagnostics;
using UnityEngine;
namespace Utils
{
public class ReflectionProbeVolume : MonoBehaviour
{
[Min(1)]
public int resolution = 4;
public float offset = 2;
public float blendDistance = 1;
[Min(0)]
public float threshold = .5f;
[Conditional("UNITY_EDITOR")]
private void OnDrawGizmosSelected()
{
Gizmos.DrawWireCube(transform.position, transform.localScale);
var startPos = transform.position + transform.right * transform.localScale.x / 2 + transform.up * transform.localScale.y / 2 + transform.forward * transform.localScale.z / 2;
var xVar = transform.localScale.x / resolution / 2f;
var zVar = transform.localScale.z / resolution / 2f;
var data = new Vector3[resolution, resolution];
Gizmos.color = Color.blue;
for (int x = 0; x < resolution; x++)
{
for (int z = 0; z < resolution; z++)
{
var rayPos = startPos - transform.right * xVar - transform.forward * zVar;
if (Physics.Raycast(rayPos, Vector2.down, out RaycastHit hit))
{
var point = hit.point + Vector3.up * offset;
data[x, z] = point;
}
zVar += transform.localScale.z / resolution;
}
xVar += transform.localScale.x / resolution;
zVar = transform.localScale.z / resolution / 2f;
}
CheckSquare(data, 5);
CheckSquare(data, 4);
CheckSquare(data, 3);
CheckSquare(data, 2);
for (int x = 0; x < resolution; x++)
{
for (int z = 0; z < resolution; z++)
{
if (data[x, z] != Vector3.positiveInfinity)
{
Gizmos.DrawSphere(data[x, z], .1f);
}
}
}
}
private void CheckSquare(Vector3[,] data, int size)
{
for (int x = 0; x < resolution; x++)
{
for (int z = 0; z < resolution; z++)
{
if (x + size <= resolution && z + size <= resolution)
{
bool valid = true;
var point = Vector3.zero;
for (int i = 0; i < size; i++)
{
for (int k = 0; k < size; k++)
{
var pos = data[x + i, z + k];
if (pos != Vector3.positiveInfinity)
{
if (Compare(data[x, z].y, pos.y))
{
point += pos;
}
else
{
valid = false;
}
}
}
}
if (valid)
{
point /= size * size;
Gizmos.DrawSphere(point, size * .1f);
for (int i = 0; i < size; i++)
{
for (int k = 0; k < size; k++)
{
data[x + i, z + k] = Vector3.positiveInfinity;
}
}
}
}
}
}
}
private bool Compare(float arg0, float arg1)
{
return Mathf.Abs(arg0 - arg1) < threshold;
}
}
}
#endif

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: a740d05cae346654fbd4dc576e6405ab
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,6 +1,6 @@
{ {
"name": "ru.shazbot.utils", "name": "ru.shazbot.utils",
"version": "4.1.1", "version": "5.0.0",
"displayName": "Utils", "displayName": "Utils",
"description": "Utility useful for almost any project.", "description": "Utility useful for almost any project.",
"licensesUrl": "https://git.shazbot.ru/Utils.git/tree/LICENSE.md", "licensesUrl": "https://git.shazbot.ru/Utils.git/tree/LICENSE.md",