рдкрд┐рдЫрд▓реА рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдПрдирд╡реАрдбрд┐рдпрд╛ рдЖрд░рдЯреАрдПрдХреНрд╕ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдж, рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдиреЗ рдЕрдкрдиреА рдкреВрд░реНрд╡ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓реА рд╣реИред рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдореЗрдВ, рдореЗрд░реЗ рдЯреНрд╡рд┐рдЯрд░ рдлреАрдб рдХреЛ RTX рд╕рдХреНрд╖рдо рдФрд░ рдЕрдХреНрд╖рдо рдХрд┐рдП рдЧрдП рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рддреБрд▓рдирд╛рдУрдВ рдХреА рдПрдХ рдЕрдВрддрд╣реАрди рдзрд╛рд░рд╛ рд╕реЗ рднрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрддрдиреА рд╕реБрдВрджрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдирд┐рд╣рд╛рд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЕрдкрдиреЗ рджрдо рдкрд░ рдПрдХ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдХ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рд╕рд┐рдХ рдлреЙрд░рд╡рд░реНрдб рд░реЗрдВрдбрд░рд░ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рдПрдХ рд╕рд┐рдВрдбреНрд░реЛрдо рд╕реЗ рдкреАрдбрд╝рд┐рдд, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВрдиреЗ WebGL1 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╣рд╛рдЗрдмреНрд░рд┐рдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдмрдирд╛рдпрд╛ред рдЖрдк рдпрд╣рд╛рдБ рд╡рдлрд╝рд░рд╕реНрдЯреАрди 3 рдбреА рд╕реЗ рдЧреЛрд▓реЗ рдХреЗ рд╕рд╛рде рдбреЗрдореЛ рд╕реНрддрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВрдиреЗ рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдХрд┐рдпрд╛ рдерд╛)ред
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк
рдореИрдВрдиреЗ
рдореЗрдЯреНрд░реЛ рдПрдХреНрд╕реЛрдбрд╕ рд╕реЗ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдг рдХреЗ рд╕рд╛рде рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░, рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдХрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред
рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдлреИрд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк (рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреАрдЖрдИ)рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдПрдХ рдлреЙрд░рд╡рд░реНрдб рд░реЗрдВрдбрд░рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рджреГрд╢реНрдп рдХреЗ рдкреВрд░реЗ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╢реЗрдбрд░ рди рдХреЗрд╡рд▓ рдкреНрд░рддреНрдпрдХреНрд╖ рд░реЛрд╢рдиреА рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЧреИрд░-рдЪрдордХрджрд╛рд░ рд╕рддрд╣реЛрдВ (рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреАрдЖрдИ) рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд╢ рдХреЗ рдХрд┐рд░рдг рдЯреНрд░реЗрд╕рд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЪрд┐рдд рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреА рд╕рддрд╣ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд┐рд░рдгреЛрдВ рдХрд╛ рднреА рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИред
рдКрдкрд░ рдХреА рдЫрд╡рд┐ рдореЗрдВ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд╢ рджреНрд╡рд╛рд░рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд░реЛрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкреНрд░рдХрд╛рд╢ рдХрд┐рд░рдгреЗрдВ рдХреИрдорд░реЗ рдХреЗ рдкреАрдЫреЗ рдХреА рджреАрд╡рд╛рд░ рд╕реЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреА рд╣реИрдВ)ред рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╕реНрд╡рдпрдВ рдЫрд╡рд┐ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдПрдХ рднреВрд░реА рджреАрд╡рд╛рд░ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╡реЛрд▓реНрдлреЗрдВрд╕реНрдЯреАрди 3 рдбреА
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рдЧреЛрд▓реЗ рдФрд░ рдХреНрдпреВрдмреНрд╕ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, shader рдореЗрдВ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдг рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЪреМрд░рд╛рд╣реЗ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рдЪрдХреНрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмреАрдо рдХреЛ рджреГрд╢реНрдп рдореЗрдВ рд╕рднреА рдХреНрдпреВрдмреНрд╕ рдФрд░ рдЧреЛрд▓реЗ рдХреЗ рд╕рд╛рде рдЪреМрд░рд╛рд╣реЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рд╣реИред
рдЗрд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рджреГрд╢реНрдп рдореЗрдВ рдЕрдзрд┐рдХ рдЬреНрдпрд╛рдорд┐рддрд┐ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХреБрдЫ рдФрд░ рдЬрдЯрд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рджреГрд╢реНрдп рдореЗрдВ рдХрд┐рд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдорддреМрд░ рдкрд░, рдПрдХ
рдЕрдиреБрдЧрд╛рдореА рдорд╛рддреНрд░рд╛ рдкрджрд╛рдиреБрдХреНрд░рдо (BVH) рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди WebGL1 рдкрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдореЗрд░реЗ рдирд┐рд░реНрдгрдп рдиреЗ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА: WebGL1 рдореЗрдВ рдПрдХ рдмрдирд╛рд╡рдЯ рдореЗрдВ 16-рдмрд┐рдЯ рдбреЗрдЯрд╛ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдФрд░ рдмрд╛рдЗрдирд░реА рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд╢реИрдбрд░ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ WebGL1 рд╢реЗрдб рдореЗрдВ рдмреАрд╡реАрдПрдЪ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрдгрдирд╛ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реЛрд▓реНрдлреЗрдВрд╕реНрдЯреАрди 3 рдбреА рдбреЗрдореЛ рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред 2013 рдореЗрдВ, рдореИрдВрдиреЗ
Shadertoy рдореЗрдВ рдПрдХ
рдЦрдВрдб WebGL shader рдмрдирд╛рдпрд╛, рдЬреЛ рди рдХреЗрд╡рд▓ рд╡реЛрд▓реНрдлреЗрдВрд╕реНрдЯреАрди рдЬреИрд╕реЗ рд╕реНрддрд░реЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдмрдирд╛рд╡рдЯ рднреА рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рд╢реЗрдбрд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рд╕реЗ, рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рд╡реЛрд▓реНрдлреЗрдВрд╕реНрдЯреАрди рдХреА рдЧреНрд░рд┐рдб-рдЖрдзрд╛рд░рд┐рдд рд╕реНрддрд░ рдХреА рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЖрд╕рд╛рди рддреНрд╡рд░рдг рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдХрд┐рд░рдг рдХрд╛ рдЕрдиреБрд░реЗрдЦрдг рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрдЧрд╛ред
рдбреЗрдореЛ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлреБрд▓-рд╕реНрдХреНрд░реАрди рдореЛрдб рдореЗрдВ рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
https://reindernijhoff.net/lolfrt ред
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг
рдбреЗрдореЛ рд╣рд╛рдЗрдмреНрд░рд┐рдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдлреНрд░реЗрдо рдореЗрдВ рд╕рднреА рдмрд╣реБрднреБрдЬреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реЗрдЦрд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЫрд╛рдпрд╛ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ, рдЬреАрдЖрдИ рдХреЛ рдлреИрд▓рд╛рдирд╛ рдФрд░ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдг рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкреНрд░рддрд┐рдмрд┐рдВрдмред
рдЫрд╛рдпрд╛рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреАрдкреНрд░рддрд┐рдмрд┐рдВрдмрдкреНрд░реЛрдПрдХреНрдЯрд┐рд╡ рдкреНрд░рддрд┐рдкрд╛рджрди
рд╡реЛрд▓реНрдлреЗрдВрд╕реНрдЯреАрди рдХрд╛рд░реНрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ 64 ├Ч 64 рджреНрд╡рд┐-рдЖрдпрд╛рдореА рдЧреНрд░рд┐рдб рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбреЗрдореЛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдирдХреНрд╢рд╛ рд╡реБрд▓реНрдлреЗрдирд╕реНрдЯреАрди 3 рдбреА рдХреЗ
рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЗ рдПрдкрд┐рд╕реЛрдб 1 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рд╕реНрдЯрд╛рд░реНрдЯ-рдЕрдк рдкрд░, рдкреНрд░реЛрдПрдХреНрдЯрд┐рд╡ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдорд╛рдирдЪрд┐рддреНрд░ рдбреЗрдЯрд╛ рд╕реЗ рджреАрд╡рд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЬрд╛рд▓ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдлрд░реНрд╢ рдФрд░ рдЫрдд рдХреЗ рд╡рд┐рдорд╛рдиреЛрдВ, рд░реЛрд╢рдиреА, рджрд░рд╡рд╛рдЬреЗ рдФрд░ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЧреЛрд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд╛рд▓ рдмрдирд╛рддрд╛ рд╣реИред
рджреАрд╡рд╛рд░реЛрдВ рдФрд░ рджрд░рд╡рд╛рдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдмрдирд╛рд╡рдЯ рдПрдХрд▓ рдмрдирд╛рд╡рдЯ рдПрдЯрд▓рд╕ рдореЗрдВ рдкреИрдХ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рдПрдХ рдбреНрд░реЙ рдХреЙрд▓ рдореЗрдВ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЫрд╛рдпрд╛ рдФрд░ рдкреНрд░рдХрд╛рд╢
рдкреНрд░рддреНрдпрдХреНрд╖ рд░реЛрд╢рдиреА рдХреА рдЧрдгрдирд╛ рдЖрдЧреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдбрд░ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЪрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд (рдЕрдзрд┐рдХрддрдо) рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЫрд╛рдпрд╛ рдореЗрдВ рдХреМрди рд╕реЗ рд╕реНрд░реЛрдд рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдбреЗрдореЛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЦреЛрдЬ рдмрдирд╛рд╡рдЯ рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рдЦреЛрдЬ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЖрдХрд╛рд░ 64 рд╕реЗ 128 рд╣реИ рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдЧреНрд░рд┐рдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП 4 рдирд┐рдХрдЯрддрдо рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреВрдЯрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред
varying vec3 vWorldPos; varying vec3 vNormal; void main(void) { vec3 ro = vWorldPos; vec3 normal = normalize(vNormal); vec3 light = vec3(0); for (int i=0; i<LIGHTS_ENCODED_IN_MAP; i++) { light += sampleLight(i, ro, normal); }
рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдФрд░ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдирд░рдо рдЫрд╛рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирдореВрдирд╛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢реЗрдбрд░ рдореЗрдВ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдг рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдиреАрдЪреЗ рд░реЗ рдЕрдиреБрд░реЗрдЦрдг рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВ), рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рджреГрд╢реНрдпрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд┐рд░рдг рдХрд┐рд░рдг рдХреЛ рдирдореВрдирд╛ рдмрд┐рдВрджреБ рдкрд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╣рд╛рдпрдХ (рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВ) рдиреАрдЪреЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдлреИрд▓рд╛рдирд╛ GI рдХреЛ рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреАрдЖрдИ рд░реЗрдВрдбрд░ рдЯрд╛рд░рдЧреЗрдЯ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдореЗрдВ рдПрдХ рдЦреЛрдЬ рдХрд░рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдкрд░рд┐рдХрд▓рд┐рдд рд░рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ
рдпрджреНрдпрдкрд┐ рдлреИрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЛрдб рдЬреАрдЖрдИ рдХреЛ рдкреНрд░реАрдореЗрдкреНрдЯрд┐рд╡ рд╢реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдбреЗрдореЛ рдореЗрдВ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рд░реЗрдВрдбрд░ рдЯрд╛рд░рдЧреЗрдЯ (рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреАрдЖрдИ рд░реЗрдВрдбрд░ рдЯрд╛рд░рдЧреЗрдЯ) рдореЗрдВ рдПрдХ рдФрд░ рд╢реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд╛ рджреВрд╕рд░рд╛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд░рдХреЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреАрдЖрдИ (рд╕реЗрдХреНрд╢рди "рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреАрдЖрдИ" рджреЗрдЦреЗрдВ) рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдВрдбрдо рдХрд┐рд░рдгреЛрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд░реЗрдВрдбрд░ рдЯрд╛рд░рдЧреЗрдЯ рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЛ рдЖрдЧреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдорд╛рд░реНрдЧ рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдбрд╛рдпрд░реЗрдХреНрдЯ рд▓рд╛рдЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░реЛрдПрдХреНрдЯрд┐рд╡ рдкрд╛рд╕ рдФрд░ рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреАрдЖрдИ рдХреЛ рдЕрд▓рдЧ рдХрд░рдХреЗ, рд╣рдо рдкреНрд░рддрд┐ рд╕реНрдХреНрд░реАрди рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреАрдЖрдИ рдмреАрдо рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмрдлрд╝рд░ рд╕реНрдХреЗрд▓ рдХреЛ рдХрдо рдХрд░рдХреЗ (рд╕реНрдХреНрд░реАрди рдХреЗ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ) рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдмрдлрд╝рд░ рд╕реНрдХреЗрд▓ 0.5 рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд╛рд░ рд╕реНрдХреНрд░реАрди рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдХрд┐рд░рдг рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрдЧреАред рдпрд╣ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рднрд╛рд░реА рд╡реГрджреНрдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рдХреЗ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдЙрд╕реА UI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкреНрд░рддрд┐ рд▓рдХреНрд╖реНрдп (SPP) рдФрд░ рдмреАрдо рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдкреНрд░рддрд┐ рдирдореВрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдмреАрдо рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░реЗрдВ
рджреГрд╢реНрдп рдореЗрдВ рдХрд┐рд░рдгреЛрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рд╕реНрддрд░ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ рдЫрд╛рдпрд╛ рдореЗрдВ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡реЛрд▓реНрдлреЗрдВрд╕реНрдЯреАрди рдкрд░рдд рдиреЗ 64 ├Ч 64 рдЧреНрд░рд┐рдб рдХреЛ рдЗрдирдХреЛрдб рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдПрдХрд▓ 64 ├Ч 64 рдмрдирд╛рд╡рдЯ рдореЗрдВ рдПрдирдХреЛрдб рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ:
- рдмрдирд╛рд╡рдЯ рд░рдВрдЧ рдХреЗ рд▓рд╛рд▓ рдЪреИрдирд▓ рдореЗрдВ , рдореИрдк рдЧреНрд░рд┐рдб рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реЗрд▓ x рдореЗрдВ рд╕реНрдерд┐рдд рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИрдВред рдпрджрд┐ рд▓рд╛рд▓ рдЪреИрдирд▓ рдХрд╛ рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╣реИ, рддреЛ рд╕реЗрд▓ рдореЗрдВ рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛, рдпрд╣ рдПрдХ рджреАрд╡рд╛рд░ (рдорд╛рди 1 рд╕реЗ 64 рддрдХ), рдПрдХ рджрд░рд╡рд╛рдЬрд╛, рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдпрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЪреМрд░рд╛рд╣реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
- рдпрджрд┐ рдПрдХ рдЧреЛрд▓реЗ рдХрд╛ рд╕реНрддрд░ рдЧреНрд░рд┐рдб рд╕реЗрд▓ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рддреНрд░рд┐рдЬреНрдпрд╛ рдФрд░ рд░рд┐рд╢реНрддреЗрджрд╛рд░ x рдФрд░ y рдХреЛ рдЧреНрд░рд┐рдб рд╕реЗрд▓ рдХреЗ рдЕрдВрджрд░ рдХреНрд╖реЗрддреНрд░ рдХреЗ y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░реЗ, рдиреАрд▓реЗ рдФрд░ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрдирд╛рд╡рдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдХрд░ рдПрдХ рдХрд┐рд░рдг рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:
bool worldHit(n vec3 ro,in vec3 rd,in float t_min, in float t_max, inout vec3 recPos, inout vec3 recNormal, inout vec3 recColor) { vec3 pos = floor(ro); vec3 ri = 1.0/rd; vec3 rs = sign(rd); vec3 dis = (pos-ro + 0.5 + rs*0.5) * ri; for( int i=0; i<MAXSTEPS; i++ ) { vec3 mm = step(dis.xyz, dis.zyx); dis += mm * rs * ri; pos += mm * rs; vec4 mapType = texture2D(_MapTexture, pos.xz * (1. / 64.)); if (isWall(mapType)) { ... return true; } } return false; }
рдЗрд╕реА рддрд░рд╣ рдХреА рдПрдХ рдХрд┐рд░рдг рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдг рдХреЛрдб Shadertoy рдкрд░ рдЗрд╕
рд╡реЛрд▓реНрдлреЗрдВрд╕реНрдЯреАрди shader рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рджреАрд╡рд╛рд░ рдпрд╛ рджрд░рд╡рд╛рдЬреЗ рдХреЗ рд╕рд╛рде рдЪреМрд░рд╛рд╣реЗ рдмрд┐рдВрджреБ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж (
рдПрдХ рд╕рдорд╛рдВрддрд░ рдЪрддреБрд░реНрднреБрдЬ рдХреЗ рд╕рд╛рде рдЪреМрд░рд╛рд╣реЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдЙрд╕реА рдмрдирд╛рд╡рдЯ рдПрдЯрд▓рд╕ рдореЗрдВ рдЦреЛрдЬ рдХрд░рдирд╛ рдЬреЛ рд╕рдХреНрд░рд┐рдп рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╣рдореЗрдВ рдЕрд▓реНрдмреЗрдбреЛ рдЪреМрд░рд╛рд╣рд╛ рдЕрдВрдХ рджреЗрддрд╛ рд╣реИред рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдПрдХ рд░рдВрдЧ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЙрдирдХреЗ
x рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ
, y рдЧреНрд░рд┐рдб рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░
рд░рдВрдЧ рдврд╛рд▓ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ ред
рджрд░рд╡рд╛рдЬреЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред рд╕реАрдкреАрдпреВ рдореЗрдВ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП (рдЖрдЧреЗ рд░реЗрдВрдбрд░ рдкрд╛рд╕рд┐рдВрдЧ рдореЗрдВ рдореЗрд╢ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЬреАрдкреАрдпреВ (рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдореЗрдВ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд╕рдорд╛рди рд╣реА, рд╕рднреА рджрд░рд╡рд╛рдЬреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдФрд░ рдирд┐рдпрддрд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдХреИрдорд░реЗ рд╕реЗ рджрд░рд╡рд╛рдЬреЗ рдХреА рджреВрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреА
рдмрд┐рдЦрд░реЗ рд╣реБрдП рдЧреНрд▓реЛрдмрд▓ рд▓рд╛рдЗрдЯрд┐рдВрдЧ (diffuse GI) рдХреА рдЧрдгрдирд╛ рд╢реИрдбрд░ рдореЗрдВ рдХрд┐рд░рдгреЛрдВ рдХреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлреНрдпреВрдЬрд╝ GI рд░реЗрдВрдбрд░ рдЯрд╛рд░рдЧреЗрдЯ рдореЗрдВ рд╕рднреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рдХрд┐рд░рдгреЛрдВ рдХреА рджрд┐рд╢рд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рд╕рддрд╣ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдЬреЛ рдХреЛрд╕рд╛рдЗрди-рд╡реЗрдЯреЗрдб рдЧреЛрд▓рд╛рд░реНрдз рдХреЗ рдирдореВрдиреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
рдмреАрдо рджрд┐рд╢рд╛
рдЖрд░рдбреА рдФрд░ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ
рдЖрд░рдУ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд░реЛрд╢рдиреА рдХреА рдЧрдгрдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
vec3 getBounceCol(in vec3 ro, in vec3 rd, in vec3 col) { vec3 emitted = vec3(0); vec3 recPos, recNormal, recColor; for (int i=0; i<MAX_RECURSION; i++) { if (worldHit(ro, rd, 0.001, 20., recPos, recNormal, recColor)) {
рд╢реЛрд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд╢ рдирдореВрдиреЗ рдХреЛ рд▓реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдореЗрд░реА
рдлрд┐рд░ рднреА Shadertoy рдкрд░
рдПрдХ рдФрд░ рдХреЙрд░реНрдиреЗрд▓ рдмреЙрдХреНрд╕ shader рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рддрдХрдиреАрдХ рдХреЗ рд╕рдорд╛рди рд╣реИред
рдкреНрд░рддрд┐рдмрд┐рдВрдм
рдЫрд╛рдпрд╛ рдореЗрдВ рдХрд┐рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдореЗрд░реЗ рдбреЗрдореЛ рдореЗрдВ, рдХреИрдорд░реЗ рдХреЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдмреАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдПрдХ рд╣реА
рдЧреЗрдЯрдмреЙрдиреНрдХреЙрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ:
#ifdef REFLECTION col = mix(col, getReflectionCol(ro, reflect(normalize(vWorldPos - _CamPos), normal), albedo), .15); #endif
рдЖрдЧреЗ рдХреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдПрдХ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд┐рд░рдг рд╣рдореЗрд╢рд╛ рдПрдХ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд┐рд░рдг рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░реЗрдЧреАред
рдЯреЗрдореНрдкреЛрд░рд▓ рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ
рдкреНрд░реЛрдПрдХреНрдЯрд┐рд╡ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдФрд░ рд╕реЙрдлреНрдЯ GI рд╕рдиреНрдирд┐рдХрдЯрди рджреЛрдиреЛрдВ рдирд░рдо рдЫрд╛рдпрд╛ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рд▓рдЧрднрдЧ рдПрдХ рдирдореВрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдмреЗрд╣рдж рд╢реЛрд░ рд╣реИред рд╢реЛрд░ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Playdead рдХреЗ TAA рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд╕реНрдерд╛рдпреА рдПрдВрдЯреА-рдПрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ (TAA) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
INSIDE рдореЗрдВ рдЯреЗрдореНрдкреЛрд░рд▓ рд░рд┐рдкреНрд░реЛрдбрдХреНрд╢рди рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ ред
рдлрд┐рд░ рд╕реЗ рдкреНрд░рдХреНрд╖реЗрдкрдг
TAA рдХреЗ рдкреАрдЫреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: TAA рдкреНрд░рддрд┐ рдлреНрд░реЗрдо рдореЗрдВ рдПрдХ рд╕рдмрдкрд┐рдХреНрд╕рд▓ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд┐рдЫрд▓реЗ рдлреНрд░реЗрдо рд╕реЗ рдХреЛрд░рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдФрд╕рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд░реНрддрдорд╛рди рдкрд┐рдХреНрд╕реЗрд▓ рдкрд┐рдЫрд▓реЗ рдлреНрд░реЗрдо рдореЗрдВ рдХрд╣рд╛рдВ рдерд╛, рдкрд┐рдЫрд▓реЗ рдлреНрд░реЗрдо рдХреЗ рдореЙрдбрд▓-рд╡реНрдпреВ-рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдирдореВрдиреЗ рдЧрд┐рд░рд╛рдПрдВ рдФрд░ рдкрдбрд╝реЛрд╕ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЕрддреАрдд рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдПрдХ рдирдореВрдирд╛ рдЕрдорд╛рдиреНрдп рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХреИрдорд░рд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдлреНрд░реЗрдо рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдлреНрд░реЗрдо рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЬреНрдпрд╛рдорд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдРрд╕реЗ рдЕрдорд╛рдиреНрдп рдирдореВрдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрдбрд╝реЛрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдмрдВрдз рдЪреБрдирд╛:
vec3 history = texture2D(_History, uvOld ).rgb; for (float x = -1.; x <= 1.; x+=1.) { for (float y = -1.; y <= 1.; y+=1.) { vec3 n = texture2D(_New, vUV + vec2(x,y) / _Resolution).rgb; mx = max(n, mx); mn = min(n, mn); } } vec3 history_clamped = clamp(history, mn, mx);
рдореИрдВрдиреЗ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рд╕рдорд╛рдВрддрд░ рдЪрддреБрд░реНрднреБрдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдВрддрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ред рдРрд╕рд╛ рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдореЛ рд╕реЗ рджреГрд╢реНрдп рдореЗрдВ рдХрдИ рд╕рдорд╛рди рдЧрд╣рд░реЗ рд░рдВрдЧ рд╣реИрдВ рдФрд░ рд▓рдЧрднрдЧ рдХреЛрдИ рдЪрд▓рддреА рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИред
рдХреИрдорд░рд╛ рдХрдВрдкрди
рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдХреИрдорд░рд╛ (рд╕рдмрд╕реВрдб) рд░реИрдВрдбрдо рд╕рдмрдкрд┐рдХреНрд╕рд▓ рд╢рд┐рдлреНрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рджреЛрд▓рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдмрджрд▓рдХрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
this._projectionMatrix[2 * 4 + 0] += (this.getHaltonSequence(frame % 51, 2) - .5) / renderWidth; this._projectionMatrix[2 * 4 + 1] += (this.getHaltonSequence(frame % 41, 3) - .5) / renderHeight;
рд╢реЛрд░
рд╢реЛрд░ рдЬреАрдЖрдИ рдФрд░ рдирд░рдо рдЫрд╛рдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЖрдзрд╛рд░ рд╣реИред
рдЕрдЪреНрдЫреЗ рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╡рд┐ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЦрд░рд╛рдм рд╢реЛрд░ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдпрд╛ рдЫрд╡рд┐ рдХреЗ рдЕрднрд┐рд╕рд░рдг рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред
рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдЗрд╕ рдбреЗрдореЛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдлреЗрдж рд╢реЛрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред
рдЕрдЪреНрдЫреЗ рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдЗрд╕ рдбреЗрдореЛ рдореЗрдВ рдЫрд╡рд┐ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк
рдиреАрд▓реЗ рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рд╕реБрдирд╣рд░реЗ рдЕрдиреБрдкрд╛рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╢реЛрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдП, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрд╕рдлрд▓ рд░рд╣реЗред рдЕрдм рддрдХ, рджреАрди
рд╣реЛрд╕рд┐рди рдХреЗ рдмрд┐рдирд╛ рдХреБрдЦреНрдпрд╛рдд
рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
vec2 hash2() { vec3 p3 = fract(vec3(g_seed += 0.1) * HASHSCALE3); p3 += dot(p3, p3.yzx + 19.19); return fract((p3.xx+p3.yz)*p3.zy); }
рд╢реЛрд░ рдореЗрдВ рдХрдореА
рдЯреАрдПрдП рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдбреЗрдореЛ рдЕрднреА рднреА рдмрд╣реБрдд рд╢реЛрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЫрдд рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд╢ рджреНрд╡рд╛рд░рд╛ рдЬрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЫрдд рдПрдХ рдареЛрд╕ рд░рдВрдЧ рд╕реЗ рднрд░реА рд╣реБрдИ рд╕рдкрд╛рдЯ рд╕рддрд╣ рд╣реИ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд░рд▓ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ: рдпрджрд┐ рдЗрд╕рдХреА рдмрдирд╛рд╡рдЯ рдпрд╛ рдЬреНрдпрд╛рдорд┐рддреАрдп рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛, рддреЛ рд╢реЛрд░ рдХрдо рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддрд╛ред
рдореИрдВ рдбреЗрдореЛ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рд╢реЛрд░ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:
рдореЙрд░реНрдЧрди рдореИрдХрдЧрд╛рдпрд░ рдФрд░ рдХрд╛рдЗрд▓ рд╡рд┐рдЯрд╕рди рдХрд╛ рдореЗрдбрд┐рдпрди 3 рдПрдХреНрд╕ 3 ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдлрд╝рд┐рд▓реНрдЯрд░ рджреАрд╡рд╛рд░ рдХреА рдмрдирд╛рд╡рдЯ рдХреЗ "рдкрд┐рдХреНрд╕реЗрд▓ рдЖрд░реНрдЯ" рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рджреВрд░реА рдХреЗ рд╕рднреА рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╛рд╕ рдХреА рджреАрд╡рд╛рд░реЛрдВ рдХреЗ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рдХреЛрдиреЛрдВ рдХреЛ рдЧреЛрд▓ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдЕрдиреНрдп рдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдбрд┐рдлреНрдпреВрдЬрд╝ рдЬреАрдЖрдИ рд░реЗрдВрдбрд░ рдЯрд╛рд░рдЧреЗрдЯ рдХреЗ рд╕рдорд╛рди рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╢реЛрд░ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░ рджрд┐рдпрд╛, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд▓рдЧрднрдЧ рдмрд┐рдирд╛ рджреАрд╡рд╛рд░ рдХреЗ рдмрдирд╛рд╡рдЯ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╕реБрдзрд╛рд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рдЕрддрд┐рд░рд┐рдХреНрдд рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рдерд╛ред
рдбреЗрдореЛ
рдЖрдк рдпрд╣рд╛рдВ рдбреЗрдореЛ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ ред