рд╕реНрдХреНрд░реАрди рдЬрд▓ рдкреНрд░рддрд┐рдкрд╛рджрди

рдЫрд╡рд┐

рддрдХрдиреАрдХреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ / рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ рдореЗрд░рд╛ рдЖрдЦрд┐рд░реА рдХрд╛рдо рдкрд╛рдиреА рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд╛рдиреА рдХреЗ рдкрддрд▓реЗ рдФрд░ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреЗ рдЬреЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрдиред рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦреВрдВрдЧрд╛ред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рдиреА рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп рд╕реНрд╡рд░ / рдорд╛рд░реНрдЪрд┐рдВрдЧ рдХреНрдпреВрдмреНрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ (рджреЗрдЦреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЗрдВрдбрд░ рдореЗрдВ рдПрдХ рддрд░рд▓ рдкрджрд╛рд░реНрде рдЕрдиреБрдХрд░рдг)ред рдЬрдм рдкрд╛рдиреА рдХреА рдорд╛рддреНрд░рд╛ рдЙрд╕реА рдкреИрдорд╛рдиреЗ рдкрд░ рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдВрджреЛрд▓рди рдХрд╛рдлрд╝реА рдЕрд╕рддрдд рд╣реИред рдЧреНрд░рд┐рдб рдХреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЛ рдмрдврд╝рд╛рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд▓рдВрдмреА рджреВрд░реА рдкрд░ рдкрддрд▓реЗ рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рдФрд░ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реА рд╕реНрдореГрддрд┐ рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред (рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд▓ рд╕реНрд╡рд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рд╕рд╛рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрдард┐рдирд╛рдИ рдХрд╛ рд╕реНрддрд░ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред)

рдореИрдВрдиреЗ рдЬреЛ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрд╛ рд╡рд╣ рдерд╛ рдореБрд▓рд░ рдХрд╛ рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдореЗрдЬрд╝ред рд╡реЗ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдореЗрдВ рдкрд╛рдиреА рдХреЗ рдХрдгреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЪреМрд░рд╕рд╛рдИ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдорд╛рди рдЧрд╣рд░рд╛рдИ рдХреЗ рдЬреБрдбрд╝реЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдорд╛рд░реНрдЪрд┐рдВрдЧ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдореЗрд╖ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред рдЖрдЬ, рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдВрднрд╡рддрдГ 2007 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рд╛рдЧреВ рд╣реЛ рдЧрдИ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╣рдо рдЧрдгрдирд╛ shader рдореЗрдВ рдПрдХ рдЬрд╛рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рд▓рд╛рдЧрдд рдХреЗ рдПрдХ рдмрдбрд╝реЗ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рддрдирд╛ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рдЬреАрдбреАрд╕реА 2010 рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдорди рдЧреНрд░реАрди рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдорд┐рд▓реА, рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдлрд╝реНрд▓реВрдЕрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдлреЙрд░ рдЧреЗрдореНрд╕ред рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдореЗрд╢реЗрд╕: рдХрдгреЛрдВ рдХреЛ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЪреМрд░рд╕рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рдореЗрд╖ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрдЬрд╛рдп, рдкрд░рд┐рдгрд╛рдореА рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рджреГрд╢реНрдп рдореЗрдВ рддрд░рд▓ рдХреЛ рдЫрд╛рдпрд╛ рджреЗрдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЧрд╣рд░рд╛рдИ рд╕реЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд░рдХреЗред) рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдЯреНрд░реЗрдирд┐рдВрдЧ


рдХрдИ рдкрд┐рдЫрд▓реА рдпреВрдирд┐рдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдиреЗ рдореБрдЭреЗ рд╕рд┐рдЦрд╛рдпрд╛ рдХрд┐ рдореИрдВ рдЗрдВрдЬрди рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдирд╣реАрдВ рдирд┐рдкрдЯреВрдБред рдЗрд╕рд▓рд┐рдП, рджреНрд░рд╡ рдмрдлрд╝рд░реНрд╕ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреИрдорд░реЗ рджреНрд╡рд╛рд░рд╛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЙрдерд▓реЗ рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдореБрдЦреНрдп рджреГрд╢реНрдп рдХреЗ рд╕рд╛рдордиреЗ рдкреНрд░рд╕реНрддреБрдд рд╣реЛред рдкреНрд░рддреНрдпреЗрдХ рджреНрд░рд╡ рдкреНрд░рдгрд╛рд▓реА рдПрдХ рдЕрд▓рдЧ рдкреНрд░рддрд┐рдкрд╛рджрди рдкрд░рдд рдкрд░ рдореМрдЬреВрдж рд╣реИ; рдореБрдЦреНрдп рдХрдХреНрд╖ рдкрд╛рдиреА рдХреА рдПрдХ рдкрд░рдд рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдФрд░ рджреВрд╕рд░рд╛ рдХрдХреНрд╖ рдХреЗрд╡рд▓ рдкрд╛рдиреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдХреИрдорд░реЗ рдЕрдкрдиреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдХреЗ рдмрдЪреНрдЪреЗ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдХреАрдо рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рд▓рд┐рдХреНрд╡рд┐рдб рд▓реЗрдпрд░ рдореЗрдВ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рд░реЗрдВрдбрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдРрд╕рд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдбреЗрдореЛ рджреГрд╢реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдк-рдЙрддреНрд╕рд░реНрдЬрдХ рд╕реЗ рдХреБрдЫ рдЬреЗрдЯ рдФрд░ рд╕реНрдкрд▓реИрд╢ рдПрдХ рд╕рд╛рде рд╡рд┐рд▓рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрдиреНрдп рдЬрд▓ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдорд┐рд╢реНрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдВрдЪрд╛рдИ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реЙрд▓реНрдпреВрдо, рдЬреЛ рддрдм рдЙрд╕реА рддрд░рд╣ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред (рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред)

