PSX Planet: SONY PlayStation Community

PSX Planet: SONY PlayStation Community (https://psxplanet.ru/forum/index.php)
-   Emulators & FAQ for SONY PlayStation (https://psxplanet.ru/forum/forumdisplay.php?f=12)
-   -   Модификация шейдера для лучшей графики (https://psxplanet.ru/forum/showthread.php?t=36820)

DanilaZabiaka 08.05.2020 13:02

Модификация шейдера для лучшей графики
 
Я ещё и автор сборки 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;
}


SlavaVlasov 10.05.2020 18:07

Ответ: Модификация шейдера для лучшей графики
 
Скрины зачетные, а текст читать трудно ??psix??

DanilaZabiaka 03.06.2020 02:14

Смарите чо могу я всё починил кароч и ретроарч тоже
 
После


До





Ещё пример





Ретроарч уже настроен, шейдер управляется легко, управление выглядит так


WASD- стрелки
QE - start/select . В самом эмуляторе Select показывает справку о команде, Start сбрасывает параметр в значение по умолчанию

IO-/\O
KL-[]X
JU-L1L2
;P-R1R2
F - fullscreen
esc - меню


Эмулятор вот так


https://funkyimg.com/p/35ndD.png
https://funkyimg.com/p/35ndy.png


Шейдер


https://funkyimg.com/p/35ndu.png




Скачать торрентом https://vk.com/doc275347426_554274180


Ну или с гитхаба напрямую, это не то что исходник, а чисто папка с эмулятором какой пользуюсь такую и залил


https://github.com/noiseshaade/RetroArch-vape


Часовой пояс GMT +3, время: 02:27.

Перевод: zCarot
Права | Copyright ©
© PSX Planet Community 2003-2024