Jump to content
  • Advertisement

DX11 Is this texture seaming caused by sample type?

Recommended Posts

Hi, so I imported some new models into my engine, and some of them show up with ugly seams or dark patches, while others look perfect (see pictures)

I'm using the same shader for all of them, and all of these models have had custom UV mapped textures created for them, which should wrap fully around them,

instead of using tiled textures. I have no idea why the custom UV mapped textures are mapping correctly on some, but not others.

Possible causes are

1. Am I using the wrong SamplerState to sample the textures? (Im using SampleTypeClamp )

2. The original models had quads, and were UV mapped by an artist in that state, then I reimported them into 3DS Max and reexported them as all triangles 

(my engine object loader only accepts triangles).

3. Could the original model UVs just be wrong?

Please let me know if somebody can help identify this problem, I'm completely baffled. Thanks.

For reference, here's a link to the shader being used to draw the problematic models and the shader code below.


#define NUM_LIGHTS 3

// texture resource that will be used for rendering the texture on the model
Texture2D shaderTextures[7];// NOTE - we only use one render target for drawing all the shadows here!
// allows modifying how pixels are written to the polygon face, for example choosing which to draw. 
SamplerState SampleType;

SamplerState SampleTypeClamp : register(s0);
SamplerState SampleTypeWrap  : register(s1);


// This structure is used to describe the lights properties
struct LightTemplate_PS
    int type;
    float3 padding;
    float4 diffuseColor;
    float3 lightDirection; //(lookat?) //@TODO pass from VS BUFFER?
    float specularPower;
    float4 specularColor;

cbuffer SceneLightBuffer:register(b0)
    float4 cb_ambientColor;
    LightTemplate_PS cb_lights[NUM_LIGHTS];

// value set here will be between 0 and 1.
cbuffer TranslationBuffer:register(b1)
    float textureTranslation; //@NOTE = hlsl automatically pads floats for you

// for alpha blending textures
cbuffer TransparentBuffer:register(b2)
    float blendAmount;

struct PixelInputType
    float4 vertex_ModelSpace : SV_POSITION;
    float2 tex : TEXCOORD0;
    float3 normal : NORMAL;
    float3 tangent : TANGENT;
    float3 binormal : BINORMAL;
    float3 viewDirection : TEXCOORD1;
    float3 lightPos_LS[NUM_LIGHTS] : TEXCOORD2;
    float4 vertex_ScrnSpace : TEXCOORD5;

float4 main(PixelInputType input) : SV_TARGET
    bool bInsideSpotlight = true;
    float2 projectTexCoord;
    float depthValue;
    float lightDepthValue;
    float4 textureColor;
    float gamma = 7.f;

    /////////////////// NORMAL MAPPING //////////////////
    float4 bumpMap = shaderTextures[4].Sample(SampleType, input.tex);

    // Sample the shadow value from the shadow texture using the sampler at the projected texture coordinate location.
    projectTexCoord.x =  input.vertex_ScrnSpace.x / input.vertex_ScrnSpace.w / 2.0f + 0.5f;
    projectTexCoord.y = -input.vertex_ScrnSpace.y / input.vertex_ScrnSpace.w / 2.0f + 0.5f;
    float shadowValue = shaderTextures[6].Sample(SampleTypeClamp, projectTexCoord).r;

    // Expand the range of the normal value from (0, +1) to (-1, +1).
    bumpMap = (bumpMap * 2.0f) - 1.0f;

    // Change the COORDINATE BASIS of the normal into the space represented by basis vectors tangent, binormal, and normal!
    float3 bumpNormal = normalize((bumpMap.x * input.tangent) + (bumpMap.y * input.binormal) + (bumpMap.z * input.normal));

    //////////////// AMBIENT BASE COLOR ////////////////
    // Set the default output color to the ambient light value for all pixels.
    float4 lightColor = cb_ambientColor * saturate(dot(bumpNormal, input.normal) + .2);

    // Calculate the amount of light on this pixel.
    for(int i = 0; i < NUM_LIGHTS; ++i)
        float lightIntensity = saturate(dot(bumpNormal, normalize(input.lightPos_LS[i])));
        if(lightIntensity > 0.0f)
        lightColor += (cb_lights[i].diffuseColor * lightIntensity) * 0.3;

    // Saturate the final light color.
    lightColor = saturate(lightColor);

    // TEXTURE ANIMATION -  Sample pixel color from texture at this texture coordinate location.
    input.tex.x += textureTranslation;

    float4 color1 = shaderTextures[0].Sample(SampleTypeWrap, input.tex);
    float4 color2 = shaderTextures[1].Sample(SampleTypeWrap, input.tex);
    float4 alphaValue = shaderTextures[3].Sample(SampleTypeWrap, input.tex);
    //textureColor = saturate((alphaValue * color1) + ((1.0f - alphaValue) * color2));
    textureColor = color1;

    // Combine the light and texture color.
    float4 finalColor = lightColor * textureColor * shadowValue * gamma;

    //if(lightColor.x == 0)
    //    finalColor =  cb_ambientColor * saturate(dot(bumpNormal, input.normal) + .2) * textureColor;

    return finalColor;





Share this post

Link to post
Share on other sites

Those look like flipped normals. Could also be a normal map that doesn't support mirroring well, like a object normal map.

It could be that you have been mirroring your mesh to save time but did not correct the normals before export. Try the texture on a sphere and see if the same thing happens.


After reading your post I will say it's the mesh. Recalculate your normals in your 3D software.

Edited by Scouting Ninja

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Advertisement
  • Advertisement
  • Popular Tags

  • Popular Now

  • Advertisement
  • Similar Content

    • By LuigiLuigi
      I've been working on my own Metroidvania via GameMaker Studio for the past few years. You play as a bat named Ralph as he goes on an adventure to obtain 7 Crystal Medallions hidden in dungeons with the help of a cult known as the Crimson Fog. Along the way, there will be quests unlocked in Cedrus Village as you progress through the game. I've managed to complete a demo of the game up to the first dungeon and boss fight.
      I have only a PC build available, and the only gamepads I managed to install were Logitech Precision and Xbox PC gamepads. I had some trouble on gamepad detection though, so they may have connection issues. The desktop controls are similar to Terarria's control scheme if it's too much trouble. I don't have any music at this point, I'll need to get someone else to compose it later on. The music I make isn't bad, but it doesn't fit the aesthetic that well.
      I'm really hoping I can get feedback regarding the general content.
      Crimson Fog.0.2.zip
    • By mmmax3d
      Hi everyone,
      I would need some assistance from anyone who has a similar experience
      or a nice idea!
      I have created a skybox (as cube) and now I need to add a floor/ground.
      The skybox is created from cubemap and initially it was infinite.
      Now it is finite with a specific size. The floor is a quad in the middle
      of the skybox, like a horizon.
      I have two problems:
      When moving the skybox upwards or downwards, I need to
      sample from points even above the horizon while sampling
      from the botton at the same time.  I am trying to create a seamless blending of the texture
      at the points of the horizon, when the quad is connected
      to the skybox. However, I get skew effects. Does anybody has done sth similar?
      Is there any good practice?
      Thanks everyone!
    • By 4d3d
      Hi there,
      I've been away from 3d Art whilst on Maternity leave and just started to get an hour a day (if i'm lucky) to model while my baby sleeps. This is also my reason for picking something small. Really i'm after some feedback, good or bad, on any improvements, tips on rendering etc. 

      Any feedback would be massively appreciated as my time is so precious at the moment that i don't often have time to watch tutorials and research techniques so anything to point me in the right direction would be great.

      I've baked down from High-poly and exposed some custom color changing, decals, and number plate naming from substance designer and imported to marmoset.

    • By lucky6969b
      Dear folks,
      How do I calculate the axis of rotation between 2 vectors, one of them is the source directional vector, and the second is the destination directional vector.
      Thanks a lot
    • By Alexander Winter
      Jumpaï is a game about creating platformer levels and playing them online with everyone. Will you become the most popular level maker or will you be a speedrunner holding world records on everyone's levels? More into casual play? No problem! You can happily play through the giant level database or chill at people's hub. Meet new people, make new friends, learn to master the game by asking pros or ask for people's favorite tricks on level making. Download here: https://jumpai.itch.io/jumpai Discord: https://discord.gg/dwRTNCG   Trailer:      (The following screenshots are older but still a bit representative)  

      Unlike other games of its genre, Jumpaï is about playing levels with everyone in real time. You have the fun to see how other people are playing and get to realize you are not the only one failing that jump!

      The game is currently into development and still have lots to do. I am looking for people willing to help how they can. Developer? Graphist? Play tester? Sound designer? Game designer? I'm welcoming any talent. The project is so big I have a lot of work to do in all areas. Server backend, UI/UX, Game networking, Gameplay and even the website some day. As you can see from the default buttons, the game has been made with LibGDX. This project is a perfect opportunity for you to get better in various fields as well as showing off your skills.

      If you plan to take an important role into the development of the game, we will discuss how you will get paid once the game generates money. Note that I'm not working on the game full-time. I'm studying full-time and working on it is a hobby. The project has started in november 2016 and experiences heavy progress.

      So, are you interested? If so join me on my discord https://discord.gg/dwRTNCG and I'll answer all your questions.

      Additionnal screenshots:

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!