рдореЗрд░реЗ рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рдиреА рдХрд╛ рд╕реНрд░реЛрдд рдПрдХ рдорд╛рдирдХ рдХрдг рдкреНрд░рдгрд╛рд▓реА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдИ рднреА рддрд░рд▓ рдЕрдиреБрдХрд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣, рдмрджрд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдг рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рдУрд╡рд░рд▓реИрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд▓рдЧрддрд╛ рд╣реИред

рддрд░рд▓ рдкрджрд╛рд░реНрде рдмрдлрд░ рдкреНрд░рддрд┐рдкрд╛рджрди


рдЗрд╕ рддрдХрдиреАрдХ рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо рдЖрдзрд╛рд░ рджреНрд░рд╡ рдмрдлрд░ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдПрдХ рдСрдл-рд╕реНрдХреНрд░реАрди рдмрдлрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд░реНрддрдорд╛рди рдЪрд░рдг рдореЗрдВ) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ: рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдФрд░ рд╢реЛрд░ рдореВрд▓реНрдп рдореЗрдВ рджреНрд░рд╡ рдЪреМрдбрд╝рд╛рдИ, рдЧрддрд┐ рд╡реЗрдХреНрдЯрд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рдХрдг рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрддреБрд╖реНрдХреЛрдг рдХреЛ рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЕрдгреНрдбрд╛рдХрд╛рд░) рдЧреЗрдВрдж "" рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдХреЗ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдмрдлрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред

рдЧрд╣рд░рд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:

frag_out o; float3 N; N.xy = i.uv*2.0 - 1.0; float r2 = dot(N.xy, N.xy); if (r2 > 1.0) discard; Nz = sqrt(1.0 - r2); float4 pixel_pos = float4(i.view_pos + N * i.size, 1.0); float4 clip_pos = mul(UNITY_MATRIX_P, pixel_pos); float depth = clip_pos.z / clip_pos.w; o.depth = depth; float thick = Nz * i.size * 2; 

(рдмреЗрд╢рдХ, рдЧрд╣рд░рд╛рдИ рдХреА рдЧрдгрдирд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдХреНрд▓рд┐рдк рдкреЛрдЬреАрд╢рди рд╕реЗ рд╣рдореЗрдВ рдХреЗрд╡рд▓ z рдФрд░ w рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред)

рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж, рд╣рдо рдореЛрд╢рди рдФрд░ рд╢реЛрд░ рд╡реИрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗред

рдорд╕реНрддреА рд╢реАрд░реНрд╖рд╛рд╕рди рдЫрд╛рдпрд╛ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣ рдпрд╣рд╛рдВ рд╣реИ рдХрд┐ рдореИрдВ рдЧреНрд░реАрди рддрдХрдиреАрдХ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реВрдВред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд▓рдХреНрд╖реНрдп рдкрд╛рдиреА рдХреЗ рдЙрдЪреНрдЪ рдЧрддрд┐ рд╡рд╛рд▓реЗ рдЬреЗрдЯреНрд╕ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИ; рдЗрд╕реЗ рдЧреЛрд▓рд╛рдХрд╛рд░ рдХрдгреЛрдВ рдХреА рдорджрдж рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░рдВрддрд░ рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдмрдбрд╝реА рд░рд╛рд╢рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЙрдирдХреА рдЧрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдгреЛрдВ рдХреЗ рдЪрддреБрд╖реНрдХреЛрдгреЛрдВ рдХреЛ рдЦреАрдВрдЪреВрдВрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рдХреА рдЧреЗрдВрджреЛрдВ рдХреЛ рдлреИрд▓рд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЧреЛрд▓рд╛рдХрд╛рд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВред (рдЪреВрдВрдХрд┐ рдЧрд╣рд░рд╛рдИ рдХреА рдЧрдгрдирд╛ рдпреВрд╡реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИ, рдпрд╣ рд╕рдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред)

рдЕрдиреБрднрд╡реА рдПрдХрддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдпреВрдирд┐рдЯреА рдХрдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдмрд┐рд▓реНрдЯ-рдЗрди рд╕реНрдЯреНрд░реЗрдЪреНрдб рдмрд┐рд▓рдмреЛрд░реНрдб рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ред рд╕реНрдЯреНрд░реЗрдЪреНрдб рдмрд┐рд▓рдмреЛрд░реНрдб рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╡реЗрдЧ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕реНрдЯреНрд░реЗрдЪрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕рдорд╕реНрдпрд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡реЗрдЧ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЖрдЧреЗ-рд╕рд╛рдордиреЗ рд╡рд╛рд▓реЗ рдХреИрдорд░рд╛ рд╡реЗрдХреНрдЯрд░ (рдпрд╛ рдЗрд╕рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм) рдХреЗ рд╕рд╛рде рд╕рд╣-рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд┐рд▓рдмреЛрд░реНрдб рд╕реНрдХреНрд░реАрди рдкрд░ рдлреИрд▓рд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХреА рджреЛ рдЖрдпрд╛рдореА рдкреНрд░рдХреГрддрд┐ рдХреЛ рдмрд╣реБрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдХреИрдорд░реЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдПрдХ рдмрд┐рд▓рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдХрдг рдХреЗ рд╡рд┐рдорд╛рди рдкрд░ рд╡реЗрдЧ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрддреБрд╖реНрдХреЛрдг рдХреЛ рдлреИрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рд╡реЗрдЧ рд╡реЗрдХреНрдЯрд░ рд╡рд┐рдорд╛рди рдХреЗ рд▓рд┐рдП рд▓рдВрдмрд╡рдд рд╣реИ (рд╕реНрдХреНрд░реАрди рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдпрд╛ рджреВрд░), рддреЛ рдХрдг рдЕрд╕реНрдерд┐рд░ рдФрд░ рдЧреЛрд▓рд╛рдХрд╛рд░ рд░рд╣рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЬрдм рдЗрд╕реЗ рдЭреБрдХрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдг рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЦрд┐рдВрдЪ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред

рдЪрд▓реЛ рдПрдХ рд▓рдВрдмреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИ:

 float3 ComputeStretchedVertex(float3 p_world, float3 c_world, float3 vdir_world, float stretch_amount) { float3 center_offset = p_world - c_world; float3 stretch_offset = dot(center_offset, vdir_world) * vdir_world; return p_world + stretch_offset * lerp(0.25f, 3.0f, stretch_amount); } 

рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдХреЗ рдореЛрд╢рди рд╡реЗрдХреНрдЯрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡реИрдХреНрдЯрд░ рдХреЗ рджреЛ рд╕реЗрдЯреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ:

 float3 vp1 = ComputeStretchedVertex( vertex_wp, center_wp, velocity_dir_w, rand); float3 vp0 = ComputeStretchedVertex( vertex_wp - velocity_w * unity_DeltaTime.x, center_wp - velocity_w * unity_DeltaTime.x, velocity_dir_w, rand); o.motion_0 = mul(_LastVP, float4(vp0, 1.0)); o.motion_1 = mul(_CurrVP, float4(vp1, 1.0)); 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪреВрдВрдХрд┐ рд╣рдо рдореБрдЦреНрдп рдорд╛рд░реНрдЧ рдореЗрдВ рдЧрддрд┐ рд╡реИрдХреНрдЯрд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡реЗрдЧ рд╡реИрдХреНрдЯрд░реЛрдВ рдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдпреВрдирд┐рдЯреА рд╣рдореЗрдВ рджреГрд╢реНрдп рд╕реЗ рдкреВрд░реНрд╡ рдпрд╛ рдЕрд╡рд┐рднрд╛рдЬрд┐рдд рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд╖реЗрдкрдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХрдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛:

 public class ScreenspaceLiquidRenderer : MonoBehaviour { public Camera LiquidCamera; private ParticleSystemRenderer m_ParticleRenderer; private bool m_First; private Matrix4x4 m_PreviousVP; void Start() { m_ParticleRenderer = GetComponent(); m_First = true; } void OnWillRenderObject() { Matrix4x4 current_vp = LiquidCamera.nonJitteredProjectionMatrix * LiquidCamera.worldToCameraMatrix; if (m_First) { m_PreviousVP = current_vp; m_First = false; } m_ParticleRenderer.material.SetMatrix("_LastVP", GL.GetGPUProjectionMatrix(m_PreviousVP, true)); m_ParticleRenderer.material.SetMatrix("_CurrVP", GL.GetGPUProjectionMatrix(current_vp, true)); m_PreviousVP = current_vp; } } 

рдореИрдВ рдкрд┐рдЫрд▓реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреИрд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ Camera.prepretViewProjectionMatrix рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред

┬п \ _ (уГД) _ / уГД

(рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдзрд┐ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреА рд╣реИ; рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рд╣реЛ рд╕рдХрддреА рд╣реИред)

рдЖрдЗрдП рд╣рдо рдЦрдВрдбрд┐рдд рдЫрд╛рдпрд╛ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ: рд╣рдо рд╕реНрдХреНрд░реАрди рд╕реНрдерд╛рди рдХреА рдЧрддрд┐ рд╡реИрдХреНрдЯрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорд╛рдирд┐рдд рдкрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

 float3 hp0 = i.motion_0.xyz / i.motion_0.w; float3 hp1 = i.motion_1.xyz / i.motion_1.w; float2 vp0 = (hp0.xy + 1) / 2; float2 vp1 = (hp1.xy + 1) / 2; #if UNITY_UV_STARTS_AT_TOP vp0.y = 1.0 - vp0.y; vp1.y = 1.0 - vp1.y; #endif float2 vel = vp1 - vp0; 

(рдЧрддрд┐ рд╡реЗрдХреНрдЯрд░ рдЧрдгрдирд╛ рд▓рдЧрднрдЧ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИ https://github.com/keijiro/ParticleMotionVector/blob/master/Assets/ParticleMotionVector/Shaders/Motion.cginc рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛

рдЕрдВрдд рдореЗрдВ, рджреНрд░рд╡ рдмрдлрд░ рдореЗрдВ рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рд╢реЛрд░ рд╣реИред рдореИрдВ рдЪрд╛рд░ рдХрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рдПрдХрд▓ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреИрдХ) рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХрдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдлрд┐рд░ рдЗрд╕реЗ рдЧрддрд┐ рдФрд░ рдПрдХрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрдг рдЖрдХрд╛рд░ рдореЗрдВ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП, рддреЗрдЬ рдФрд░ рдЫреЛрдЯреЗ рдХрдг noisier рд╣реЛрддреЗ рд╣реИрдВ)ред рдЗрд╕ рд╢реЛрд░ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирджрдВрдб рдХреЛ рд╡рд┐рдХреГрдд рдХрд░рдиреЗ рдФрд░ рдлреЛрдо рдХреА рдПрдХ рдкрд░рдд рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбрд┐рдВрдЧ рдкрд╛рд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЧреНрд░реАрди рдХрд╛ рдХрд╛рдо рддреАрди-рдЪреИрдирд▓ рд╕рдлреЗрдж рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирдпрд╛ рдХрд╛рдо (рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдлреНрд▓реБрдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рде рдХрд░реНрд╡рдЪрд░ рдлреНрд▓реЛ) рдкреЗрд░рд▓рд┐рди рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдкреИрдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╡реЛрд░реЛрдиреЛрдИ рд╢реЛрд░ / рд╕реЗрд▓ рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:


