diff --git a/Assets/Prefabs/Camera.meta b/Assets/Prefabs/Camera.meta new file mode 100644 index 00000000..eef2357a --- /dev/null +++ b/Assets/Prefabs/Camera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b7f0bcc9081a3f4ebf98351de55c18e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Camera/StreamingSystem.prefab b/Assets/Prefabs/Camera/StreamingSystem.prefab new file mode 100644 index 00000000..b1a79fd8 --- /dev/null +++ b/Assets/Prefabs/Camera/StreamingSystem.prefab @@ -0,0 +1,327 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2572010898057618316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 8673506965849603137, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + m_PrefabInstance: {fileID: 8315411525343222081} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1272683274348441408} + - component: {fileID: 4679854871269347492} + m_Layer: 0 + m_Name: RenderStreamingSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1272683274348441408 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + m_PrefabInstance: {fileID: 8315411525343222081} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2572010898057618316} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8428520415601701669} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4679854871269347492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6371645755915659318, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + m_PrefabInstance: {fileID: 8315411525343222081} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2572010898057618316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f1be6924fbda474a9e74ca7f7f7df37, type: 3} + m_Name: + m_EditorClassIdentifier: + renderCamera: {fileID: 2180650195518956048} + mainCamera: {fileID: 0} +--- !u!1 &2719243560902827393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1842303832785313103, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + m_PrefabInstance: {fileID: 4053946288259751500} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4456548582206686167} + - component: {fileID: 2180650195518956048} + - component: {fileID: 6976661227447209562} + m_Layer: 0 + m_Name: RenderCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4456548582206686167 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + m_PrefabInstance: {fileID: 4053946288259751500} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2719243560902827393} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8428520415601701669} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &2180650195518956048 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1810689680328065765, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + m_PrefabInstance: {fileID: 4053946288259751500} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2719243560902827393} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.061365236, g: 0.06292273, b: 0.066037714, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 1 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.2 + far clip plane: 10 + field of view: 53.400234 + orthographic: 0 + orthographic size: 5.056125 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 87 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 0 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &6976661227447209562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 960582251535493196, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + m_PrefabInstance: {fileID: 4053946288259751500} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2719243560902827393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 +--- !u!1 &4111467147668931059 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8428520415601701669} + m_Layer: 0 + m_Name: StreamingSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8428520415601701669 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4111467147668931059} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.3999996, y: 3.8000002, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4456548582206686167} + - {fileID: 1272683274348441408} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &4053946288259751500 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8428520415601701669} + m_Modifications: + - target: {fileID: 1842303832785313103, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_Name + value: RenderCamera + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalPosition.x + value: 4.3999996 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalPosition.y + value: 3.8000002 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalPosition.z + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} +--- !u!1001 &8315411525343222081 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8428520415601701669} + m_Modifications: + - target: {fileID: 6371645755915659318, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: renderCamera + value: + objectReference: {fileID: 2180650195518956048} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalPosition.x + value: 4.3999996 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalPosition.y + value: 3.8000002 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalPosition.z + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8673506965849603137, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_Name + value: RenderStreamingSystem + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} diff --git a/Assets/Prefabs/Camera/StreamingSystem.prefab.meta b/Assets/Prefabs/Camera/StreamingSystem.prefab.meta new file mode 100644 index 00000000..fbc6f805 --- /dev/null +++ b/Assets/Prefabs/Camera/StreamingSystem.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f28ac593209ee764f8d267375a3dffbc +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/EmptyRoom_2.unity b/Assets/Scenes/EmptyRoom_2.unity index ad378ae3..f6906b4f 100644 --- a/Assets/Scenes/EmptyRoom_2.unity +++ b/Assets/Scenes/EmptyRoom_2.unity @@ -919,6 +919,11 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b95a2840877394746b9c857ec618031d, type: 3} +--- !u!20 &5122644399039610852 stripped +Camera: + m_CorrespondingSourceObject: {fileID: 7693705571979151744, guid: b95a2840877394746b9c857ec618031d, type: 3} + m_PrefabInstance: {fileID: 5122644399039610851} + m_PrefabAsset: {fileID: 0} --- !u!1001 &5614575254252139880 PrefabInstance: m_ObjectHideFlags: 0 @@ -976,6 +981,71 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 54b026c1885f3d74db04c3f665e2932f, type: 3} +--- !u!1001 &8578007543275711687 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2180650195518956048, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_CullingMask.m_Bits + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 4111467147668931059, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_Name + value: StreamingSystem + objectReference: {fileID: 0} + - target: {fileID: 4679854871269347492, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: mainCamera + value: + objectReference: {fileID: 5122644399039610852} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalPosition.x + value: 4.3999996 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalPosition.y + value: 3.8000002 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalPosition.z + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} --- !u!1001 &9084864018904812555 PrefabInstance: m_ObjectHideFlags: 0 @@ -1047,3 +1117,4 @@ SceneRoots: - {fileID: 9084864018904812555} - {fileID: 1122242796} - {fileID: 5614575254252139880} + - {fileID: 8578007543275711687} diff --git a/Assets/Scripts/Camera Control/RenderCameraCapture.cs b/Assets/Scripts/Camera Control/RenderCameraCapture.cs new file mode 100644 index 00000000..2509972e --- /dev/null +++ b/Assets/Scripts/Camera Control/RenderCameraCapture.cs @@ -0,0 +1,71 @@ +using UnityEngine; +using System.Threading.Tasks; +using SocketIOClient; + +public class RenderCameraCapture : MonoBehaviour +{ + public Camera renderCamera; + public Camera mainCamera; + private RenderTexture renderTexture; + private Texture2D texture; + private float timeSinceLastCapture = 0f; + private float captureInterval = 0f; + + static ulong frameIndex = 0; + private SocketIO socket; + + async void Start() + { + int width = 1280; + int height = 720; + + renderTexture = new RenderTexture(width, height, 24); + renderCamera.targetTexture = renderTexture; + texture = new Texture2D(width, height, TextureFormat.RGB24, false); + socket = SocketManager.Instance.ClientSocket; + } + + void Update() + { + if (mainCamera != null && renderCamera != null) + { + renderCamera.transform.position = mainCamera.transform.position; + renderCamera.transform.rotation = mainCamera.transform.rotation; + } + + timeSinceLastCapture += Time.deltaTime; + + if (timeSinceLastCapture >= captureInterval) + { + timeSinceLastCapture = 0f; + + frameIndex += 1; + RenderTexture.active = renderTexture; + renderCamera.Render(); + texture.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0); + texture.Apply(); + RenderTexture.active = null; + + SendFrameToSocketIO(); + } + } + + async void SendFrameToSocketIO() + { + if (socket != null && socket.Connected) + { + Debug.Log("Sending frame " + frameIndex); + byte[] imageBytes = texture.EncodeToJPG(); + string base64Image = System.Convert.ToBase64String(imageBytes); + await socket.EmitAsync("camera:request", base64Image); + } + } + + async void OnDestroy() + { + if (socket != null) + { + await socket.DisconnectAsync(); + } + } +} diff --git a/Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta b/Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta new file mode 100644 index 00000000..87a06838 --- /dev/null +++ b/Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f1be6924fbda474a9e74ca7f7f7df37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: