Para mi juego, he escrito un sombreado que le permite a mi la textura de mosaico muy bien con varios objetos. Yo que por la elección de la uv no se basa en la posición relativa de los vértices, pero en el mundial absoluto de posición. La costumbre de sombreado es como sigue. Básicamente sólo las baldosas de la textura en una cuadrícula de 1×1 unidades del mundo.

Shader "MyGame/Tile" 
{
    Properties 
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader 
    { 
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Lambert
        sampler2D _MainTex;

        struct Input 
        {
            float2 uv_MainTex;
            float3 worldPos;
        };

        void surf (Input IN, inout SurfaceOutput o) 
        {
            //adjust UV for tiling
            float2 cell = floor(IN.worldPos.xz);
            float2 offset = IN.worldPos.xz - cell;
            float2 uv = offset;

            float4 mainTex = tex2D(_MainTex, uv);
            o.Albedo = mainTex.rgb;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}

He hecho este planteamiento en Cg y en HLSL shaders en XNA antes y siempre funcionó como un encanto. Con la Unidad de sombreado, sin embargo, consigue una muy visible de la costura en los bordes de la textura. He probado una Unidad surface shader así como un vértice/fragment shader, ambos con los mismos resultados.

Unity3D las costuras visibles en los bordes cuando baldosas de textura

La textura se ve de la siguiente manera. En mi juego es en realidad un .tga, no .png, pero que no causa el problema. El problema se produce sobre todo la textura de la configuración de los filtros y en la repetición o el modo de pinza igualmente.

Unity3D las costuras visibles en los bordes cuando baldosas de textura

Ahora he visto que alguien tiene un problema similar, aquí: Las costuras entre los aviones cuando lightmapping.
Hubo, sin embargo, no hay respuesta definitiva sobre cómo resolver un problema. También, mi problema no se refieren a un lightmap o de la iluminación en todo. En el fragment shader he probado, no había iluminación habilitada y el problema todavía estaba presente.

La misma pregunta también fue publicado en el sitio de respuestas de la Unidad, pero no he recibido respuestas y no un montón de puntos de vista, así que estoy tratando aquí también: Las costuras visibles en los bordes cuando baldosas de textura

  • En su textura, pruebe a cambiar Wrap Mode a la «Pinza».
  • Como he dicho: El problema se produce sobre todo la textura de la configuración de los filtros y en la repetición o el modo de pinza igualmente.
  • Ack, me grep d para ‘wrap’ modo, no abrazadera.
  • Asegúrate de jugar con los MipMaps así. A ver si eso ayuda.
  • Usted no necesita implementar frac ti mismo. http.developer.nvidia.com/Cg/frac.html
InformationsquelleAutor Thrakbad | 2013-04-03

1 Comentario

  1. 4

    Esto describe la razón de su problema:
    http://hacksoflife.blogspot.com/2011/01/derivatives-i-discontinuities-and.html

    Este es un gran ejemplo visual, como el tuyo:
    http://aras-p.info/blog/2010/01/07/screenspace-vs-mip-mapping/

    A menos que usted va a deshabilitar los mipmaps, no creo que esto es solucionable con la Unidad, porque hasta donde yo sé, no permiten el uso de funciones que le permiten especificar qué mip nivel de uso en el fragment shader (al menos en OS X /OpenGL ES; esto podría no ser un problema si usted es sólo la orientación de Windows).

    Que dijo, no tengo idea de por qué estás haciendo el fragmento uv a nivel de cálculos que son; sólo transmitir los datos desde el vertex shader funciona bien, con un mosaico de texturas:

    struct v2f {
        float4 position_clip : SV_POSITION;
        float2 position_world_xz : TEXCOORD;
    };
    
    #pragma vertex vert
    v2f vert(float4 vertex : POSITION) {
        v2f o;
        o.position_clip = mul(UNITY_MATRIX_MVP, vertex);
        o.position_world_xz = mul(_Object2World, vertex).xz;
        return o;
    }
    
    #pragma fragment frag
    uniform sampler2D _MainTex;
    fixed4 frag(v2f i) : COLOR {
        return tex2D(_MainTex, i.position_world_xz);
    }
    
    • Muchas gracias, no sé por qué, no creo que de esto mismo. Por supuesto que puede tomar el mundo desde la posición del vértice-sombreado sin más cálculos. Esta realidad hace que el problema desaparezca (desactivación de mip-mapas también trabajó).

Dejar respuesta

Please enter your comment!
Please enter your name here