рдорд┐рд╢реНрд░рдг рдореБрджреНрджреЗ (рдФрд░ рд╕рдорд╛рдзрд╛рди)


рдФрд░ рдпрд╣рд╛рдВ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред рдХрдгреЛрдВ рдХреА рдореЛрдЯрд╛рдИ рдХреА рд╕рд╣реА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдпреЛрдЬреНрдп рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдорд┐рд╢реНрд░рдг рд╕рднреА рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╢реЛрд░ рдФрд░ рдЧрддрд┐ рд╡реИрдХреНрдЯрд░ рднреА additively рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдПрдбрд┐рдЯрд┐рд╡ рд╢реЛрд░ рд╣рдореЗрдВ рдХрд╛рдлреА рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдбрд┐рдЯрд┐рд╡ рд╡реИрдХреНрдЯрд░ рдирд╣реАрдВ, рдФрд░ рдЕрдЧрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдШреГрдгрд┐рдд рд╕рдордп рдПрдВрдЯреА-рдПрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ (рдЯреАрдПрдП) рдФрд░ рдЧрддрд┐ рдзреБрдВрдзрд▓рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рджреНрд░рд╡ рдмрдлрд░ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рдмрд╕ рдореЛрд╢рди рд╡реИрдХреНрдЯрд░ рдХреЛ рдореЛрдЯрд╛рдИ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЫрд╛рдпрд╛рдВрдХрди рдкрд╛рд╕ рдореЗрдВ рдХреБрд▓ рдореЛрдЯрд╛рдИ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╣рдореЗрдВ рд╕рднреА рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдХрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд░рд┐рдд рдФрд╕рдд рдЧрддрд┐ рд╡реЗрдХреНрдЯрд░ рджреЗрддрд╛ рд╣реИ; рдХрд╛рдлреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдЬрд░реВрд░рдд рд╣реИ (рдЕрдЬреАрдм рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрдИ рдЬреЗрдЯ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж), рд▓реЗрдХрд┐рди рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдпред

рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛ рдЧрд╣рд░рд╛рдИ рд╣реИ; рдЧрд╣рд░рд╛рдИ рдмрдлрд╝рд░ рдХреЗ рд╕рд╣реА рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рдЧрд╣рд░рд╛рдИ рдЬрд╛рдБрдЪ рджреЛрдиреЛрдВ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдХрдг рдЫрдБрдЯреЗ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдСрд░реНрдбрд░ рдореЗрдВ рдЕрдВрддрд░ рджреВрд╕рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЫреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдгреЛрдВ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХрддрд╛ рдХрдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдХрдгреЛрдВ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╣рдо рдЕрдкрдиреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдФрд░ рдЖрд╢рд╛ рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдорд╛рдорд▓реЗ * * рд╣реЛрдВрдЧреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдгреЛрдВ рдХреЗ рджреЛ рдЬреЗрдЯреЛрдВ рдХрд╛ рдЕрдВрддрд░) рдЬреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЫреЛрдЯреА рдореЛрдЯрд╛рдИ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдмрд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЧрд╣рд░рд╛рдИ рдФрд░ рд░рдВрдЧ рдмрдлрд╝рд░реНрд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реЛрдЧрд╛; рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреЗрдмреИрдХ рджреЛ-рдкрд╛рд╕ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

рдЧрд╣рд░рд╛рдИ рдХрд╛ рдЪреМрд░рд╕рд╛рдИ


рдЕрдВрдд рдореЗрдВ, рдЧреНрд░реАрди рддрдХрдиреАрдХ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рддред рд╣рдордиреЗ рдЧреЛрд▓рд╛рдХрд╛рд░ рдЧреЗрдВрджреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╛рдиреА рдореЗрдВ "рдЧреЗрдВрджреЛрдВ" рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдЕрдм рд╣рдо рдЗрд╕ рдЕрдиреБрдорд╛рди рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рддрд░рд▓ рдХреА рд╕рддрд╣ рдХреА рддрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдзреБрдВрдзрд▓рд╛ рдХрд░рддреЗ рд╣реИрдВред

