От зайшов я на сторінки з референсами (юніті3д), і захтів переглянути, які там built-in параметри є. Натрапив на параметр
_ScreenParams. З його назви зрозуміло, що то якісь параметри екрану, наприклад, ширина и висота. А опис тут такий
x is the current render target width in pixels, y is the current render target height in pixels, z is 1.0 + 1.0/width and w is 1.0 + 1.0/height.
І тут я поламався. Що таке current render target? Це те, що рендерять, чи те, куди рендерять?
Чесно кажучи, спершу я подумав, що це ширина і висота об'єкту, котрий обробляється, але як виявилось, це ширина саме віконця, в котре рендериться об'єкт. Мається на увазі не весь ваш екран, а саме віконце, котре ми можемо зменшувати або збільшувати. Я то дізнався експерементальним шляхом.
Маємо такий код
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct vertOut {
float4 pos:SV_POSITION;
float4 scrPos;
};
vertOut vert(appdata_base v) : POSITION {
vertOut o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.scrPos = ComputeScreenPos(o.pos);
return o;
}
fixed4 frag(vertOut i : vertOut) : COLOR {
float wcoord = _ScreenParams.y/900;
fixed4 color;
color = fixed4(wcoord,0,0,1);
return color;
}
ENDCG
У вершинному шейдері коїться усіляка фігня, котра нам не цікава. А от у фрагментному я беру _ScreenParams.y, тобто висоту, і ділю на 900, а 900 - це висота мого екранчика. Ну і там має вийти 1, я гадав.
Тоді колір має бути червоним, бо колір задається від 0 до 1.
Але колір був якийсь не дуже червоний, а от такий
Ну я спробував те віконце потаскати в плані розмірів і виявилось, що при меншому розмірі той прямокутник ще темніший стає
А при більшому вже червонішає
Ось так я і роздуплився, що оті параметри містять в собі :3