Aracılığıyla paylaş


İzlenecek yol: Hata ayıklama hataları yüzünden gölgelendirme oluşturma

Bu izlenecek yol, bir gölgelendirici hatası nedeniyle yanlış şekilde renklendirilen bir nesneyi araştırmak için Visual Studio Grafik Tanılama aracının nasıl kullanılacağını göstermektedir.

Bu izlenecek yol aşağıdakilerin nasıl yapılacağını göstermektedir:

  • Sorunu gösteren pikselleri tanımlamak için grafik günlük belgeyi inceleyin.

  • Piksel durumunu daha yakından incelemek için Grafik Piksel Geçmişi penceresini kullanın.

  • Piksel ve köşe gölgelendiricilerini incelemek için HLSL Hata Ayıklayıcısı'nı kullanın.

Senaryo

Bir köşe gölgelendiricisi bir piksel gölgelendiricisini geçtiğinde nesnelerde yanlış renklendirme yanlış veya eksik bilgilere yol açabilir.

Bu senaryoda, son zamanlarda bir nesneyi dönüştürmek ve ona benzersiz bir görünüm vermek için onu yeni köşe ve piksel gölgelendiricilerle birlikte uygulamanıza eklediniz. Sınama sırasında uygulamayı çalıştırdığınızda, nesne düz siyah olarak işlenir. Grafik Tanılamayı kullanarak sorunu bir grafik kayıt dosyasına kaydedersiniz ve böylelikle uygulamada hata ayıklayabilirsiniz. Sorun, uygulamada şu şekilde görünüyor:

Nesne yanlış renkler ile işlenir.

Araştırma

Grafik tanılama araçlarını kullanarak, test sırasında Yakalanan çerçeveleri incelemek için grafik günlük belge yükleyebilir.

Grafik günlüğünde bir çerçeveyi incelemek için

  1. Visual Studio öğesinde eksik modeli gösteren bir çerçeve içeren grafik günlüğü yükleyin. Yeni bir grafik günlüğü belge penceresi görünür Visual Studio. Bu pencerenin üst bölümünde seçili çerçevenin render hedef çıktıdır. Alt kısım yakalanan her görüntüyü küçük resim olarak görüntüleyen Çerçeve listesi'dir.

  2. Çerçeve Listesi öğesinde, nesnenin görünümünün yanlış olduğu bir çerçeve seçin. İşleme hedefi, seçilen kareyi yansıtacak şekilde güncelleştirilir. Bu senaryoda, grafik gibi bu belge penceresinde görünür oturum:

    Grafikleri Visual Studio'da belge oturum.

Sorunu gösteren bir çerçeveyi seçtikten sonra, sorunu tanılamak için Grafik Piksel Geçmişi penceresini kullanabilirsiniz. Grafik Piksel Geçmişi penceresi; belirli bir pikseli etkilemiş olabilecek basit öğeleri, onların gölgelendiricilerini ve işleme hedefindeki etkilerinin ne olduğunu kronolojik olarak gösterir.

Bir pikseli incelemek için

  1. Grafik Piksel Geçmişi penceresini açın. Grafik Tanılama araç çubuğunda Piksel Geçmişi'ni seçin.

  2. İncelemek için bir piksel seçin. Grafik günlük belge penceresinde, piksel renkli yanlış nesne birini seçin:

    Bir piksel seçme geçmişi hakkında bilgi görüntüler.

    Grafik Piksel Geçmişi penceresi, seçilen pikseli yansıtacak şekilde güncelleştirilir. Bu senaryoda, Grafik Piksel Geçmişi penceresi şu şekilde görünür:

    Bir DrawIndexed olay piksel geçmişi gösterir.

    Piksel gölgelendiricisi sonucunun tamamen opak siyah (0, 0, 0, 1) olduğuna ve Çıkış Yöneticisi'nin, Sonuç da tamamen opak siyah olacak şekilde bunu pikselin Önceki rengiyle birleştirdiğine dikkat edin.

