Pereiti prie turinio
taurasgRuošiama
LTEN
Atgal

04 liepos 2026

Keturi shaderio etapai, vienas failas

Spindulių generavimas, prašovimas, artimiausias kirtimas ir skaičiavimo etapas privalo sutarti dėl medžiagos — todėl Rayxix jie gyvena vienas šalia kito.

Vulkan spindulių sekimo konvejeris nėra viena programa. Tai įėjimo taškų rinkinys, kurį tvarkyklė kviečia skirtingais momentais — tu sugeneruoji spindulį, o priklausomai nuo to, ką jis sutinka, aparatinė įranga pati pereina į artimiausio kirtimo arba prašovimo shaderį, kurių nekvietei.

Įprastas išdėstymas kiekvienam iš jų duoda atskirą failą. Tvarkinga — tol, kol į medžiagos struktūrą pridedi lauką; tada tai keturi taisymai, apie kuriuos kompiliatorius pasiskųs tik jei pasiseks.

Vienas failas, keturi eksportai

Slang leidžia visiems keturiems būti to paties vieneto įėjimo taškais:

[shader("raygeneration")] void rayGen() { ... }
[shader("miss")]          void miss(inout Payload p) { ... }
[shader("closesthit")]    void closestHit(inout Payload p, ...) { ... }
[shader("compute")]       void denoise() { ... }

CMake tą vieną failą sukompiliuoja į keturis SPIR-V modulius ir padeda šalia vykdomojo failo. Material, Payload ir PushConstants aprašyti vieną kartą, todėl medžiagos pakeitimas yra pakeitimas vienoje vietoje, o kiekvienas ją skaitantis etapas arba susikompiliuoja, arba ne.

Kiek tai kainuoja

Du dalykai, ir abu tikri:

  1. Failas ilgas. Pusantro tūkstančio eilučių. Jam reikia suskleidimo ir drausmės su skyrių komentarais, nes katalogų struktūra to darbo už tave nebedaro.
  2. Kompiliavimas — viskas arba nieko. Palietei triukšmo mažinimą — persikompiliuoja ir spindulių generavimo modulis. Prie tokio dydžio tai mažiau nei sekundė, todėl skaidyti neapsimokėjo; dešimt kartų didesniame — apsimokėtų.
Taisyklė, kurią pasilikčiau: dalykai, kurie privalo sutarti, turi būti greta. Visa kita gali būti bet kur.

Beje, tas pats argumentas išnyra ir kitoje šios svetainės pusėje — vienas TSL grafas ten kompiliuojamas ir į WGSL, ir į GLSL lygiai dėl tos pačios priežasties.

© 2026 Tauras Giedraitis · Kaunas, Lietuva · Visos teisės saugomos