Direct3D 11 рдФрд░ OpenGL 4 рдкрд░ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрджреЗрд╢-рд╕реНрд╡рддрдВрддреНрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо

рдЫрд╡рд┐ рдСрд░реНрдбрд░-рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрд╕реА (OIT) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рд╢рд╛рдпрдж, рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рдХрд╛рд░реНрдп рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, OIT рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓рд╛рдЧреВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ - рдкрд╛рд░рднрд╛рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХреИрд╕реЗ рдЦреАрдВрдЪрдирд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЙрд╕ рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдЦреАрдВрдЪреЗ рдЧрдП рд╣реИрдВред рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп рд░рдВрдЧреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреЗ рдирд┐рдпрдо, рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдкрд╛рд░рднрд╛рд╕реА рд╡рд╕реНрддреБрдПрдВ рджреВрд░ рд╕реЗ рдкрд╛рд╕ рдХреА рдУрд░ рдЦреАрдВрдЪреА рдЬрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдпрд╛ рдЬрдЯрд┐рд▓ рдЖрдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╕рдмрд╕реЗ рдЙрдиреНрдирдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдУрдЖрдИрдЯреА, 2010 рдореЗрдВ рдбрд╛рдпрд░реЗрдХреНрдЯ 3 рдбреА 11 рдХреЗ рд▓рд┐рдП рдПрдПрдордбреА рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдЙрди рд╡рд░реНрд╖реЛрдВ рдХреЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдореБрдЭ рдкрд░ рдЙрдЪрд┐рдд рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдбрд╛рд▓ рдкрд╛рдпрд╛ред 4 рд╕рд╛рд▓ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдПрдордбреА рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдЦреЛрджрд╛ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рди рдХреЗрд╡рд▓ рдбрд╛рдпрд░реЗрдХреНрдЯ 3 рдбреА 11 рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдмрд▓реНрдХрд┐ рдУрдкрдирдЬреАрдПрд▓ 4.3 рдкрд░ рднреАред рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рдЙрджреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░ рдЖрдП рд╣реИрдВ, рдЙрдирдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рдореИрдВ рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реВрдВред



рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рддрдЪреАрдд рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрдореЛ рдпрд╣рд╛рдВ рд╡реНрдпрд╛рдкрдХ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ Demo_OIT рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Visual Studio 2012/2013 рдФрд░ CMake рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдкрдж рдХреЗ рдЕрдВрдд рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╢рдмреНрджрд╛рд╡рд▓реА рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред



OIT рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЕрд╡рд▓реЛрдХрди



рдкрд╛рд░рднрд╛рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдореЗрдВ рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:

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


рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд OIT рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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


рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдХрдард┐рдирд╛рдИ рдЕрдВрдХ 3 рдФрд░ 4 рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рд╛рде рдЯреБрдХрдбрд╝реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ рд╕рд╣реЗрдЬрдирд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рд╣реИред





рд▓рд┐рдВрдХреНрдб рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрд░реНрдбрд░-рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрд╕реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛



рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реВрдВрдЧрд╛:

  1. рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо Direct3D 11 рдФрд░ OpenGL 4.3 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;
  2. рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрдВрдкреНрдпреВрдЯ рдХрдВрдкреНрдпреВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдлреНрд░реИрдЧрдореЗрдВрдЯ рд╢реИрдбрд░ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ;
  3. рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо MSAA рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред


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

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

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


рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдХреГрддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред







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

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдЪрд▓реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред



Direct3D 11 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


Direct3D 11 рдкрд░ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рдЕрдирдЕреЙрд░реНрдбрд░-рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдмрдирд╛рд╡рдЯ ( RWTexture2D ) рдФрд░ рд╕рдВрд░рдЪрд┐рдд рдмрдлрд░ ( RWStructuredBuffer )ред рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рдЫрд╛рдпрд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдбрд╛рдпрд░реЗрдХреНрдЯ 3 рдбреА рдПрдкреАрдЖрдИ рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реЗрдб рдореЗрдВ рдЪрд░ рдХреЗ рд╕рд╛рде рдпреВрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, OMSetRenderTargetsAndUnorderedAccessViews рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╕рдВрдпреЛрдЧ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдбрд╛рдпрд░реЗрдХреНрдЯ 3 рдбреА 11 рдХрд╛ рд╕рдВрдЧрдарди рдРрд╕рд╛ рд╣реИ рдХрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рддреЗ рд╕рдордп рдпреВрдП рд╕рдВрд╕рд╛рдзрди рд░реЗрдВрдбрд░ рдЯрд╛рд░рдЧреЗрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рдпрджрд┐ рдЙрдкрдХрд░рдг 8 рдмрдирд╛рд╡рдЯ рдХрд╛ рдПрдордЖрд░рдЯреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ 2 рд╕реНрд▓реЙрдЯреНрд╕ рд▓рдХреНрд╖реНрдп рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ 6 рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрд▓реЙрдЯ рдпреВрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдирд╣реАрдВ рд░рд╣рддреЗ рд╣реИрдВред GPU рдХреЗ рдЕрддреНрдпрдзрд┐рдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдХрд╛рд░рдг, рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ UA рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЦрдВрдб рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╕рдВрд░рдЪрд┐рдд рдмрдлрд░ рдХреЗ рд▓рд┐рдП D3D11_BUFFER_UAV_FLAG_COUNTER рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред Direct3D 11 рдЖрдкрдХреЛ рдПрдХ рд╕рдВрд░рдЪрд┐рдд рдмрдлрд░ рдореЗрдВ рдПрдХ рдкрд░рдорд╛рдгреБ рдХрд╛рдЙрдВрдЯрд░ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИред

Direct3D 11 рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрдирд╛рдПрдВрдЧреЗ:

  1. рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдХреЗ рдкрддреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯред рдкреНрд░рд╛рд░реВрдк - DXGI_FORMAT_R32_UINT , рд╢реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЭрдВрдбреЗ - D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_SHADER_RESOURCE , рдЖрдХрд╛рд░ рдмреИрдХ рдмрдлрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ;
  2. рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╕реВрдЪреА рдЖрдЗрдЯрдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрд┐рдд рдмрдлрд░ред HLSL рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЛ рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:



    struct ListNode { uint packedColor; uint depthAndCoverage; uint next; };
          
          





    рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдореЗрдВ 12 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддреА рд╣реИрдВред рдмреИрдХ рдмрдлрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдРрд╕реЗ рддрддреНрд╡ рд╣реИрдВред рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдХреИрдорд░реЗ рдХреЗ рдареАрдХ рд╕рд╛рдордиреЗ 8 рд╕рдорд╛рдирд╛рдВрддрд░ рдкрд╛рд░рднрд╛рд╕реА рд╡рд┐рдорд╛рди рд╣реЛрдВ рдЬреЛ рдкреВрд░реА рд╕реНрдХреНрд░реАрди рдХреЛ рдШреЗрд░реЗ рд╣реБрдП рд╣реЛрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмреИрдХ рдмрдлрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП, 8 рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдХрд╛рд░ 12 * рдбрдмреНрд▓реНрдпреВ * рдПрдЪ * 8 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рдмрдлрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд╣рд╛рдВ рдбрдмреНрд▓реНрдпреВ, рдПрдЪ рдмреИрдХ рдмрдлрд░ рдХреА рд▓рдВрдмрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ рд╣реИред рдПрдХ рджреБрд░реНрд▓рдн рдХрдВрдкреНрдпреВрдЯрд░ рдЧреЗрдо рдХреЛ рдлреНрд░реЗрдо рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рджреГрд╢реНрдпрдорд╛рди рдкрд╛рд░рднрд╛рд╕реА рдЕрдВрд╢реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрди 8 рд╡рд┐рдорд╛рдиреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВред 1920x1080 рд░рд┐рдпрд░ рдмрдлрд░ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрд░рдЪрд┐рдд рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ рд▓рдЧрднрдЧ 190 рдПрдордмреА рд╣реИред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕реА рдмрдлрд╝рд░ рдХреЛ рдЯреБрдХрдбрд╝рд╛ рдХрд╛рдЙрдВрдЯрд░ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред


рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлреНрд░реЗрдо рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ:

  1. рд╣рдо 0xffffffff рдорд╛рди рдХреЗ рд╕рд╛рде рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдХреЗ рдкрддреЗ рдХреА рдмрдирд╛рд╡рдЯ рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ ClearUnorderedAccessViewUint рд╣реИред рд╣рдо рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ;
  2. рд╢реВрдиреНрдп рдмрдлрд░ рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреАрдЫреЗ рдмрдлрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЗрдВрдбреЗрдХреНрд╕ 1 рдХреЛ рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдХреА рдмрдирд╛рд╡рдЯ рдорд┐рд▓реЗрдЧреА, рдЗрдВрдбреЗрдХреНрд╕ 2 - рд╕реВрдЪреА рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрд░рдЪрд┐рдд рдмрдлрд░;
  3. рд╣рдо рджреГрд╢реНрдп рдХреЗ рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рднрд╛рдЧ (рдПрдХ рд╕реНрдХрд╛рдИрдмреЙрдХреНрд╕ рдФрд░ рдбреЗрдореЛ рдореЗрдВ рдХрдИ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдЪрд╛рдпрджрд╛рдиреА рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ) рдЦреАрдВрдЪрддреЗ рд╣реИрдВ;
  4. рд╣рдо рджреГрд╢реНрдп рдХреЗ рдкрд╛рд░рднрд╛рд╕реА рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреАрдЫреЗ рдХреЗ рдЪреЗрд╣рд░реЛрдВ рдХреА рдХрддрд░рди рдмрдВрдж рдХрд░реЗрдВ ( рдбреА 3 рдбреА 11_рдХрд╛реЕрд▓_рдиреЛрди ), рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдХреЗ рд▓рд┐рдП рдирдП рдорд╛рдиреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдмрдВрдж рдХрд░реЗрдВ (рд▓реЗрдХрд┐рди рдЧрд╣рд░рд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╕реНрд╡рдпрдВ рдмрдВрдж рди рдХрд░реЗрдВ), рдмрдирд╛рд╡рдЯ рдХреЛ рд░рдВрдЧ рд▓рд┐рдЦрдирд╛ рдмрдВрдж рдХрд░ рджреЗрдВ (рдЗрд╕ рдХрджрдо рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рд╣рдо рдХреЗрд╡рд▓ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ)ред рдЯреБрдХрдбрд╝реЗ рдХреА рд╕реВрдЪреА рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбрд░ рдХреЛ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



     #include <common.h.hlsl> #include <pscommon.h.hlsl> struct ListNode { uint packedColor; uint depthAndCoverage; uint next; }; globallycoherent RWTexture2D<uint> headBuffer; globallycoherent RWStructuredBuffer<ListNode> fragmentsList; uint packColor(float4 color) { return (uint(color.r * 255) << 24) | (uint(color.g * 255) << 16) | (uint(color.b * 255) << 8) | uint(color.a * 255); } [earlydepthstencil] float4 main(VS_OUTPUT input, uint coverage : SV_COVERAGE, bool frontFace : SV_IsFrontFace) : SV_TARGET { float4 color = computeColorTransparent(input, frontFace); uint newHeadBufferValue = fragmentsList.IncrementCounter(); if (newHeadBufferValue == 0xffffffff) { return float4(0, 0, 0, 0); } uint2 upos = uint2(input.position.xy); uint previosHeadBufferValue; InterlockedExchange(headBuffer[upos], newHeadBufferValue, previosHeadBufferValue); uint currentDepth = f32tof16(input.worldPos.w); ListNode node; node.packedColor = packColor(float4(color.rgb, color.a)); node.depthAndCoverage = currentDepth | (coverage << 16); node.next = previosHeadBufferValue; fragmentsList[newHeadBufferValue] = node; return float4(0, 0, 0, 0); }
          
          





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

    рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд░рдВрдЧ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдпреВрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред Uint рдореЗрдВ рдлреНрд▓реЛрдЯ 4 рдорд╛рди рдХреЛ рдкреИрдХ рдХрд░рдиреЗ рд╕реЗ 12 рдмрд╛рдЗрдЯреНрд╕ рдмрдЪрддреЗ рд╣реИрдВред 32-рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ рдХреЛ 16-рдмрд┐рдЯ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореБрдлреНрдд 16-рдмрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╡рд░реЗрдЬ рдореВрд▓реНрдп (MSAA рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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



    рдЦрдВрдбрд┐рдд рд░рдВрдЧ = рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд░рдВрдЧ * 1 + рдЫрд╛рдпрд╛рдХрд╛рд░ рд╕реЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд░рдВрдЧ * рдЫрд╛рдпрд╛ рд╕реЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЕрд▓реНрдлрд╛ ;



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

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

    рдкрд┐рдХреНрд╕реЗрд▓ shader рдореЗрдВ рдЯреБрдХрдбрд╝реЗ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред



     void insertionSortMSAA(uint startIndex, uint sampleIndex, inout NodeData sortedFragments[MAX_FRAGMENTS], out int counter) { counter = 0; uint index = startIndex; for (int i = 0; i < MAX_FRAGMENTS; i++) { if (index != 0xffffffff) { uint coverage = (fragmentsList[index].depthAndCoverage >> 16); if (coverage & (1 << sampleIndex)) { sortedFragments[counter].packedColor = fragmentsList[index].packedColor; sortedFragments[counter].depth = f16tof32(fragmentsList[index].depthAndCoverage); counter++; } index = fragmentsList[index].next; } } for (int k = 1; k < MAX_FRAGMENTS; k++) { int j = k; NodeData t = sortedFragments[k]; while (sortedFragments[j - 1].depth < t.depth) { sortedFragments[j] = sortedFragments[j - 1]; j--; if (j <= 0) { break; } } if (j != k) { sortedFragments[j] = t; } } }
          
          





    Direct3D 11 рдореЗрдВ MSAA рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рднреА рдЙрдЪрд┐рдд рд╣реИред рдЬрдм MSAA рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдкрджреЛрдВ рдХреЗ рд╕рд╛рде рдЯреБрдХрдбрд╝реЗ рдХреЗ рднреАрддрд░ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдХ (рдирдореВрдиреЗ) рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирддрд╛ рд╣реИред рдРрд╕реЗ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ MSAA рд╕реНрддрд░ (рдЖрдорддреМрд░ рдкрд░ 2, 4, 8, 16) рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП, рдПрдХ рддреНрд░рд┐рднреБрдЬ (рдХрд╡рд░реЗрдЬ рдкрд░реАрдХреНрд╖рдг) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд┐рдВрджреБ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдЕрдВрджрд░ рд╣реИ, рддреЛ рдкрд┐рдХреНрд╕реЗрд▓ рд╢реИрдбрд░ рдХреЛ рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЙрди рд╕рднреА рдирдореВрдиреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд░рд┐рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдЕрдВрджрд░ рдХреМрди рд╕реЗ рдирдореВрдиреЗ рд╣реИрдВ (рдпрд╛рдиреА, рд╡реЗ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд░рдВрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ), рдХрд╡рд░реЗрдЬ рдирд╛рдордХ рдПрдХ рдореБрдЦреМрдЯрд╛ рдмрдирддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рдореВрд▓реНрдп рдерд╛ рдЬреЛ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд░рднрд╛рд╕реА рдЕрдВрд╢ рдХреЗ рд▓рд┐рдП рдмрдЪрд╛рдпрд╛ рдерд╛ред

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

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



    рдЗрд╕ рд╕реНрдЯреЗрдЬ рдХреЗ рд▓рд┐рдП рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбрд░ рдХреЛрдб
     #include <tpcommon.h.hlsl> float4 main(VS_OUTPUT input, uint sampleIndex : SV_SAMPLEINDEX) : SV_TARGET { uint2 upos = uint2(input.position.xy); uint index = headBuffer[upos]; clip(index == 0xffffffff ? -1 : 1); float3 color = float3(0, 0, 0); float alpha = 1; NodeData sortedFragments[MAX_FRAGMENTS]; [unroll] for (int j = 0; j < MAX_FRAGMENTS; j++) { sortedFragments[j] = (NodeData)0; } int counter; insertionSortMSAA(index, sampleIndex, sortedFragments, counter); // resolve multisampling int resolveBuffer[MAX_FRAGMENTS]; float4 colors[MAX_FRAGMENTS]; int resolveIndex = -1; float prevdepth = -1.0f; [unroll(MAX_FRAGMENTS)] for (int i = 0; i < counter; i++) { if (sortedFragments[i].depth != prevdepth) { resolveIndex = -1; resolveBuffer[i] = 1; colors[i] = unpackColor(sortedFragments[i].packedColor); } else { if (resolveIndex < 0) { resolveIndex = i - 1; } colors[resolveIndex] += unpackColor(sortedFragments[i].packedColor); resolveBuffer[resolveIndex]++; resolveBuffer[i] = 0; } prevdepth = sortedFragments[i].depth; } // gather [unroll(MAX_FRAGMENTS)] for (int i = 0; i < counter; i++) { [branch] if (resolveBuffer[i] != 0) { float4 c = colors[i] / float(resolveBuffer[i]); alpha *= (1.0 - ca); color = lerp(color, c.rgb, ca); } } return float4(color, alpha); }
          
          





Direct3D 11 рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред







OpenGL 4.3 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


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

  1. рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдХреЗ рдкрддреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдмрдирд╛рд╡рдЯ ( GL_R32UI );
  2. рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GL_SHADER_STORAGE_BUFFER рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдмрдлрд░ред рдмрдлрд░ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдЙрд╕реА рддрд░рд╣ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ Direct3D 11 рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ;
  3. рдЯреБрдХрдбрд╝рд╛ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП GL_ATOMIC_COUNTER_BUFFER рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдмрдлрд░ред OpenGL рдореЗрдВ Direct3D рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкрд░рдорд╛рдгреБ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рднрдВрдбрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ;
  4. рджреГрд╢реНрдп рдФрд░ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯред рдУрдкрдирдЬреАрдПрд▓ рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ, рд╣рдореЗрдВ рдЧрд╣рд░рд╛рдИ рдмрдирд╛рд╡рдЯ (рдиреАрдЪреЗ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдбрдмреНрд▓реНрдпреВрдЬреАрдПрд▓ рд╕реЗ рдПрдХ рдорд╛рдирдХ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрдмреНрд▓реНрдпреВрдЬреАрдПрд▓ рд╡рд┐рдВрдбреЛ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп рдЬрд┐рд╕ рдЧрд╣рд░рд╛рдИ-рд╕реНрдЯреИрдВрд╕рд┐рд▓ рдмрдлрд░ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рд╡рд╣ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдлреНрд░реЗрдордмрдлрд╝рд░ рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред


рдлреНрд░реЗрдо рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред OpenGL рд╣рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп glMemoryBarrier рд╣реИ , рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╣реЗрдВрдЧреЗ:



 glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT | GL_ATOMIC_COUNTER_BARRIER_BIT | GL_SHADER_STORAGE_BARRIER_BIT);
      
      





рдпрд╣ рдПрдХ рдлреНрд░реЗрдо рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред



рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлреНрд░реЗрдо рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ:

  1. рд╣рдо 0xffffffff рдорд╛рди рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдХреЗ рдкрддреЗ рд╕реЗ рдмрдирд╛рд╡рдЯ рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВред OpenGL 4.3 рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ shader рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдСрдкрд░реЗрд╢рди рдХрд░реЗрдЧреА:

     imageStore(headBuffer, upos, uvec4(0xffffffff));
          
          



  2. рд╣рдо рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ ( glClearBufferSubData );
  3. рд╣рдо рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдордмрдлрд╝рд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ;
  4. рд╣рдо рдПрдХ рджреГрд╢реНрдп рдХреЗ рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рднрд╛рдЧ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ;
  5. рд╣рдо рджреГрд╢реНрдп рдХреЗ рдкрд╛рд░рднрд╛рд╕реА рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдкрд╣рд▓реЗ рд╕реЗ рдШреЛрд╖рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдУрдкрдирдЧреЗрд▓ "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрд╣рд░рд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рдореЗрдВ рд╕реНрдЯреЛрд░реЗрдЬ рдмреНрд▓реЙрдХ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрд╣рд░рд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдкрд░ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрд╡рдпрдВ рдЧрд╣рд░рд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдЯреБрдХрдбрд╝рд╛ shader рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред



     void main() { outputColor = vec4(0); uint newHeadBufferValue = atomicCounterIncrement(fragmentsListCounter); if (newHeadBufferValue == 0xffffffff) discard; ivec2 upos = ivec2(gl_FragCoord.xy); float depth = texelFetch(depthMap, upos, 0).r; if (gl_FragCoord.z > depth) discard; vec4 color = computeColorTransparent(gl_FrontFacing); uint previosHeadBufferValue = imageAtomicExchange(headBuffer, upos, newHeadBufferValue); uint currentDepth = packHalf2x16(vec2(psinput.worldPos.w, 0)); fragments[newHeadBufferValue].packedColor = packColor(vec4(color.rgb, color.a)); fragments[newHeadBufferValue].depthAndCoverage = currentDepth | (gl_SampleMaskIn[0] << 16); fragments[newHeadBufferValue].next = previosHeadBufferValue; }
          
          





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



     void main() { ivec2 upos = ivec2(gl_FragCoord.xy); uint index = imageLoad(headBuffer, upos).x; if (index == 0xffffffff) discard; vec3 color = vec3(0); float alpha = 1.0f; NodeData sortedFragments[MAX_FRAGMENTS]; for (int i = 0; i < MAX_FRAGMENTS; i++) { sortedFragments[i] = NodeData(0, 0.0f); } int counter; insertionSort(index, gl_SampleID, sortedFragments, counter); for (int i = 0; i < MAX_FRAGMENTS; i++) { if (i < counter) { vec4 c = unpackColor(sortedFragments[i].packedColor); alpha *= (1.0 - ca); color = mix(color, c.rgb, ca); } } outputColor = vec4(color, alpha); }
          
          





  7. рд╣рдо glBlitFramebuffer рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред


рдиреЗрддреНрд░рд╣реАрди, OpenGL 4.3 рдкрд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдо Direct3D 11 рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред



рд╕рдорд╕реНрдпрд╛рдУрдВ



рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ 3 рдкреНрд░рдореБрдЦ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:

  1. MAX_FRAGMENTS рд╕реВрдЪреА рдореЗрдВ рдкрд╛рд░рднрд╛рд╕реА рдЕрдВрд╢реЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╕реНрд╡рдпрдВ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрддрд░ рдФрд░ OIT рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЗ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, MSAA рдХреЗ рд╕рдорд╛рд╡реЗрд╢ рд╕реЗ рдкрд╛рд░рднрд╛рд╕реА рдЕрдВрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╣реБрднреБрдЬ рдореЙрдбрд▓ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕реВрдЪреА рдХрд╛рдлреА рдмрдбрд╝реА рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред





  2. рд╕реВрдЪреА рдЖрдЗрдЯрдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ред рдореИрдВрдиреЗ 190 рдПрдордмреА рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ 36 рдбрдореА рдХреЗ рдордВрдЪ рдкрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рдЖрдХрд╛рд░ рдХреЗ рдмрд╣реБрднреБрдЬ рдореЙрдбрд▓ рдкрд░ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИред рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдкреАрдЖрдИ рд╕рдВрд░рдЪрд┐рдд рдмрдлрд╝рд░реНрд╕ рдФрд░ рднрдВрдбрд╛рд░рдг рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдУрд╡рд░рдлреНрд▓реЛ рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ 8 рдЧреБрдирд╛ рдШрдЯрд╛ рджрд┐рдпрд╛ред





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




рдЙрддреНрдкрд╛рджрдХрддрд╛



рдирд┐рдореНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд╛рд▓реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдорд╛рдк рдХрд┐рдП рдЧрдП рдереЗ: рд╡рд┐рдВрдбреЛрдЬ 8.1 рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ AMD Phenom II X4 970 3.79GHz, 16Gb RAM, AMD Radeon HD 7700 Seriesред



рдФрд╕рдд рдлреНрд░реЗрдо рд╕рдордпред Direct3D 11 / 1920x1080 / 400k-800k рдкрд╛рд░рднрд╛рд╕реА рдЯреБрдХрдбрд╝реЗред

MSAA / MAX_FRAGMENTS 8 16 32
0 1.4835ms 1.67446ms 2.1275ms
2x 3.49895ms 6.66149ms 8.52533ms
4x 5.78841ms 12.3358ms 15.7224ms
8x 8.93051ms 18.4825ms 24.8538ms


рдФрд╕рдд рдлреНрд░реЗрдо рд╕рдордпред рдУрдкрдирдЬреАрдПрд▓ 4.3 / 1920x1080 / 400k-800k рдкрд╛рд░рднрд╛рд╕реА рдЯреБрдХрдбрд╝реЗред

MSAA / MAX_FRAGMENTS 8 16 32
0 3.25259ms 4.10712ms 16.8482ms
2x 5.06972ms 7.16611ms 33.6713ms
4x 7.22944ms 12.3625ms 62.5776ms
8x 11.2621ms 19.0938ms 115.026ms


рдФрд╕рдд рдлреНрд░реЗрдо рд╕рдордпред Direct3D 11 / 1920x1080 / ~ 5000k рдкрд╛рд░рднрд╛рд╕реА рдЯреБрдХрдбрд╝реЗред

MSAA / MAX_FRAGMENTS 8 16 32
0 4.94471ms 5.73306ms 7.95545ms
2x 9.91625ms 26.6783ms 40.4808ms
4x 16.653ms 50.7367ms 77.038ms
8x 28.3847ms 91.0873ms 143.419ms


рдФрд╕рдд рдлреНрд░реЗрдо рд╕рдордпред OpenGL 4.3 / 1920x1080 / ~ 5000 k рдкрд╛рд░рднрд╛рд╕реА рдЯреБрдХрдбрд╝реЗред

MSAA / MAX_FRAGMENTS 8 16 32
0 16.2532ms 22.0057ms 139.678ms
2x 22.1646ms 35.0568ms 275.324ms
4x 30.4289ms 56.7788ms 536.241ms
8x 46.6934ms 197.024ms 1009.09ms




рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ Direct3D 11 рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди OpenGL 4.3 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 5 рдорд┐рд▓рд┐рдпрди рдкрд╛рд░рднрд╛рд╕реА рдЕрдВрд╢реЛрдВ рдкрд░, MSGL рд╕рдХреНрд╖рдо рдФрд░ рдмрдбрд╝реЗ MAX_FRAGMENTS рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде OpenGL рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди "рдорд░ рдЬрд╛рддрд╛ рд╣реИ"ред рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдордп рдХреЗ рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ рдереЛрдХ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЫрдБрдЯрд╛рдИ рдФрд░ рд╕рдореНрдорд┐рд╢реНрд░рдг рд░рдВрдЧ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдкрд░ред рдпрд╣ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореЗрд░рд╛ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдирд╡реАрдирддрдо рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдФрд░ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рдХреЗрд╡рд▓ рдлреНрд░реЗрдо рд╕рдордп рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред



рдирд┐рд╖реНрдХрд░реНрд╖



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



рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛



рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рджреЗрд╢реА рд╣реИред рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рдореИрдВрдиреЗ рдХрдИ рд╢рдмреНрдж рджрд┐рдП рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдорд╛рдорд▓реЗ
рдкреНрд░рддрд┐рдкрд╛рджрди рдПрдХ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рдорд╛рдзреНрдпрдо (рд╕реНрдХреНрд░реАрди, рдмрдирд╛рд╡рдЯ) рдкрд░ рддреАрди-рдЖрдпрд╛рдореА рджреГрд╢реНрдп рдЦреАрдВрдЪрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред

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

рд░реЗрдЦрд╛рдВрдХрди рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕реЗ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдЫрд╡рд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред

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

MSAA (рдорд▓реНрдЯреА-рд╕реИрдВрдкрд▓рд┐рдВрдЧ рдПрдВрдЯреАрд▓рд┐рдпрд╛рд╕рд┐рд╕рд┐рдВрдЧ) OpenGL рдФрд░ Direct3D рджреЛрдиреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

MSAA рдмрдирд╛рд╡рдЯ - antialiasing рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯред рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╛рд░реВрдк, рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕реЗрдЯ shaders рдореЗрдВ рд╣реИред

рд░реЗрдВрдбрд░ рдЯрд╛рд░рдЧреЗрдЯ - рдЬрд╣рд╛рдБ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рд╢рдмреНрдж рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдПрдХ рджреГрд╢реНрдп рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

MRT (рдХрдИ рд░реЗрдВрдбрд░ рдЯрд╛рд░рдЧреЗрдЯ) рдПрдХ рдРрд╕реА рдЯреЗрдХреНрдиреЙрд▓реЙрдЬреА рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рде рдХрдИ рд░реЗрдВрдбрд░ рдЯрд╛рд░реНрдЧреЗрдЯ рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддреА рд╣реИред

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

рдмреИрдХ рдмрдлрд░ - рдорд▓реНрдЯреА рдмрдлрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЙрдбрд▓ рдореЗрдВ, рд╡рд╣ рдмрдлрд░, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕реЗ рдлреНрд░реЗрдо рдЦреАрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдлреНрд░рдВрдЯ рдмрдлрд░ (рдлреНрд░рдВрдЯ рдмрдлрд░) рдХреЗ рд╕рд╛рде рд╕реНрд╡реИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рднрд░рд╛рд╡ - рд▓рдЧрднрдЧ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдХреЛ рднрд░реЗрдВред




All Articles