internal DensityVolumeEngineData ConvertToEngineData() { DensityVolumeEngineData data = new DensityVolumeEngineData(); data.extinction = VolumeRenderingUtils.ExtinctionFromMeanFreePath(meanFreePath); data.scattering = VolumeRenderingUtils.ScatteringFromExtinctionAndAlbedo(data.extinction, (Vector3)(Vector4)albedo); data.textureIndex = textureIndex; data.textureScroll = textureOffset; data.textureTiling = textureTiling; // Clamp to avoid NaNs. Vector3 positiveFade = this.positiveFade; Vector3 negativeFade = this.negativeFade; data.rcpPosFaceFade.x = Mathf.Min(1.0f / positiveFade.x, float.MaxValue); data.rcpPosFaceFade.y = Mathf.Min(1.0f / positiveFade.y, float.MaxValue); data.rcpPosFaceFade.z = Mathf.Min(1.0f / positiveFade.z, float.MaxValue); data.rcpNegFaceFade.y = Mathf.Min(1.0f / negativeFade.y, float.MaxValue); data.rcpNegFaceFade.x = Mathf.Min(1.0f / negativeFade.x, float.MaxValue); data.rcpNegFaceFade.z = Mathf.Min(1.0f / negativeFade.z, float.MaxValue); data.invertFade = invertFade ? 1 : 0; float distFadeLen = Mathf.Max(distanceFadeEnd - distanceFadeStart, 0.00001526f); data.rcpDistFadeLen = 1.0f / distFadeLen; data.endTimesRcpDistFadeLen = distanceFadeEnd * data.rcpDistFadeLen; return(data); }
internal LocalVolumetricFogEngineData ConvertToEngineData() { LocalVolumetricFogEngineData data = new LocalVolumetricFogEngineData(); data.extinction = VolumeRenderingUtils.ExtinctionFromMeanFreePath(meanFreePath); data.scattering = VolumeRenderingUtils.ScatteringFromExtinctionAndAlbedo(data.extinction, (Vector4)albedo); var atlas = LocalVolumetricFogManager.manager.volumeAtlas.GetAtlas(); data.atlasOffset = LocalVolumetricFogManager.manager.volumeAtlas.GetTextureOffset(volumeMask); data.atlasOffset.x /= (float)atlas.width; data.atlasOffset.y /= (float)atlas.height; data.atlasOffset.z /= (float)atlas.volumeDepth; data.useVolumeMask = volumeMask != null ? 1 : 0; float volumeMaskSize = volumeMask != null ? (float)volumeMask.width : 0.0f; // Volume Mask Textures are always cubic data.maskSize = new Vector4(volumeMaskSize / atlas.width, volumeMaskSize / atlas.height, volumeMaskSize / atlas.volumeDepth, volumeMaskSize); data.textureScroll = textureOffset; data.textureTiling = textureTiling; // Clamp to avoid NaNs. Vector3 positiveFade = this.positiveFade; Vector3 negativeFade = this.negativeFade; data.rcpPosFaceFade.x = Mathf.Min(1.0f / positiveFade.x, float.MaxValue); data.rcpPosFaceFade.y = Mathf.Min(1.0f / positiveFade.y, float.MaxValue); data.rcpPosFaceFade.z = Mathf.Min(1.0f / positiveFade.z, float.MaxValue); data.rcpNegFaceFade.y = Mathf.Min(1.0f / negativeFade.y, float.MaxValue); data.rcpNegFaceFade.x = Mathf.Min(1.0f / negativeFade.x, float.MaxValue); data.rcpNegFaceFade.z = Mathf.Min(1.0f / negativeFade.z, float.MaxValue); data.invertFade = invertFade ? 1 : 0; data.falloffMode = falloffMode; float distFadeLen = Mathf.Max(distanceFadeEnd - distanceFadeStart, 0.00001526f); data.rcpDistFadeLen = 1.0f / distFadeLen; data.endTimesRcpDistFadeLen = distanceFadeEnd * data.rcpDistFadeLen; return(data); }