рднреЛрд▓реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╕ рдкреВрд░реЗ рдмрдлрд░ рдореЗрдВ рдЧрд╛рдКрд╕реА рд╢реЛрд░ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдЕрдЬреАрдм рдкрд░рд┐рдгрд╛рдо рдмрдирд╛рддрд╛ рд╣реИ - рдпрд╣ рджреВрд░ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдХрд░реАрдм рд╕реЗ рдЕрдзрд┐рдХ рдЪрд┐рдХрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рд▓реНрд╣реВрдЯ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдзреБрдВрдзрд▓рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдзрдмреНрдмрд╛ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рддрд░рдлрд╛ рдзрдмреНрдмрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ: рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдзрдмреНрдмрд╛ рдХреЛ рдЕрдкреНрд░рднреЗрджреНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рд╛рдЭрд╛ рдмреНрд▓рд░ рдХреЛ рджреЛ рдкрд╛рд╕реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рдзреБрдВрдзрд▓рд╛, рдФрд░ рдлрд┐рд░ рд▓рдВрдмрд╡рддред Indistinguishable blurring рдПрдХ рдкрд╛рд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЕрдВрддрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдЭрд╛ рдзрдмреНрдмрд╛ рд░реЗрдЦреАрдп рд░реВрдк рд╕реЗ (O (w) + O (h)), рдФрд░ рдЧреИрд░-рд╕рд╛рдЭрд╛ рдзреБрдВрдзрд▓рд╛ рддрд░рд╛рдЬреВ рд╡рд░реНрдЧ (O (w * h))ред рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░, рдЧреИрд░-рд╕рд╛рдЭрд╛ рдзреБрдВрдзрд▓рд╛рдкрди рдЬрд▓реНрджреА рд╕реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╡рдпрд╕реНрдХреЛрдВ, рдЬрд┐рдореНрдореЗрджрд╛рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╕реНрдкрд╖реНрдЯ рдХрджрдо рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ: рдЕрдкрдиреА рдЖрдБрдЦреЗрдВ рдмрдВрдж рдХрд░реЗрдВ, рдмрд╣рд╛рдирд╛ рдХрд░реЗрдВ рдХрд┐ рджреЛ-рддрд░рдлрд╛ рд╢реЛрд░ * рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрднреА рднреА рдЗрд╕реЗ рдЕрд▓рдЧ рдХреНрд╖реИрддрд┐рдЬ рдФрд░ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЧрд▓рд┐рдпрд╛рд░реЗ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рдЧреНрд░реАрди рдиреЗ рдЕрдкрдиреА рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдХрд┐ рдпрджреНрдпрдкрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░рд┐рдгрд╛рдореА рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬрдм рдорд╛рдирджрдВрдбреЛрдВ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реБрдП), рдЫрд╛рдпрд╛рдВрдХрди рдЪрд░рдг рдЙрдиреНрд╣реЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЫреБрдкрд╛рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рдкрд╛рдиреА рдХреА рд╕рдВрдХрд░реА рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпреЗ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рдХрдо рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддреА рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред

рд▓рдХреАрд░ рдЦреАрдВрдЪрдиреЗ рдХреА рдХреНрд░рд┐рдпрд╛


рд╣рдордиреЗ рдЕрдВрдд рдореЗрдВ рджреНрд░рд╡ рдмрдлрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред рдЕрдм рдЪрд▓рд┐рдП рдкреНрд░рднрд╛рд╡ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ: рдореБрдЦреНрдп рдЫрд╡рд┐ рдХрд╛ рдЫрд╛рдпрд╛рдВрдХрди рдФрд░ рд╕рдВрдпреЛрдЬрдиред

