Показать сообщение отдельно
Старый 08.05.2020, 13:02   #1
Person Of The Community
 
Регистрация: 08.05.2020
Пол: Мужской Мужской
Сообщений: 89
DanilaZabiaka - просто великолепная личностьDanilaZabiaka - просто великолепная личностьDanilaZabiaka - просто великолепная личностьDanilaZabiaka - просто великолепная личностьDanilaZabiaka - просто великолепная личностьDanilaZabiaka - просто великолепная личностьDanilaZabiaka - просто великолепная личность
Хорошо Модификация шейдера для лучшей графики             

Я ещё и автор сборки PotPlayer с охрененными субтитрами, сглаживанием и корректеровкой цвета (кому интересно, могут на рутрекере набрать, NS моя сборка)

В общем с цветами жопа в этих ПК на самом деле. Яркостный диапазон, как известно, 0-255. Так вот, те 0-255, что даёт ЛСД дисплеи и ЭЛТ очень разные. В ЛСД чёрный слишком чёрный, а белый слишком белый


Да и вообще! В реальности объекты имеют текстуру, в ЭЛТ и прочих дисплеях текстура была за счёт матрицы, да и сам аналоговый шум сглаживал даже цифровой сигнал, в итоге всё выглядело лучше


И это исправимо шейдерами, только чото кодеры сосут жопу. И в EPSXE там шейдеры неправильно организованы, их люди не затрагивают, после небольшого изучения я добавил в натуральный, ну и CRT шейдеры корректировку уровней (задать точку чёрного-белого, добавление шума, который текстурирует саму картинку)

Нажмите







https://vk.com/doc593313993_548232492 - кто не в теме, надо положить в папку epsxe\shaders и в настройках плагина Opengl2 поставим галочку на SHADER EFFECTS - можно выбрать шейдерлевел на какой надо


ВАЖНО. Там есть настройка интенсивности шейдера! Когда Delete жмёшь и можно выбрать shader level - он работает с переменной


Кстати, шейдером можно управлять вручную (кроме иненсивности, для этого шатаем переменны #defines эмуль на паузу ставим и можно уровень шума, белого чёрного и тд задать. После возобновления шейдер подхватится


Или вот код

gpuPeteOGL2.slf
Код:
//patched by Danila Zabiaka - white black noise
#define white 236.0
#define black 10.0
#define noise 10.0
#define offset -25.0
float pseudoNoise(vec2 co)
{
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453)*fract(sin(dot(co.xy ,vec2(12.9898,78.233)*2.0)) * 43758.5453); //pseudo random number generator
}


uniform sampler2D OGL2Texture;


const vec3 RGBtoY = vec3(0.299, 0.587, 0.114);
const vec3 RGBtoI = vec3(0.596,-0.275,-0.321);
const vec3 RGBtoQ = vec3(0.212,-0.523, 0.311);
const vec3 YIQtoR = vec3(1.0, 0.95568806036115671171, 0.61985809445637075388);
const vec3 YIQtoG = vec3(1.0,-0.27158179694405859326,-0.64687381613840131330);
const vec3 YIQtoB = vec3(1.0,-1.10817732668266195230, 1.70506455991918171490);


void main()
{
	vec3 c0, c1;


	c0 = (texture2D(OGL2Texture,gl_TexCoord[0].xy).rgb +
         (texture2D(OGL2Texture,gl_TexCoord[0].zy).rgb) * 0.25 +
         (texture2D(OGL2Texture,gl_TexCoord[0].xw).rgb) * 0.25 +
         texture2D(OGL2Texture,gl_TexCoord[1].xy).rgb +
         (texture2D(OGL2Texture,gl_TexCoord[1].zy).rgb) * 0.25 +
         (texture2D(OGL2Texture,gl_TexCoord[1].xw).rgb) * 0.25 +
         texture2D(OGL2Texture,gl_TexCoord[2].xy).rgb +
         (texture2D(OGL2Texture,gl_TexCoord[2].zy).rgb) * 0.25 +
         (texture2D(OGL2Texture,gl_TexCoord[2].xw).rgb) * 0.25 +
         texture2D(OGL2Texture,gl_TexCoord[3].xy).rgb +
         (texture2D(OGL2Texture,gl_TexCoord[3].zy).rgb) * 0.25 +
         (texture2D(OGL2Texture,gl_TexCoord[3].xw).rgb) * 0.25 ) / 6.0;


	c1 = vec3(pow(dot(c0, RGBtoY), 1.2), dot(c0, RGBtoI) * 1.2, dot(c0, RGBtoQ) * 1.2);


	gl_FragColor = vec4(dot(c1, YIQtoR), dot(c1, YIQtoG), dot(c1, YIQtoB), 0.0);
	gl_FragColor = gl_FragColor *white/255.0+black/255.0-gl_FragColor*black/255.0+(pseudoNoise(gl_TexCoord[0].xy)+offset/100.0)*noise/100.0;
}


gpuPeteOGL2.slv
Код:
uniform vec4 OGL2Param;


void main()
{
	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;


	gl_TexCoord[0]=gl_MultiTexCoord0.xyxy+vec4(-0.5,-0.5,-1.5,-1.5) * OGL2Param.xyxy*2;
	gl_TexCoord[1]=gl_MultiTexCoord0.xyxy+vec4( 0.5,-0.5, 1.5,-1.5) * OGL2Param.xyxy*2;
	gl_TexCoord[2]=gl_MultiTexCoord0.xyxy+vec4(-0.5, 0.5,-1.5, 1.5) * OGL2Param.xyxy*2;
	gl_TexCoord[3]=gl_MultiTexCoord0.xyxy+vec4( 0.5, 0.5, 1.5, 1.5) * OGL2Param.xyxy*2;
}
DanilaZabiaka вне форума  
Ответить с цитированием
Эти 5 пользователи сказали Спасибо DanilaZabiaka за это сообщение: