Ini bukan jawaban yang lengkap, tapi semoga akan membantu.
Apakah peta / ubin Anda statis atau dinamis? Jika statis, saya akan sangat menyarankan Anda untuk melakukan pemrosesan offline dan melakukan prakiraan sebanyak yang Anda bisa dengan cara itu. Anda dapat melakukannya dengan cara apa pun yang Anda inginkan (raycasting atau sesuatu yang lebih pintar), tetapi Anda tidak terlalu peduli untuk membuatnya dengan sangat cepat karena semuanya akan terjadi secara offline saat Anda "memanggang" level Anda. Anda dapat melakukan precompute dengan tepat ubin mana yang terlihat dari setiap tempat, atau membuat semacam daerah yang lebih besar dan semua ubin yang berpotensi terlihat dari masing-masing daerah.
Kemudian, saat runtime, permintaan untuk ubin yang terlihat harus sangat mudah dan sangat cepat.
Tentu saja, jika Anda memiliki level yang dibuat secara dinamis, maka ini tidak berlaku sama sekali :-)