Я делаю бесконечный раннер в Unity и хочу добавить в него криволинейный шейдер, как в этом туториале https://thewikihow.com/video_6_e_GoWlZOo
Но когда я добавляю этот материал к объекту, он заменяет старый. И когда я добавляю его вторым в Mesh Renderer, это не влияет на первый. https://drive.google.com/open?id=1-kP4A0Xh3P9xVjrwjTiTPlh_WcHnBA1d
Это код шейдера:
Shader "PPP/BendWorld"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Curvature("Curvature", Float) = 0.001
}
SubShader
{
Tags { "RenderType" = "Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert vertex:vert addshadow
uniform sampler2D _MainTex;
uniform float _Curvature;
struct Input
{
float uv_MainTex;
};
void vert(inout appdata_full v)
{
float4 worldSpace = mul(unity_ObjectToWorld, v.vertex);
worldSpace.xyz -= _WorldSpaceCameraPos.xyz;
worldSpace = float4(0.0f, (worldSpace.x * worldSpace.x) * -_Curvature, 0.0f, 0.0f);
v.vertex += mul(unity_WorldToObject, worldSpace);
}
void surf(Input IN, inout SurfaceOutput o)
{
half4 c = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
Fallback "Mobile/Diffuse"
}
Я хочу изогнуть объект и создать на нем текстуру, есть ли способ сделать это?
Так должен ли я создавать новый шейдерный материал для каждого объекта с его текстурой? Я уже пробовал это, но эта текстура сломана Это с нормальной текстурой drive.google.com/open?id=1mipTfiobyB7PDTT6qiw9udX9HgiA2zZ9 А это с тем шейдером с той же текстурой drive.google.com/open?id=1uMafa5qbh-g4gFh6E1SHsJ3-McJjJG8x
Это шейдер воды с движущейся водой? Если да, то вас ждет небольшая работа. Затем вы должны изменить этот шейдер для работы с кривизной. Вы не можете просто добавить еще один шейдер и ожидать, что они будут работать вместе.
Нет это просто картинка
Текстура сломана, потому что вы определили свой uv_MainTex как float вместо float2. Координаты UV двумерны.
@KalleHalvarsson, можете ли вы опубликовать это как ответ вместо комментария, чтобы его можно было принять? ОП подтвердил мне, что это сработало (он учится в моей группе, где работает над этим проектом).
@KalleHalvarsson большое спасибо, все работает
@Teo.sk Нет проблем, рад помочь!
Что касается проблемы с текстурой: текстура выглядит сломанной, потому что вы определили свой uv_MainTex как float вместо float2. Координаты UV являются двумерными — если вы определите его как скаляр, он будет использовать только ось U UV.
У шейдера есть собственное свойство текстуры. Поэтому вы должны добавить этот шейдер вместе с желаемой текстурой к объекту, создав новый материал. Как вы заметили, добавление к объекту двух материалов/шейдеров не сработает. (Извините, если я неправильно понял вопрос.)