void OnEnable() { try { m_MaterialClear = Help.CreateMaterial( "ComposeReflection" ); } catch ( System.Exception _e ) { Help.LogError( "An error occurred while creating the Sky Reflection shader : " + _e.Message ); } }
public override void OnEnable() { Help.LogDebug( "ModuleCloudVolume.OnEnable() !" ); try { m_MaterialRenderCloud = Help.CreateMaterial( "Clouds/CloudVolume" ); m_MaterialRenderCloudShadow = Help.CreateMaterial( "Clouds/CloudVolumeShadow" ); ExitErrorState(); } catch ( Exception _e ) { EnterErrorState( "An error occurred while creating the materials for the module.\r\n" + _e.Message ); } // Forward to layers foreach ( CloudLayer L in m_CloudLayers ) L.OnEnable(); }
public void OnEnable() { m_Material = Help.CreateMaterial( "Utility/ImageScaler" ); m_MaterialLog = Help.CreateMaterial( "Utility/ImageScalerLog" ); }
/// <summary> /// Unity.Material Proxy Method /// </summary> /// <param name="_Source"></param> public void CopyPropertiesFromMaterial( NuajMaterial _Source ) { m_Material.CopyPropertiesFromMaterial( _Source.Material ); // Copy other material's tables foreach ( string Key in _Source.m_ParamName2Texture.Keys ) m_ParamName2Texture[Key] = _Source.m_ParamName2Texture[Key]; foreach ( string Key in _Source.m_ParamName2CubeMap.Keys ) m_ParamName2CubeMap[Key] = _Source.m_ParamName2CubeMap[Key]; }
/// <summary> /// Assigns basic scattering coefficients to a material that would require to compute the optical depth of the atmosphere /// </summary> /// <param name="_Material"></param> /// <param name="_bSetupDensityTexture"></param> internal void SetupScatteringCoefficients( NuajMaterial _Material, bool _bSetupDensityTexture ) { // Build the GPU & CPU density textures if they do not already exist _Material.SetFloat( "_DensitySeaLevel_Rayleigh", m_DensityRayleigh ); _Material.SetVector( "_Sigma_Rayleigh", m_SigmaRayleigh ); _Material.SetFloat( "_DensitySeaLevel_Mie", m_DensityMie ); _Material.SetFloat( "_Sigma_Mie", m_SigmaMie ); _Material.SetFloat( "_MiePhaseAnisotropy", Mathf.Clamp( m_ScatteringAnisotropy, -0.99f, +0.99f ) ); ComputeDensityTexture(); if ( _bSetupDensityTexture ) _Material.SetTexture( "_TexDensity", m_DensityTexture ); }
public override void OnEnable() { Help.LogDebug( "ModuleCloudLayer.OnEnable() !" ); try { m_Material = Help.CreateMaterial( "Clouds/CloudLayer" ); ExitErrorState(); } catch ( Exception _e ) { EnterErrorState( "An error occurred while creating the materials for the module.\r\n" + _e.Message ); } // Forward to layers foreach ( CloudLayer L in m_CloudLayers ) { L.Owner = this; // As Awake() or Start() are not always called... L.OnEnable(); } }
public override void OnEnable() { Help.LogDebug( "ModulePerspective.OnEnable() !" ); try { m_MaterialRenderSkyComplex = Help.CreateMaterial( "Sky/AerialPerspectiveComplex" ); m_MaterialRenderEnvironmentComplex = Help.CreateMaterial( "Sky/RenderEnvironmentComplex" ); m_MaterialComposeSkyComplex = Help.CreateMaterial( "Sky/ComposeSkyAndCloudsComplex" ); m_MaterialRenderSkySimple = Help.CreateMaterial( "Sky/AerialPerspectiveSimple" ); m_MaterialRenderEnvironmentSimple = Help.CreateMaterial( "Sky/RenderEnvironmentSimple" ); m_MaterialComposeSkySimple = Help.CreateMaterial( "Sky/ComposeSkyAndCloudsSimple" ); m_MaterialRenderEnvironmentNone = Help.CreateMaterial( "Sky/RenderEnvironmentNone" ); m_MaterialComposeSkyNone = Help.CreateMaterial( "Sky/ComposeSkyAndCloudsNone" ); // Enable fog layer m_FogLayer.Owner = this; m_FogLayer.OnEnable(); ExitErrorState(); } catch ( Exception _e ) { EnterErrorState( "An error occurred while creating the materials for the module.\r\n" + _e.Message ); } // Update internal data UpdateCachedValues(); }
/// <summary> /// Performs CPU readback of a 1x1 texture /// </summary> /// <param name="_Source"></param> /// <param name="_PassIndex"></param> /// <param name="_ValueIndex"></param> /// <param name="_LuminanceScale"></param> /// <returns></returns> internal Vector3 CPUReadBack( RenderTexture _Source, NuajMaterial _Material, int _PassIndex, int _ValueIndex, float _LuminanceScale ) { m_Owner.RenderToCPU( _Source, _ValueIndex, _Material, _PassIndex ); // Read back Color PackedResult = m_Owner.CPUReadBack( _ValueIndex ); return Help.ColorToVec3( PackedResult ) * _LuminanceScale * PackedResult.a; }
public override void OnEnable() { m_MaterialRender = Help.CreateMaterial( "Clouds/FogVolume" ); // Update internal data UpdateCachedValues(); }
protected void SetupSunCloudMaps( NuajMaterial _Material, ICloudLayer[] _Layers ) { switch ( _Layers.Length ) { case 0: _Material.SetTexture( "_TexCloudLayer0", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer1", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 1: _Material.SetTexture( "_TexCloudLayer0", _Layers[0].EnvironmentRenderTargetSun ); _Material.SetTexture( "_TexCloudLayer1", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 2: _Material.SetTexture( "_TexCloudLayer0", _Layers[0].EnvironmentRenderTargetSun ); _Material.SetTexture( "_TexCloudLayer1", _Layers[1].EnvironmentRenderTargetSun ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 3: _Material.SetTexture( "_TexCloudLayer0", _Layers[0].EnvironmentRenderTargetSun ); _Material.SetTexture( "_TexCloudLayer1", _Layers[1].EnvironmentRenderTargetSun ); _Material.SetTexture( "_TexCloudLayer2", _Layers[2].EnvironmentRenderTargetSun ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 4: _Material.SetTexture( "_TexCloudLayer0", _Layers[0].EnvironmentRenderTargetSun ); _Material.SetTexture( "_TexCloudLayer1", _Layers[1].EnvironmentRenderTargetSun ); _Material.SetTexture( "_TexCloudLayer2", _Layers[2].EnvironmentRenderTargetSun ); _Material.SetTexture( "_TexCloudLayer3", _Layers[3].EnvironmentRenderTargetSun ); break; } }
protected void SetupSkyParametersSimple( NuajMaterial _Material, ICloudLayer[] _Layers, bool _bIsEnvironmentRendering ) { // Build the GPU & CPU density textures if they do not already exist ComputeDensityTexture(); _Material.SetTexture( "_TexDensity", m_DensityTexture ); _Material.SetVector( "_Sigma_Rayleigh", m_SigmaRayleigh ); _Material.SetFloat( "_Sigma_Mie", m_SigmaMie ); _Material.SetFloat( "_MiePhaseAnisotropy", Mathf.Clamp( m_ScatteringAnisotropy, -0.99f, +0.99f ) ); _Material.SetFloat( "_PlanetRadiusOffsetKm", m_PlanetRadiusOffsetKm ); // Prepare cloud Mie factors & cloud layers' textures switch ( _Layers.Length ) { case 0: _Material.SetTexture( "_TexCloudLayer0", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer1", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 1: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 2: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", _bIsEnvironmentRendering ? _Layers[1].EnvironmentRenderTargetSky : _Layers[1].RenderTarget ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 3: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", _bIsEnvironmentRendering ? _Layers[1].EnvironmentRenderTargetSky : _Layers[1].RenderTarget ); _Material.SetTexture( "_TexCloudLayer2", _bIsEnvironmentRendering ? _Layers[2].EnvironmentRenderTargetSky : _Layers[2].RenderTarget ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 4: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", _bIsEnvironmentRendering ? _Layers[1].EnvironmentRenderTargetSky : _Layers[1].RenderTarget ); _Material.SetTexture( "_TexCloudLayer2", _bIsEnvironmentRendering ? _Layers[2].EnvironmentRenderTargetSky : _Layers[2].RenderTarget ); _Material.SetTexture( "_TexCloudLayer3", _bIsEnvironmentRendering ? _Layers[3].EnvironmentRenderTargetSky : _Layers[3].RenderTarget ); break; } }
protected void SetupSkyParametersNone( NuajMaterial _Material, ICloudLayer[] _Layers, bool _bIsEnvironmentRendering ) { // Prepare cloud Mie factors & cloud layers' textures switch ( _Layers.Length ) { case 0: _Material.SetTexture( "_TexCloudLayer0", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer1", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 1: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 2: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", _bIsEnvironmentRendering ? _Layers[1].EnvironmentRenderTargetSky : _Layers[1].RenderTarget ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 3: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", _bIsEnvironmentRendering ? _Layers[1].EnvironmentRenderTargetSky : _Layers[1].RenderTarget ); _Material.SetTexture( "_TexCloudLayer2", _bIsEnvironmentRendering ? _Layers[2].EnvironmentRenderTargetSky : _Layers[2].RenderTarget ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 4: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", _bIsEnvironmentRendering ? _Layers[1].EnvironmentRenderTargetSky : _Layers[1].RenderTarget ); _Material.SetTexture( "_TexCloudLayer2", _bIsEnvironmentRendering ? _Layers[2].EnvironmentRenderTargetSky : _Layers[2].RenderTarget ); _Material.SetTexture( "_TexCloudLayer3", _bIsEnvironmentRendering ? _Layers[3].EnvironmentRenderTargetSky : _Layers[3].RenderTarget ); break; } }
/// <summary> /// Setups the sky parameters for the sky material /// </summary> /// <param name="_Material">The material to setup</param> /// <param name="_Layers">The array of cloud layers (from 0 to 4 elements)</param> /// <param name="_ShadowMap">The shadow map</param> /// <param name="_bIsEnvironmentRendering"></param> protected void SetupSkyParameters( NuajMaterial _Material, ICloudLayer[] _Layers, Texture _ShadowMap, bool _bIsEnvironmentRendering ) { // Build the GPU & CPU density textures if they do not already exist ComputeDensityTexture(); _Material.SetTexture( "_TexDensity", m_DensityTexture ); _Material.SetTextureRAW( "_TexShadowMap", _ShadowMap ); _Material.SetFloat( "_DensitySeaLevel_Rayleigh", m_DensityRayleigh ); _Material.SetVector( "_Sigma_Rayleigh", m_SigmaRayleigh ); _Material.SetFloat( "_DensitySeaLevel_Mie", m_DensityMie ); _Material.SetFloat( "_Sigma_Mie", m_SigmaMie ); _Material.SetFloat( "_MiePhaseAnisotropy", Mathf.Clamp( m_ScatteringAnisotropy, -0.99f, +0.99f ) ); _Material.SetFloat( "_SkyStepsCount", m_SkyStepsCount );//+ (_Layers.Length == 0 ? m_UnderCloudsMinStepsCount : 0) ); // Use higher resolution if no cloud layers _Material.SetFloat( "_UnderCloudsMinStepsCount", m_bGodRays ? m_UnderCloudsMinStepsCount : 0 ); _Material.SetFloat( "_bGodRays", m_bGodRays ? 1 : 0 ); _Material.SetFloat( "_PlanetRadiusOffsetKm", m_PlanetRadiusOffsetKm ); // Prepare cloud Mie factors & cloud layers' textures switch ( _Layers.Length ) { case 0: _Material.SetTexture( "_TexCloudLayer0", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer1", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 1: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 2: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", _bIsEnvironmentRendering ? _Layers[1].EnvironmentRenderTargetSky : _Layers[1].RenderTarget ); _Material.SetTexture( "_TexCloudLayer2", m_Owner.m_TextureEmptyCloud, true ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 3: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", _bIsEnvironmentRendering ? _Layers[1].EnvironmentRenderTargetSky : _Layers[1].RenderTarget ); _Material.SetTexture( "_TexCloudLayer2", _bIsEnvironmentRendering ? _Layers[2].EnvironmentRenderTargetSky : _Layers[2].RenderTarget ); _Material.SetTexture( "_TexCloudLayer3", m_Owner.m_TextureEmptyCloud, true ); break; case 4: _Material.SetTexture( "_TexCloudLayer0", _bIsEnvironmentRendering ? _Layers[0].EnvironmentRenderTargetSky : _Layers[0].RenderTarget ); _Material.SetTexture( "_TexCloudLayer1", _bIsEnvironmentRendering ? _Layers[1].EnvironmentRenderTargetSky : _Layers[1].RenderTarget ); _Material.SetTexture( "_TexCloudLayer2", _bIsEnvironmentRendering ? _Layers[2].EnvironmentRenderTargetSky : _Layers[2].RenderTarget ); _Material.SetTexture( "_TexCloudLayer3", _bIsEnvironmentRendering ? _Layers[3].EnvironmentRenderTargetSky : _Layers[3].RenderTarget ); break; } }