Ana içeriğe geç

Ray Tracing in One Weekend (Bir Hafta Sonunda Işın İzleme)

🎨 Işın İzleme Dünyasına Hoş Geldiniz!

Bu proje, Peter Shirley, Trevor David Black ve Steve Hollasch tarafından kaleme alınan ve bilgisayar grafiklerinde küresel bir kilometre taşı olan "Ray Tracing in One Weekend" (Sürüm 4.0.2) serisinin eksiksiz, modern ve açık kaynak Türkçe çevirisidir.

Türkçe Çeviri & Dijital Yayın: Batuhan Dev (kuantumania) | Lisans: CC0 1.0 Universal (Kamu Malı / Public Domain)

Kitap Final Render Sahnesi Bu rehberi tamamladığınızda, yukarıda gördüğünüz yüzlerce küre, gerçekçi cam kırılmaları, metal yansımaları ve alan derinliğine sahip sahneyi sıfırdan yazdığınız C++ programıyla bizzat siz render edeceksiniz!


Peter Shirley'nin Önsözü

Yıllar boyunca üniversitelerde ve çeşitli kurumlarda pek çok bilgisayar grafikleri dersi verdim. Bu dersleri çoğunlukla Işın İzleme (Ray Tracing) üzerinden işlerim; çünkü ışın izlemede harici hiçbir grafik kütüphanesine (OpenGL, DirectX, Vulkan gibi karmaşık API'lere) ihtiyaç duymadan tüm kodu bizzat siz yazarsınız, buna rağmen ortaya olağanüstü güzellikte görüntüler çıkarabilirsiniz.

Ders notlarımı, sizi mümkün olan en hızlı şekilde çalışan harika bir programa ulaştıracak bir kılavuza dönüştürmeye karar verdim. Bu program her özelliği içeren devasa bir ışın izleyici olmayacak; fakat sinema filmlerinin vazgeçilmezi olan dolaylı aydınlatmayı (indirect lighting / global illumination) tam olarak modelleyecektir. Buradaki adımları takip ettiğinizde kuracağınız mimari, ileride heyecan duyup daha kapsamlı bir render motoru inşa etmek istediğinizde mükemmel bir temel oluşturacaktır.

Biri size "Ray Tracing" dediğinde bu pek çok anlama gelebilir. Benim bu kitapta anlatacağım şey teknik olarak bir Yol İzleyici (Path Tracer) ve oldukça genel amaçlı bir tanesidir. Kodlarımız oldukça sade olacak (bırakın zor işleri bilgisayar yapsın!), fakat üreteceğiniz görsellere hayran kalacağınıza eminim.

Bu kitabı tek bir hafta sonunda tamamlayabilirsiniz. Eğer biraz daha uzun sürerse hiç dert etmeyin. Ana dil olarak modern C++ kullanacağız; çünkü hem son derece hızlı ve taşınabilirdir, hem de film stüdyoları ile modern oyun motorlarının kalbi C++ ile yazılmıştır. C++'ın aşırı karmaşık yeni özelliklerinden kaçınacağız; ancak nesne yönelimli miras (inheritance) ve operatör aşırı yükleme (operator overloading) gibi araçlar bir ışın izleyici için vazgeçilmez derecede faydalıdır.


Neden Bu Rehber?

Bilgisayar grafikleri dünyasında iki temel render paradigması bulunur:

  1. Rasterizasyon (Rasterization): LearnOpenGL Türkçe rehberimizde öğrendiğimiz gibi, üçgenleri GPU üzerinde piksel ızgarasına izdüşürür. Ekstrem derecede hızlıdır (gerçek zamanlı oyunlar), fakat fotogerçekçi yansımalar ve dolaylı ışık sıçramaları için hilelere (shadow mapping, screen space reflections vb.) başvurur.
  2. Işın İzleme / Yol İzleme (Ray / Path Tracing): Doğanın optik fizik yasalarını simüle eder. Kameradan (gözden) sahneye milyonlarca ışık ışını fırlatılır; bu ışınlar nesnelere çarpar, saçılır, yansır ve camların içinden kırılarak geçer. Sonuç: Kusursuz fotogerçekçilik.

13 Bölümlük Müfredat Haritası

flowchart TD
    A["01. PPM Görüntü Çıktısı"] --> B["02. 3B Vektör Sınıfı (vec3)"]
    B --> C["03. Işınlar, Kamera & Gökyüzü"]
    C --> D["04. Sahneye Küre Ekleme"]
    D --> E["05. Yüzey Normalleri & Çoklu Nesneler"]
    E --> F["06. Kamera Sınıfı Mimarisi"]
    F --> G["07. Kenar Yumuşatma (Antialiasing)"]
    G --> H["08. Mat Materyaller (Lambertian)"]
    H --> I["09. Metal & Ayna Yansıması"]
    I --> J["10. Cam & Kırılma (Dielectrics)"]
    J --> K["11. Konumlandırılabilir Kamera"]
    K --> L["12. Odak Bulanıklığı (Alan Derinliği)"]
    L --> M["13. Final Sahnesi & Başyapıt!"]

    style A fill:#e65100,stroke:#333,stroke-width:2px,color:#fff
    style M fill:#2e7d32,stroke:#333,stroke-width:2px,color:#fff

Kaynak Kodlar ve Derleme

Kitapta inşa edeceğimiz tüm C++ kodlarına deponun kodlar/ klasöründen veya her bölümün içindeki kod pencerelerinden erişebilirsiniz.

C++17 destekleyen herhangi bir derleyici (GCC, Clang, MSVC) yeterlidir. Hazırsanız, kahvenizi alın ve Bölüm 1 ile ilk piksellerimizi boyamaya başlayalım!