рдлреНрд▓реИрд╢ рдореЗрдВ рдмреНрд▓реВрдо рдкреЛрд╕реНрдЯ рдкреНрд░рднрд╛рд╡ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрджреНрднреБрдд рдЕрднрд┐рдиреЗрддрд╛ рдФрд░ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдирдорд╕реНрддреЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдСрд░рд▓реЗрдВрдбреЛ рдмреНрд▓реВрдоред рдЬрдм рддрдХ Google рдореМрдЬреВрдж рд░рд╣рддрд╛ рд╣реИ, рддрдм рддрдХ рдЖрдкрдХреЛ рднреБрд▓рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред

рднрд╛рдЧ рдПрдХ blurs



рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реАрдорд╛


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

рдЫрд╡рд┐ рдХреА рддреИрдпрд╛рд░реА


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреЛ рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Context3D.drawToBitmapData () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рд╣реА рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд░реНрддрдорд╛рди () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╣рд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдмрд┐рдЯрдореИрдкрдбреИрдЯрд╛ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрдк рдЕрд▓реНрдЯрд░рдиреЗрдЯрд┐рд╡ 3 рдбреА рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреГрд╢реНрдп рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд░реЗрдВрдбрд░рдЯреЙрдЗрдЯрдореИрдк рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд┐рд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдмрд┐рдЯрдореИрдкрдбрд╛рдЯрд╛ рдХреЛ рдЙрд╕реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХреИрдирд╡рд╛рд╕ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

private function itsRenderTime(e:Event):void { //No, dad, no!
camera.view.renderToBitmap = true;
camera.render(stage3d);
realisePostEffect(camera.view.canvas);
}


рдЦреБрдж рдХреЛ рдзреБрдВрдзрд▓рд╛ рдХрд░ рд▓реЗрдВ


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

  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рд▓реЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдВрдбрд░рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЫрд╡рд┐ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдкрд░ рдПрдХ рд╣реА рдЬрдЯрд┐рд▓ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  2. рдЕрдЧрд▓рд╛ рдХрджрдо рд╡рд░реНрддрдорд╛рди рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдбрд╝реЛрд╕реА рдХреЗ рдФрд╕рдд рд░рдВрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдФрд░ рдЙрд╕реЗ рд╕рдорд╛рди рд╢реЗрдпрд░реЛрдВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдХреЗ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдирд╛ рд╣реИред рдпрджрд┐ "рдмрдврд╝рд╛рдпрд╛" рдзреБрдВрдзрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рд░рдВрдЧ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ; рдРрд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдХрд╛ рдкреНрд░рднрд╛рд╡ рджреВрд░реА рд╕реЗ рд╡реНрдпреБрддреНрдХреНрд░рдорд╛рдиреБрдкрд╛рддреА рд╣реЛрддрд╛ рд╣реИ (рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рд╡рд░реНрдЧ рднреА, рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЧрдпрд╛) рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реЗред
  3. рдзрдмреНрдмрд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдг 2 рдХреЛ рдХрдИ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдордирдорд╛рдирд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рджреВрд╕рд░реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рддреАрди рдмрд╛рд░ рдХрд░рддреЗ рд╕рдордп рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЧреБрдгрд╡рддреНрддрд╛ / рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдкрд╛рдд рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрдорд╛рд░реНрдЯ рд▓реЗрдЦ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЧреЙрд╕рд┐рдпрди рдХрд▓рдВрдХ рдХреЗ рд▓рд┐рдП рдирд┐рдХрдЯрддрдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдмрд╕ рдПрдХ рд╢рдмреНрдж рд▓реЗрдВред
  4. рдкрд░рд┐рдгрд╛рдореА рдзреБрдВрдзрд▓реА рддрд╕реНрд╡реАрд░ рдлрд┐рд░ рд╕реЗ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЖрдХрд╛рд░ рддрдХ рдлреИрд▓реА рд╣реБрдИ рд╣реИред
  5. рдзреБрдВрдзрд▓реА рдФрд░ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ [рдЕрд░реНрдз] рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЖрдЗрдЯрдо 2 рдФрд░ 3 рдХреЗ рд╕рд╛рде, рдмреНрд▓рд░рдлрд┐рд▓реНрдЯрд░ рдирд╛рдордХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлреНрд▓реИрд╢ рдлрд┐рд▓реНрдЯрд░ рдПрдХ рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред 1 рдФрд░ 4 рдмрд┐рдЯрдореИрдкрдбреЗрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдбреНрд░рд╛ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдПрдлрд╝рд┐рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЦреИрд░, рдкрд╛рдВрдЪрд╡реЗрдВ рдЖрдЗрдЯрдо рдХреЛ ColorTransform рдЙрджрд╛рд╣рд░рдг рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдХреНрд░реАрди рдкрд░ рддрд╕реНрд╡реАрд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рдЬрд┐рд╕реЗ [рдмрдЪреНрдЪреЗ] рд╕реНрдЯреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреА рд╣реИ:

private function realisePostEffect(canvas:BitmapData):void {
var _scaling:int = 4 // 16 (4*4) .
var _power:int = 4 //
var _alpha:Number = .5 //
var _quality:int = 3 // ,

var _cT:ColorTransform = new ColorTransform(1, 1, 1, _alpha);
var _bloomData:BitmapData = new BitmapData(canvas.width / _scaling, canvas.height / _scaling, true, 0);
var matrix:Matrix = new Matrix();
matrix.scale(1 / _scaling, 1 / _scaling);
_bloomData.draw(canvas, matrix, _cT);
_bloomData.applyFilter(_bloomData, _bloomData.rect, new Point(), new BlurFilter(_power, _power, _quality));
matrix.invert();
canvas.draw(_bloomData, matrix);
}


рдмрд┐рдирд╛ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЫрд╡рд┐:


рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕реНрддрд░ рдкрд░, рдЕрдкрдиреЗ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рд╕реБрдВрджрд░рддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмреАрдЪ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрддреБрд▓рди рддрдХ рддрд╕реНрд╡реАрд░ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдордирдорд╛рдиреА рд╡рд░реНрдЧ рдХреА рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ _scaling, _power, _alpha рдФрд░ _quality рдбрд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рдЖрдк рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдиреВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрд▓реНрдж рд╣реА рдЖ рд░рд╣рд╛ рд╣реИ: рдПрдЪрдбреАрдЖрд░ рдкреНрд░рднрд╛рд╡ - рддрд╕реНрд╡реАрд░ рдХреЛ рдЙрдЬреНрдЬреНрд╡рд▓ рдХрд░рдирд╛ рдФрд░ рдмрдлрд░ рдХреЛ рдХреИрд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рд╣реИред

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


All Articles