Yardım Rander targetr önizleme sorunu

  • Konuyu açan Konuyu açan DeadLyEscaPe
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 10
  • Gösterim Gösterim 312
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

DeadLyEscaPe

Yardımsever Üye
Yardımsever Üye
Üye
Mesaj
524
Çözümler
33
Beğeni
129
Puan
940
Ticaret Puanı
0
1746104449262.webp


1746104531483.webp


Merhabalar. Neyi önizliyorsam şeffaf bir görünüm mevcut. Çoğu filesla karşılaştırdım ama çözümünü bulamadım.
 
Eğer şöyle bir fonksiyon varsa;
C++:
Genişlet Daralt Kopyala
void CRenderTarget::RenderModel()

Test amacıyla bu fonksiyona şöyle bir ekleme yapmayı deneyebilir misin?
C++:
Genişlet Daralt Kopyala
void CRenderTarget::RenderModel()
{
    // En üste bunu ekle
    STATEMANAGER.SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
    
    [...]
    // Aşağısı olduğu gibi kalsın
}
 
Eğer şöyle bir fonksiyon varsa;
C++:
Genişlet Daralt Kopyala
void CRenderTarget::RenderModel()

Test amacıyla bu fonksiyona şöyle bir ekleme yapmayı deneyebilir misin?
C++:
Genişlet Daralt Kopyala
void CRenderTarget::RenderModel()
{
    // En üste bunu ekle
    STATEMANAGER.SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
   
    [...]
    // Aşağısı olduğu gibi kalsın
}

Değişen bir şey olmadı maalesef.
 
Değişen bir şey olmadı maalesef.
Anladım. Sorun render state ile alakalı büyük ihtimalle.
D3DRS_ALPHABLENDENABLE veya D3DRS_FOGENABLE şahsen şüphelendiğim iki state ayarıdır. Tabi bu sadece bir tahmin. Senin attığın görsellerde default saç stili mevcut, onlarda alpha olmadığı için karışıma uğramıyor.
Moda_Saç_Stili_(Gri).webp

Örnek olarak bir savaşçı karakterde şu saç stilini takıp yine render targetı test et. Eğer bu sefer karakterin kafası da şeffaflaşırsa tahminim büyük ihtimalle doğrudur.


RenderModel fonksiyonun tamamını buraya eklersen bir göz atabilirim. Gerçi o fonksiyondan kaynaklanması düşük bir ihtimal, muhtemelen kendisinden önce gelen renderların birinde bozuk bir state ayarı var, render target da o bozuk ayarı devralıyor. Ama yinede göz atmakta fayda var.

Ek olarak, PythonApplication.cpp - RenderGame fonksiyonunu kontrol et. Oradaki render sıralaması tamamen sorunsuz olmalı. Yanlış bir sıralama veya yanlış bir render işlemi, kendisinden sonra gelen render çağrılarını ezer veya bozuntuya uğratır. Yani sorun render target sisteminde değil, senin projendeki diğer render işlemlerinin birinde de olabilir.
 
Anladım. Sorun render state ile alakalı büyük ihtimalle.
D3DRS_ALPHABLENDENABLE veya D3DRS_FOGENABLE şahsen şüphelendiğim iki state ayarıdır. Tabi bu sadece bir tahmin. Senin attığın görsellerde default saç stili mevcut, onlarda alpha olmadığı için karışıma uğramıyor.
25944 eklentisini görüntüle
Örnek olarak bir savaşçı karakterde şu saç stilini takıp yine render targetı test et. Eğer bu sefer karakterin kafası da şeffaflaşırsa tahminim büyük ihtimalle doğrudur.


RenderModel fonksiyonun tamamını buraya eklersen bir göz atabilirim. Gerçi o fonksiyondan kaynaklanması düşük bir ihtimal, muhtemelen kendisinden önce gelen renderların birinde bozuk bir state ayarı var, render target da o bozuk ayarı devralıyor. Ama yinede göz atmakta fayda var.

Ek olarak, PythonApplication.cpp - RenderGame fonksiyonunu kontrol et. Oradaki render sıralaması tamamen sorunsuz olmalı. Yanlış bir sıralama veya yanlış bir render işlemi, kendisinden sonra gelen render çağrılarını ezer veya bozuntuya uğratır. Yani sorun render target sisteminde değil, senin projendeki diğer render işlemlerinin birinde de olabilir.

Öncelikle sadece saç stili önizlendiğinde şeffaflaşmıyor.

Adsız.webp


Her ihtimale karşı bahsettiğiniz kodların olduğu dosyaları atıyorum. Teşekkür ederim.
 

Dosya Eklentileri

C++:
Genişlet Daralt Kopyala
m_kChrMgr.Render();
#ifdef ENABLE_RENDER_TARGET
m_kRenderTargetManager.RenderModels();
#endif

Bu kısım doğru görünüyor.

