В Unity я планирую использовать геометрический шейдер для обработки точек в квадраты и не могу понять, почему я не получаю вывод из своего геометрического шейдера. Я отредактировал его до минимального рабочего примера, как показано здесь:
Shader "foo/bar"
{
SubShader{
Cull Off
Lighting Off
ZWrite Off
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma geometry geom
struct appdata {
float4 vertex : POSITION;
};
struct v2g {
float4 vertex : POSITION;
};
struct g2f {
float4 vertex : POSITION;
};
v2g vert(appdata v) {
v2g o = (v2g)0;
o.vertex = v.vertex;
return o;
}
[maxvertexcount(4)]
void geom(point v2g p[1], inout TriangleStream<g2f> tristream)
{
g2f o = (g2f)0;
o.vertex = float4(0.1, 0.1, 0, 0);
tristream.Append(o);
o.vertex = float4(0.1, 0.9, 0, 0);
tristream.Append(o);
o.vertex = float4(0.9, 0.9, 0, 0);
tristream.Append(o);
}
fixed4 frag(g2f i) : COLOR
{
return fixed4(1,1,1,1);
}
ENDCG
}
}
}
Я ожидаю, что это нарисует белый треугольник, покрывающий чуть менее половины текстуры, которую я рендерил. Вместо этого он отображает весь черный, как это было до шейдера.
Пока что я:
- Удалены все возможные источники выбраковки, которые я могу себе представить
- абсолютно уверен, что мои настройки работают при рендеринге сетки аналогичным образом
- Проверено, что это я получаю ввод и работает
- и изучил очень ограниченное количество документации
У меня все неточности. Если у кого-то есть хоть малейшая подсказка о том, что я делаю неправильно, пожалуйста, дайте мне знать. Благодарю.
-Fraser