有没有办法在 Unity 中将顶点颜色网格的某些颜色渲染为透明?
Is there a way to render certain colors of a vertex-colored mesh as transparent in Unity?
我有一个 .fbx 3D 网格,我已将其作为游戏对象导入到 Unity 中。它有顶点颜色。我试图让网格的某些部分呈现为透明,理想情况下,一旦用户选择了一个选项。
作为参考,这是我正在使用的网格的屏幕截图。
我在 Unity 中编写了一个附加到此游戏对象 material 的着色器,它允许显示网格的顶点颜色。
Shader "Custom/VertexColor" {
// Where it will appear inside of the Shader Dropdown Menu of the Material / Name of the shader
SubShader{
Tags { "RenderType" = "Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert vertex:vert
#pragma target 3.0
struct Input {
float4 vertColor;
};
float _CutoutThresh;
void vert(inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input, o);
o.vertColor = v.color;
}
void surf(Input IN, inout SurfaceOutput o) {
#include "UnityCG.cginc
o.Albedo = IN.vertColor.rgb;
clip(IN.vertColor.r = 0.5); // Discards any pixel whose interpolated vertex color in the red channel is less than 0.5
}
ENDCG
}
FallBack "Diffuse"
}
具体来说,这里的这一行:
剪辑(IN.vertColor.g = 0.5); // 丢弃绿色通道中插值顶点颜色小于 0.5
的任何像素
我预计这条线会丢弃任何非绿色像素,但我的 GameObject 看起来还是一样。
如果值小于零,HLSL 的裁剪函数将丢弃一个像素。
您正在寻找的内容类似于:
clip( IN.vertColor.g < 0.5f ? -1:1 );
我有一个 .fbx 3D 网格,我已将其作为游戏对象导入到 Unity 中。它有顶点颜色。我试图让网格的某些部分呈现为透明,理想情况下,一旦用户选择了一个选项。
作为参考,这是我正在使用的网格的屏幕截图。
我在 Unity 中编写了一个附加到此游戏对象 material 的着色器,它允许显示网格的顶点颜色。
Shader "Custom/VertexColor" {
// Where it will appear inside of the Shader Dropdown Menu of the Material / Name of the shader
SubShader{
Tags { "RenderType" = "Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert vertex:vert
#pragma target 3.0
struct Input {
float4 vertColor;
};
float _CutoutThresh;
void vert(inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input, o);
o.vertColor = v.color;
}
void surf(Input IN, inout SurfaceOutput o) {
#include "UnityCG.cginc
o.Albedo = IN.vertColor.rgb;
clip(IN.vertColor.r = 0.5); // Discards any pixel whose interpolated vertex color in the red channel is less than 0.5
}
ENDCG
}
FallBack "Diffuse"
}
具体来说,这里的这一行: 剪辑(IN.vertColor.g = 0.5); // 丢弃绿色通道中插值顶点颜色小于 0.5
的任何像素我预计这条线会丢弃任何非绿色像素,但我的 GameObject 看起来还是一样。
如果值小于零,HLSL 的裁剪函数将丢弃一个像素。
您正在寻找的内容类似于:
clip( IN.vertColor.g < 0.5f ? -1:1 );