Yanlış renklendirilmiş bir pikseli inceledikten ve piksel gölgelendiricisi çıktısının beklenen renkte olmadığını fark ettikten sonra, piksel gölgelendiricisini incelemek ve nesnenin rengine ne olduğunu anlamak için HLSL Hata Ayıklayıcısını kullanabilirsiniz. Yürütme sırasında HLSL değişkenlerinin durumunu incelemek, HLSL kodunda adım adım ilerlemek ve sorunu tanılamanıza yardımcı olacak kesme noktaları ayarlamak için HLSL Hata Ayıklayıcı'yı kullanabilirsiniz.

Piksel gölgelendiricisini incelemek için

  1. Piksel gölgelendiricisinin hatalarını ayıklamaya başlayın. Grafik Piksel Geçmişi penceresinde, nesne ilk halinin altında, Piksel Gölgelendiricisi yanında Hata Ayıklamayı Başlat düğmesini seçin.

  2. Bu senaryoda, piksel gölgelendiricisi köşe gölgelendiricisinden rengi geçtiği için piksel gölgelendiricinin sorunun kaynağı olmadığını anlamak kolaydır.

  3. Fare işaretçisini input.color üzerinde bekletin. Değerini tamamen opak siyah (0, 0, 0, 1) olduğuna dikkat edin.

    "Renk", "Giriş" tanımsız üyesidir.

    Bu senaryoda, incelemeyi yanlış renk muhtemelen üzerinde çalışacağı piksel gölgelendiricisi doğru renk bilgilerini sağlamayan bir köşe gölgelendiricisi sonucu olduğunu ortaya çıkarır.

Köşe gölgelendiricisi doğru bilgilerin piksel gölgelendiricisi sağladığını büyük bir olasılıkla saptadıktan sonra sonraki adım köşe gölgelendiricisi incelemektir.

Köşe gölgelendiricisini incelemek için

  1. Köşe gölgelendiricisinin hatalarını ayıklamaya başlayın. Grafik Piksel Geçmişi penceresinde, nesne ilk halinin altında, Köşe Gölgelendiricisi yanında Hata Ayıklamayı Başlat düğmesini seçin.

  2. Tepe gölgelendiricinin çıktı yapısını bulun — piksel gölgelendiricisi girişi budur. Bu senaryoda, bu yapıya output adı verilmiştir. Köşe gölgelendiricisi kodu inceleyin ve dikkat color üyesi output yapısı tamamen opak siyah olarak açıkça ayarlanmış, belki de sonuç olarak birisi çabalarını debugging.

  3. Renk üye giriş yapısından asla kopyalandığını doğrulayın. Çünkü değeri output.color tamamen opak siyah olarak hemen öncesine ayarlanır output yapısı döndürülür, emin olmak için iyi bir fikirdir değeri output önceki bir çizgi üzerinde düzgün bir şekilde başlatıldığından değildi. Ayarlar satır ulaşıncaya kadar köşe gölgelendirici kod boyunca adım adım output.color değeri izlerken siyaha output.color. Dikkat deðerini output.color siyah olarak ayarlanana kadar başlatılmış değil. Bu kod satırını ayarlar onaylar output.color için siyah değiştirilmiş, yerine gerekir silindi.

    "Output.color" değerini hiçbir zaman başlatılmaz.

Köşe gölgelendirici pixel shader örneğine doğru renk değeri sağlamaz işleme soruna neden olduğunu belirledikten sonra sorunu gidermek için bu bilgileri kullanabilirsiniz. Bu senaryoda, aşağıdaki kodda köşe gölgelendiricisi değiştirerek düzeltebilirsiniz

output.color = float3(0.0f, 0.0f, 0.0f);

için

output.color = input.color;

Bu kod, köşe rengini nesnenin köşelerinden değiştirmeden geçirir. Daha karmaşık köşe gölgelendiriciler, rengi geçirmeden önce değiştirebilir. Düzeltilen köşe gölgelendiricisi şuna benzemelidir:

Düzeltilmiş köşe gölgelendirici kodu.

Kodu onardıktan sonra, tekrar derleyin ve işleme sorununun çözüldüğünü görmek için uygulamayı tekrar çalıştırın.

Nesne doğru renklerle işlenir.