Aşağıdaki kodu komple değiştirip dener misin?
C++:
Genişlet Daralt Kopyala
void CRenderTarget::RenderModel()
{

    if (!IsReady())
        return;

    auto& python_graphic = CPythonGraphic::Instance();
    auto& camera_manager = CCameraManager::instance();
    auto& state_manager = CStateManager::Instance();
    auto& rectRender = *m_renderTargetTexture->GetRenderingRect();


    m_renderTargetTexture->SetRenderTarget();
    if (!m_background)
        m_renderTargetTexture->Clear();

    python_graphic.ClearDepthBuffer();

    const auto fov = python_graphic.GetFOV();
    const auto aspect = python_graphic.GetAspect();
    const auto near_y = python_graphic.GetNear();
    const auto far_y = python_graphic.GetFar();

    const auto width = static_cast<float>(rectRender.right - rectRender.left);
    const auto height = static_cast<float>(rectRender.bottom - rectRender.top);

    python_graphic.SetViewport(0.0f, 0.0f, width, height);
    python_graphic.PushState();

    camera_manager.SetCurrentCamera(CCameraManager::SHOPDECO_CAMERA); // burasi hata verirse sendekiyle değiştir
    camera_manager.GetCurrentCamera()->SetViewParams(m_v3Eye, m_v3Target, m_v3Up);
    camera_manager.GetCurrentCamera()->RotateEyeAroundTarget(m_v3AngularVelocity.z, m_v3AngularVelocity.x);

    python_graphic.UpdateViewMatrix();
    python_graphic.SetPerspective(10.0f, width / height, 100.0f, 15000.0f);

    if (m_bShowModel)
    {
        m_pModel->Update();
        if (m_bMotion)
            m_pModel->Update();
        m_pModel->Render();
    }

    camera_manager.ResetToPreviousCamera();
    python_graphic.RestoreViewport();
    python_graphic.PopState();
    python_graphic.SetPerspective(fov, aspect, near_y, far_y);
    m_renderTargetTexture->ResetRenderTarget();
}

Eğer devam ederse sonraki adım olarak m_pModel->Render(); çağrısına yoğunlaşman gerek. ActorInstanceRender.cpp - Material.cpp - ModelInstanceRender.cpp - ThingInstance.cpp gibi dosyalarda tutarsız davranan bir state ayarı olabilir.
 
C++:
Genişlet Daralt Kopyala
m_kChrMgr.Render();
#ifdef ENABLE_RENDER_TARGET
m_kRenderTargetManager.RenderModels();
#endif

Bu kısım doğru görünüyor.

Aşağıdaki kodu komple değiştirip dener misin?
C++:
Genişlet Daralt Kopyala
void CRenderTarget::RenderModel()
{

    if (!IsReady())
        return;

    auto& python_graphic = CPythonGraphic::Instance();
    auto& camera_manager = CCameraManager::instance();
    auto& state_manager = CStateManager::Instance();
    auto& rectRender = *m_renderTargetTexture->GetRenderingRect();


    m_renderTargetTexture->SetRenderTarget();
    if (!m_background)
        m_renderTargetTexture->Clear();

    python_graphic.ClearDepthBuffer();

    const auto fov = python_graphic.GetFOV();
    const auto aspect = python_graphic.GetAspect();
    const auto near_y = python_graphic.GetNear();
    const auto far_y = python_graphic.GetFar();

    const auto width = static_cast<float>(rectRender.right - rectRender.left);
    const auto height = static_cast<float>(rectRender.bottom - rectRender.top);

    python_graphic.SetViewport(0.0f, 0.0f, width, height);
    python_graphic.PushState();

    camera_manager.SetCurrentCamera(CCameraManager::SHOPDECO_CAMERA); // burasi hata verirse sendekiyle değiştir
    camera_manager.GetCurrentCamera()->SetViewParams(m_v3Eye, m_v3Target, m_v3Up);
    camera_manager.GetCurrentCamera()->RotateEyeAroundTarget(m_v3AngularVelocity.z, m_v3AngularVelocity.x);

    python_graphic.UpdateViewMatrix();
    python_graphic.SetPerspective(10.0f, width / height, 100.0f, 15000.0f);

    if (m_bShowModel)
    {
        m_pModel->Update();
        if (m_bMotion)
            m_pModel->Update();
        m_pModel->Render();
    }

    camera_manager.ResetToPreviousCamera();
    python_graphic.RestoreViewport();
    python_graphic.PopState();
    python_graphic.SetPerspective(fov, aspect, near_y, far_y);
    m_renderTargetTexture->ResetRenderTarget();
}

Eğer devam ederse sonraki adım olarak m_pModel->Render(); çağrısına yoğunlaşman gerek. ActorInstanceRender.cpp - Material.cpp - ModelInstanceRender.cpp - ThingInstance.cpp gibi dosyalarda tutarsız davranan bir state ayarı olabilir.

Verdiğiniz kod bloğunda çok hata çıktı. Dediğiniz yerlere yoğunlaşacağım.
 
Geri
Üst