void UpdateMesh(InputFeed feed) { MixCastCamera cam = MixCastCamera.FindCamera(feed.context); if (cam == null) { return; } float playerDist = Mathf.Max(cam.gameCamera.nearClipPlane * (1f + NEAR_PLANE_PADDING), feed.CalculatePlayerDistance(cam.gameCamera)); float playerQuadHalfHeight = playerDist * Mathf.Tan(feed.context.Data.deviceFoV * 0.5f * Mathf.Deg2Rad); float playerQuadHalfWidth = playerQuadHalfHeight * feed.context.Data.deviceFeedWidth / feed.context.Data.deviceFeedHeight; vertBuffer[0] = new Vector3(-playerQuadHalfWidth, playerQuadHalfHeight, playerDist); vertBuffer[1] = new Vector3(playerQuadHalfWidth, playerQuadHalfHeight, playerDist); vertBuffer[2] = new Vector3(playerQuadHalfWidth, -playerQuadHalfHeight, playerDist); vertBuffer[3] = new Vector3(-playerQuadHalfWidth, -playerQuadHalfHeight, playerDist); projectionMesh.SetVertices(vertBuffer); projectionMesh.RecalculateBounds(); projectionMesh.UploadMeshData(false); }
void CalculateCurrentLightsData(FrameLightingData lightingData) { MixCastCamera cam = MixCastCamera.FindCamera(feed.context); if (cam == null || cam.gameCamera == null) { return; } float playerDist = feed.CalculatePlayerDistance(cam.gameCamera); lightingData.directionalLightCount = 0; if (MixCast.ProjectSettings.specifyLightsManually) { foreach (Light light in MixCastLight.ActiveDirectionalLights) { if ((light.cullingMask & (1 << layerNum)) > 0 && LightIsAffectingPlayer(light, cam.gameCamera, playerDist)) { lightingData.directionalLightDirections[lightingData.directionalLightCount] = light.transform.forward; lightingData.directionalLightColors[lightingData.directionalLightCount] = light.color * light.intensity * MixCast.ProjectSettings.directionalLightPower * 0.5f; lightingData.directionalLightCount++; if (lightingData.directionalLightCount == DIR_LIGHT_ARRAY_MAX) { break; } } } } else { var directionalLights = Light.GetLights(LightType.Directional, layerNum); for (int i = 0; i < directionalLights.Length && lightingData.directionalLightCount < DIR_LIGHT_ARRAY_MAX; i++) { if (LightIsAffectingPlayer(directionalLights[i], cam.gameCamera, playerDist)) { lightingData.directionalLightDirections[lightingData.directionalLightCount] = directionalLights[i].transform.forward; lightingData.directionalLightColors[lightingData.directionalLightCount] = directionalLights[i].color * directionalLights[i].intensity * MixCast.ProjectSettings.directionalLightPower * 0.5f; lightingData.directionalLightCount++; } } } lightingData.pointLightCount = 0; if (MixCast.ProjectSettings.specifyLightsManually) { foreach (Light light in MixCastLight.ActivePointLights) { if ((light.cullingMask & (1 << layerNum)) > 0 && LightIsAffectingPlayer(light, cam.gameCamera, playerDist)) { lightingData.pointLightPositions[lightingData.pointLightCount] = light.transform.position; lightingData.pointLightPositions[lightingData.pointLightCount].w = light.range; lightingData.pointLightColors[lightingData.pointLightCount] = light.color * light.intensity * MixCast.ProjectSettings.pointLightPower * 0.5f; lightingData.pointLightCount++; if (lightingData.pointLightCount == POINT_LIGHT_ARRAY_MAX) { break; } } } } else { var pointLights = Light.GetLights(LightType.Point, layerNum); for (int i = 0; i < pointLights.Length && lightingData.pointLightCount < POINT_LIGHT_ARRAY_MAX; i++) { if (LightIsAffectingPlayer(pointLights[i], cam.gameCamera, playerDist)) { lightingData.pointLightPositions[lightingData.pointLightCount] = pointLights[i].transform.position; lightingData.pointLightPositions[lightingData.pointLightCount].w = pointLights[i].range; lightingData.pointLightColors[lightingData.pointLightCount] = pointLights[i].color * pointLights[i].intensity * MixCast.ProjectSettings.pointLightPower * 0.5f; lightingData.pointLightCount++; } } } //foundLights = Light.GetLights(LightType.Spot, layerNum); //lightingData.spotLightCount = 0; //for (int i = 0; i < foundLights.Length && lightingData.spotLightCount < SPOT_LIGHT_ARRAY_MAX; i++) //{ // if (LightIsAffectingPlayer(foundLights[i], cam.gameCamera, playerDist)) // { // lightingData.spotLightPositions[lightingData.spotLightCount] = foundLights[i].transform.position; // lightingData.spotLightPositions[lightingData.spotLightCount].w = foundLights[i].range; // lightingData.spotLightDirections[lightingData.spotLightCount] = foundLights[i].transform.forward; // lightingData.spotLightDirections[lightingData.spotLightCount].w = foundLights[i].spotAngle * Mathf.Deg2Rad * 0.5f; // lightingData.spotLightColors[lightingData.spotLightCount] = foundLights[i].color * foundLights[i].intensity * MixCast.ProjectSettings.spotLightPower * 0.5f; // lightingData.spotLightCount++; // } //} }