diff --git a/Assets/AWSIM/Prefabs/Vehicles/Lexus RX450h 2015 Sample Sensor.prefab b/Assets/AWSIM/Prefabs/Vehicles/Lexus RX450h 2015 Sample Sensor.prefab
index 88004316d..8d0a8deb8 100644
--- a/Assets/AWSIM/Prefabs/Vehicles/Lexus RX450h 2015 Sample Sensor.prefab
+++ b/Assets/AWSIM/Prefabs/Vehicles/Lexus RX450h 2015 Sample Sensor.prefab
@@ -343,7 +343,7 @@ Transform:
m_LocalPosition: {x: -0.0175, y: -0.1, z: 0.05}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- - {fileID: 5653496621862650962}
+ - {fileID: 6087599136518086831}
m_Father: {fileID: 4843604171253800091}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -424,6 +424,101 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0ef8dc2c2eabfa4e8cb77be57a837c0, type: 3}
m_Name:
m_EditorClassIdentifier:
+ m_HDProbeVersion: 3
+ m_ObsoleteInfiniteProjection: 1
+ m_ObsoleteInfluenceVolume:
+ m_EditorAdvancedModeBlendDistancePositive: {x: 0, y: 0, z: 0}
+ m_EditorAdvancedModeBlendDistanceNegative: {x: 0, y: 0, z: 0}
+ m_EditorSimplifiedModeBlendDistance: 0
+ m_EditorAdvancedModeBlendNormalDistancePositive: {x: 0, y: 0, z: 0}
+ m_EditorAdvancedModeBlendNormalDistanceNegative: {x: 0, y: 0, z: 0}
+ m_EditorSimplifiedModeBlendNormalDistance: 0
+ m_EditorAdvancedModeEnabled: 0
+ m_EditorAdvancedModeFaceFadePositive: {x: 1, y: 1, z: 1}
+ m_EditorAdvancedModeFaceFadeNegative: {x: 1, y: 1, z: 1}
+ m_Version: 1
+ m_ObsoleteSphereBaseOffset: {x: 0, y: 0, z: 0}
+ m_ObsoleteOffset: {x: 0, y: 0, z: 0}
+ m_Shape: 0
+ m_BoxSize: {x: 10, y: 10, z: 10}
+ m_BoxBlendDistancePositive: {x: 1, y: 1, z: 1}
+ m_BoxBlendDistanceNegative: {x: 1, y: 1, z: 1}
+ m_BoxBlendNormalDistancePositive: {x: 0, y: 0, z: 0}
+ m_BoxBlendNormalDistanceNegative: {x: 0, y: 0, z: 0}
+ m_BoxSideFadePositive: {x: 1, y: 1, z: 1}
+ m_BoxSideFadeNegative: {x: 1, y: 1, z: 1}
+ m_SphereRadius: 3
+ m_SphereBlendDistance: 0
+ m_SphereBlendNormalDistance: 0
+ m_ObsoleteFrameSettings:
+ overrides: 0
+ enableShadow: 0
+ enableContactShadows: 0
+ enableShadowMask: 0
+ enableSSR: 0
+ enableSSAO: 0
+ enableSubsurfaceScattering: 0
+ enableTransmission: 0
+ enableAtmosphericScattering: 0
+ enableVolumetrics: 0
+ enableReprojectionForVolumetrics: 0
+ enableLightLayers: 0
+ enableExposureControl: 1
+ diffuseGlobalDimmer: 0
+ specularGlobalDimmer: 0
+ shaderLitMode: 0
+ enableDepthPrepassWithDeferredRendering: 0
+ enableTransparentPrepass: 0
+ enableMotionVectors: 0
+ enableObjectMotionVectors: 0
+ enableDecals: 0
+ enableRoughRefraction: 0
+ enableTransparentPostpass: 0
+ enableDistortion: 0
+ enablePostprocess: 0
+ enableOpaqueObjects: 0
+ enableTransparentObjects: 0
+ enableRealtimePlanarReflection: 0
+ enableMSAA: 0
+ enableAsyncCompute: 0
+ runLightListAsync: 0
+ runSSRAsync: 0
+ runSSAOAsync: 0
+ runContactShadowsAsync: 0
+ runVolumeVoxelizationAsync: 0
+ lightLoopSettings:
+ overrides: 0
+ enableDeferredTileAndCluster: 0
+ enableComputeLightEvaluation: 0
+ enableComputeLightVariants: 0
+ enableComputeMaterialVariants: 0
+ enableFptlForForwardOpaque: 0
+ enableBigTilePrepass: 0
+ isFptlEnabled: 0
+ m_ObsoleteMultiplier: 1
+ m_ObsoleteWeight: 1
+ m_ObsoleteMode: 0
+ m_ObsoleteLightLayers: 1
+ m_ObsoleteCaptureSettings:
+ overrides: 0
+ clearColorMode: 0
+ backgroundColorHDR: {r: 0.023529412, g: 0.07058824, b: 0.1882353, a: 0}
+ clearDepth: 1
+ cullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ useOcclusionCulling: 1
+ volumeLayerMask:
+ serializedVersion: 2
+ m_Bits: 1
+ volumeAnchorOverride: {fileID: 0}
+ projection: 0
+ nearClipPlane: 0.3
+ farClipPlane: 1000
+ fieldOfView: 90
+ orthographicSize: 5
+ renderingPath: 0
+ shadowDistance: 100
m_ProbeSettings:
frustum:
fieldOfViewMode: 1
@@ -440,17 +535,6 @@ MonoBehaviour:
fadeDistance: 10000
rangeCompressionFactor: 1
influence:
- m_Shape: 0
- m_BoxSize: {x: 100, y: 100, z: 100}
- m_BoxBlendDistancePositive: {x: 0, y: 0, z: 0}
- m_BoxBlendDistanceNegative: {x: 0, y: 0, z: 0}
- m_BoxBlendNormalDistancePositive: {x: 0, y: 0, z: 0}
- m_BoxBlendNormalDistanceNegative: {x: 0, y: 0, z: 0}
- m_BoxSideFadePositive: {x: 1, y: 1, z: 1}
- m_BoxSideFadeNegative: {x: 1, y: 1, z: 1}
- m_SphereRadius: 300
- m_SphereBlendDistance: 0
- m_SphereBlendNormalDistance: 0
m_EditorAdvancedModeBlendDistancePositive: {x: 1, y: 1, z: 1}
m_EditorAdvancedModeBlendDistanceNegative: {x: 1, y: 1, z: 1}
m_EditorSimplifiedModeBlendDistance: 0
@@ -463,13 +547,24 @@ MonoBehaviour:
m_Version: 1
m_ObsoleteSphereBaseOffset: {x: 0, y: 0, z: 0}
m_ObsoleteOffset: {x: 0, y: 0, z: 0}
- proxy:
m_Shape: 0
- m_BoxSize: {x: 1, y: 1, z: 1}
- m_SphereRadius: 1
+ m_BoxSize: {x: 100, y: 100, z: 100}
+ m_BoxBlendDistancePositive: {x: 0, y: 0, z: 0}
+ m_BoxBlendDistanceNegative: {x: 0, y: 0, z: 0}
+ m_BoxBlendNormalDistancePositive: {x: 0, y: 0, z: 0}
+ m_BoxBlendNormalDistanceNegative: {x: 0, y: 0, z: 0}
+ m_BoxSideFadePositive: {x: 1, y: 1, z: 1}
+ m_BoxSideFadeNegative: {x: 1, y: 1, z: 1}
+ m_SphereRadius: 300
+ m_SphereBlendDistance: 0
+ m_SphereBlendNormalDistance: 0
+ proxy:
m_CSVersion: 1
m_ObsoleteSphereInfiniteProjection: 0
m_ObsoleteBoxInfiniteProjection: 0
+ m_Shape: 0
+ m_BoxSize: {x: 1, y: 1, z: 1}
+ m_SphereRadius: 1
proxySettings:
useInfluenceVolumeAsProxyVolume: 0
capturePositionProxySpace: {x: 0, y: 0, z: 0}
@@ -679,101 +774,6 @@ MonoBehaviour:
m_FieldOfView: 0
m_Aspect: 0
m_EditorOnlyData: 0
- m_HDProbeVersion: 3
- m_ObsoleteInfiniteProjection: 1
- m_ObsoleteInfluenceVolume:
- m_Shape: 0
- m_BoxSize: {x: 10, y: 10, z: 10}
- m_BoxBlendDistancePositive: {x: 1, y: 1, z: 1}
- m_BoxBlendDistanceNegative: {x: 1, y: 1, z: 1}
- m_BoxBlendNormalDistancePositive: {x: 0, y: 0, z: 0}
- m_BoxBlendNormalDistanceNegative: {x: 0, y: 0, z: 0}
- m_BoxSideFadePositive: {x: 1, y: 1, z: 1}
- m_BoxSideFadeNegative: {x: 1, y: 1, z: 1}
- m_SphereRadius: 3
- m_SphereBlendDistance: 0
- m_SphereBlendNormalDistance: 0
- m_EditorAdvancedModeBlendDistancePositive: {x: 0, y: 0, z: 0}
- m_EditorAdvancedModeBlendDistanceNegative: {x: 0, y: 0, z: 0}
- m_EditorSimplifiedModeBlendDistance: 0
- m_EditorAdvancedModeBlendNormalDistancePositive: {x: 0, y: 0, z: 0}
- m_EditorAdvancedModeBlendNormalDistanceNegative: {x: 0, y: 0, z: 0}
- m_EditorSimplifiedModeBlendNormalDistance: 0
- m_EditorAdvancedModeEnabled: 0
- m_EditorAdvancedModeFaceFadePositive: {x: 1, y: 1, z: 1}
- m_EditorAdvancedModeFaceFadeNegative: {x: 1, y: 1, z: 1}
- m_Version: 1
- m_ObsoleteSphereBaseOffset: {x: 0, y: 0, z: 0}
- m_ObsoleteOffset: {x: 0, y: 0, z: 0}
- m_ObsoleteFrameSettings:
- overrides: 0
- enableShadow: 0
- enableContactShadows: 0
- enableShadowMask: 0
- enableSSR: 0
- enableSSAO: 0
- enableSubsurfaceScattering: 0
- enableTransmission: 0
- enableAtmosphericScattering: 0
- enableVolumetrics: 0
- enableReprojectionForVolumetrics: 0
- enableLightLayers: 0
- enableExposureControl: 1
- diffuseGlobalDimmer: 0
- specularGlobalDimmer: 0
- shaderLitMode: 0
- enableDepthPrepassWithDeferredRendering: 0
- enableTransparentPrepass: 0
- enableMotionVectors: 0
- enableObjectMotionVectors: 0
- enableDecals: 0
- enableRoughRefraction: 0
- enableTransparentPostpass: 0
- enableDistortion: 0
- enablePostprocess: 0
- enableOpaqueObjects: 0
- enableTransparentObjects: 0
- enableRealtimePlanarReflection: 0
- enableMSAA: 0
- enableAsyncCompute: 0
- runLightListAsync: 0
- runSSRAsync: 0
- runSSAOAsync: 0
- runContactShadowsAsync: 0
- runVolumeVoxelizationAsync: 0
- lightLoopSettings:
- overrides: 0
- enableDeferredTileAndCluster: 0
- enableComputeLightEvaluation: 0
- enableComputeLightVariants: 0
- enableComputeMaterialVariants: 0
- enableFptlForForwardOpaque: 0
- enableBigTilePrepass: 0
- isFptlEnabled: 0
- m_ObsoleteMultiplier: 1
- m_ObsoleteWeight: 1
- m_ObsoleteMode: 0
- m_ObsoleteLightLayers: 1
- m_ObsoleteCaptureSettings:
- overrides: 0
- clearColorMode: 0
- backgroundColorHDR: {r: 0.023529412, g: 0.07058824, b: 0.1882353, a: 0}
- clearDepth: 1
- cullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- useOcclusionCulling: 1
- volumeLayerMask:
- serializedVersion: 2
- m_Bits: 1
- volumeAnchorOverride: {fileID: 0}
- projection: 0
- nearClipPlane: 0.3
- farClipPlane: 1000
- fieldOfView: 90
- orthographicSize: 5
- renderingPath: 0
- shadowDistance: 100
m_ReflectionProbeVersion: 9
m_ObsoleteInfluenceShape: 0
m_ObsoleteInfluenceSphereRadius: 3
@@ -1664,6 +1664,54 @@ Transform:
m_Father: {fileID: 5650763240072318842}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &3498665163385352096
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6087599136518086831}
+ - component: {fileID: 3502896374931511511}
+ m_Layer: 6
+ m_Name: CameraSensorHolder
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &6087599136518086831
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3498665163385352096}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 5653496621862650962}
+ m_Father: {fileID: 4855090289228330245}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &3502896374931511511
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3498665163385352096}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: aec145ef6478ad1539bd832be538136a, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ cameraSensors:
+ - {fileID: 5653496621862650956}
+ publishHz: 10
+ renderInQueue: 1
--- !u!1 &4646002869503629639
GameObject:
m_ObjectHideFlags: 0
@@ -3250,6 +3298,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
OutputHz: 30
+ EnableGravity: 0
--- !u!114 &601749261092807531
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -3773,7 +3822,7 @@ PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
- m_TransformParent: {fileID: 4855090289228330245}
+ m_TransformParent: {fileID: 6087599136518086831}
m_Modifications:
- target: {fileID: 7800869322880189811, guid: c7276496f3d93284c9ac668faf9a39c6, type: 3}
propertyPath: m_Name
@@ -3809,15 +3858,15 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 7800869322880189814, guid: c7276496f3d93284c9ac668faf9a39c6, type: 3}
propertyPath: m_LocalRotation.x
- value: 0
+ value: -4.6566123e-10
objectReference: {fileID: 0}
- target: {fileID: 7800869322880189814, guid: c7276496f3d93284c9ac668faf9a39c6, type: 3}
propertyPath: m_LocalRotation.y
- value: 0
+ value: 0.0000000074505797
objectReference: {fileID: 0}
- target: {fileID: 7800869322880189814, guid: c7276496f3d93284c9ac668faf9a39c6, type: 3}
propertyPath: m_LocalRotation.z
- value: 0
+ value: -1.8917487e-10
objectReference: {fileID: 0}
- target: {fileID: 7800869322880189814, guid: c7276496f3d93284c9ac668faf9a39c6, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -3842,6 +3891,17 @@ Transform:
m_CorrespondingSourceObject: {fileID: 7800869322880189814, guid: c7276496f3d93284c9ac668faf9a39c6, type: 3}
m_PrefabInstance: {fileID: 2465439771401027876}
m_PrefabAsset: {fileID: 0}
+--- !u!114 &5653496621862650956 stripped
+MonoBehaviour:
+ m_CorrespondingSourceObject: {fileID: 7800869322880189800, guid: c7276496f3d93284c9ac668faf9a39c6, type: 3}
+ m_PrefabInstance: {fileID: 2465439771401027876}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c65d1fdc35027290e9b91e2c6ecab1fd, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1001 &2465439771711446011
PrefabInstance:
m_ObjectHideFlags: 0
diff --git a/Assets/AWSIM/Scripts/Sensors/Camera/CameraSensor.cs b/Assets/AWSIM/Scripts/Sensors/Camera/CameraSensor.cs
index edef46ae0..71a9ff992 100644
--- a/Assets/AWSIM/Scripts/Sensors/Camera/CameraSensor.cs
+++ b/Assets/AWSIM/Scripts/Sensors/Camera/CameraSensor.cs
@@ -126,12 +126,6 @@ public class ImageOnGui
[Range(0, 2048)] public uint yAxis = 0;
}
- ///
- /// Data output hz.
- /// Sensor processing and callbacks are called in this hz.
- ///
- [Range(0, 30)][SerializeField] uint publishHz = 10;
-
[SerializeField] ImageOnGui imageOnGui = new ImageOnGui();
[SerializeField] CameraParameters cameraParameters;
@@ -162,7 +156,6 @@ public class ImageOnGui
int rosShaderKernelIdx = -1;
ComputeBuffer computeBuffer;
- float timer = 0;
OutputData outputData = new OutputData();
private enum FocalLengthName
@@ -217,17 +210,9 @@ void Start()
rosImageShaderGroupSizeX = (((cameraParameters.width * cameraParameters.height) * sizeof(uint)) / ((int)rosImageShaderThreadsPerGroupX * sizeof(uint)));
}
- void FixedUpdate()
+ public void DoRender()
{
- // Update timer.
- timer += Time.deltaTime;
-
- // Matching output to hz.
- var interval = 1.0f / (int)publishHz;
- if (timer < interval)
- return;
- timer = 0;
-
+ // Reander Unity Camera
cameraObject.Render();
// Set data to shader
diff --git a/Assets/AWSIM/Scripts/Sensors/Camera/CameraSensorHolder.cs b/Assets/AWSIM/Scripts/Sensors/Camera/CameraSensorHolder.cs
new file mode 100644
index 000000000..127cb62be
--- /dev/null
+++ b/Assets/AWSIM/Scripts/Sensors/Camera/CameraSensorHolder.cs
@@ -0,0 +1,106 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace AWSIM
+{
+ ///
+ /// CameraSensorHolder.
+ /// Controls the rendering sequence of multiple camera sensors.
+ ///
+ public class CameraSensorHolder : MonoBehaviour
+ {
+ [Header("Camera Sensors")]
+ [SerializeField] private List cameraSensors = default;
+
+ [Header("Parameters")]
+
+ ///
+ /// Data output hz.
+ /// Sensor processing and callbacks are called in this hz.
+ ///
+ [Range(0, 30)][SerializeField] private uint publishHz = 10;
+
+ ///
+ /// Rendering sequence type.
+ /// Set True for sensors render at different frames one after another.
+ /// Set False for all sensors render at the same frame.
+ ///
+ [SerializeField] private bool renderInQueue = true;
+
+ float timer = 0;
+
+ private void Awake()
+ {
+ if(cameraSensors == null || cameraSensors.Count < 1)
+ {
+ Debug.LogError("Camera sensor list should have at least one camera to render.");
+ return;
+ }
+
+ StartCoroutine(FixedUpdateRoutine());
+ }
+
+ private IEnumerator FixedUpdateRoutine()
+ {
+ timer = 0f;
+
+ while(true)
+ {
+ yield return new WaitForFixedUpdate();
+
+ // Update timer.
+ timer += Time.deltaTime;
+
+ // Matching output to hz.
+ var interval = 1.0f / (int)publishHz;
+ if (timer < interval)
+ {
+ continue;
+ }
+ timer = 0f;
+
+ // sensors render at different frames one after another
+ if(renderInQueue)
+ {
+ for (int i = 0; i < cameraSensors.Count; i++)
+ {
+ yield return StartCoroutine(RenderCamera(cameraSensors[i], true));
+ }
+ }
+ // sensors render at the same frame
+ else
+ {
+ for (int i = 0; i < cameraSensors.Count; i++)
+ {
+ StartCoroutine(RenderCamera(cameraSensors[i], false));
+ }
+ }
+
+ yield return new WaitForFixedUpdate();
+ }
+ }
+
+ ///
+ /// Call camera sensor to do a render.
+ ///
+ /// Camera sensor to render.
+ /// Set True if wait to end of the frame after render.
+ private IEnumerator RenderCamera(CameraSensor cameraSensor, bool wait)
+ {
+ if(cameraSensor.gameObject.activeInHierarchy)
+ {
+ cameraSensor.DoRender();
+ }
+
+ if(wait)
+ {
+ yield return new WaitForEndOfFrame();
+ }
+ else
+ {
+ yield return null;
+ }
+ }
+ }
+}
diff --git a/Assets/AWSIM/Scripts/Sensors/Camera/CameraSensorHolder.cs.meta b/Assets/AWSIM/Scripts/Sensors/Camera/CameraSensorHolder.cs.meta
new file mode 100644
index 000000000..7a49f2d75
--- /dev/null
+++ b/Assets/AWSIM/Scripts/Sensors/Camera/CameraSensorHolder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: aec145ef6478ad1539bd832be538136a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: