Unity:将着色器应用于对象以弯曲其纹理
Unity: Apply shader to object to curve its texture
我正在 Unity 中制作无尽的跑酷游戏,我想像本教程中那样向其添加弯曲着色器 https://youtu.be/6_e_GoWlZOo
但是当我将 material 添加到一个对象时,它会替换旧对象。当我将它添加为网格渲染器中的第二个时,它不会影响第一个。
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"
}
我想弯曲物体并在其上添加纹理,有什么办法可以做到吗?
关于纹理问题:纹理看起来很破损,因为您将 uv_MainTex 定义为浮点数而不是 float2。 UV 坐标是二维的 - 如果将其定义为标量,它将仅使用 UV 的 U 轴。
我正在 Unity 中制作无尽的跑酷游戏,我想像本教程中那样向其添加弯曲着色器 https://youtu.be/6_e_GoWlZOo
但是当我将 material 添加到一个对象时,它会替换旧对象。当我将它添加为网格渲染器中的第二个时,它不会影响第一个。 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"
}
我想弯曲物体并在其上添加纹理,有什么办法可以做到吗?
关于纹理问题:纹理看起来很破损,因为您将 uv_MainTex 定义为浮点数而不是 float2。 UV 坐标是二维的 - 如果将其定义为标量,它将仅使用 UV 的 U 轴。