์ด๊ฒ์ ์ด๋จ์ผ ์ ์์ง๋ง ์ฌ๊ธฐ์ ์์ด๋์ด๋ฅผ ๋์ง๊ณ ์ฌ๋๋ค์ด ํผ๋น๋ฆฐ๋ด ๋๋ ์ด์ธ์ ์ธ์น๊ฒ ํ ๊ฒ์ ๋๋ค... ์ฐ๋ฆฌ๋ ๊ฐ์ฒด ๊ธฐ๋ฐ ๋์ ๋ฐฐ์ด ๊ธฐ๋ฐ ํฌ์ธํธ์ธ ํ๋ ฌ๋ก ํ์คํํ ๊ฐ๋ฅ์ฑ์ ์๊ฐํด ๋ณธ ์ ์ด ์์ต๋๊น? WebGL์ ๋๋ถ๋ถ์ vertex/texture/etc api์์ ๋ฐฐ์ด์ ์์ํฉ๋๋ค. ์ผ๋ฐ ๊ตฌํ ๋๋ ๊ธฐ๋ณธ ์ด๋ ์ด(์: https://github.com/toji/gl-matrix)๋ฅผ ํ์คํํ๋ ๊ธฐ์กด ์์ฝ์์คํ ๋ชจ๋๋ ๋ง์ด ์์ต๋๋ค. ๋ง์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋๊ทธ ๋ค์ ํ๋์จ์ด SIMD๋ฅผ ์ง์ํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ gl-matrix๊ฐ ์ข์ ๊ฒ์ ๋๋ค. , ๊ทธ๋ฆฌ๊ณ ๊ณง ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ ๊ฒ์ ๋๋ค(์ฌ์ค gl-matrix๋ ํ์ฌ ๋ด๋ถ์ ์ผ๋ก ์ด๊ฒ์ ์ง์ํฉ๋๋ค.)
๋๋ ์ด๊ฒ์ด pixi์ ๋ํ ๊ฑฐ๋ํ ํจ๋ฌ๋ค์ ์ ํ์ด ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ซ๊ณ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์์ ํ ๊นจ๋จ๋ฆด ๊ฒ์ ๋๋ค...์ฌ์ ํ ์ด๊ฒ์ ๋ฒ๋ฆฌ๊ณ ์ฌ๋๋ค์ด ์ด๋ป๊ฒ ์๊ฐํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ด ๊ทธ ์์ด๋์ด๋ฅผ ์ผ๋ง๋/์ผ๋ง๋ ์ซ์ดํ๋์ง ๋ณด๊ณ ์ถ์์ต๋๋ค ;)
1) SIMD๊ฐ ์ฃฝ์์ต๋๋ค. https://github.com/rwaldron/tc39-notes/blob/a66df6740eec3358d5e24f81817db99d6ee41401/es8/2017-03/mar-21.md#10if -simdjs-status-update
2) ๋จ์ํ 6๊ฐ์ ํ๋ "a,b,c,d,tx,ty"๋ Float32Array(9) ํ๋ ฌ๋ณด๋ค ํจ์ฌ ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค. ํ ์คํธ์ ๋ํ ๋งํฌ๋ฅผ ์ ๊ณตํ ์ ์์ง๋ง ๋์ @GoodBoyDigital ๋ชจ๋ ์ด๋ฏธ ํตํฉ์ ์๋ํ์ต๋๋ค.
3) JS๋ ํฐ ์ขํ๋ก ์๋ํ๋ ์ฑ์ ์ค์ํ ๋ฐฐ์ ๋ฐ๋๋ฅผ ์ํํฉ๋๋ค. ๊ทธ๋ํฝ ๋ฐ ์คํ๋ผ์ดํธ์ ๋ํ "ํ๋ก์ ์ x ๋ณํ"์ JS ์ธก์ ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๋ v5์์ Float32Array(9)๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ์ด๊ฒ์ ๋ด jsperf ํ ์คํธ์์ ๋์ผํ ์ฑ๋ฅ์ ์๋์ง๋ผ๋ ์ ์ฌํ์ผ๋ฉฐ ์ฐ๋ฆฌ๊ฐ toArray ๋ฐ transpose ์์ ์ ์ํํ ํ์๊ฐ ์๋๋ก ํฉ๋๋ค.
gl-matrix
๋ SIMD(Ivan์ด ์ธ๊ธํ๋ฏ์ด ์ฃฝ์ ์ฌ์์)๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์ฉํ์ง๋ง ๊ตฌํ ์์๋ ๋จ์ ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ 3x3 ํ๋ ฌ( Float32Array(9)
)์ด GPU์ ๋ฟ๊ธฐ๋ฅผ ์ํ์ง๋ง ๊ณ์ฐ ์๊ฐ์ ์ ์ฝํ๊ธฐ ์ํด 2D ํ๋ ฌ์ธ ๊ฒ์ฒ๋ผ ์ฐ์ฐ์ ์ํํฉ๋๋ค. gl-matrix
์๋ ์ด์ ๋ํ ์ข์ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค.
v5 ๋ฒ์ ์ GPU์ ์ง์ ์ ๋ก๋ํ ์ ์๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ๊ณ ๊ด์ฌ ์๋ 2D ๋ถ๋ถ์์๋ง ์๋ํฉ๋๋ค. ๋ํ SharedArrayBuffers ๋ฐ ์น ์์ ์์ ๋ ๋ง์ ์์ ์ ์ํํ ์ ์๋ ๊ธฐํ ์ต์ ํ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ค์ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ผ๋ก ์ผ๋ง๋ ๋ฉ๋ฆฌ ๊ฐ ์ ์๋์ง ๋ณผ ๊ฒ์ ๋๋ค.
@englercj ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด Math.fround๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. perf Float64Array๋ฅผ ์ฌ์ฉํด๋ณด์ญ์์ค.
Float64Array๋ก ๋ง๋ค ์ ์์ง๋ง ์ ๋ก๋๋ฅผ ์ํด ๋จ์ ๋ฐ๋๋ก ํฌ๊ธฐ๋ฅผ ์ค์ฌ์ผ ํฉ๋๋ค. ๋ํ ํ์ฌ GPU์ ์ ๋ก๋ํ ๋ float32๋ฅผ ์ฌ์ฉํ๊ณ ์์์ ๊ธฐ์ตํ์ญ์์ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ํ์ ์ด์ค์ผ๋ก ํ ๋ค์ ๋จ์ผ๋ก ์๋ฆ ๋๋ค. ์ด ๋ชจ๋ ์์ ์ ํ ๋ฒ์ ์ํํ๋ ๊ฒ๋ณด๋ค ๋ ์ ํํ ์ ์์ง๋ง ์ ๋ก๋ํ๋ ๋ฐ์ดํฐ ์ ํ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๋ ค๊ณ ํฉ๋๋ค. ๋ถํํ๋ ์ด๊ฒ์ GL 4.0๊น์ง๋ ๋จ์ ๋ฐ๋๋ฅผ ์๋ฏธํ๊ณ WebGL 2๋ GL ES 3.0์ ๋ถ๊ณผํฉ๋๋ค.
๋งคํธ๋ฆญ์ค ์ ๋ก๋๋ ๊ฒฐ์ฝ ์ฐ๋ฆฌ์ ๋ณ๋ชฉ ํ์์ด ์๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ ์์น์์ "uniform3fv"๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ ๊ฐ๋จํ ์์ ์ด ์๋๋ฉฐ drawCall์ด ๋ค๋ฐ๋ฅด๊ณ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํฐ ๋ฒํผ ์ ๋ก๋์ ๋๋ค. Heavy pixi ์ฑ์ ํ๋ ์๋น ์ฝ 400๊ฐ์ ๋๋ก์ฝ๋ง ์ํํฉ๋๋ค.
ํฐ ์ขํ์ ๋ํ ์ฌ์ฉ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ํ์๋ ์ ๋ก๋ํ ๋๊น์ง ๋ชจ๋ ๊ฒ์ ๋ฐฐ์ ๋ฐ๋๋ก ์ ์ฅํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
๋ํ "a,b,c,d,tx,ty" ํ๊ธฐ๋ฒ์ "0,1,3,4,6,7"๋ณด๋ค ์ฐ๊ธฐ์ ์ฝ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ์ฒ์ถ์๋ ์ฌ์ฉ๋๋ฉฐ ๊ทธ ์์ ๋งค์ฐ ์ ๊ตํ ๋ณํ์ด ์์ต๋๋ค. ํ๋ ฌ๋ก ์ ํํ๋ฉด ๋์ค์ ์ฝ๋๋ฅผ ํ์ธํ๊ธฐ๊ฐ ์ฝ์ง ์์ ๊ฒ์ ๋๋ค. ์ด๋ค ์ฌ๋๋ค์๊ฒ๋ ํ๋ ฌ ์ฐ์ฐ์ ์์ํ๊ธฐ ์ด๋ ต์ง๋ง ์ ๋ ์ฝ๊ฒ ์ฝ์ต๋๋ค.
UPD. ๋๋ ๋ํ ์ด๊ฒ์ด ํ๋ ฌ์ ๋ณํํ๋ ๊ฒ๋ณด๋ค ์ฐ๋ฆฌ์๊ฒ ๋ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค: https://github.com/gameofbombs/gobi/blob/master/src/core/math/FlatTransform2d.ts , ์ด๋ "Flat" ๋ณํ์ด๋ฉฐ ํ์ํ ๋ชจ๋ ํ๋๋ฅผ ํฌํจํฉ๋๋ค. ํ๋ ฌ์ ๊ณ์ฐ์ ์ํด.
UPD2. ๊ทธ๋ฌ๋ 3d ๋ณํ์ ๊ฒฝ์ฐ Float32Array(16)๊ฐ ๋ ์ข์ผ๋ฉฐ ์ด์ ๋ํด ์ธ๊ธํ์ง ์๊ฒ ์ต๋๋ค.
๋ด ํฌํ๋ ์ต๊ณ ์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ํ๋์ ์ด๋ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ฐฐ์ด์ ํตํด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํ ๊ฒ์ด ๋ ๋น ๋ฆ ๋๋ค. ๊ทธ๊ฒ์ด ์ฌ์ ํ ์ฌ์ค์ธ์ง 100% ํ์ ํ ์๋ ์์ง๋ง, ์๋ง๋ ๋ฐ๋์์ ๊ฒ์ ๋๋ค!
3d์ ๊ฒฝ์ฐ ์ฃผ๋ก GPU์ ํญ๋ชฉ์ด ๋ง์ด ์ ๋ก๋๋๊ธฐ ๋๋ฌธ์ gl-matrix ์คํ์ผ์ ์ ํธํฉ๋๋ค! Pixi์์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ทธ๋ ์ง ์์ต๋๋ค. ๋๋ถ๋ถ์ ์กฐ์์ js ๋๋(์: ์คํ๋ผ์ดํธ ๋ฐฐ์ฒ)์์ ๋ฐ์ํฉ๋๋ค.
https://jsperf.com/obj-vs-array-view-access/1
์ฌ๊ธฐ ๋ด๊ฐ ํ ํ
์คํธ๊ฐ ์์ต๋๋ค. ๊ฐ์ฒด ๋ฐฉ๋ฒ ๋๋ฆฐ ์ผ๋ฐ ๋ฐฐ์ด๋ณด๋ค ๋, Float32Array๋ณด๋ค uniform3fv
๋ ์ผ๋ฐ Array
๊ฐ์ฒด๋ฅผ ํ์ฉํ๋ฏ๋ก ํด๋น ๊ฐ์ฒด๋ก ์ ํํด์ผ ํฉ๋๋ค.
ํธ์ง: Array
๊ฒฐ๊ณผ๊ฐ ์ฐ์ฐ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌํํ ์ ์์ต๋๊น?
๋ด ํฌํ๋ ์ต๊ณ ์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ํ๋์ ์ด๋ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ฐฐ์ด์ ํตํด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํ ๊ฒ์ด ๋ ๋น ๋ฆ ๋๋ค.
๋งค์ฐ ํฅ๋ฏธ๋กญ์ต๋๋ค. ๊ฐ์ฒด ์๋ฏธ ์ฒด๊ณ๊ฐ ํฌ๊ฒ ์ ๊ฑฐ๋ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์๋ ๊ธฐ๋ณธ vm์ด ์ฌ๋ฌ ์ต์ ํ๋ฅผ ์ํํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๊ฐ ์์ํ ์ซ์ ๋ฐฐ์ด๋ณด๋ค ๋น ๋ฅผ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์ง๊ด์ ์ด์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ฒด๊ฐ ๋ ๋น ๋ฅผ ์ ์๋ _์ด์ _์ ๋ํ ์์ด๋์ด๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๋ด ๊ตฌ์ฑ ์์์ ๊ด๋ จ ๊ฒฐ๊ณผ(i7, Windows 10):
ํฌ๋กฌ 59:
Firefox 54.0.1(32๋นํธ):
๋ง์ดํฌ๋ก์ํํธ ์ฃ์ง 40.15063.0.0:
Array
๊ฐ ๋ ๋นจ๋ผ์ง ๋ด ํฌ๋กฌ ๊ฒฐ๊ณผ๋ ์ฐ์ฐ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ํ์คํ์ง ์์ง๋ง ์ง๊ธ์ ์ฌํํ ์ ์์ต๋๋ค. ์ฝ 50M ops/s์ด์ง๋ง ์ด์ ์ ํ ๋ฒ ์คํํ์ ๋ 500M ops/s์์ต๋๋ค. ๊ธฐ์ด ํ...
์ด๋ ์ชฝ์ด๋ Float32Array ๋ฉค๋ฒ๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ผ๊ด๋๊ฒ ๋์ผํ ์๋ ๋๋ ๊ฐ์ฒด๋ณด๋ค ๋น ๋ฆ ๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐ ์ ํํ ์ด์ ์ ๋๋ค. ์ด์ ๊ณผ ๊ฐ์ ์๋(๋๋ ๋ ๋น ๋ฆ)์ด์ง๋ง ์ด์ ์ ๋ก๋๋ฅผ ์ํด ๋ฐฐ์ด์ ๋ฐ๊พธ๊ฑฐ๋ ์ฑ์ฐ๋ ๊ฒ์ ํผํฉ๋๋ค.
Float64๋ก๋ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๊น? :)
์ ๋ ๋๋ก์ฝ๋น ํ๋ ์ด์์ ๋งคํธ๋ฆญ์ค ์์ ๋ณด๋ค ์ฝ๋ ํ์ง์ ๊ด์ฌ์ด ๋ง์ต๋๋ค.
๋ํ, ์ฐ๋ฆฌ๋ invert๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง ์์ต๋๋ค. updateTransform()์ด ์ฐ๋ฆฌ์ ๋ฌธ์ ์ ๋๋ค.
์ ๋ ๋๋ก์ฝ๋น ํ๋ ์ด์์ ๋งคํธ๋ฆญ์ค ์์ ๋ณด๋ค ์ฝ๋ ํ์ง์ ๊ด์ฌ์ด ๋ง์ต๋๋ค.
Float64Array๋ ์ด๋ป๊ฒ ๋ ๋์ ์ฝ๋ ํ์ง์ ์ ๊ณตํฉ๋๊น? ๋๋ ์ฐ๋ฆฌ๊ฐ ๋ ๋ง์ ์ ๋ฐ๋๋ฅผ ์ป๋๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง, ์ด์จ๋ ๋จ์ ๋ฐ๋๋ก ์ค์ผ ๋ ๊ทธ๊ฒ์ด ์ ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์ ์ ์์ต๋๋ค.
๋ํ, ์ฐ๋ฆฌ๋ invert๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง ์์ต๋๋ค. updateTransform()์ด ์ฐ๋ฆฌ์ ๋ฌธ์ ์ ๋๋ค.
์ด๊ฒ์ ๋ฐ์ดํฐ ์ ์ฅ์์ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ๋ฒค์น๋งํนํ๋ ๊ฒ์ผ๋ก, ๊ทธ ์ฌ์ด์ ๊ฐ์ ๋ํด ์ํ๋๋ ์์ ์ ๊ด๋ จ์ด ์์ต๋๋ค.
์ ๋ ๋๋ก์ฝ๋น ํ๋ ์ด์์ ๋งคํธ๋ฆญ์ค ์์ ๋ณด๋ค ์ฝ๋ ํ์ง์ ๊ด์ฌ์ด ๋ง์ต๋๋ค.
์ ๋ ์ด์ ๋์ํฉ๋๋ค. ๋ฐฐ์ด ๊ธฐ๋ฐ ํ๋ ฌ, ์ ๋ฐ ๋ฒกํฐ์ ๋ํ "ํ์คํ"๋ ์ค์ ๋ก ์ฑ๋ฅ๋ณด๋ค ์ฝ๋ ํ์ง ํฅ์์ ๋ ๊ฐ๊น์ต๋๋ค... ์ธ๊ธฐ ์๋ js ํ๋ ฌ/๋ฒกํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฌ์ฉ ๋ฐ ์ธ๊ธฐ ์๋ ๋ ๋๋ง ๋ชจ๋๊ณผ์ ๋ ๋ง์ ์ํธ ์ด์ฉ์ฑ์ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค. ํฐ ์ฝ๋ ํ์ง ์น๋ฆฌ๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋ฐ์ดํฐ ์ ์ฅ์์ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ๋ฒค์น๋งํนํ๊ณ ,
๊ด๋ จ ์๋ ๊ฐ ์ฌ์ด์ ์ํ๋ ์์ ์ ๋๋ค.
๋๋ ๋น์ ์ด ๋ชจ๋ ์ณ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง ์ฝ๊ธฐ/์ฐ๊ธฐ์ ์ผ๋ฐ์ ์ธ ๋ฒค์น๋งํน์
๋๋ค. ๊ทธ๋ฌ๋ Ivan์ ์ ๋ง ์ข์ ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. updateTransform()
๊ฐ ์๋์ ์ธ ์ฐ์ฐ์ด๋ผ๋ฉด, ๊ทธ๊ฒ์ ๋ณด๋ ๊ฒ์ด ๋งค๋ ฅ์ ์ผ ๊ฒ์
๋๋ค.
๋๋ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ดํฌ๋ก ๋ฒค์น๋งํฌ์ ๋ํด ๊ฑฑ์ ํฉ๋๋ค. ์ด๋ฌํ ์ ์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ํ ์คํธ์์ ์๋ฐ์คํฌ๋ฆฝํธ VM์ ์ปดํ์ผ๋ฌ ์ต์ ํ๋ฅผ ์ค์๋ก ํ์ฉํ๊ฒ ๋๋์ง ๊ถ๊ธํฉ๋๋ค. ์ค์ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ด ํจ์ฌ ๋ ๊ณ๋ชฝ์ ์ผ ๊ฒ์ ๋๋ค(์ค์ ์ ๋ ๋ง์ ์์ ์ด ํ์ํจ).
์ ๋ ์ด์ ๋์ํฉ๋๋ค. ๋ฐฐ์ด ๊ธฐ๋ฐ ํ๋ ฌ, ์ ๋ฐ ๋ฒกํฐ์ ๋ํ "ํ์คํ"๋ ์ค์ ๋ก ์ฑ๋ฅ๋ณด๋ค ์ฝ๋ ํ์ง ํฅ์์ ๋ ๊ฐ๊น์ต๋๋ค... ์ธ๊ธฐ ์๋ js ํ๋ ฌ/๋ฒกํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฌ์ฉ ๋ฐ ์ธ๊ธฐ ์๋ ๋ ๋๋ง ๋ชจ๋๊ณผ์ ๋ ๋ง์ ์ํธ ์ด์ฉ์ฑ์ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค. ํฐ ์ฝ๋ ํ์ง ์น๋ฆฌ๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ ๋ "(a,b),(c,d),(tx,ty)" ๋ฐฐ์ ๋ฐ๋ ํ๋ ฌ์ ๋ํด ์ ๋ก๋๋ฅผ ์ํด float32array๋ก ๋ณํํ๊ณ "posX,posY,pivotX, pivotY,scaleX,scaleY, ์ ๋จX,์ ๋จY,๋กZ". ์ด์จ๋ ๋ด ํฌํฌ์์ ์ฌ์ฉํ ๊ฒ์ด์ง๋ง ๋ง์คํฐ pixi์์๋ ๋งคํธ๋ฆญ์ค ๋ฐฐ์ด์ ๋ค๋ฃจ์ง ์๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ๊ทธ๊ฒ ๋ด ๊ธฐ์ค์ด์ผ.
๋๋ ๋ํ ์ฌ๋๋ค์ด js์์ vec ์ํ์ ํ๋ ๋๋ ๋ ๊ฐ์ ํ์ค์ ์ฌ์ฉํ๋๋ก ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง ์์ฌ์ค๋ฝ์ต๋๋ค.
Float64Array๋ ์ด๋ป๊ฒ ๋ ๋์ ์ฝ๋ ํ์ง์ ์ ๊ณตํฉ๋๊น? ๋๋ ์ฐ๋ฆฌ๊ฐ ๋ ๋ง์ ์ ๋ฐ๋๋ฅผ ์ป๋๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง, ์ด์จ๋ ๋จ์ ๋ฐ๋๋ก ์ค์ผ ๋ ๊ทธ๊ฒ์ด ์ ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์ ์ ์์ต๋๋ค.
updateTransform์์ ์คํ๋ผ์ดํธ ๋ณํ(์คํฌ๋กค์ฉ)์ผ๋ก ์นด๋ฉ๋ผ ๋ณํ์ ๊ณฑํฉ๋๋ค. ๊ฒฐ๊ณผ๋ ์์ ๋๋ง ํ๋ฉด์ ๋ํ๋๋ฏ๋ก ๊ฒฐ๊ตญ ์ซ์๋ ์ ์ง๋ง ์คํ๋ผ์ดํธ ์์น์ ์นด๋ฉ๋ผ ์์น ๋ชจ๋ ํด ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ธก ์๋ฃจ์ :
1) ๊ทธ์ ํธ์์ ๋ชจ๋ ๊ฒ์ ๊ณ์ฐํ์ญ์์ค. PIXI๋ ์๋์ ์ผ๋ก ์์ ์ขํ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
2) ์ธ๊ณ๋ฅผ ํฐ ์ขํ๋ก ๋ฉ์ด๋ฆฌ๋ก ๋๋๊ณ ์คํ๋ผ์ดํธ๋ ์๋์ ์ผ๋ก ์์ ์ขํ๋ฅผ ๊ฐ์ง๋ง ํ์ ํฝ์
์นด๋ฉ๋ผ์์๋ ์๋ํ์ง ์์ต๋๋ค => ์นด๋ฉ๋ผ๋ ํฌ๊ณ ์์ ์ขํ๊ฐ ํ์ํฉ๋๋ค.
ํฐ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์์ ์ ํธ์ ์๋๋ก ํ๋ ๊ฒ์ ๊ด์ฐฎ์ง๋ง ์์ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ํ ๋ฒ ๋ ๊ณจ์น ์ํ ์ผ์ ๋๋ค.
๋๋ ๋ํ ์ฌ๋๋ค์ด js์์ vec ์ํ์ ํ๋ ๋๋ ๋ ๊ฐ์ ํ์ค์ ์ฌ์ฉํ๋๋ก ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง ์์ฌ์ค๋ฝ์ต๋๋ค.
๋ฌด์จ ๋ง์ธ์ง ์ดํด๊ฐ ์๋๋๋ฐ ์์ธํ ์ค๋ช ํด์ฃผ์ค ์ ์๋์?
๋ฌด์จ ๋ง์ธ์ง ์ดํด๊ฐ ์๋๋๋ฐ ์์ธํ ์ค๋ช ํด์ฃผ์ค ์ ์๋์?
ํ ์ ์์ด, ๋ํํ ๋ ๋๋ฌดํด.
์ ์์ค ์ต์ ํ์์ ์๋ก ๋ค๋ฅธ ๊ฒฝํ์ ๊ฐ์ง ์ฌ๋๋ค์ด ์์ต๋๋ค. ๋ฐ ์ธ์ด ๊ตฌ์ฑ, DSL-s. ์ฐ๋ฆฌ๋ ์ด๋ค ์์ค์์ ์ฐ๋ฆฌ ๋ชจ๋๋ฅผ ๋ง์กฑ์ํค๋ ํ์ค์ด ํ์ํฉ๋๋ค.
์ง๋ 2๋ ๋์ ์ ๋ ์๋ก ๋ค๋ฅธ ๋ณํ์ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ pixi(v3 ๋ฐ v4์ฉ) ํฌํฌ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ ๋ ์์ฒด ๊ณ ๊ธ ๋ณํ์ด ์๋ "pixi-spine"์ ๋ค๋ฃจ๊ณ ์๊ณ ์ธ ๋ฒ์งธ ํฌํฌ๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค. "๊ณผ๊ฑฐ ivan"์ ๊ด์ ์์ ๋ณด๋ฉด ๋ฐฐ์ด์ด ๊ฐ์ฅ ๋จ์ํ๊ณ "gl-matrix"๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์ข์ต๋๋ค.
๋๋ 64๋นํธ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ @ivanpopelyshev์ ๋ง์ ๋์ํฉ๋๋ค. ๊ฐ ํ๋ ์์ ๋ฒํผ๋ฅผ ์์ฑํ๊ณ ๋ณต์ฌํ์ง ์๊ณ ํจ์จ์ ์ผ๋ก ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์์ ๋ด๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
Float64Array๋ก ์ ์ฅํ๊ณ ์ ๋ก๋ํ ๋ Float32Array๋ก ๋ณต์ฌํ ์๋ ์์ต๋๋ค. ์ต์ํ ์น ์์ ์์๊ฒ/์์ ๋ณต์ฌํ๊ธฐ ๋ ์ฌ์์ผ ํ๋ ์คํ ๋ฆฌ์ง ๋ฐฑ์ ์ผ๋ก ํ์ํ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Float64Array ๊ทธ๋ ๋ค๋ฉด (0,1), (3,4), (6,7)์ X,Y,translate๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค.
๋ชจ๋ ํฅ๋ฏธ๋ก์ด ๊ฒ๋ค, ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ ์ํ ์๋ฃจ์ ์ ์ค์ pixi ์๋๋ฆฌ์ค์์ ๋ฒค์น๋งํนํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด bunnymark์ ๊ฐ์ ๊ฒ์ ๋๋ค.
์ด ๋ถ์ผ์ ๋ํ ์ ๊ฒฝํ์ ์ ์ @ivanpopelyshev๊ฐ ๋ง์ง๋ง์ผ๋ก bunny mark๋ฅผ ์ํด gl-matrix๋ก ์ ํํ์ ๋ ์๋นํ ๋๋ฆฌ๊ฒ ์คํ๋์์์ ๋ฐ๊ฒฌํ์ต๋๋ค(3๋ถ์ 1 ๋ ๋๋ฆผ!).
๊ทธ๊ฒ์ ์กฐ๊ธ ์ ์ ์ผ์ด์๊ณ ์ฌ๊ธฐ์ ๋ด๊ฐ ํ๋ ธ์ผ๋ฉด ์ ๋ง ์ข์์ ๊ฒ์
๋๋ค!
์๋ ์ฐจ์ด๊ฐ ์ด์ ๋ฌด์ํ ์ ์๋ค๋ฉด ์์์ ์ ์ํ ๊ฒฝ๋ก๊ฐ ์์ด์ค๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Pixi is SPEEED :P ๋ชจ๋ ์๋ฃจ์ ์ ์์ ํ ์ปค๋ฐํ๊ธฐ ์ ์ ํ ์คํธํด์ผ ํฉ๋๋ค.
์ฌ์ ํ Float64Array์ ๋ฒค์น๋งํฌ๊ฐ ํ์ํฉ๋๋ค. ์ด ๊ตฌํ์ ์ ์๊ฒ ์ ํฉํ์ง๋ง ๊ฐ์ธ์ ์ผ๋ก ํฌํฌ์์ ์ค๋๋ ๋งคํธ๋ฆญ์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค. ๋ํ ํธํ์ฑ์ ์ํด ์์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.
ํ ๊ฐ์ง ๋: @mreinstein , ๋ด๊ฐ ๊ธฐ์ตํ๋ ํ์ค ์ค ํ๋๋ paper.js ์ ์ฉ ์ธ์ด์ธ PaperScript๊ฐ ์ธ์ด์ ์ง์ ํฌ์ธํธ ์ฐ์ฐ์ ์ถ๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค. JS์ ๋ ๋ง์ ๊ตฌ๋ฌธ ์คํ์ด ์๋ค๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๋ฐ ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
re: ์ด ์ ๋ฐ์ดํธ๋ bunnymark์ ๋ํด ์ ๊ฐ ๋์ธ ์ ์๋ ๊ฒ์ด ์์ต๋๊น? ์ด ์๊ฐ์ ๊ธฐ๋ถํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
๋๋ ์ฌ๊ธฐ์์ ์ผ์ด๋๋ ์ผ์ ๋ฐ๋ผ๊ฐ๋ ๋ฐ ๋งค์ฐ ๊ด์ฌ์ด ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ๊ด๊ณ์์ด. ์ด๋ ์ด ๊ธฐ๋ฐ ํญ๋ชฉ์ด ์ฌ์ ํ ํจ์ฌ ๋ ๋๋ฆฌ๋ค๋ฉด ๊ทธ ๋ค์ ์๋ _์ด์ _๊ฐ ์ ๋ง ๊ถ๊ธํฉ๋๋ค.
๋ค์ ์ฃผ๋ชฉํด์ผ ํ ์ฌํญ: ์ฑ๋ฅ ํ ์คํธ...ํฌ๋กฌ์ v8์ ์ต๊ทผ(v59์์) ํฐ๋ณดํฌ์ด๋ผ๋ v8์ ๋ํ ๋ช ๊ฐ์ง ๊ทน์ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐํํ์ต๋๋ค. ์๋นํ ์ฑ๋ฅ ํฅ์์ด ์์ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
https://v8project.blogspot.com/2017/05/launching-ignition-and-turbofan.html
ํฐ๋ณดํฌ์ด ์กด์ฌํ๊ธฐ ์ด์ ๋ฒ์ ์์ ํ์ฌ์ ๋น๊ตํ์ฌ ์ ๋ฐ์ดํธ๋ bunnymark๋ฅผ ์คํํ๋ ๊ฒ์ ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค.
@GoodBoyDigital ๋๋
https://jsperf.com/obj-vs-array-view-access/1
Edge์์๋ง ๊ฐ์ฒด ์๋๊ฐ Float64Array์ ์ผ์น/์ด๊ณผํ๊ณ ์ค์ ๋ก ๊ฐ๊น์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๋ด ํ๊ฒฝ์์ ํ ์คํธํ๊ณ ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค ... ๋๋์ฒด ๋ฌด์์ ๋๊น?! Float64 ๋ฐฐ์ด ์ฝ๊ธฐ/์ฐ๊ธฐ๊ฐ ๋๋ฑํ Float32 ๋ฐฐ์ด ์์ ๋ณด๋ค ํจ์ฌ ๋ ๋น ๋ฅธ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋ง์์ ์ค๋ ์ ์ผํ ๊ฒ์ 64๋นํธ ๋ถ๋ ์์์ ์ด ๋จ์ด ๊ฒฝ๊ณ์ ์ ๋ ฌ๋๋ค๋ ๊ฒ๋ฟ์ ๋๊น? ๋๋ ๋นํฉํ๋ค.
์ ์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค @mreinstein ! ๋น์ ์ด ํ์คํ ๋๋ดํ ์ฌ์ค๋ก ์ ์ฒด ๋ ผ์์ ์ ์ฌ์ธ ์ ์๋ ๋ช ๊ฐ์ง ์ฑ๋ฅ ํ ์คํธ๋ก ์ฐ๋ฆฌ๋ฅผ ๋์ธ ์ ์๋ค๋ฉด!
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ pixi๋ฅผ ๋ถ๊ธฐํ ๋ค์ ๋ณํ์ gl-matrix ๋๋ @englercj ๋งคํธ๋ฆญ์ค ํด๋์ค๋ก
๊ทธ๋ฐ ๋ค์ ์์ ๋ ๋ฒ์ ์ด ์์ผ๋ฉด ์ฌ๊ธฐ์์ ์ฑ๋ฅ์ ํ
์คํธํ ์ ์์ต๋๋ค. https://pixijs.github.io/bunny-mark/
๋ค๋ฅธ ๋ฐฐ์ด ์ ํ์ผ๋ก ์๋ง์ด ๋ ์ ์์ต๋๋ค.
@englercj ๋ฉ์ง ์น๊ตฌ์ ๋๋ค! ์ด๋ฌํ ๊ฒฐ๊ณผ๋ฅผ ํ์คํ ํ์ธํ๋ ๊ฒ์ ๊ณ ๋ฌด์ ์ ๋๋ค. v5 ๋ฒ์ ์ ๋ฒ๋๋งํฌ๋ฅผ ๋๋ฆด ์ ์๋ ์ํ์ ๊ฐ๊น์ต๋๊น?
@mreinstein ๊ทธ๋ฅ ์ง๊ฐ, 64๋นํธ -> 32๋นํธ์์ ๋ณํ๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
js์ ์ซ์๊ฐ 64๋นํธ ๋ง๋์?
@GoodBoyDigital ์๋ง๋ ๋น์ ์ด ์ณ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด ์น๊ตฌ ๋ถ์ธ์๊ฒ ์์งํฉ๋๋ค. ๊ตฌ๊ธ, ๋๋ ์ด๊ฒ์ ์ฐ์ฐํ ๋ฐ๊ฒฌํ๋ค :
https://stackoverflow.com/questions/15823021/when-to-use-float32array-instead-of-array-in-javascript
์ต๊ณ ๋ฑ๊ธ์ ๋ต๋ณ(ํ์ฌ 44ํ)์ ํฉ๋ฆฌ์ ์ด๊ณ ์ ์ ํด ๋ณด์ ๋๋ค.
๋ช ๊ฐ์ง ์ฑ๋ฅ ํ ์คํธ๋ฅผ ๋์์ค ์ ์๋ค๋ฉด
์๊ฒ ์ต๋๋ค. ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค. :)
๊ฐ์ฅ ์ข์ ๊ฒ์ ํฝ์๋ฅผ ํฌํฌํ๋ ๊ฒ์ ๋๋ค.
@GoodBoyDigital @englercj ์ด ์์ ์์ ๊ฐ์ฅ ์ข์ ๋ถ๊ธฐ์ ์ ๋ฌด์์ ๋๊น?
๊ทธ๋ฐ ๋ค์ ๋ณํ์ gl-matrix ๋๋ @englercj ๋งคํธ๋ฆญ์ค ํด๋์ค๋ก ๊ต์ฒดํ์ญ์์ค.
์ด ์์์๋ ์ ์ฒด ์์ง์ด ์๋๋ผ ์คํ๋ผ์ดํธ ๋ฐฐ์น๋ ์๋ํ๊ฒ ๋ง๋ค๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค!
์ด์ ๋ํด ์กฐ๊ธ ๋ ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น? ์ฑ๋ฅ ๋ฒค์น๋ฅผ ์คํํ๊ธฐ ์ํด ์ ์ฒด ์์ง์ gl-matrix๋ก ๋ณํํ๊ณ ์ถ์ง ์์ต๋๋ค... https://github.com/pixijs/bunny-mark์ sprite ๋ฐฐ์น ํญ๋ชฉ์ด ๋ณด์ด์ง ์์ต๋๋ค. ํ ๋ผ๊ฐ ์ถ๊ฐ๋๋ ๋ฃจํธ ์์๋ก์์ PIXI.Container. ๋ด๊ฐ pixi.container, pixi.sprite๋ก ์์ํ๊ณ ๊ฑฐ๊ธฐ์์ ๊ฑฐ๊พธ๋ก ์์กด์ฑ ํธ๋ฆฌ ์๋ก ์์ ํ์ฌ ๋ณํ ํญ๋ชฉ์ ๊ต์ฒดํด์ผ ํ๋ ๋ชจ๋ ์์น๋ฅผ ์ฐพ์์ผ ํ๋ค๋ ๋ง์์ด์ ๊ฐ์? ๋์ํ์ง ์๋๋ค๋ ๊ฒ์ด ์๋๋ผ ๋ถํ์ํ ์์ ์ ์ต์ํํ๊ธฐ ์ํ ์ ๋ต์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ๊ณ ์ถ์ ๋ฟ์ ๋๋ค.
updateTransform์๋ ๋ด๋ถ์ ๋ ๊ฐ์ง ํ๋ ฌ ์ฐ์ฐ์ด ์์ต๋๋ค.
Float64Array๊ฐ ์ง์ํ๋ ์ค๋๋ "a,b,c,d,tx,ty" ์ํ์ผ๋ก ํ๋ ฌ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ updateTransform์ ๋ค์ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ํ @mreinstein ์ ํต์ฌ์
๊ทธ๋์ ๊ทธ๋ ๊ฐ์ง์ ์ ๊ทผํ ์ ์๊ณ ๋์ฅ์ ์ง์ ์ ์์ต๋๋ค.
๋ชจ๋ ์ฌ๋์ด ์ก์ธ์คํ ์ ์์ผ๋ฉฐ fork + PR์ด ์ด ๋ชจ๋ ์์ ์ ์ํํฉ๋๋ค.
๋๋ ์ฌ๋ฌ๋ถ์ด ๋ฒ๋ ๋งํฌ์์ ์ด๋ค ์ข ๋ฅ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์๋์ง ๊ถ๊ธํฉ๋๋ค. ๊ธฐ๋ณธ 100k ๋ฒ๋๋ฅผ ์ฌ์ฉํ์ฌ ํฌ๋กฌ์์ ๋ค์ํ ๋ถ๊ธฐ(๊ฐ๋ฐ, ๋ฆด๋ฆฌ์ค, ๊ธฐํ)๋ฅผ ์๋ํ ๋ ์ผ๊ด๋๊ฒ 10-16fps๋ฅผ ์ป์ต๋๋ค. 8.75์ด ์ด์ ์คํ๋๋ ์ฝ๋์ ๋ํ ์ฑ๋ฅ ๋ถ์ ์ํ:
๊ฑฐ์ ๋ชจ๋ ์๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํธ์ถ์ ์๋นํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ณด๋ธ ์ด ์๊ฐ ์ค ๊ฐ์ฅ ๋ง์ ๋ถ๋ถ์ ์ฐจ์งํ๋ ์๊ฐ์ ์ค์ ๋ก Sprite.calculateVertices()
์
๋๋ค. TransformStatic.updateTransform()
์ง์ถ๋ณด๋ค 4๋ฐฐ ๋ ๋ง์
ํ์ด์ดํญ์ค์์๋ ํ๋ ์ ์๋๊ฐ ์ฝ 2๋ฐฐ์ด์ง๋ง ์์ ์๊ฐ์ ๋น์ทํฉ๋๋ค. calculateVertices()
๋ ๋ ๋ธ๋ผ์ฐ์ ๋ชจ๋์์ ๋ง์ ์๊ฐ์ ์ฐจ์งํฉ๋๋ค. ์์๋๋ ์ผ์
๋๊น? bunnymark ์คํ์์ ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ณ ์์ต๋๊น?
์ด๊ฒ์ ํ ๋ผ์๊ฒ ์์๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋งํ๋ ํ๋ ฌ ์ฐ์ฐ์ ๊ณฑ์ ์ ์ํ upateTransform()๊ณผ ํธ์ถ๋น ํ ๋ฒ๋ง ํ๋ฌ์()ํ๋ ๋ ๊ณณ์์ ์ํ๋ฉ๋๋ค. ๋๊ท๋ชจ๋ก ํด๋ ์๊ด์์ต๋๋ค.
ํผ๋์ค๋ฌ์์. :( ๊ทธ ๋ฒค์น๋งํฌ์ ์ฑ๋ฅ์ ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น? ๋๋ ๊ทธ๊ฒ์ด ๋๋ถ๋ถ ๋ฌ์ฑ๋ ์์ํ fps๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค๋ ์ธ์์ ๋ฐ์์ต๋๋ค. ๊ทธ๊ฒ์ด ์ฌ์ค์ด๋ผ๋ฉด, ๋ด ํ๋ ์ ์๋๋ ์ ์ ๊ณ์ฐ์ ์ํด _์ฌ๊ฐํ๊ฒ_ ์กฐ์ ๋๊ณ ์์ต๋๋ค. ๋ด๊ฐ ๋ถ์ฌ๋ฃ์ ์ฒซ ๋ฒ์งธ ๋ค์ด์ด๊ทธ๋จ์ ๋ณด๋ฉด ์์์ ๋ ๋๋ง์ ์ด ํ๋ ์ ์๊ฐ์ ์์ฃผ ์์ ๋ถ๋ถ์ด๋ฉฐ ์ ์ ๋ฐ ๋ณํ ์ ๋ฐ์ดํธ๋ ์ด ํ๋ ์ ์๊ฐ์ ์๋ํฉ๋๋ค.
๊ทธ๊ฒ์ด ๊ฑฐ์ง์ด๊ณ fps๊ฐ ๋ด pixi ๋น๋์ ์ฑ๋ฅ์ ๋ํ ์ธก์ ์ด ์๋ ๊ฒฝ์ฐ ์ฃผ์ด์ง ๋น๋๋ฅผ ์ธก์ ํ๊ธฐ ์ํด ์ด๋ค ๊ธฐ์ค์ ์ฌ์ฉํฉ๋๊น?
GPU ์ธก(ํ์๋์ง ์์)์ CPU ๋๋ CPU์์ ์กฐ์ ๋ ์ ์์ต๋๋ค.
FPS๊ฐ 60๋ณด๋ค ํจ์ฌ ๋ฎ์ง๋ง "์ ํด"๊ฐ ํฐ ๊ฒฝ์ฐ GPU์ ๋๋ค.
์ ํด ์ํ๊ฐ ์์ผ๋ฉด CPU์ ๋๋ค.
computeVertices์๋ ๋ด๋ถ์ ํ๋ ฌ ์ฐ์ฐ์ด ์์ต๋๋ค. ๋ค ๋ชจ์๋ฆฌ๋ฅผ ํ๋ ฌ๋ก ๊ณฑํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
TS ํฌํฌ์ ๋ํ ์์ ์์ด๋์ด: ํ๋ ฌ ์ ํ์ ๋ํ ์์ฑ์ ์ธ๋ผ์ธํ๋ ๋ณํ์ ์ถ๊ฐํฉ๋๋ค. TS์๋ ์์ง ๊ทธ๋ฐ ์ข ๋ฅ์ ๋ณํ์ด ์๋ค๋ ๊ฒ์ด ๋ถ๋๋ฌ์ด ์ผ์ ๋๋ค :(
ํ๋ ฌ ๋ณ์์ ์ฃผ์์ ๋ฌ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ฉด babel์์๋ ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๋ ์ด์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํดํ ์ ์์ต๋๋ค.
์ผ๋์ ๋์ด์ผ ํ ์ฌํญ: ์ด ๋ฒค์น๋งํฌ์ ๋ชฉํ๋ ์ฒ์์ ๊ฐ์ฒด์ gl-๋งคํธ๋ฆญ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์์๋๋ก ์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋๋์ง ํ์ธํ๋ ๊ฒ์ด์์ต๋๋ค. ๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ์ ์ฐจ์ด์ ๊ด๊ณ์์ด ๊ฐ์ฒด ์ฑ๋ฅ์ด ๋๋ถ๋ถ์ ์ด๋ ์ด ์ผ์ด์ค๋ณด๋ค ๋์์ง ์๋ค๋ ๊ฒ์ ์ผ๊ด๋๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ๋ํ ํ ๋ผ ๋งํฌ๋ฅผ ํ๋กํ์ผ๋งํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์์ ์ผ๋ฐ์ ์ผ๋ก pixi์ ๋ํ ์ฑ๋ฅ ๊ฒฐ๋ก ์ ๋์ถํ๋ ๊ฒ์ ํผํ๊ณ ์ถ์ต๋๋ค. Chrome์์๋ ํ๋ก๊ทธ๋จ ์ด ์๊ฐ์ 50% ์ด์์ Sprite.calculateVertices()
(40% ish)๋ก ๋ณด๋ด๊ณ TransformStatic.updateTransform()
(11% ish) Firefox๋ ๋ ๋ฐฐ ๋น ๋ฅด๊ฒ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๋น์จ์ ์ด 2๊ฐ์ง ๊ธฐ๋ฅ์ ์์๋ ์๊ฐ์ ์ฌ์ ํ โโ์ผ์ ํฉ๋๋ค.
์ฃผ์ ์์ ๋๋ฌด ๋ฒ์ด๋๋ ๊ฒ์ ํผํ๊ณ ์ถ์ง๋ง ์ด bunnymark ํ๋กํ์ผ๋ง์ ์ํํ ๋ es5 getters/setters์ ์ฌ์ฉ์ด ํฌ๋กฌ์ ์ฑ๋ฅ ์ ํ์ ๊ด๋ จ์ด ์์ ์ ์๋ค๊ณ ์๊ฐํ๊ธฐ ์์ํ์ต๋๋ค. https: //jsperf.com/es5-getters-setters-versus-getter-setter-methods/10
์ฌ๊ธฐ ์ฌ๋์ค ํ๊ณ ๊ณ์๋ ๋ถ๋ค ๊ณ์ ๊ฐ์? ์ฌ๊ธฐ์์ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ๊ฒ๋ณด๋ค ๋ฐ ์ค์๊ฐ์ผ๋ก ์ฑํ ํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@mreinstein์ ์ด๋ฉ์ผ ์๊ฒ ์ต๋๊น ? ์ฌ๋์ผ๋ก ์ด๋ํฉ๋๋ค๐
@englercj๊ฐ ๋งํ
์์ ์ ๋ฐ์ดํธ: Float64Array ๊ธฐ๋ฐ https://github.com/pixijs/pixi-projection/blob/master/src/Matrix2d.ts ์ 3x2 ๋์ 3x3 ๋งคํธ๋ฆญ์ค๊ฐ ์์ต๋๋ค.
์ด ์ค๋ ๋๋ ๋ซํ ํ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ ๊ฒผ์ต๋๋ค. ๊ด๋ จ ๋ฒ๊ทธ์ ๋ํ ์ ๋ฌธ์ ๋ฅผ ์ฌ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@GoodBoyDigital ์๋ง๋ ๋น์ ์ด ์ณ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด ์น๊ตฌ ๋ถ์ธ์๊ฒ ์์งํฉ๋๋ค. ๊ตฌ๊ธ, ๋๋ ์ด๊ฒ์ ์ฐ์ฐํ ๋ฐ๊ฒฌํ๋ค :
https://stackoverflow.com/questions/15823021/when-to-use-float32array-instead-of-array-in-javascript
์ต๊ณ ๋ฑ๊ธ์ ๋ต๋ณ(ํ์ฌ 44ํ)์ ํฉ๋ฆฌ์ ์ด๊ณ ์ ์ ํด ๋ณด์ ๋๋ค.