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: