[İNDİR] Sunucular için yeni nesil grafikler

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı foreigner26

  • Yeni Üye
  • *
    • İleti: 34
Merhabalar dostlar, bugün sizlere birkaç saat önce bitirmiş olduğum MTA üzerindeki tüm oyun modlarında çalışan kompleks grafik istemcisini tanıtacağım,. Söz konusu scripti indirip sunucuzda başlattığınız halde fps düşüşü yaşamadan farkı görüceksiniz.

Kurulum github reposunda anlatılmıştır yeterli bulunmayanlar için videosu mevcuttur; iyi şanslar arkadaşlar!  Oyun içi görüntüyü de videodan bulabilirsiniz.

Kaynak kodu: Linki görebilmek için Kayıt olun yada Giriş yapın.
Video anlatım:
"It doesnt even matter"
 


MTASATURK

[İNDİR] Sunucular için yeni nesil grafikler
« : 29 Nisan 2020, 04:21:38 »

Çevrimdışı Strong

  • Deneyimli Üye
  • *
    • İleti: 455
  • After Roleplay Developer
Yanıtla #1 : 29 Nisan 2020, 04:23:40
Enes abi hayranınım abi <3
 


Çevrimdışı ertrldtcu

  • Uzman Üye
  • *
    • İleti: 589
Yanıtla #2 : 29 Nisan 2020, 05:25:58
Linki görebilmek için Kayıt olun yada Giriş yapın.
system
 


Çevrimdışı foreigner26

  • Yeni Üye
  • *
    • İleti: 34
Yanıtla #3 : 29 Nisan 2020, 06:03:06
Linki görebilmek için Kayıt olun yada Giriş yapın.
Linki görebilmek için Kayıt olun yada Giriş yapın.

Ben OOP kullanmıyorum direkt olarak cThread.dll ile etkileşime geçiyorum ve kendi lua vm çekirdeğimi oluşturuyorum. Bunun yanı sıra konudaki localplayer.position bir vector3 argümanı döndürmekte bunu callback olarak vermekte, getElementPosition() ise x, y, z isimli 3 tane argüman döndürmekte bunları yaparkenki sunucu cpu değerlerine bakarsan (kodları kendin de test edip) oop'nin %50'nin üzerinde daha az cpu yediğini görüceksindir dikkatli kullanımı halinde hiçbir sorun işgal etmemektedir. 
"It doesnt even matter"
 


Çevrimdışı Core^

  • inAkTiF
  • Acemi Üye
  • *
    • İleti: 106
  • inaktiv
Yanıtla #4 : 02 Mayıs 2020, 03:14:33
rendertarget exists
CPU  aslında gerçek değildir sadece hayal ürünüdür
Eskisi gibi fazla aktif değilim, ulaşmak isterseniz Discordum: Core#7982[/url]
Client > Server
 


Çevrimdışı Ghostemane

  • real muthaphuckkin' g
  • Acemi Üye
  • *
    • İleti: 179
Yanıtla #5 : 02 Mayıs 2020, 12:27:08
I2 EU8 çift sıfır ile kasma olmadıysa, diğer işlemciler ile birşey olcağını sanmıyorum.  FPS düşüşü no no no

 


MTASATURK

Ynt: [İNDİR] Sunucular için yeni nesil grafikler
« Yanıtla #5 : 02 Mayıs 2020, 12:27:08 »

Çevrimdışı foreigner26

  • Yeni Üye
  • *
    • İleti: 34
Yanıtla #6 : 02 Mayıs 2020, 14:21:05
@here, Arkadaşlar size bu sistemi nasıl geliştirebileceğinize dahil bir öneri sunmak istiyorum. Öncelikle yapmanız gereken ilk adım sistemi sadece bilgisayarı iyi olan yerlerde çalıştırtmak nasıl mı? dxGetStatus komutu ile ShaderPS versyon kontrolü yapmalıısnız (3 ya da 3'den büyükse) ardından da mtaFreeMemory'i 1GB üstü tanımlarsanız shader kasma yapmayacaktır sadece bilgisayarı yeterli olan kullanıcılarda açılacaktır.
"It doesnt even matter"
 


Çevrimdışı Ky

  • Uzman Üye
  • *
    • İleti: 614
Yanıtla #7 : 02 Mayıs 2020, 23:01:41
Çok güzel sistem eline sağlık fakat Multigamemode sunucuma attığım anda muazzam bir kasma yaşandı serverde sebebi farklı dimensinonlarda oyuncu olması olabilir mi diye düşündüm ama alakasız bence
 


Çevrimdışı Minato

  • Bilgin Üye
  • *
    • İleti: 285
Yanıtla #8 : 02 Mayıs 2020, 23:18:34
Linki görebilmek için Kayıt olun yada Giriş yapın.
Çok güzel sistem eline sağlık fakat Multigamemode sunucuma attığım anda muazzam bir kasma yaşandı serverde sebebi farklı dimensinonlarda oyuncu olması olabilir mi diye düşündüm ama alakasız bence


FPS düşüyor aga :D düşmez dediğine bakma
DRIFT MASTERS
 


Çevrimdışı foreigner26

  • Yeni Üye
  • *
    • İleti: 34
Yanıtla #9 : 02 Mayıs 2020, 23:49:17
Linki görebilmek için Kayıt olun yada Giriş yapın.
Çok güzel sistem eline sağlık fakat Multigamemode sunucuma attığım anda muazzam bir kasma yaşandı serverde sebebi farklı dimensinonlarda oyuncu olması olabilir mi diye düşündüm ama alakasız bence

Merhaba, sunucu taraflı bir kasma yaratmaz ancak içince SSAO x4 anti-alias kullandığından dolayı kötü ekran kartlarında hüsran sonuçları verebilir, bunu yukarıdaki anlattığım şekilde düzeltebilirsiniz (başta bende de öyleydi sonradan bu yöntemi uyguladığımda sadece bilgisayarı iyi olan oyuncularda çalışmaya başladı ve kurtuldum) bunu neden paylaşmıyorum çünkü bu kadarını da siz yapın istiyorum genel olarak herşey bitmiş durumda, yine de buyurun bunu deneyin bir de; (bilgisayarı kötü olan bilgisayalarda otomatik olarak kapanıcaktır) bunun yanı sıra fps düşüklüğünün bir iki sebebi daha olabilir;

Güncel olmayan (SSAO) desteklemeyen grafik sürücüleri ki MTA'da kim grafik sürücülerini güncelliyor ki?
Shader'a göre fazla draw distance, çizim mesafesini kızarsanız sorun çözülecektir bunu crysisde grafikleri fulleyip ekranı görme efektini de yükselttiğinzi düşünün ya da mincraft'a shader ekleyip chunk limtiini düşürdüğünüzü aynı olay, normalde 250mb ram yiyen oyun bu shader sayesinde 1gb üstü ram yemeye başlayabilir, sonuçta bir grafik güncellemesi ve bunu göz ardı etmemeniz gerek ancak yine de bu devirde 4gb altı ram'i olmayan r7 240 altı ekran kartına sahip insanlarda girmesin sunucuya bir zahmet mentalitesi ile yaptığımı da söylemek istiyorum.


Güncel kod:
Kod
addEventHandler('onClientResourceStart', resourceRoot,
function()

    Shade = Service:new('shade');

    function Shade:add(object, callback)
        object = object or false;
        if not object then
            return error('Gelen [OBJE] argümanı hatalı.');
        end
       
        self.cache = self.cache or {};
        if self.cache[object.id] then
            return error('Verilmiş olan ID ile kayıtlı bir Shade elementi mevcut')
        end

        self.cache[object.id] = object.func;
        if not callback then
            return true
        end

        return callback(self, object.id);
    end;

    function Shade:use(id)
        id = id or false
        if not id or type(id) ~= 'string' then
            return error('ID argümanı hatalı')
        end

        self.cache[id]()
        return true
    end

    setFarClipDistance(600)

    --? Su efekti
    Shade:add({
    id = 'Water',
    func =
    function()
        if getVersion().sortable < "1.1.0" then
            return false
        end

        local WShader = DxShader("dist/fx/water.fx");
        if not WShader then
            return error('Shader yüklenemedi!');
        end

        local function __init__()
            local noise3d = DxTexture('dist/media/smallnoise3d.dds', 'argb', false);
            local env256  = DxTexture('dist/media/cube_env256.dds', 'argb', false);

            WShader:setValue('sRandomTexture', noise3d)
            WShader:setValue('sReflectionTexture', env256)
            WShader:applyToWorldTexture('waterClear256');
       
            return true
        end

        if pcall(__init__) then
            WShader:setValue("sWaterColor", 0/255, 128/255, 255/255, 150/255);
            return true
        else
            return error('Bilinmedik bir hata oluştu!')
        end

    end
    }, function(this, id)
        if this:use(id) then
           
            --? Işıklandırma hatalarını giderme
            Shade:add({
                id = 'Clearlights',
                func =
                function()
                       
                    local LShader = DxShader('dist/fx/light_disable.fx', 0, 0, false, "object");
                    if not LShader then
                        return error('Shader yüklenemedi!');
                    end
               
                    local function __init__()
                        LShader:applyToWorldTexture('*');
                    end
               
                    if pcall(__init__) then
                        return true
                    else
                        return error('Bilinmedik bir hata oluştu!')
                    end
               
                end
            }, function(this, id)
               
                if this:use(id) then
                   
                    --? Gölgelendirme ayarı
                    Shade:add({
                        id = 'SSAO',
                        func =
                        function()
   
                            local function __init__()
                       
                                local isAOMaterialPrimitive = true
                                local isDebugMode = false
   
                                local scx, scy = guiGetScreenSize()
                                local renderTarget = {RTNormal = nil, isOn = false}
                                local aoShader = {shader = nil, colorRT = nil, enabled = false}
   
                                local function enableAO()
                                    if aoShader.enabled then return end
                                    if renderTarget.isOn then
                                        if isAOMaterialPrimitive then
                                            aoShader.shader, tec = DxShader("dist/fx/primitive3D_ssao_dr.fx")
                                        else
                                            aoShader.shader, tec = DxShader("dist/fx/material3D_ssao_dr.fx")
                                        end
                                        if aoShader.shader and renderTarget.RTNormal then
                                            aoShader.shader:setValue("sRTNormal", renderTarget.RTNormal)
                                        end
                                    else
                                        if isAOMaterialPrimitive then
                                            aoShader.shader, tec = DxShader("dist/fx/primitive3D_ssao.fx")
                                        else
                                            aoShader.shader, tec = DxShader("dist/fx/material3D_ssao.fx")
                                        end
                                    end
   
                                    aoShader.colorRT = DxRenderTarget(scx, scy, true)
                                    isAllValid = true
   
                                        isAllValid = aoShader.shader and aoShader.colorRT
                                        if isAllValid then
                                            aoShader.shader:setValue("fViewportSize", scx, scy)
                                            aoShader.shader:setValue("sPixelSize", 1 / scx, 1 / scy)
                                            aoShader.shader:setValue("sAspectRatio", scx / scy)
                                            aoShader.shader:setValue("sRTColor", aoShader.colorRT)
                                            aoShader.shader:setValue("fBlend", 1, 3)
                                           
                                        end
                                    aoShader.enabled = isAllValid

                                    local trianglestrip_quad = {{-1, -1, 0, 0, 0}, {-1, 1, 0, 0, 1}, {1, -1, 0, 1, 0}, {1, 1, 0, 1, 1}}
                                    local cPosX, cPosY, cPosZ = getCameraMatrix()
                                    addEventHandler("onClientPreRender", root, function()
     
                                        dxSetRenderTarget(aoShader.colorRT)
                                        dxSetRenderTarget()
                                        if isAOMaterialPrimitive then
                                            dxDrawMaterialPrimitive3D( "trianglestrip", aoShader.shader, false, unpack( trianglestrip_quad ) )
                                        else
                                            cPosX, cPosY, cPosZ = getCameraMatrix()
                                            dxDrawMaterialLine3D( cPosX + 0.5, cPosY + 1, cPosZ, cPosX + 0.5, cPosY , cPosZ, aoShader.shader, 1, tocolor(255,255,255,255), cPosX + 0.5,cPosY + 0.5, cPosZ + 1 )
                                        end

                                end, true, "high+9" )
                                end
   
                                local function disableAO()
                                    if not aoShader.enabled then return end
                                    aoShader.enabled = false
                                    destroyElement(aoShader.shader)
                                    aoShader.shader = nil
                                    destroyElement(aoShader.colorRT)
                                    aoShader.colorRT = nil
                                end
                                     
                                if dxGetStatus().VideoMemoryFreeForMTA > 950 and dxGetStatus().VideoCardPSVersion == '3' then
                                    enableAO()
                                end
   
                                return true
                            end
   
                            if pcall(__init__) then
                                return true
                            else
                                return error('Bilinmedik bir hata oluştu!')
                            end
   
                    end
                    }, function(this, id)
                        if this:use(id) then

                            --? Oyuncu gölgesi düzenlemesi
                            Shade:add({
                                id = 'RemovePedShadow',
                                func =
                                function()
                   
                                    local function __init__()
                                        local replace = DxTexture(1, 1)
                                        local pedShader = DxShader('dist/fx/pedshadow.fx', 0, 0, false);
                                        if not pedShader then
                                            return error('Shader yüklenemedi!');
                                        end
                                       
                                        pedShader:applyToWorldTexture("shad_ped");
                                        pedShader:setValue("reTexture", replace)
                                   
                                        return true
                                    end
                   
                                    if pcall(__init__) then
                                        return true
                                    else
                                        return error('Bilinmedik bir hata oluştu!')
                                    end
                                end   

                            }, function(this, id)
                                if this:use(id) then
                                    return true
                                else
                                    return error('Yüklemede hata yaşandı!')
                                end
                            end)

                        else
                            return error('Yüklemede hata yaşandı!')
                        end
                    end)

                else
                    return error('Yüklemede hata yaşandı!');
                end
            end)
               
        else
            return error('Yüklemede hata yaşandı!')
        end
    end)

    return true
end)

Mesaj Birleştirildi: 02 Mayıs 2020, 23:52:14
Linki görebilmek için Kayıt olun yada Giriş yapın.

FPS düşüyor aga :D düşmez dediğine bakma

Sunucunuzda kullanabileceğiniz clientside cpu limti mevcut; bu limit %25'e geldiğinde oyuncunun fps'i düşmeye başlar demek ki sizin diğer scriptleriniz'den geriye kalan %5'lik bir alan kalmadığı için fps'iniz yerle bir olmakta kendiniz de test edebilirsiniz, sizin hudlarınızdan ya da herhangi bir dx arayüz çalışmasından daha az cpu yemekte.
« Son Düzenleme: 02 Mayıs 2020, 23:52:14 Gönderen: foreigner26 »
"It doesnt even matter"