Есть ли способ повторить текстуру на объекте Unity 3D без указания количества плиток? - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь сделать два разных объекта с одинаковым размером текстуры / один и тот же материал , который должен повторяться; Без создания нового материала для каждого нового объекта, который я создаю. Ниже приведен пример того, чего я пытаюсь достичь.

Материал A на обоих объектах должен выглядеть одинаково, куб справа показывает, как он должен выглядеть.

1 Ответ

1 голос
/ 24 января 2020

Это исправлено и работает!

Мне пришлось создать шейдер Unity, который использует пространство мира вместо локального пространства (по умолчанию). Это код шейдера, который я использовал:

Shader "Legacy Shaders/Diffuse - Worldspace" {
Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Base (RGB)", 2D) = "white" {}
    _Scale("Texture Scale", Float) = 1.0
}
SubShader {
    Tags { "RenderType"="Opaque" }
    LOD 200

CGPROGRAM
#pragma surface surf Lambert

sampler2D _MainTex;
fixed4 _Color;
float _Scale;

struct Input {
    float3 worldNormal;
    float3 worldPos;
};

void surf (Input IN, inout SurfaceOutput o) {
    float2 UV;
    fixed4 c;

    if (abs(IN.worldNormal.x) > 0.5) {
        UV = IN.worldPos.yz; // side
        c = tex2D(_MainTex, UV* _Scale); // use WALLSIDE texture
    }
    else if (abs(IN.worldNormal.z) > 0.5) {
        UV = IN.worldPos.xy; // front
        c = tex2D(_MainTex, UV* _Scale); // use WALL texture
    }
    else {
        UV = IN.worldPos.xz; // top
        c = tex2D(_MainTex, UV* _Scale); // use FLR texture
    }

    o.Albedo = c.rgb * _Color;
}
ENDCG
}

Fallback "Legacy Shaders/VertexLit"
}

Фиксированная версия:

Фиксированная

Источники знаний, которые я использовал:

Видеоурок от PushyPixels

Блоки кода, взятые из этого блога

@ derHu go поставили меня на правильный путь, спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...