unity3d - 水平排列纹理的着色器
问题描述
我有一个生成的楼梯网格(以编程方式)。网格很简单,不能再简单和漂亮了。
我想添加一个着色器,无论方向如何,都可以水平排列纹理。在这里,如您所见,它有时是垂直的,有时是水平的。
我有自动生成的 UV
Shader "Custom/WallShader"
{
Properties{
_MainTex("Texture", 2D) = "white" {}
_Scale("Scale", float) = 1.0
}
SubShader{
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Standard
sampler2D _MainTex;
struct Input {
float3 worldNormal;
float3 worldPos;
float2 uv_MainTex;
};
fixed4 _Color;
float _Scale;
void surf(Input IN, inout SurfaceOutputStandard o) {
if (abs(IN.worldNormal.x) > 0.5)
{
o.Albedo = tex2D(_MainTex, IN.worldPos.zy * _Scale);
}
if (abs(IN.worldNormal.y) > 0.5)
{
o.Albedo = tex2D(_MainTex, IN.worldPos.xz * _Scale);
}
if (abs(IN.worldNormal.z) > 0.5)
{
o.Albedo = tex2D(_MainTex, IN.worldPos.xy * _Scale);
}
float2 flippedUVs = IN.uv_MainTex;
flippedUVs.x = flippedUVs.x;
flippedUVs.y = 1.0 - flippedUVs.y;
fixed4 c = tex2D(_MainTex, flippedUVs) * _Color;
o.Emission = o.Albedo;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
解决方案
- 除非我大错特错,否则您只是将 UV 设置错了。
只需这样做:
现在,不要使用你的着色器。非常简单地将材料设置为一些现有材料(可能是“木头”或类似的外观)
运行它并查看 UV 是否正确
您所描述的是,从字面上看,“紫外线是错误的”
你让紫外线在这些部分上以错误的方式运行,这是一个常见的错误。
推荐阅读
- react-native - 在 react-native 中按最近的位置对平面列表进行排序时出现问题
- amazon-web-services - 如何使用 AWS 控制台访问访问 RDS 上托管的 mysql 数据库
- r - How to view internal variables of an R package within an R session?
- apache - 为什么ip重定向到子域?
- javascript - 对象和数组之间的性能
- django - 通过表单 OnetoOneField 更新 - 重复键值违反唯一约束
- excel - 使用VB将粘贴单元格从一个Excel复制到另一个工作表
- javascript - 使用 d3js 计算二次 SVG 连接器的中点和曲线路径
- python - 如何使用 pytest 为带有类的包运行自动化测试?
- javascript - 未在 vue js 上调用“创建”方法