рдпрд╣рд╛рдБ рд╣рдо рдХрдИ рдПрдХрддрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдкрд╛рд░ рдЖрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рд╕реВрд░рдЬ рдФрд░ рд╕реНрдХрд╛рдИрдмреЙрдХреНрд╕ рдХреА рд░реЛрд╢рдиреА рд╕реЗ рдкрд╛рдиреА рдХреЛ рд░реЛрд╢рди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛; рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ рдХрдИ рдкрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИ!) рдпрд╛ GPU рдкрдХреНрд╖ рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд╢ рдЦреЛрдЬ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг (рдорд╣рдВрдЧрд╛ рдФрд░ рдмрд▓реНрдХрд┐ рдЬрдЯрд┐рд▓)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рдПрдХрддрд╛ рдЫрд╛рдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдФрд░ рджрд┐рд╢рд╛рддреНрдордХ рд░реЛрд╢рдиреА рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдХреА рдЫрд╛рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ (рдЕрдкрд╛рд░рджрд░реНрд╢реА рдЬреНрдпрд╛рдорд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░), рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реВрд░реНрдп рдХреЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╕реЗ рдЫрд╛рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдиреА рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдХрд╛ рдПрдХ рдЫрд╛рдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрд░реНрдп рдХреЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рдмрдлрд░ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореИрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдЫрд╛рдпрд╛рдВрдХрди рдХрд╛ рдЕрдВрддрд┐рдо рдЪрд░рдг рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдбреНрд░реЙ рдХреЙрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЧрддрд┐ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рд╡рдЯ (рдЕрд╕реНрдерд╛рдпреА рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ (TAA) рдФрд░ рдЧрддрд┐ рдзрдмреНрдмрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрдХреНрд╖ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ редetetenderTarget () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ред рдореБрдЦреНрдп рдХреИрдорд░реЗ рд╕реЗ рдЬреБрдбрд╝реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 void Start() { //... m_QuadMesh = new Mesh(); m_QuadMesh.subMeshCount = 1; m_QuadMesh.vertices = new Vector3[] { new Vector3(0, 0, 0.1f), new Vector3(1, 0, 0.1f), new Vector3(1, 1, 0.1f), new Vector3(0, 1, 0.1f), }; m_QuadMesh.uv = new Vector2[] { new Vector2(0, 0), new Vector2(1, 0), new Vector2(1, 1), new Vector2(0, 1), }; m_QuadMesh.triangles = new int[] { 0, 1, 2, 0, 2, 3, }; m_QuadMesh.UploadMeshData(false); m_CommandBuffer = new CommandBuffer(); m_CommandBuffer.Clear(); m_CommandBuffer.SetProjectionMatrix( GL.GetGPUProjectionMatrix( Matrix4x4.Ortho(0, 1, 0, 1, -1, 100), false)); m_CommandBuffer.SetRenderTarget( BuiltinRenderTextureType.CameraTarget, BuiltinRenderTextureType.CameraTarget); m_CommandBuffer.DrawMesh( m_QuadMesh, Matrix4x4.identity, m_Mat, 0, m_Mat.FindPass("LIQUIDCOMPOSITE")); m_CommandBuffer.SetRenderTarget( BuiltinRenderTextureType.MotionVectors, BuiltinRenderTextureType.Depth); m_CommandBuffer.DrawMesh( m_QuadMesh, Matrix4x4.identity, m_Mat, 0, m_Mat.FindPass("MOTION")); } 

рдХрд▓рд░ рдмрдлрд╝рд░реНрд╕ рдФрд░ рдореЛрд╢рди рд╡реИрдХреНрдЯрд░ рдХреЛ рдПрдХ рд╕рд╛рде MRT (рдорд▓реНрдЯреА рд░реЗрдВрдбрд░ рдЯрд╛рд░реНрдЧреЗрдЯ) рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рдкрд╛рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧрд╣рд░рд╛рдИ рд╡рд╛рд▓реЗ рдмрдлрд╝рд░реНрд╕ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рдЗрди рджреЛрдиреЛрдВ рдЧрд╣рд░рд╛рдИ рдмрдлрд╝рд░реНрд╕ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдлрд┐рд░ рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдУрд╣, рдпрд╣ "рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕" рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд╢реА рд╣реИ)ред

рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ, рд╣рдо OnPostRender () рд╕реЗ рдПрдХ рд╕рдордЧреНрд░ рд░реЗрдВрдбрд░ рдмрд╛рд╣рд░ рдлреЗрдВрдХрддреЗ рд╣реИрдВ:

 RenderTexture GenerateRefractionTexture() { RenderTexture result = RenderTexture.GetTemporary(m_MainCamera.activeTexture.descriptor); Graphics.Blit(m_MainCamera.activeTexture, result); return result; } void OnPostRender() { if (ScreenspaceLiquidCamera && ScreenspaceLiquidCamera.IsReady()) { RenderTexture refraction_texture = GenerateRefractionTexture(); m_Mat.SetTexture("_MainTex", ScreenspaceLiquidCamera.GetColorBuffer()); m_Mat.SetVector("_MainTex_TexelSize", ScreenspaceLiquidCamera.GetTexelSize()); m_Mat.SetTexture("_LiquidRefractTexture", refraction_texture); m_Mat.SetTexture("_MainDepth", ScreenspaceLiquidCamera.GetDepthBuffer()); m_Mat.SetMatrix("_DepthViewFromClip", ScreenspaceLiquidCamera.GetProjection().inverse); if (SunLight) { m_Mat.SetVector("_SunDir", transform.InverseTransformVector(-SunLight.transform.forward)); m_Mat.SetColor("_SunColor", SunLight.color * SunLight.intensity); } else { m_Mat.SetVector("_SunDir", transform.InverseTransformVector(new Vector3(0, 1, 0))); m_Mat.SetColor("_SunColor", Color.white); } m_Mat.SetTexture("_ReflectionProbe", ReflectionProbe.defaultTexture); m_Mat.SetVector("_ReflectionProbe_HDR", ReflectionProbe.defaultTextureHDRDecodeValues); Graphics.ExecuteCommandBuffer(m_CommandBuffer); RenderTexture.ReleaseTemporary(refraction_texture); } } 

рдФрд░ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╕реАрдкреАрдпреВ рднрд╛рдЧреАрджрд╛рд░реА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдмрд╛рдж рдореЗрдВ рдХреЗрд╡рд▓ рд╢реЗрдбреНрд╕ рдЬрд╛рддреЗ рд╣реИрдВред

рдЪрд▓реЛ рдЧрддрд┐ рд╡реИрдХреНрдЯрд░ рдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдкреВрд░рд╛ shader рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 #include "UnityCG.cginc" sampler2D _MainDepth; sampler2D _MainTex; struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert(appdata v) { v2f o; o.vertex = mul(UNITY_MATRIX_P, v.vertex); o.uv = v.uv; return o; } struct frag_out { float4 color : SV_Target; float depth : SV_Depth; }; frag_out frag(v2f i) { frag_out o; float4 fluid = tex2D(_MainTex, i.uv); if (fluid.a == 0) discard; o.depth = tex2D(_MainDepth, i.uv).r; float2 vel = fluid.gb / fluid.a; o.color = float4(vel, 0, 1); return o; } 

рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдореЗрдВ рдЧрддрд┐ рджреНрд░рд╡ рдмрдлрд░ рдХреЗ рд╣рд░реЗ рдФрд░ рдиреАрд▓реЗ рдЪреИрдирд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдмрдлрд░ рдХреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп рдореЛрдЯрд╛рдИ рдХреЛ рдЧрддрд┐ рджреА рдереА, рдЗрд╕рд▓рд┐рдП рд╣рдо рдлрд┐рд░ рд╕реЗ рднрд╛рд░рд┐рдд рдФрд╕рдд рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдореЛрдЯрд╛рдИ (рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдореЗрдВ рд╕реНрдерд┐рдд) рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЬрдм рдкрд╛рдиреА рдХреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧрддрд┐ рдмрдлрд░ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдорд┐рд╢реНрд░рдг рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рдкрд╛рдиреА рдХреЗ рдкреАрдЫреЗ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рд╡реИрдХреНрдЯрд░ рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЯреАрдПрдП рдФрд░ рдЧрддрд┐ рдзреБрдВрдзрд▓рд╛ рдХреЛ рдирд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдкрд╛рдиреА рдХреА рдкрддрд▓реА рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд▓ рдпрд╛ рдЭреАрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╣рдореЗрдВ рд╕рддрд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреАрдПрдПрдП рдпрд╛ рдЧрддрд┐ рдзреБрдВрдзрд▓рд╛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдореБрдЦреНрдп рдЫрд╛рдпрд╛рдВрдХрди рдкрд╛рд╕ рд╣реИред рддрд░рд▓ рдХреА рдореЛрдЯрд╛рдИ рдХреЗ рд╕рд╛рде рдорд╛рд╕реНрдХрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реА рдкрд╣рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ (рд╡реНрдпреВ рд╕реНрдкреЗрд╕) рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИред

 float3 ViewPosition(float2 uv) { float clip_z = tex2D(_MainDepth, uv).r; float clip_x = uv.x * 2.0 - 1.0; float clip_y = 1.0 - uv.y * 2.0; float4 clip_p = float4(clip_x, clip_y, clip_z, 1.0); float4 view_p = mul(_DepthViewFromClip, clip_p); return (view_p.xyz / view_p.w); } float3 ReconstructNormal(float2 uv, float3 vp11) { float3 vp12 = ViewPosition(uv + _MainTex_TexelSize.xy * float2(0, 1)); float3 vp10 = ViewPosition(uv + _MainTex_TexelSize.xy * float2(0, -1)); float3 vp21 = ViewPosition(uv + _MainTex_TexelSize.xy * float2(1, 0)); float3 vp01 = ViewPosition(uv + _MainTex_TexelSize.xy * float2(-1, 0)); float3 dvpdx0 = vp11 - vp12; float3 dvpdx1 = vp10 - vp11; float3 dvpdy0 = vp11 - vp21; float3 dvpdy1 = vp01 - vp11; // Pick the closest float3 dvpdx = dot(dvpdx0, dvpdx0) > dot(dvpdx1, dvpdx1) ? dvpdx1 : dvpdx0; float3 dvpdy = dot(dvpdy0, dvpdy0) > dot(dvpdy1, dvpdy1) ? dvpdy1 : dvpdy0; return normalize(cross(dvpdy, dvpdx)); } 

рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдорд╣рдВрдЧрд╛ рддрд░реАрдХрд╛ рд╣реИ: рд╣рдо рдХреНрд▓рд┐рдк рд╕реНрдкреЗрд╕ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рд░рд┐рд╡рд░реНрд╕ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВред

рд╣рдореЗрдВ рдкрджреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдорд╛рдирджрдВрдб рд╕рд░рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ: рд╣рдо рдЧрд╣рд░рд╛рдИ рд╕реЗ рдмрдлрд░ рдореЗрдВ рдкрдбрд╝реЛрд╕реА рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирд╕реЗ рдПрдХ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рд▓реНрд╣реВрдЯ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдирдореВрдирд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рд╕реНрдерд╛рди рдХреЗ рдирд┐рдХрдЯрддрдо рдмрд┐рдВрджреБ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдмрд╣реБрдд рдкрддрд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдкрд╛рдВрдЪ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рд╡рд░реНрд╕ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ (рд╡рд░реНрддрдорд╛рди рдмрд┐рдВрджреБ рдФрд░ рдЪрд╛рд░ рдкрдбрд╝реЛрд╕реА рдХреЗ рд▓рд┐рдП)ред рдХрдо рдЦрд░реНрдЪреАрд▓рд╛ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреЛрд╕реНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рдмрд╣реБрдд рд▓рдВрдмреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред

рдкрд░рд┐рдгрд╛рдореА рдорд╛рдирджрдВрдб рд╣реИрдВ:


рдореИрдВ рджреНрд░рд╡ рдмрдлрд░ рд╕реЗ рд╢реЛрд░ рдореВрд▓реНрдп рдХреЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдЧрдгрдирд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд┐рдХреГрдд рдХрд░рддрд╛ рд╣реВрдВ, рдмрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреЗрдЯ рдХреА рдореЛрдЯрд╛рдИ (рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП) рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 N.xy += NoiseDerivatives(i.uv, fluid.r) * (_NoiseStrength / fluid.a); N = normalize(N); 

рд╣рдо рдЕрдВрдд рдореЗрдВ рдЫрд╛рдпрд╛рдВрдХрди рдХреЗ рд╕рд╛рде рд╣реА рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЙрдЯрд░ рд╢реЗрдбрд┐рдВрдЧ рдореЗрдВ рддреАрди рдореБрдЦреНрдп рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ: рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди, рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдЕрдкрд╡рд░реНрддрди рдФрд░ рдлреЛрдоред

рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдХ рдорд╛рдирдХ GGX рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ рдПрдХрддрд╛ shader рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред (рдПрдХ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде, 2% рдХрд╛ рд╕рд╣реА F0 рдкрд╛рдиреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред)

рдЕрдкрд╡рд░реНрддрди рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рд╕рд╣реА рдЕрдкрд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдХрд┐рд░рдг (рдпрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдХрд┐рд░рдгрди) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдкрд╡рд░реНрддрди рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрдВрдЦ рдХреЗ рд▓рд┐рдП рдХрдо рд╕рд╣рдЬ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдЗрддрдиреЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдорд╛рдирджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрд╡рд░реНрддрдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдпреВрд╡реА рдирдореВрдирд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдореЛрдЯрд╛рдИ рдФрд░ рдмрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 float aspect = _MainTex_TexelSize.y * _MainTex_TexelSize.z; float2 refract_uv = (i.grab_pos.xy + N.xy * float2(1, -aspect) * fluid.a * _RefractionMultiplier) / i.grab_pos.w; float4 refract_color = tex2D(_LiquidRefractTexture, refract_uv); 

(рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рд╣рд╕рдВрдмрдВрдз рд╕реБрдзрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ - рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдиреНрдирд┐рдХрдЯрди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред)

рдпрд╣ рдЕрдкрд╡рд░реНрддрд┐рдд рдкреНрд░рдХрд╛рд╢ рддрд░рд▓ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдХреБрдЫ рднрд╛рдЧ рдЕрд╡рд╢реЛрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ:

 float3 water_color = _AbsorptionColor.rgb * _AbsorptionIntensity; refract_color.rgb *= exp(-water_color * fluid.a); 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ _AbsorptionColor рдЕрдкреЗрдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдЪреИрдирд▓ рдХреЗ рдорд╛рди рд╕рдВрдЪрд░рд┐рдд рдкреНрд░рдХрд╛рд╢ рдХреЗ рдмрдЬрд╛рдп рдЕрд╡рд╢реЛрд╖рд┐рдд рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, _AbsorptionColor рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде (1, 0, 0) рд▓рд╛рд▓ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рд┐рд░реЛрдЬрд╝рд╛ рд░рдВрдЧ (рдЪреИрддреА)ред

рдкрд░рд╛рд╡рд░реНрддрди рдФрд░ рдЕрдкрд╡рд░реНрддрди рдХреЛ Fresnel рдЧреБрдгрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 float spec_blend = lerp(0.02, 1.0, pow(1.0 - ldoth, 5)); float4 clear_color = lerp(refract_color, spec, spec_blend); 

рдЙрд╕ рдХреНрд╖рдг рддрдХ, рд╣рдо рдирд┐рдпрдореЛрдВ (рдЬреНрдпрд╛рджрд╛рддрд░) рд╕реЗ рдЦреЗрд▓рддреЗ рдереЗ рдФрд░ рд╢рд╛рд░реАрд░рд┐рдХ рдЫрд╛рдпрд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗред

рд╡рд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕реЗ рдкрд╛рдиреА рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИ:


рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рдХреБрдЫ рдлреЛрдо рдЬреЛрдбрд╝реЗрдВред

рдлреЛрдо рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрдм рдкрд╛рдиреА рдЕрд╢рд╛рдВрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рд╡рд╛ рдкрд╛рдиреА рдХреЗ рд╕рд╛рде рдмреБрд▓рдмреБрд▓реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреБрд▓рдмреБрд▓реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдФрд░ рдЕрдкрд╡рд░реНрддрди рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рднреА рдкрд╛рдиреА рдХреЛ рдлреИрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд╢ рдХреА рднрд╛рд╡рдирд╛ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд┐рдкрдЯреЗ рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХрд░реВрдВрдЧрд╛:

 float3 foam_color = _SunColor * saturate((dot(N, L)*0.25f + 0.25f)); 

рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдВрддрд┐рдо рд░рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рддрд░рд▓ рдкрджрд╛рд░реНрде рдХреЗ рд╢реЛрд░ рдФрд░ рдирд░рдо рдлреНрд░рд┐рд╕реЗрд▓ рдЧреБрдгрд╛рдВрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:

 float foam_blend = saturate(fluid.r * _NoiseStrength) * lerp(0.05f, 0.5f, pow(1.0f - ndotv, 3)); clear_color.rgb += foam_color * saturate(foam_blend); 

рд▓рд┐рдкрдЯреЗ рд╣реБрдП рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдКрд░реНрдЬрд╛ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдкреНрд░рд╕рд╛рд░ рдХреЗ рд╕рдиреНрдирд┐рдХрдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдлреЛрдо рдХреЗ рд░рдВрдЧ рдХрд╛ рдорд┐рд╢реНрд░рдг рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдпрд╣ рдКрд░реНрдЬрд╛ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рдХрд╛рдиреВрди рдХрд╛ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рдЙрд▓реНрд▓рдВрдШрди рд╣реИред

рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдзрд╛рд░рд╛ рдХреЛ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ:


рдЖрдЧреЗ рдХрд╛ рдХрд╛рдо рдФрд░ рд╕реБрдзрд╛рд░


рдмрдирд╛рдИ рдЧрдИ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ, рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • рдХрдИ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдлрд┐рд▓рд╣рд╛рд▓, рдЕрд╡рд╢реЛрд╖рдг рдХреА рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рдЫрд╛рдпрд╛рдВрдХрди рдХреЗ рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рднреА рддрд░рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░рдВрддрд░ рд░рдВрдЧ рдФрд░ рдЪрдордХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рд░рдВрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рджреВрд╕рд░реЗ рд░рдВрдЧ рдХреЗ рдмрдлрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдмреЗрд╕ рджреНрд░рд╡ рдмрдлрд░ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрдг рдХреЗ рд▓рд┐рдП рдЕрд╡рд╢реЛрд╖рдг рдЕрднрд┐рдиреНрди рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • рдкреВрд░реНрдг рдХрд╡рд░реЗрдЬред GPU рдХреА рддрд░рдл рдкреНрд░рдХрд╛рд╢ рдХреА рдЦреЛрдЬ рд╕рдВрд░рдЪрдирд╛ рддрдХ рдкрд╣реБрдВрдЪ (рдпрд╛ рддреЛ рд╣рд╛рде рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдирдИ рдПрдХрддрд╛ HD рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж), рд╣рдо рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╛рдиреА рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд░реЛрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╣реА рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдмреЗрд╣рддрд░ рдЕрдкрд╡рд░реНрддрдиред рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЯреЗрдХреНрд╕рдЪрд░ рдХреА рдзреБрдВрдзрд▓реА рдПрдордЖрдИрдкреА рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде, рд╣рдо рд░рдл рд╕рддрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд░реНрддрди рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рддрд░рд▓ рдХреЗ рдЫреЛрдЯреЗ рд╕реНрдкреНрд░реЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрд╡рд╕рд░ рд╣реЛрддрд╛, рддреЛ рдореИрдВ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдПрдХ рдирд╛рдбрд╝реА рдХреЗ рдиреБрдХрд╕рд╛рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд▓рд╣рд╛рд▓ рдЗрд╕реЗ рдкреВрд░реНрдг рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi420495/


All Articles