Gambar di bawah ini menunjukkan dua sprite yang diberikan dengan pengambilan sampel titik di atas latar belakang:
- Tengkorak kiri tidak memiliki rotasi / penskalaan yang diterapkan padanya, sehingga setiap piksel cocok dengan latar belakang.
- Tengkorak kanan diputar / diskalakan, dan ini menghasilkan piksel yang lebih besar yang tidak lagi sejajar sumbu .
Bagaimana saya bisa mengembangkan pixel shader yang akan membuat sprite yang diubah di sebelah kanan dengan sumbu sejajar pixel dengan ukuran yang sama dengan sisa adegan?
Ini mungkin terkait dengan bagaimana scaling scaling diimplementasikan dalam game lama seperti Monkey Island, karena itulah efek yang saya coba capai, tetapi dengan rotasi ditambahkan.
Edit
Sesuai saran kaoD, saya mencoba mengatasi masalah ini sebagai proses pasca. Pendekatan termudah adalah melakukan render ke target render yang terpisah terlebih dahulu (downsampled agar sesuai dengan ukuran piksel yang diinginkan) dan kemudian meningkatkannya saat rendering kedua kalinya. Itu memang memenuhi persyaratan saya di atas.
Pertama saya mencoba melakukannya Linear -> Point
dan hasilnya adalah ini:
Tidak ada distorsi tetapi hasilnya terlihat buram dan kehilangan sebagian besar warna highlight. Menurut pendapat saya itu merusak tampilan retro yang saya butuhkan.
Kedua kalinya saya mencoba Point -> Point
dan hasilnya adalah ini:
Meskipun distorsi, saya pikir itu mungkin cukup baik untuk kebutuhan saya, meskipun itu terlihat lebih baik sebagai gambar diam daripada bergerak.
Untuk mendemonstrasikan, inilah video efeknya, meskipun YouTube menyaring piksel darinya:
Namun, saya akan membiarkan pertanyaan terbuka selama beberapa hari lagi jika seseorang datang dengan solusi pengambilan sampel yang lebih baik yang mempertahankan tampilan yang tajam sambil mengurangi jumlah distorsi saat bergerak.
SpriteBatch
mengharuskan saya menggunakan mode Segera, jadi tidak sepadan dengan masalahnya. Saya akan pergi dengan ini :)