|
using System; |
|
using UnityEngine; |
|
using UnityEngine.Serialization; |
|
|
|
namespace Unity.MLAgents.Sensors |
|
{ |
|
|
|
|
|
|
|
[AddComponentMenu("ML Agents/Render Texture Sensor", (int)MenuGroup.Sensors)] |
|
public class RenderTextureSensorComponent : SensorComponent, IDisposable |
|
{ |
|
RenderTextureSensor m_Sensor; |
|
|
|
|
|
|
|
|
|
|
|
[HideInInspector, SerializeField, FormerlySerializedAs("renderTexture")] |
|
RenderTexture m_RenderTexture; |
|
|
|
|
|
|
|
|
|
|
|
public RenderTexture RenderTexture |
|
{ |
|
get { return m_RenderTexture; } |
|
set { m_RenderTexture = value; } |
|
} |
|
|
|
[HideInInspector, SerializeField, FormerlySerializedAs("sensorName")] |
|
string m_SensorName = "RenderTextureSensor"; |
|
|
|
|
|
|
|
|
|
|
|
public string SensorName |
|
{ |
|
get { return m_SensorName; } |
|
set { m_SensorName = value; } |
|
} |
|
|
|
[HideInInspector, SerializeField, FormerlySerializedAs("grayscale")] |
|
bool m_Grayscale; |
|
|
|
|
|
|
|
|
|
|
|
public bool Grayscale |
|
{ |
|
get { return m_Grayscale; } |
|
set { m_Grayscale = value; } |
|
} |
|
|
|
[HideInInspector, SerializeField] |
|
[Range(1, 50)] |
|
[Tooltip("Number of frames that will be stacked before being fed to the neural network.")] |
|
int m_ObservationStacks = 1; |
|
|
|
[HideInInspector, SerializeField, FormerlySerializedAs("compression")] |
|
SensorCompressionType m_Compression = SensorCompressionType.PNG; |
|
|
|
|
|
|
|
|
|
public SensorCompressionType CompressionType |
|
{ |
|
get { return m_Compression; } |
|
set { m_Compression = value; UpdateSensor(); } |
|
} |
|
|
|
|
|
|
|
|
|
|
|
public int ObservationStacks |
|
{ |
|
get { return m_ObservationStacks; } |
|
set { m_ObservationStacks = value; } |
|
} |
|
|
|
|
|
public override ISensor[] CreateSensors() |
|
{ |
|
Dispose(); |
|
m_Sensor = new RenderTextureSensor(RenderTexture, Grayscale, SensorName, m_Compression); |
|
if (ObservationStacks != 1) |
|
{ |
|
return new ISensor[] { new StackingSensor(m_Sensor, ObservationStacks) }; |
|
} |
|
return new ISensor[] { m_Sensor }; |
|
} |
|
|
|
|
|
|
|
|
|
internal void UpdateSensor() |
|
{ |
|
if (m_Sensor != null) |
|
{ |
|
m_Sensor.CompressionType = m_Compression; |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
public void Dispose() |
|
{ |
|
if (!ReferenceEquals(null, m_Sensor)) |
|
{ |
|
m_Sensor.Dispose(); |
|
m_Sensor = null; |
|
} |
|
} |
|
} |
|
} |
|
|