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:
- 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.
- 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