FranklinRoosevelt Posted January 13, 2015 Share Posted January 13, 2015 Всем привет. Я пытался сделать шейдер чтобы стандартные текстуры можно было сделать прозрачными, возможно ли это? Скрин, мне кажется что да. Взял я ресурс Texture_names и решил попробовать по экспериментировать с альфой, шейдер: float4 GetColor() { return float4(0, 0, 0, 0); } technique tec0 { pass P0 { MaterialAmbient = GetColor(); MaterialDiffuse = GetColor(); MaterialEmissive = GetColor(); MaterialSpecular = GetColor(); AmbientMaterialSource = Material; DiffuseMaterialSource = Material; EmissiveMaterialSource = Material; SpecularMaterialSource = Material; ColorOp[0] = SELECTARG1; ColorArg1[0] = Diffuse; AlphaOp[0] = SELECTARG1; AlphaArg1[0] = Diffuse; Lighting = true; } } Сразу говорю что с HLSL не особо знаком, но Си знаю немного. Я не понимаю откуда берётся значение переменой Material в данном случае и куда уходит всё это, буду рад если хоть чуть объясните. Потом ещё поюзал Ped_shell т.к. увидел что там какая-то прозрачность есть, но все же там просто изменяется альфа с 0 до < 1 через dxSetShaderValue, так же как и делал я. Тут я все это юзая замечаю что некоторые текстуры отличаются друг от друга, при GetColor(1, 0, 0, 0.1) например тень пропадала, сам пед становился прозрачным, ещё пол в интерьере тоже пропадал: А остальные объекты просто становились красными и всё: Жду помощи. Link to comment
Kernell Posted January 14, 2015 Share Posted January 14, 2015 Для работы с цветом используйте пиксельный шейдер struct PSInput { float4 Diffuse : COLOR0; }; float4 PixelShaderFunction( PSInput PS ) : COLOR0 { float4 color = PS.Diffuse; color.a = 0.5; return color; } technique { pass p0 { PixelShader = compile ps_2_0 PixelShaderFunction(); } } Link to comment
FranklinRoosevelt Posted January 14, 2015 Author Share Posted January 14, 2015 Всё равно, вот что получилось Но все же некоторые текстуры пропадали, такие как листья деревьев и некоторая растительность и тень педа. Link to comment
Kernell Posted January 14, 2015 Share Posted January 14, 2015 Тебе нужно сделать текстуру прозрачной или просто сделать невидимой? Link to comment
FranklinRoosevelt Posted January 14, 2015 Author Share Posted January 14, 2015 Тебе нужно сделать текстуру прозрачной или просто сделать невидимой? Прозрачной вроде как. Это не одно и тоже? Ну чтобы там где она была было видно следующую текстуру. Link to comment
Kernell Posted January 14, 2015 Share Posted January 14, 2015 Тебе нужно сделать текстуру прозрачной или просто сделать невидимой? Прозрачной вроде как. Это не одно и тоже? Ну чтобы там где она была было видно следующую текстуру. Нет, это не одно и тоже. Прозрачность может быть разной, т.е. быть полупрозрачной. Что и делает шейдер выше. Правда я забыл добавить альфа-смешивание. Вот исправленная версия: float transparency = 0.5; // Это уровень прозрачности. Можешь задавать это значение через dxSetShaderValue struct PSInput { float4 Diffuse : COLOR0; }; float4 PixelShaderFunction( PSInput PS ) : COLOR0 { float4 color = PS.Diffuse; color.a = transparency; return color; } technique transparency { pass p0 { AlphaBlendEnable = TRUE; DestBlend = INVSRCALPHA; SrcBlend = SRCALPHA; PixelShader = compile ps_2_0 PixelShaderFunction(); } } Link to comment
FranklinRoosevelt Posted January 15, 2015 Author Share Posted January 15, 2015 Нет, это не одно и тоже. Прозрачность может быть разной, т.е. быть полупрозрачной. Что и делает шейдер выше. Правда я забыл добавить альфа-смешивание.Вот исправленная версия: float transparency = 0.5; // Это уровень прозрачности. Можешь задавать это значение через dxSetShaderValue struct PSInput { float4 Diffuse : COLOR0; }; float4 PixelShaderFunction( PSInput PS ) : COLOR0 { float4 color = PS.Diffuse; color.a = transparency; return color; } technique transparency { pass p0 { AlphaBlendEnable = TRUE; DestBlend = INVSRCALPHA; SrcBlend = SRCALPHA; PixelShader = compile ps_2_0 PixelShaderFunction(); } } Спасибо огромное, сейчас испробую, но мне уже помогли в англ. ветке, в стандартном ресурсе [gameplay]\visualiser просто изменить альфу. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now