예제 #1
0
        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);
        }
예제 #2
0
        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));
        }