рдПрдХ рдмрд╛рд░, рдпрд╣ рдПрдХ рдмрдбрд╝реА рдШрдЯрдирд╛ рдереА рдЬрдм рдПрдХ рдорд▓реНрдЯреАрдЯреЗрдХреНрд╕реНрдЪрд░ рдпреВрдирд┐рдЯ рдпрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ (рдЯреА рдПрдВрдб рдПрд▓) рдЬреАрдкреАрдпреВ рдкрд░ рджрд┐рдЦрд╛рдИ рджреАред рдлрд┐рдХреНрд╕реНрдб рдлрдВрдХреНрд╢рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рд╕реНрдерд╛рдкрдирд╛ рдЬрд╛рджреБрдИ рд╢рд░реНрдорд┐рдВрджрдЧреА рдереАред рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рдереЗ рдХрд┐ рдбреА 3 рдбреА 9 рдПрдкреАрдЖрдИ рд╣реИрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд┐рдкреНрд╕ рдХреА рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдХреНрд╖рдо рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЦреБрдж рдХреЛ рдЬрд╝реЗрди рд╕реАрдЦрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдордп рдмреАрддрддрд╛ рдЧрдпрд╛, рд╢реЗрдбреНрд╕ рджрд┐рдЦрд╛рдИ рджрд┐рдПред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рд▓рдВрдмрд╛рдИ рджреЛрдиреЛрдВ рдореЗрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕реАрдорд┐рддред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ, рдЕрдзрд┐рдХ рдирд┐рд░реНрджреЗрд╢, рдЕрдзрд┐рдХ рдЧрддрд┐ред рдХрдореНрдкреНрдпреВрдЯ (CUDA, OpenCL, DirectCompute) рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреИрдкреЗрд╕рд┐рдЯреА рдХрд╛ рджрд╛рдпрд░рд╛ рддреЗрдЬреА рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд▓рдЧрд╛ред
(рдЙрдореНрдореАрдж рд╣реИ) рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рдореИрдВ рд╕рдордЭрд╛рдиреЗ рдФрд░ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреЗрдо рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрдк рдХреИрд╕реЗ "рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ" рдЖрдзреБрдирд┐рдХ GPU рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рднрд╛рдЧ рдПрдиреАрдореЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧрд╛ред рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрднрд╡, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреЗрдо рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
Oooo, рдлрд┐рд░ рд╕реЗ рдПрдиреАрдореЗрд╢рдиред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реМ рдмрд╛рд░ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдФрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдХреНрдпрд╛ рд╣реИ? рд╣рдо рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдмрдлрд░ / рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдХрд┐рдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реЗ
GPU рд░рддреНрди 3 (рдЕрдзреНрдпрд╛рдп 2. рдПрдирд┐рдореЗрдЯреЗрдб рдХреНрд░рд╛рдЙрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ) рдореЗрдВ рд╡рд╛рдкрд╕ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ
рдПрдХрдЬреБрдЯ рдЯреЗрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдХреНрдпрд╛ рдпрд╣ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ?
рдПрдХрддрд╛ рд╕реЗ рдЯреЗрдХреНрдиреЛрдбреЗрдордХрд╛
рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рдЪрд╛рд░, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ? рд╣рдм рдкрд░
рдПрдХ рд▓реЗрдЦ рд╣реИ
рдЬреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрдВрдХрд╛рд▓ рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрдХрдиреАрдХреА-рдбреЗрдореЛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рдо рд╕рдм рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╣рдо рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рд╣реИред
рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд▓рдбрд╝рд╛рдИ рдореЗрдВ, рджреЛ рд╕реЗрдирд╛рдПрдБ рд▓рдбрд╝рддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдХрд╛рдИ рд╣реЛрддреА рд╣реИред рдмрд╛рдИрдВ рдУрд░ рдХрдВрдХрд╛рд▓, рджрд╛рдИрдВ рдУрд░ рд╢реВрд░рд╡реАрд░ред рд╡рд┐рд╡рд┐рдзрддрд╛ рдЗрддрдиреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдореЗрдВ 3 LODs (~ 300, ~ 1000, ~ 4000 рдХреЛрдиреЗ рдкреНрд░рддреНрдпреЗрдХ) рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ 2 рд╣рдбреНрдбрд┐рдпрд╛рдВ рд╢реАрд░реНрд╖ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИрдВред рдПрдиреАрдореЗрд╢рди рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 7 рдПрдирд┐рдореЗрд╢рди рд╣реЛрддреЗ рд╣реИрдВ (рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ 2 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдВ)ред рдПрдирд┐рдореЗрд╢рди рдореЗрдВ рдорд┐рд╢реНрд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдиреМрдХрд░реА рдХреЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╕рд░рд▓ рдХреЛрдб рд╕реЗ рд╡рд┐рд╡реЗрдХрдкреВрд░реНрд╡рдХ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ, рдЬреЛ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдЬреЛрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдИ рд░рд╛рдЬреНрдп рдорд╢реАрди рдирд╣реАрдВ рд╣реИред рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рд▓реА рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдкреВрд░реА рднреАрдбрд╝ рдХреЛ рджреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдбреНрд░реЙ рдХреЙрд▓ рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдВрдХрд╛рд▓ рдПрдиреАрдореЗрд╢рди, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдерд╛, 2009 рдореЗрдВ рд╡рд╛рдкрд╕ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
Innovatively? рд╣рдореНрдо ... рдПрдХ рд╕рдлрд▓рддрд╛? рдЙрдо ... рдЖрдзреБрдирд┐рдХ рдЦреЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ? рдЦреИрд░, рд╢рд╛рдпрдж, рдПрдлрдкреАрдПрд╕ рдХрд╛ рдЕрдиреБрдкрд╛рдд рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдШрдордВрдб рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди (рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреНрд░реА-рдореИрдЯреНрд░рд┐рдХреНрд╕):
- рдлреНрд░реЗрдо рджрд░ рдирд┐рд░реНрднрд░ред рдПрдиреАрдореЗрд╢рди рдХреЗ рдХрдИ рдлреНрд░реЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рдмрд╛рд░ рдЪрд╛рд╣рддреЗ рдереЗ - рджреЛ рдмрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рд╕реНрдореГрддрд┐ рджреЗред
- рд╕рдореНрдорд┐рд╢реНрд░рдг рдХрд╛ рдЕрднрд╛рд╡ред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рддреНрд╡рдЪрд╛ рдХреА рдЫрд╛рдпрд╛ рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓ рдЧрдбрд╝рдмрдбрд╝ рд╕рдореНрдорд┐рд╢реНрд░рдг рддрд░реНрдХ рд╕реЗ рдмрдиреЗрдЧреАред
- рдПрдХрддрд╛ рдПрдирд┐рдореЗрдЯрд░ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреА рдХрдореАред рдЪрд░рд┐рддреНрд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рдирд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд┐рдВрджреБ 2 рдХреЗ рдХрд╛рд░рдг, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдиреЗрд╕реНрдЯреЗрдб рдмреНрд▓реЗрдВрдбрдЯреНрд░реА рдХреЛ рдХреИрд╕реЗ рдорд┐рд╢реНрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдП)ред
GPAs
GPU рд╕рдВрдЪрд╛рд▓рд┐рдд рдПрдиреАрдореЗрд╢рди рд╕рд┐рд╕реНрдЯрдоред рдмрд╕ рдирд╛рдо рдЖ рдЧрдпрд╛ред
рдирдИ рдПрдиреАрдореЗрд╢рди рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдереАрдВ:
- рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп)ред рдЖрдкрдХреЛ рд╣рдЬрд╛рд░реЛрдВ рд╡рд┐рднрд┐рдиреНрди рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рджрд╕рд┐рдпреЛрдВ рдХреЛ рдЪреЗрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рдПрдХрддрд╛ рдПрдиреАрдореЗрд╢рди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХ рдкреВрд░реНрдг (рдпрд╛ рд▓рдЧрднрдЧ) рдПрдирд╛рд▓реЙрдЧ рд╣реЛрдирд╛ред рдпрджрд┐ рдПрдиреАрдореЗрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдирдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реАрдкреАрдпреВ рдФрд░ рдЬреАрдкреАрдпреВ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдПрдирд┐рдореЗрд╢рди "рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА" рд╣реИрдВ, рддреЛ рдХреНрд▓рд╛рд╕рд┐рдХ рдПрдирд┐рдореЗрдЯрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдХреЗ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ: рдпреЗ рдирдИ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЧреНрд▓рд┐рдЪ рд╣реИрдВ, рдпрд╛ рд░рд╛рдЬреНрдп рдорд╢реАрди / рдПрдиреАрдореЗрд╢рди рд╣реА рд╣реИрдВред
- рд╕рднреА рдПрдирд┐рдореЗрд╢рди рдПрдХрддрд╛ рдПрдирд┐рдореЗрдЯрд░ рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реИрдВред рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реБрдЖ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░-рдЯреВ-рдпреВрдЬрд╝ рдЯреВрд▓ред рд╣рдо рдХрд╣реАрдВ рдФрд░ рдмрд╛рдЗрдХ рдмрдирд╛рдПрдВрдЧреЗред
рдЖрдЗрдП рдПрдирд┐рдореЗрд╢рди рдХреА рддреИрдпрд╛рд░реА рдФрд░ рдмреЗрдХрд┐рдВрдЧ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╣рдо рдореИрдЯреНрд░рд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЖрдзреБрдирд┐рдХ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рд▓реВрдк рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдлреНрд▓реЛрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рджреЗрд╢реА рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реАрдкреАрдпреВ рдХреА рддрд░рд╣ рдХреАрдлреНрд░реЗрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЖрдЗрдП рдПрдиреАрдореЗрд╢рди рдПрдиреАрдореЗрд╢рди рдореЗрдВ рдПрдиреАрдореЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:

рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреАрдлреНрд░реЗрдо рдХреЛ рд╕реНрдерд┐рддрд┐, рдкреИрдорд╛рдиреЗ рдФрд░ рд░реЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреБрдЫ рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХреБрдЫ рдФрд░ рдЙрди рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдирд┐рдореЗрдЯреЗрдб рдирд╣реАрдВ рд╣реИрдВ, рдмрд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдФрд░ рдЕрдВрддрд┐рдо рдХреАрдлреНрд░реЗрдо рд╕реЗрдЯ рд╣реИрдВред
рд╕реНрдерд┐рддрд┐ - рд╡реЗрдХреНрдЯрд░ 3, рдЪрддреБрд░реНрдзрд╛рддреБрдХ - рд╡реЗрдХреНрдЯрд░ 4, рд╕реНрдХреЗрд▓ - рд╡реЗрдХреНрдЯрд░ 3ред рдХреАрдлрд╝реНрд░реЗрдо рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдЪреАрдЬрд╝ рд╕рд╛рдорд╛рдиреНрдп (рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рд▓рд┐рдП) рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 4 рдлреНрд▓реЛрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рд╡рдХреНрд░рддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ keyframes рдХреЗ рдмреАрдЪ рд╕рд╣реА рдкреНрд░рдХреНрд╖реЗрдк рдХреЗ рд▓рд┐рдП InTangent рдФрд░ OutTangent рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрд░реЗ рд╣рд╛рдБ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдордп рдирд╣реАрдВ рднреВрд▓рддрд╛:
struct KeyFrame { float4 v; float4 inTan, outTan; float time; };
рд╕рднреА рдХреАрдлрд╝реНрд░реЗрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдирд┐рдореЗрд╢рди рдпреВрдЯрд┐рд▓рд┐рдЯреА.рдЧреЗрдЯрдИрдбрд┐рдЯрд░рд╡реБрд░ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╕рд╛рде рд╣реА, рд╣рдореЗрдВ рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рднреА рдпрд╛рдж рд░рдЦрдиреЗ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ GPU рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рдХрдВрдХрд╛рд▓ рдХреА рд╣рдбреНрдбрд┐рдпреЛрдВ рдореЗрдВ рдПрдиреАрдореЗрд╢рди рдХреА рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ (рдФрд░ рд╡реЗ рд╕рдВрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдХреАрдлрд╝реНрд░реЗрдо рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд░реИрдЦрд┐рдХ рдмрдлрд╝рд░реНрд╕ рдХреЛ рднрд░рдирд╛, рд╣рдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рдЙрди рдПрдиреАрдореЗрд╢рди рдХреЛ рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдПрдиреАрдореЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
рдЕрдм рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред GPU рдХрдВрдХрд╛рд▓ рдПрдиреАрдореЗрд╢рдиред
рд╣рдо рдПрдХ рдмрдбрд╝реА ("рдПрдирд┐рдореЗрдЯреЗрдб рдХрдВрдХрд╛рд▓ рдХреА рд╕рдВрдЦреНрдпрд╛" рдПрдХреНрд╕ "рдХрдВрдХрд╛рд▓ рдореЗрдВ рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛" рдПрдХреНрд╕ "рдПрдиреАрдореЗрд╢рди рдорд┐рд╢реНрд░рдгреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрднрд╡рдЬрдиреНрдп рдЧреБрдгрд╛рдВрдХ") рдмрдлрд░ред рдЗрд╕рдореЗрдВ рд╣рдо рдПрдиреАрдореЗрд╢рди рдХреЗ рдХреНрд╖рдг рдореЗрдВ рд╣рдбреНрдбреА рдХреА рд╕реНрдерд┐рддрд┐, рд░реЛрдЯреЗрд╢рди рдФрд░ рдкреИрдорд╛рдиреЗ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдФрд░ рдЗрд╕ рдлреНрд░реЗрдо рдореЗрдВ рд╕рднреА рдирд┐рдпреЛрдЬрд┐рдд рдПрдирд┐рдореЗрдЯреЗрдб рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЧрдгрдирд╛ рд╢реЗрдбрд░ рдЪрд▓рд╛рдПрдВред рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧрд╛ рдЗрд╕рдХреА рд╣рдбреНрдбреА рдХреЛ рдПрдирд┐рдореЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдХреАрдлрд╝реНрд░реЗрдо, рдЪрд╛рд╣реЗ рд╡рд╣ рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХрд╛ рд╣реЛ (рдЕрдиреБрд╡рд╛рдж, рд░реЛрдЯреЗрд╢рди, рд╕реНрдХреЗрд▓), рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ (рд░реИрдЦрд┐рдХ рдЦреЛрдЬ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬ, рдореБрдЭреЗ рдорд╛рдлрд╝ рдХрд░реЗрдВ рдирде):
void InterpolateKeyFrame(inout float4 rv, int startIdx, int endIdx, float t) { for (int i = startIdx; i < endIdx; ++i) { KeyFrame k0 = keyFrames[i + 0]; KeyFrame k1 = keyFrames[i + 1]; float lerpFactor = (t - k0.time) / (k1.time - k0.time); if (lerpFactor < 0 || lerpFactor > 1) continue; rv = CurveInterpoate(k0, k1, lerpFactor); break; } }
рд╡рдХреНрд░ рдПрдХ рдШрди рдмреЗрдЬрд╝рд┐рдпрд░ рд╡рдХреНрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХреНрд╖реЗрдк рд╕рдорд╛рд░реЛрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
float4 CurveInterpoate(KeyFrame v0, KeyFrame v1, float t) { float dt = v1.time - v0.time; float4 m0 = v0.outTan * dt; float4 m1 = v1.inTan * dt; float t2 = t * t; float t3 = t2 * t; float a = 2 * t3 - 3 * t2 + 1; float b = t3 - 2 * t2 + t; float c = t3 - t2; float d = -2 * t3 + 3 * t2; float4 rv = a * v0.v + b * m0 + c * m1 + d * v1.v; return rv; }
рд╣рдбреНрдбреА рдХреЗ рд╕реНрдерд╛рдиреАрдп рдЖрд╕рди (TRS) рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ рдереАред рдЕрдЧрд▓рд╛, рдПрдХ рдЕрд▓рдЧ рдЧрдгрдирд╛ shader рдХреЗ рд╕рд╛рде, рд╣рдо рдЗрд╕ рд╣рдбреНрдбреА рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдПрдирд┐рдореЗрд╢рди рдорд┐рд╢реНрд░рдг рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдВрддрд┐рдо рдорд┐рд╢реНрд░рдг рдореЗрдВ рдПрдиреАрдореЗрд╢рди рд╕реВрдЪрдХ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдПрдиреАрдореЗрд╢рди рдХреЗ рд╡рдЬрди рдХреЗ рд╕рд╛рде рдПрдХ рдмрдлрд░ рд╣реИред рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣рдореЗрдВ рд░рд╛рдЬреНрдп рдорд╢реАрди рд╕реЗ рдорд┐рд▓рддреА рд╣реИред рдмреНрд▓реЗрдВрдбрдЯреНрд░реА рдХреЗ рдЕрдВрджрд░ рдмреНрд▓реЗрдВрдбрдЯреНрд░реА рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣рд▓ рдХреА рдЧрдИ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреЗрдбрд╝ рд╣реИ:

рдмреНрд▓реЗрдВрдбрдЯреНрд░реА рд╡реЙрдХ рдХрд╛ рд╡рдЬрди 0.35, рд░рди - 0.65 рд╣реЛрдЧрд╛ред рддрджрдиреБрд╕рд╛рд░, рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреА рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ 4 рдПрдирд┐рдореЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП: рд╡реЙрдХ 1, рд╡реЙрдХ 2, рд░рди 1 рдФрд░ рд░рди 2ред рдЙрдирдХреЗ рд╡рдЬрди рдореЗрдВ рдХреНрд░рдорд╢рдГ рдорд╛рди (0.35 * 0.92, 0.35 * 0.08, 0.65 * 0.92, 0.65 * 0.08) = (0.322, 0.028, 0.598, 0.052) рд╣реЛрдЧрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рдЬрди рдХрд╛ рдпреЛрдЧ рд╣рдореЗрд╢рд╛ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЬрд╛рджреВ рдХреАрдбрд╝реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд╕рдореНрдорд┐рд╢реНрд░рдг рд╕рдорд╛рд░реЛрд╣ рдХреЗ "рджрд┐рд▓":
float bw = animDef.blendWeight; BoneXForm boneToBlend = animatedBones[srcBoneIndex]; float4 q = boneToBlend.quat; float3 t = boneToBlend.translate; float3 s = boneToBlend.scale; if (dot(resultBone.quat, q) < 0) q = -q; resultBone.translate += t * bw; resultBone.quat += q * bw; resultBone.scale += s * bw;
рдЕрдм рдЖрдк рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрдВрдж рдХрд░реЛред рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рдЧрдПред
рдХрдВрдХрд╛рд▓ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдбреНрдбреА рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд╛рд▓реЗ рд╕реЗрд▓ рдореЗрдВ рдЗрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реЛрддрд╛ рд╣реИред рдореВрд▓ рдореЗрдВ, -1 рд▓рд┐рдЦреЗрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:

float4x4 animMat = IdentityMatrix(); float4x4 mat = initialPoses[boneId]; while (boneId >= 0) { BoneXForm b = blendedBones[boneId]; float4x4 xform = MakeTransformMatrix(b.translate, b.quat, b.scale); animMat = mul(animMat, xform); boneId = bonesHierarchyIndices[boneId]; } mat = mul(mat, animMat); resultSkeletons[id] = mat;
рдпрд╣рд╛рдБ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдирд┐рдореЗрд╢рди рдФрд░ рд╕рдореНрдорд┐рд╢реНрд░рдг рдХреЗ рд╕рднреА рдореБрдЦреНрдп рдмрд┐рдВрджреБред
GPSM
GPU рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕реНрдЯреЗрдЯ рдорд╢реАрди (рдЖрдкрдиреЗ рд╕рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛)ред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдПрдиреАрдореЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХрддрд╛ рдПрдиреАрдореЗрд╢рди рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рддрдм рд╕рднреА рдкреНрд░рдпрд╛рд╕ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдкреНрд░рддрд┐ рдлреНрд░реЗрдо рд╣рдЬрд╝рд╛рд░реЛрдВ рдПрдирд┐рдореЗрд╢рди рдореЗрдВ рджрд╕рд┐рдпреЛрдВ (рдпрджрд┐ рд╕реИрдХрдбрд╝реЛрдВ рдирд╣реАрдВ) рдХреА рдЧрдгрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде, рдпреВрдирд┐рдЯреАрдиреАрдореЗрдЯрд░ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рд╣рдЬрд╛рд░реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓реЗрдЧрд╛ред рд╣рдореНрдо ...
рдПрдХрддрд╛ рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рд░рд╛рдЬреНрдпреЛрдВ рдФрд░ рд╕рдВрдХреНрд░рдордгреЛрдВ рдХреА рдПрдХ рдмрдВрдж рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд░рд▓ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЧреБрдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рдорд╛рди рд╕реЗрдЯ рдХреЗ рд▓рд┐рдПред рдПрдХ рдорд┐рдирдЯ рд░реБрдХрд┐рдПред рдпрд╣ GPU рдФрд░ рдЧрдгрдирд╛ рд╢реЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд░реНрд╢ рдХрд╛рд░реНрдп рд╣реИ!
рдмреЗрдХрд┐рдВрдЧ рдЪрд░рдгрд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕рднреА рд░рд╛рдЬреНрдп рдорд╢реАрди рдбреЗрдЯрд╛ рдХреЛ GPU рдХреЗ рдЕрдиреБрдХреВрд▓ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣: рд░рд╛рдЬреНрдпреЛрдВ (рд░рд╛рдЬреНрдпреЛрдВ), рд╕рдВрдХреНрд░рдордг (рд╕рдВрдХреНрд░рдордг) рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ (рдкреИрд░рд╛рдореАрдЯрд░)ред
рдпрд╣ рд╕рднреА рдбреЗрдЯрд╛ рд░реИрдЦрд┐рдХ рдмрдлрд╝рд░реНрд╕ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдЧрдгрдирд╛ рдзрд╛рдЧрд╛ рдЗрд╕рдХреА рд░рд╛рдЬреНрдп рдорд╢реАрди рдорд╛рдирддрд╛ рд╣реИред
рдПрдирд┐рдореЗрдЯрд░рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЖрдВрддрд░рд┐рдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреА рдореБрдЦреНрдп рд╕рдВрд░рдЪрдирд╛рдПрдВ:
struct State { float speed; int firstTransition; int numTransitions; int animDefId; }; struct Transition { float exitTime; float duration; int sourceStateId; int targetStateId; int firstCondition; int endCondition; uint properties; }; struct StateData { int id; float timeInState; float animationLoop; }; struct TransitionData { int id; float timeInTransition; }; struct CurrentState { StateData srcState, dstState; TransitionData transition; }; struct AnimationDef { uint animId; int nextAnimInTree; int parameterIdx; float lengthInSec; uint numBones; uint loop; }; struct ParameterDef { float2 line0ab, line1ab; int runtimeParamId; int nextParameterId; }; struct Condition { int checkMode; int runtimeParamIndex; float referenceValue; };
- рд░рд╛рдЬреНрдп рдореЗрдВ рд╡рд╣ рдЧрддрд┐ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕ рдкрд░ рд░рд╛рдЬреНрдп рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рджреВрд╕рд░реЛрдВ рдХреЛ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛред
- рд╕рдВрдХреНрд░рдордг рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ "рд╕реЗ" рдФрд░ "рд╕реЗ" рд╣реЛрддреЗ рд╣реИрдВред рд╕рдВрдХреНрд░рдордг рд╕рдордп, рдирд┐рдХрд╛рд╕ рд╕рдордп рдФрд░ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдбрд╝реАред
- рдХрд░рдВрдЯрд╕реНрдЯреИрдЯ рдПрдХ рд░рдирдЯрд╛рдЗрдо рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд╣реИ рдЬреЛ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╣реИред
- рдПрдирд┐рдореЗрд╢рдирдбрд┐рдл рдореЗрдВ рдмреНрд▓реЗрдВрдбрдЯреНрд░реА рджреНрд╡рд╛рд░рд╛ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдиреАрдореЗрд╢рди рдХрд╛ рд╡рд░реНрдгрди рд╣реИред
- ParameterDef рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рд╣реИ рдЬреЛ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред Line0ab рдФрд░ Line1ab рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдПрдиреАрдореЗрд╢рди рдХреЗ рд╡рдЬрди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рдореАрдХрд░рдг рдХреЗ рдЧреБрдгрд╛рдВрдХ рд╣реИрдВред рдпрд╣рд╛рдБ рд╕реЗ:

- рд╢рд░реНрдд - рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдореВрд▓реНрдп рдФрд░ рд╕рдВрджрд░реНрдн рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХрд╛ рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ред
рд░рдирдЯрд╛рдЗрдо рдЪрд░рдгрдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдореБрдЦреНрдп рдЪрдХреНрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдпреВрдирд┐рдЯреА рдПрдирд┐рдореЗрдЯрд░ рдореЗрдВ 4 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ: рдлреНрд▓реЛрдЯ, рдЗрдВрдЯ, рдмреВрд▓ рдФрд░ рдЯреНрд░рд┐рдЧрд░ (рдЬреЛ рдмреВрд▓ рд╣реИ)ред рд╣рдо рдЙрди рд╕рднреА рдХреЛ рдлреНрд▓реЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред рд╢рд░реНрддреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп,
рдЫрд╣ рдкреНрд░рдХрд╛рд░ рдХреА рддреБрд▓рдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЪреБрдирдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЕрдЧрд░ == рдмрд░рд╛рдмрд░ рд╣реИред IfNot == NotEqualред рддреЛ рд╣рдо рдХреЗрд╡рд▓ 4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдСрдкрд░реЗрдЯрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╣рд╛рд▓рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЪреЗрдХрдореЛрдб рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
for (int i = t.firstCondition; i < t.endCondition; ++i) { Condition c = allConditions[i]; float paramValue = runtimeParameters[c.runtimeParamIndex]; switch (c.checkMode) { case 3: if (paramValue < c.referenceValue) return false; case 4: if (paramValue > c.referenceValue) return false; case 6: if (abs(paramValue - c.referenceValue) > 0.001f) return false; case 7: if (abs(paramValue - c.referenceValue) < 0.001f) return false; } } return true;
рд╕рдВрдХреНрд░рдордг рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рд╢рд░реНрддреЗрдВ рд╕рд╣реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдЬреАрдм рдХреЗрд╕ рд▓реЗрдмрд▓ рд╕рд┐рд░реНрдл (int) рдПрдирд┐рдореЗрдЯрд░рдХрдВрдбрд┐рд╢рдирдореЛрдб рд╣реИрдВред рд░реБрдХрд╛рд╡рдЯ рдХрд╛ рддрд░реНрдХ рд░реБрдХрд╛рд╡рдЯ рдФрд░ рдкреАрдЫреЗ рдХреЗ рд╕рдВрдХреНрд░рдордг рдХреЛ рд▓реБрдврд╝рдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рддрд░реНрдХ рд╣реИред
рдЬрдм рд╣рдордиреЗ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рдбреЗрд▓реНрдЯрд╛ рдЯреА рдлреНрд░реЗрдо рдкрд░ рд╕рдордп рдЯрд┐рдХрдЯреЛрдВ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛, рддреЛ рдпрд╣ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдЗрд╕ рдлреНрд░реЗрдо рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡рдЬрди рдореЗрдВ рдХреНрдпрд╛ рдПрдирд┐рдореЗрд╢рди рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпреВрдирд┐рдЯ рдореЙрдбрд▓ рдлреНрд░реЗрдо рдореЗрдВ рдирд╣реАрдВ рд╣реИ (Frustum culled) рддреЛ рдпрд╣ рдЪрд░рдг рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬреЛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХреЗ рдПрдирд┐рдореЗрд╢рди рдкрд░ рд╣рдореЗрдВ рдХреНрдпреЛрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рд╣рдо рдорд┐рд╢реНрд░рдг рдХреЗ рдкреЗрдбрд╝ рдХреЗ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐, рдорд┐рд╢реНрд░рдг рдХреЗ рдкреЗрдбрд╝ рдХреЗ рдЧрдВрддрд╡реНрдп рд░рд╛рдЬреНрдп рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрдирд╕реЗ рд╕рднреА рдПрдирд┐рдореЗрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрд░реЛрдд рд╕реЗ рдЧрдВрддрд╡реНрдп рддрдХ рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдордп (рд╕рдВрдХреНрд░рдордг рдореЗрдВ рдмрд┐рддрд╛рдП рд╕рдордп) рд╕реЗ рд╡рдЬрди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рддреИрдпрд╛рд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде, GPAS рдЦреЗрд▓ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ рдЦреЗрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдПрдирд┐рдореЗрдЯреЗрдб рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдирд┐рдореЗрд╢рди рдЧрд┐рдирддрд╛ рд╣реИред
рдпреВрдирд┐рдЯ рдХрдВрдЯреНрд░реЛрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдпреВрдирд┐рдЯ рдХрдВрдЯреНрд░реЛрд▓ рд▓реЙрдЬрд┐рдХ рд╕реЗ рдЖрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░рдирд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЪрд╛рд░рд╕реНрдкреАрдб рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдЖрд╕рд╛рдиреА рд╕реЗ "рдЪрд▓" рд╕реЗ "рд░рдирд┐рдВрдЧ" рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдПрдирд┐рдореЗрд╢рди рдХреЛ рдорд┐рд╢реНрд░рд┐рдд рдХрд░рддреА рд╣реИред
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпреВрдирд┐рдЯреА рдПрдирд┐рдореЗрдЯрд░ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рд╕рд╛рджреГрд╢реНрдп рдиреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдХрд╛рдо рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрдд, рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрд▓рдЯрд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрднреА рддрдХ рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИ (рдпрд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЗрдВрдбрдЯреНрд░реА рдореЗрдВ BlendType рдХреЗрд╡рд▓ 1D рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЕрдм рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рднреА рдПрдирд┐рдореЗрд╢рди рдИрд╡реЗрдВрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ GPU рдХреЗ рд╕рд╛рде рд░реАрдбрдмреИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ "рд╕рд╣реА" рд░реАрдбрдмреИрдХ рдХреЗ рдкреАрдЫреЗ рдХрдИ рдлреНрд░реЗрдо рд╣реЛрдВрдЧреЗ, рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИред
рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛
рдЗрдХрд╛рдИ рдкреНрд░рддрд┐рдкрд╛рджрди рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред SV_InstanceID рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╢реАрд░реНрд╖ рдЫрд╛рдпрд╛ рдореЗрдВ, рд╣рдореЗрдВ рд╕рднреА рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ рд╢реАрд░реНрд╖ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмрд┐рд▓реНрдХреБрд▓ рдЕрд╕рд╛рдорд╛рдиреНрдп рдХреБрдЫ рднреА рдирд╣реАрдВ:
float4 ApplySkin(float3 v, uint vertexID, uint instanceID) { BoneInfoPacked bip = boneInfos[vertexID]; BoneInfo bi = UnpackBoneInfo(bip); SkeletonInstance skelInst = skeletonInstances[instanceID]; int bonesOffset = skelInst.boneOffset; float4x4 animMat = 0; for (int i = 0; i < 4; ++i) { float bw = bi.boneWeights[i]; if (bw > 0) { uint boneId = bi.boneIDs[i]; float4x4 boneMat = boneMatrices[boneId + bonesOffset]; animMat += boneMat * bw; } } float4 rv = float4(v, 1); rv = mul(rv, animMat); return rv; }
рдкрд░рд┐рдгрд╛рдо
рдХреНрдпрд╛ рдпрд╣ рдЦреЗрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореИрдВ рдХреБрдЫ рдирдВрдмрд░ (рдЬреАрдЯреАрдПрдХреНрд╕ 970) рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реВрдВред
рдпрд╣рд╛рдВ 50,000 рд░рд╛рдЬреНрдп рдорд╢реАрдиреЗрдВ рд╣реИрдВ:

рдпрд╣рд╛рдВ 280,000 рдПрдирд┐рдореЗрдЯреЗрдб рд╣рдбреНрдбрд┐рдпрд╛рдВ рд╣реИрдВ:

рдпрд╣ рд╕рдм рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд░реНрдж рд╣реИред рдмрдлрд╝рд░реНрд╕ рдФрд░ рдСрдлрд╝рд╕реЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕рдореВрд╣ред рдШрдЯрдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ред рдХрдИ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЛ рдкреАрдЯрддреЗ рд╣реИрдВ рддреЛ рд╣рд╛рде рдЧрд┐рд░ рдЬрд╛рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЖрдк рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рдЕрдЪреНрдЫрд╛" рд╣реИ рдЬрдм рд╕рдм рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ "рдореБрдХрд╛рдмрд▓рд╛" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрд╛ рдПрдиреАрдореЗрд╢рди рдЧрдбрд╝рдмрдбрд╝ рдирд╣реАрдВ рд╣реИред рдПрдХрддрд╛ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмреАрдЪ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рднреА рддреБрд░рдВрдд рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдИрд░реНрд╖реНрдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рджрд░рдЕрд╕рд▓, GPU рдХреЗ рддрд╣рдд рдкреВрд░реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдРрд╕реА рдЪреАрдЬ рд╣реИред
рдкреАрдПрд╕ рдореИрдВ рдпреВрдирд╛рдЗрдЯ рдЯреЗрдХрдбреЗрдореЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмрдЧреАрдЪреЗ рдореЗрдВ рдПрдХ рдкрддреНрдерд░ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рдордВрдЪ рдкрд░ рдЦрдВрдбрд╣рд░ рдФрд░ рдкреБрд▓реЛрдВ рдХреЗ рд╕рдорд╛рди рдореЙрдбрд▓ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдмрд▓реНрдХрд┐, рдЙрдиреНрд╣реЛрдВрдиреЗ "рд╕реНрдерд┐рд░" рдкрд░ рдЯрд┐рдХ рдХрд░рдХреЗ рдХреЛрд╢рд┐рд╢ рдХреАред рдХреЗрд╡рд▓ рдЕрдм, 16-рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдЖрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬреНрдпрд╛рдорд┐рддрд┐ (рддреАрди рдмрд╛рд░ рд╣рд╛рд╣рд╛, 2017) рд░рдЯрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рднреА рдПрдХ рд╕рд╛рде рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбрд▓ рдЕрддреНрдпрдзрд┐рдХ рдмрд╣реБрднреБрдЬ рд╣реИрдВред рдореИрдВрдиреЗ рд╕рднреА рд╢реЗрдбреНрд╕ рдХреЗ рд▓рд┐рдП "рдЗрдиреЗрдмрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕рд┐рдВрдЧ", рдФрд░ "рд╕реНрдЯреЗрдЯрд┐рдХ" рдХреЛ рдЕрдирдЪреЗрдХ рдХрд┐рдпрд╛ред рдХреЛрдИ рдареЛрд╕ рдмрдврд╝рд╛рд╡рд╛ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди, рдпрд╣ рд▓рд╛рдирдд рд╣реИ, рдЖрдк рдПрдХ рддрдХрдиреАрдХреА-рдбреЗрдореЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рд░ рдПрдлрдкреАрдПрд╕ рдХреЗ рд▓рд┐рдП рд▓рдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдпрд╣ рдерд╛ *** Summary *** Draw calls: 2553 Dispatch calls: 0 API calls: 8378 Index/vertex bind calls: 2992 Constant bind calls: 648 Sampler bind calls: 395 Resource bind calls: 805 Shader set calls: 682 Blend set calls: 230 Depth/stencil set calls: 92 Rasterization set calls: 238 Resource update calls: 1017 Output set calls: 74 API:Draw/Dispatch call ratio: 3.28163 298 Textures - 1041.01 MB (1039.95 MB over 32x32), 42 RTs - 306.94 MB. Avg. tex dimension: 1811.77x1810.21 (2016.63x2038.98 over 32x32) 216 Buffers - 180.11 MB total 17.54 MB IBs 159.81 MB VBs. 1528.06 MB - Grand total GPU buffer + texture load. *** Draw Statistics *** Total calls: 2553, instanced: 2, indirect: 2 Instance counts: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: >=15: ******************************************************************************************************************************** (2)
рдмрди рдЧрдпрд╛ рд╣реИ *** Summary *** Draw calls: 1474 Dispatch calls: 0 API calls: 11106 Index/vertex bind calls: 3647 Constant bind calls: 1039 Sampler bind calls: 348 Resource bind calls: 718 Shader set calls: 686 Blend set calls: 230 Depth/stencil set calls: 110 Rasterization set calls: 258 Resource update calls: 1904 Output set calls: 74 API:Draw/Dispatch call ratio: 7.5346 298 Textures - 1041.01 MB (1039.95 MB over 32x32), 42 RTs - 306.94 MB. Avg. tex dimension: 1811.77x1810.21 (2016.63x2038.98 over 32x32) 427 Buffers - 93.30 MB total 9.81 MB IBs 80.51 MB VBs. 1441.25 MB - Grand total GPU buffer + texture load. *** Draw Statistics *** Total calls: 1474, instanced: 391, indirect: 2 Instance counts: 1: 2: ******************************************************************************************************************************** (104) 3: ************************************************* (40) 4: ********************** (18) 5: ****************************** (25) 6: ********************************************************************************************* (76) 7: *********************************** (29) 8: ************************************************** (41) 9: ********* (8) 10: ************** (12) 11: 12: ****** (5) 13: ******* (6) 14: ** (2) >=15: ****************************** (25)
рдкреАрдкреАрдПрд╕ рд╣рд░ рд╕рдордп, рдЦреЗрд▓ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реАрдкреАрдпреВ рдмрд╛рдзреНрдп рдереЗ, рдЕрд░реНрдерд╛рддреНред рд╕реАрдкреАрдпреВ рдиреЗ GPU рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд░рдЦрд╛ред рдмрд╣реБрдд рддрд░реНрдХ рдФрд░ рднреМрддрд┐рдХреАред CPU рд╕реЗ рдЧреЗрдо рд▓реЙрдЬрд┐рдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ GPU рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкрд╣рд▓реЗ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рдЬреАрдкреАрдпреВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рдзреНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рд▓реЗрдЦ рдХрд╛ рд╢реАрд░реНрд╖рдХред