///////////// // GLOBALS // ///////////// Texture2D shaderTexture : register(t0); SamplerState SampleType : register(s0); cbuffer SkyboxBuffer { float4 ambientColor; float4 diffuseColor; float3 lightDirection; float intensity; }; cbuffer SkyboxColorBuffer { float4 sunColor; }; ////////////// // TYPEDEFS // ////////////// struct PixelInputType { float4 position : SV_POSITION; float2 tex : TEXCOORD0; float3 normal : NORMAL; }; //////////////////////////////////////////////////////////////////////////////// // Pixel Shader //////////////////////////////////////////////////////////////////////////////// float4 SkyboxPixelShader(PixelInputType input) : SV_TARGET { // Inverser les coordonnées de texture pour compenser les normales inversées float2 invertedTexCoord = float2(1.0 - input.tex.x, 1.0 - input.tex.y); // Échantillonner la texture avec les coordonnées inversées float4 textureColor = shaderTexture.Sample(SampleType, invertedTexCoord); // Pour une skybox, l'éclairage devrait être plus simple - on ignore l'orientation des normales // et on applique une luminosité uniforme ou un gradient basé sur la position (hauteur) // Calculer un facteur de luminosité uniforme à appliquer float lightFactor = saturate(intensity); // Combiner la couleur ambiante et diffuse pour l'éclairage de la skybox float4 lightColor = ambientColor + (diffuseColor * lightFactor); // Appliquer la couleur de l'éclairage à la texture float4 finalColor = saturate(lightColor) * textureColor; return finalColor; }