public TextureCube Generate(Texture2D equirectangularTexture) { // I don't seem to have problems with 'Pre-filter convolution artifacts' but in case of // problems check that section: https://learnopengl.com/PBR/IBL/Specular-IBL this.Device.BlendState = BlendState.Opaque; this.Device.DepthStencilState = DepthStencilState.None; this.Device.RasterizerState = RasterizerState.CullCounterClockwise; this.Device.SamplerStates[0] = SamplerState.LinearClamp; this.Effect.EquirectangularTexture = equirectangularTexture; this.Effect.EquirectangularTextureSampler = SamplerState.LinearClamp; var cubeMap = new TextureCube(this.Device, resolution, true, SurfaceFormat.HalfVector4); var mipResolution = resolution; for (var mipMapLevel = 0; mipMapLevel < cubeMap.LevelCount; mipMapLevel++) { var roughness = mipMapLevel / (cubeMap.LevelCount - 1.0f); this.Effect.Roughness = roughness; CubeMapUtilities.RenderFaces(this.Device, cubeMap, mipResolution, SurfaceFormat.HalfVector4, mipMapLevel, this.Apply); mipResolution /= 2; } return(cubeMap); }
public TextureCube Generate(Texture2D equirectangularTexture) { this.Device.BlendState = BlendState.Opaque; this.Device.DepthStencilState = DepthStencilState.None; this.Device.RasterizerState = RasterizerState.CullCounterClockwise; this.Effect.EquirectangularTexture = equirectangularTexture; this.Effect.EquirectangularTextureSampler = SamplerState.LinearClamp; return(CubeMapUtilities.RenderFaces(this.Device, resolution, SurfaceFormat.HalfVector4, this.Apply)); }