ํ ์คํธ๋ฅผ ์ฝ๊ฒ ์ฝ์ ์ ์๋๋ก ํฐ์ ํ ์คํธ ์ฃผ์์ ๊ฒ์ ํ ์คํธ ์ค๊ณฝ์ ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ด๋ ค๊ณ ํฉ๋๋ค. ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง troika-three-text์ ๊ด๋ จํ์ฌ ์ ฐ์ด๋๋ฅผ ์ฌ์ฉํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ํจ๊ณผ๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ์ ๊ณตํ ์ ์์ต๋๊น?
๊ฐ์ฌ ํด์!
์์์ ์ง์ ํ ์๋ง ์๋ค๋ฉด ๋ด๊ฐ ์ํ๋ ๊ฒ์ debugSDF ํ๋๊ทธ๋ก ์ํ๋ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
sdf๋ฅผ ํ์ํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ์ง์ ํ๊ณ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ณ ์ ์ฌ์ ์ผ๋ก ์ฝ๊ฐ ๋ ์ ๋ช
ํ๊ฒ ๋ง๋ค ์ ์๋ ์์๋ผ์ธ์ด ์ ๊ณต๋ฉ๋๋ค.
์ด ์์ ์ ๋๋ฌด ์ด๋ ต์ง ์์์ผ ํฉ๋๋ค. ๋๋ ์ผ๋ง ์ ์ textOutline์ ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์์ํ์ง๋ง ๋๋ด์ง ๋ชปํ์ต๋๋ค.
์ด๋ก ์ ์ผ๋ก ๊ธ๋ฆฌํ ๊ฐ์ฅ์๋ฆฌ๋ ๊ฐ์ฅ์๋ฆฌ์ ํด๋นํ๋ ๋ถํธ ์๋ ๊ฑฐ๋ฆฌ ํ๋์ ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ๊ฐ๋จํ ํ์ฅํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ํ์ฌ ์
ฐ์ด๋ ์ฝ๋ ์์ 0.5
์ด์ง๋ง, ์ ๋ํผ์ผ๋ก ์ ๋ฌํ์ฌ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ด์์ ์ผ๋ก ์ ฐ์ด๋๋ ๋จ์ผ ๊ทธ๋ฆฌ๊ธฐ ํธ์ถ์์ ์ผ๋ฐ ๊ธ๋ฆฌํ์ ๊ทธ ์ฃผ์์ ์ค๊ณฝ์ ์ ๋ชจ๋ ๊ทธ๋ฆฌ๋ ๊ฒ์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์ค๊ณฝ์ ๋๋น(๋จ์๊ฐ ๋ฌด์์ธ์ง ํ์คํ์ง ์์) ๋ฐ ์์ ์ค๊ณฝ ์์ญ.
๋๋ ์ผ๋ง ์ ์ textOutline์ ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์์ํ์ง๋ง ๋๋ด์ง ๋ชปํ์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋๋ค๋ฉด ๋งค์ฐ ๊ธฐ์ ๊ฒ์
๋๋ค :)
๊ทธ๋ฌ๋ ์ ๋ ์
ฐ์ด๋๋ฅผ ์ฒ์ ์ ํ๊ธฐ ๋๋ฌธ์ ์ผ๋ง๋ ๋์์ด ๋ ์ ์์์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ ์ฌํ ์ง์ผ๋ณด๊ฒ ๋ค.
๋๋ ์ด๊ฒ์ ์กฐ๊ธ ๋ค์ ์์ํ๊ณ ๋ด๊ฐ ์๋ ์ ๊ทธ๊ฒ์ ๋๋ด์ง ์์๋์ง ๋นจ๋ฆฌ ๊นจ๋ฌ์๋ค. SDF๋ ๊ฐ์์ _์ฌ์ฉํ ์_ ์์ง๋ง ๋ช ๊ฐ์ง ์ฃผ์ ์ฌํญ์ด ์์ต๋๋ค.
๋ฐ๋ผ์ "W"์ ๊ฐ์ ํฐ ๊ธ๋ฆฌํ๋ ์๋นํ ๋๊บผ์ด ์ค๊ณฝ์ ์ ์ป์ ์ ์์ง๋ง ๋ง์นจํ์ ๊ฐ์ ์์ ๊ธ๋ฆฌํ๋ ๋งค์ฐ ์์ ์ค๊ณฝ์ ๋ง ์ป์ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ธ๋ฆฌํ๋ ์ค๊ณฝ์ ์ ์๊ฐ์ ์ผ๋ก ์ผ๊ด์ฑ ์๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ค๋ฅธ SDF ์ปท์คํ ์ง์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋๋ ์ด๊ฒ์ด ์์ง ๊ทน๋ณตํ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฒ์์ ์๊ฐํ๋ ๊ฒ๋งํผ ๊ฐ๋จํ์ง ์์ต๋๋ค.
@lojjic , ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๐ฅ๋ฅผ ์ฌ๋ํ์ง๋ง ํ ์คํธ ๊ฐ์๋ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ์ ๋๋ค...
๋๋ ์ด๊ฒ์ ์กฐ๊ธ ๋ค์ ์์ํ๊ณ ๋ด๊ฐ ์๋ ์ ๊ทธ๊ฒ์ ๋๋ด์ง ์์๋์ง ๋นจ๋ฆฌ ๊นจ๋ฌ์๋ค. SDF๋ ๊ฐ์์ _์ฌ์ฉํ ์_ ์์ง๋ง ๋ช ๊ฐ์ง ์ฃผ์ ์ฌํญ์ด ์์ต๋๋ค.
- ์์๋ผ์ธ์ ์ ์ฌ์ ์ธ ์ต๋ ๋๋น๋ ๋์คํด์ค ํ๋ ์์ฒด์ ๋ฒ์์ ์ํด ์ ํ๋ฉ๋๋ค(64x64 SDF ํ ์ค์ฒ์์ ~8 ํ ์ ).
- SDF ํ ์ค์ฒ๊ฐ ๊ฐ ๊ธ๋ฆฌํ์ ๊ฒฝ๊ณ์ ๋ง๊ฒ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๊ธฐ ๋๋ฌธ์ ์ด๋ ๋ชจ๋ ๊ธ๋ฆฌํ์์ ์ผ๊ด๋ ์๊ฐ์ ํฌ๊ธฐ์ ํด๋นํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ "W"์ ๊ฐ์ ํฐ ๊ธ๋ฆฌํ๋ ์๋นํ ๋๊บผ์ด ์ค๊ณฝ์ ์ ์ป์ ์ ์์ง๋ง ๋ง์นจํ์ ๊ฐ์ ์์ ๊ธ๋ฆฌํ๋ ๋งค์ฐ ์์ ์ค๊ณฝ์ ๋ง ์ป์ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ธ๋ฆฌํ๋ ์ค๊ณฝ์ ์ ์๊ฐ์ ์ผ๋ก ์ผ๊ด์ฑ ์๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ค๋ฅธ SDF ์ปท์คํ ์ง์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋๋ ์ด๊ฒ์ด ์์ง ๊ทน๋ณตํ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฒ์์ ์๊ฐํ๋ ๊ฒ๋งํผ ๊ฐ๋จํ์ง ์์ต๋๋ค.
๊ถ๊ธํฉ๋๋ค. ์ค๊ณฝ์ ๋ฐ/๋๋ ๊ทธ๋ฆผ์ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ์
ฐ์ด๋๋ฅผ ์ฌ์ฉํ์ฌ ์ผ์ข
์ ํ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์์ต๋๊น? ๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๋ฌ์ฑํ๋ ค๋ ํจ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํธ์ง : ์ด๊ฒ์ mapbox gl์์ ๊ฐ์ ธ์จ ๊ฒ์ ๋๋ค. SDF๋ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค https://blog.mapbox.com/drawing-text-with-signed-distance-fields-in-mapbox-gl-b0933af6f817 , ์๋ง๋ ์ฐ๋ฆฌ๋ ํ ์ ์์ต๋๋ค ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ ๊ทธ๋ค์ด ํ ์ผ์ ํ์ธํ์ญ์์ค. https://github.com/mapbox/mapbox-gl-js
Mapbox์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. @anzorb. ๋๋ ๊ทธ๋ค์ ๊ตฌํ์ ๋ ์์ธํ ํ์ธํ๊ฒ ์ง๋ง, ๊ทธ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ(๊ทธ๋ค์ ์์๋ผ์ธ์ "ํ๊ด"์ด๋ผ๊ณ ๋ถ๋ฆ)์์ ์ด์ ์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ SDF ์ํ ์๊ณ๊ฐ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ SDF ์์ฑ ๋ฐ ์ํ๋ผ์ค ํจํน ์ ๋ต์ ๋ด ๊ฒ๊ณผ ๋ค๋ฅด๋ฉฐ ๊ธ๋ฆฌํ๋น ๋น๊ท ์ผ ๋์คํด์ค ํ๋ ํฌ๊ธฐ์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ผํ ์ต๋ ์ค๊ณฝ์ ๋๋น ์ ํ์ด ์์ ๊ฒ์ ๋๋ค.
๋๋ ์ค์ ๋ก ํ์ค ํ์ ์ํ์ ์ฌ์ฉํ์ฌ _ํ๋ฉด ๊ณต๊ฐ_ ์ค๊ณฝ์ ์ ๋ํด ์ฝ๊ฐ์ ์ง์ ์ ์ด๋ฃจ์์ต๋๋ค. ์ค๊ณฝ์ ์ ์๋ฏธํ๋ ํ๋ฉด ๊ณต๊ฐ์ ์๋ฅผ ๋ค์ด ํ ์คํธ์ ํฌ๊ธฐ/์ถ์ฒ ๋๋ ๊ธฐ์ธ๊ธฐ์ ๊ด๊ณ์์ด ๋๋น๊ฐ 1 ํ๋ฉด ํฝ์ ์ด ๋ฉ๋๋ค. ๋ชฉํ๊ฐ ๋ฐฐ๊ฒฝ๊ณผ์ ๋๋น๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๋ผ๋ฉด ํ ์คํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ ์ค๊ณฝ์ ๋งํผ ์ข์ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ํ ์๊ฒฌ์ด ์์ต๋๊น?
ํ์คํ๋ ๋๋น๋ ์ค์ผ์ผ๋ง ๋๋น๋ณด๋ค ํจ์ฌ ๋ ์ ํธ๋ฉ๋๋ค. ์ด๋ฐ ์์ผ๋ก CSS์ฒ๋ผ ๋ ๋ง์ด ์๋ํฉ๋๋ค.
CSS๋ฅผ ํตํด ์ ์ฉ๋๋ ๋ชจ๋ text-shadow
๋ font-size
์ ๋
๋ฆฝ์ ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ ์ํ ์๋ฃจ์
@lojjic ์ด ๋์ผํ ๋ฐฉ์์ผ๋ก ์ํ๋๋ค๋ฉด ๊ทธ๊ฒ์ ๐ ๐ ๐๊ฐ ๋ ๊ฒ์
๋๋ค.
@lojjic์ ์ ์ํ ์๋ต์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๋ชฉํ ๋ ๋๋น๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๋ฉฐ ์ ์์ด ๋ฉ์ง๊ฒ ๋ณด์ ๋๋ค. ์ค๊ณฝ์ ์ด ๊ณ ์ ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น? ์ฆ, ๊ทธ๊ฒ์ ์ ์ดํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค( @stephencorwin์ด ์ค๋ช ํ๋ฏ์ด text-shadow-ish ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ).
์์งํ ๋งํ๋ฉด, ์ด๊ณ ๋ฐ๋ ๋์คํ๋ ์ด์์ 1ํฝ์ ์ด ๋ณด์ด๋ ํ ๋ฌธ์ ๋ก ๋ณด์ง ์์ต๋๋ค(ํ์ฌ ๋ฐ๋์ ๊ด๊ณ์์ด "๋์ผํ" ๋น์จ์ ๋ฌ์ฑํ๊ธฐ ์ํด ๊ธ๊ผด ํฌ๊ธฐ์ ์ฅ์น ํฝ์ ๋น์จ์ ๊ณฑํ๊ธฐ ๋๋ฌธ) , ๋น์ ์ ์ ์์ ๋ ๋์ DPI ์ฅ์น์์ ์ค๊ณฝ์ ์ด ๋์ ๋๊ฒ ๋ ์์์ง๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๋๋ ๋น์ ์ ์ ์์ด ๋ ๋์ DPI ์ฅ์น์์ ์ค๊ณฝ์ ์ด ๋์ ๋๊ฒ ๋ ์์ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ ์ฃ ?
์, ๊ทธ๊ฒ์ ํ๋ฉด ๊ณต๊ฐ ์ ๊ทผ ๋ฐฉ์์ ํ ๊ฐ์ง ๋จ์ ์ ๋๋ค. ๊ทธ๊ฒ์ ๋ง์ ์๋๋ฆฌ์ค์์ ๊ด์ฐฎ์ ์ ์์ง๋ง ๋์์ด๋๋ก์ ์ฅ์น์์ ๋ค๋ฅธ ๋ชจ์์ ๊ฐ๋ ๊ฒ์ ๊ท์ฐฎ๊ฒ ํ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ํฐ ๋จ์ ์ (๋ด ์๊ฐ์) ํ๊ด ๋๊ป๋ฅผ ๋๋ฆฌ๋ฉด ๋ ๋ง์ ํ ์ค์ฒ ์ฝ๊ธฐ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋๋ ์ด๊ฑด ๊ณ์ ์ฐ๊ตฌํด์ผ ํด์.
์ ์๊ฒ๋ ์ด ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค. ๋๋ ์ค๋์ ์ ๊ฐ๋ฐํ Android ์ฑ์์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ตฌํํ์ผ๋ฉฐ ๋ ์์ ๊ณผ ์น๊ตฌ๋ค๋ง์ ์ํด ์ฌ์ฉํ์ต๋๋ค. ๋๋ ์ด ์ฑ์ React๋ก ๋ค์ ๊ตฌํํ๊ธฐ ์์ํ๊ณ ๋น์ ์ ํ๋ก์ ํธ๋ฅผ ์ฐพ๊ธฐ ์ํด ์์ต๋๋ค.
๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด ๋์๊ด์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋๋๋ค.
๋ ๋ง์ ์ง๊ฐ ์ฝ๊ธฐ์ ๋ํ ๊ทํ์ ์๊ฒฌ์ ๋ํด, ๋๋ ๋น์ ์ด ๊ทธ๋ ๊ฒ ๋ง์ด ๊ฑฑ์ ํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ํ ์ถ๊ฐ ํ ์ ์ ์ธ์ ํ๋๊ทธ๋จผํธ์ ํ์ํ ํ ์ ์ด๋ฏ๋ก ์ด์จ๋ GPU ์บ์์ ์์ ๊ฒ์ด๋ฉฐ ๋น์ฉ์ ๊ฑฐ์ ๋ค์ง ์์ ๊ฒ์ ๋๋ค.
@FunMiles๋ฅผ ์ ๋ ฅํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. (์ฝ๋ก๋ผ๋ ๋ํ! ๐)
๋๋ ๋น์ ์ด 1, ์๋ง๋ 2 ์กฐ๊ฐ ๋๊ป์ ์ค๊ณฝ์ ์ ๋ํด ์ณ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด ์ฐ๋ ค๋ ๋๊ป๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ํ ์ค์ฒ ์ฝ๊ธฐ์ ์(๋๊ป 4 = 56 ์ฝ๊ธฐ?)์ ํด๋น ์ฝ๊ธฐ๊ฐ ๋ ๋น์ ๊ฐ๋ฅ์ฑ์ด ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๋ช ๊ฐ์ง๋ฅผ ์ฝ๊ณ ์ถ์ธกํ์ ๋ฟ์ด๋ฉฐ GPU ์ ๋ฌธ๊ฐ๋ ์๋๋๋ค. ๋๋ ์๋ง ๊ทธ๊ฒ์ ์๋ํด์ผ ํ ๊ฒ์ ๋๋ค.
@lojjic (๋ถ์ชฝ ๐ ) ํ๋๊ทธ๋จผํธ ์
ฐ์ด๋์ ์ฝ๋๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํ์ต๋๋ค. ์
ฐ์ด๋๋ฅผ ์์ ํ ์์ฑํ๋ ๋์ ์์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋(๊ทธ๋ฆฌ๊ณ ์ด๋๊ฐ์์ ์ฝ์ ๊ฒ ๊ฐ์ต๋๋ค) ์ํฉ์ ํ์
ํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช๊ณ ์์์ ์ธ์ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ ์ฒด ์
ฐ์ด๋๊ฐ ๋ฌด์์ธ์ง, ์ค์ ๋ก ์ด๋ป๊ฒ ์ฐ๊ฒฐํ๋์ง ์ ์๋ ์์ง๋ง ํต์ฌ ๋ฃจํด์ ์ด๋ ์ ๋ ์ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค...
์ง๊ธ texture2D(uTroikaSDFTexture, vTroikaSDFTextureUV).r;
ํฝ์
์ ์ค์นผ๋ผ ๊ฑฐ๋ฆฌ๋ฅผ ์ฝ์ต๋๋ค. ๋น์ ์ด ์ ์ ์ด ๊ฒ์ ์ดํดํ๋ค๋ฉด, ํ ๊ฐ์ง ๋ฌธ์ ๋ ๊ธ๋ฆฌํ ์ฃผ๋ณ์ ๊ณต๊ฐ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ ์์ธํ ์ค๋ช
ํด ์ฃผ์๊ฒ ์ต๋๊น?
'W' ๋ฐ ','์ ์๋ก ๋์๊ฐ์ ํ
์ค์ฒ์ vTroikaSDFTextureUV ๋ฒ์๊ฐ ๊ธ๋ฆฌํ ์ฃผ์์ ์ ํํ ๊ผญ ๋ง์ต๋๊น? ์๋๋ฉด ์ถ๊ฐ ๊ณต๊ฐ์ด ์์ต๋๊น? ์กฐ๊ฐ ์
ฐ์ด๋๋ ํ์ฌ ๊ธ๋ฆฌํ์ UV ๊ฒฝ๊ณ๋ฅผ ์๊ณ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ธ๋ถ์ ์๋ ์กฐ๊ฐ์ ๊ฒฝ์ฐ ํ์ฌ UV๋ฅผ ๊ฒฝ๊ณ์ ํฌ์ํ๊ณ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
์ต๋ 5๊ฐ์ ํ ์ ์ฝ๊ธฐ ๋๋ ํ์ ์ํ์ ์ฌ์ฉํ์ฌ ํ์ํ ๊ฒ์ด ๋ฌด์์ธ์ง ์์๋ด๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค(์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํ์ธ์).
'W' ๋ฐ ','์ ์๋ก ๋์๊ฐ์ ํ ์ค์ฒ์ vTroikaSDFTextureUV ๋ฒ์๊ฐ ๊ธ๋ฆฌํ ์ฃผ์์ ์ ํํ ๊ผญ ๋ง์ต๋๊น? ์๋๋ฉด ์ถ๊ฐ ๊ณต๊ฐ์ด ์์ต๋๊น?
๊ฐ ๊ธ๋ฆฌํ์ ์ค์ ๊ฒฝ๋ก ๊ฒฝ๊ณ ์ฃผ์์๋ ๊ฑฐ๋ฆฌ ํ๋์ ์ธ๋ถ ๋ถ๋ถ์ ์์ฉํ๊ธฐ์ ์ถฉ๋ถํ ์ฝ๊ฐ์ ์ถ๊ฐ ๊ณต๊ฐ์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ SDF์์ 8 ํ ์ ์ด์ง๋ง, ๊ฐ SDF๋ ๋ค์ํ ํฌ๊ธฐ์ ๊ธ๋ฆฌํ ์ฟผ๋๋ก ํฌ๊ธฐ๊ฐ ์กฐ์ ๋ ๊ท ์ผํ 64x64์ด๊ธฐ ๋๋ฌธ์ ๋ณด์ด๋ ์ฌ๋ฐฑ์ ๊ธ๋ฆฌํ๋ง๋ค ๋ค๋ฆ ๋๋ค.
์กฐ๊ฐ ์ ฐ์ด๋๋ ํ์ฌ ๊ธ๋ฆฌํ์ UV ๊ฒฝ๊ณ๋ฅผ ์๊ณ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ธ๋ถ์ ์๋ ์กฐ๊ฐ์ ๊ฒฝ์ฐ ํ์ฌ UV๋ฅผ ๊ฒฝ๊ณ์ ํฌ์ํ๊ณ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
ํด๋น ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ๋๋ "ํ์ฌ UV๋ฅผ ๊ฒฝ๊ณ์ ํฌ์ํ๊ณ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ฝ์ผ๋ฌ ๊ฐ์ญ์์ค"์ ๋ํด ๋น์ ์ ๋ฐ๋ฅด์ง ์์ต๋๋ค.
์ ์ ์์ ํ
์
์ฝ๊ธฐ๋ก ๋ ๋๊บผ์ด ์ค๊ณฝ์ ์ ์ป๋ ๋ฐฉ๋ฒ์ ์๊ณ ๊ณ์๋ค๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค! ๋๋ ๊ทธ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋
ํํ์ต๋๋ค. ๊ธ๋ฆฌํ ๊ฒฝ๋ก ์์ ์์ง ์์ ์กฐ๊ฐ์ ๋ํด ๋ฐฉ์ฌํ ๊ฒ์์ ์ํํ์ฌ r= ๋ด์ ์กฐ๊ฐ์ด ์๋์ง ํ์ธํ์ญ์์ค.
ํ ๊ฐ์ง ๋ฌธ์ ๋ ๊ธ๋ฆฌํ๊ฐ ๋๋ํ ๋์ผ ๋ ๋ฐ์ํ๋ ์ผ์
๋๋ค. ์ง๊ธ์ ์ ์ณ๋๊ณ ๊ฝค ๋๊บผ์ด ์ค๊ณฝ์ t
์ผ๋ก ๊ทธ๋ ค์ง ๋จ์ผ ๋ฌธ์์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ค๊ณฝ์ ์ ์์ฉํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ํฐ ์ฌ๊ฐํ์ผ๋ก ์บ๋ฆญํฐ๊ฐ ๊ทธ๋ ค์ง๊ณ ์์ต๋๋ค.
ํ๋๊ทธ๋จผํธ ์
ฐ์ด๋์๋ vTroikaSDFTextureUV
๋ฐ vTroikaGlyphUV
์ ๋ ๊ฐ์ง ์ฃผ์ ์ ๋ณด๊ฐ ์์ต๋๋ค.
๋ด ์ดํด๋ vTroikaGlyphUV
๊ธ๋ฆฌํ ๋ด๋ถ์์ 0๊ณผ 1 ์ฌ์ด์์ ๊ณ ์ ๋ ๊ฐ์ ๊ฐ๋๋ค๋ ๊ฒ์
๋๋ค. ๋ด๊ฐ ํฌ์์ ๋ํด ์ด์ผ๊ธฐํ ๋ ์๋ฏธํ ๊ฒ์ vTroikaGlyphUV
๊ฐ ํด๋น ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ฉด ๊ธ๋ฆฌํ ๊ฒฝ๊ณ์ "ํฌ์๋" ์ ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฒ์ํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์ฆ, uv = (1.05, 0.7)์ธ ๊ฒฝ์ฐ ํฌ์๋ ์ ์ (1.0, 0.7)์
๋๋ค. (1.0, 0.7+epsilon) ๋ฐ (1.0, 0.7-epsilon)์ ๊ฐ์ ์ฌ์ฉํ์ฌ ๊ฑฐ๋ฆฌ์ ๋ํ ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ฒ์ํ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ์ฌ์ฉํ์ฌ (1.05, 0.7)์์ ๊ทผ์ฌ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค.
๋ด๊ฐ ์ด๊ฒ์ ์ํด ๋ด ์์ ์ ์์
์ ์ํํ์ ๋ ํ
์ค์ฒ์ ๊ทธ๋ผ๋์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ SDF๋ฅผ ์ํํ๋ ๋๊ตฐ๊ฐ์ ๊ธฐ์ฌ๋ฅผ ์ฝ์ ๊ธฐ์ต์ด ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ 3๊ฐ์ ํ
์
์ ์ฝ์ ํ์๊ฐ ์์ง๋ง ํ
์ค์ฒ๋ฅผ 3๊ฐ์ ๊ตฌ์ฑ ์์ ํ
์ค์ฒ๋ก ๋ง๋ค๊ณ ํ
์ค์ฒ๋ฅผ ๋น๋ํ๋ ๋ฐ ๋ณต์ก์ฑ์ ์ถ๊ฐํฉ๋๋ค.
์ด๊ฒ์ด ๊ทํ์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ๋๊น?
์ด์ ์ฌ๋ฌ ์บ๋ฆญํฐ๊ฐ ๋๋ํ ์์ ๋ ๊ฐ๊ฐ์ ์ด์์ ์ธ์ํด์ผ ํ๋ฏ๋ก ์ด๋ฅผ ์กฐ๊ธ ๋ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค. ํ์ฌ ์บ๋ฆญํฐ๋ฟ๋ง ์๋๋ผ ์ด์์ ๋ํด์๋ GlyphUV ๋ฐ TextureUV๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค. ๊ฐ ๋ฌธ์๋ฅผ ๋ ๊ฐ์ ์ง์ฌ๊ฐํ์ผ๋ก ์๋ผ์ผ ์ด์์ด ์ฒซ ๋ฒ์งธ ์ง์ฌ๊ฐํ์ ๊ฒฝ์ฐ ์ด์ ํญ๋ชฉ์ด ๋๊ณ ๋ ๋ฒ์งธ ์ง์ฌ๊ฐํ์ ๊ฒฝ์ฐ ์ดํ ํญ๋ชฉ์ด ๋ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์ค์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.... ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์์ ํด๋น ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ ํ์๊ฐ ์์์ต๋๋ค. ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์ง๋์๊ณ ๊ฐ ๋ ์ด๋ธ์ ํ ์ค์ด์์ต๋๋ค.
์ถ์ : "๊ฐ ๊ธ๋ฆฌํ์ ์ค์ ๊ฒฝ๋ก ๊ฒฝ๊ณ ์ฃผ๋ณ์ ์ถ๊ฐ ๊ณต๊ฐ"์ ์๋ชป ์ดํดํ์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด X์ ๊ฒฝ์ฐ ์ง์ฌ๊ฐํ์ผ๋ก ๋๋ฌ์ธ์ฌ ์๊ณ ์ ํจํ ๊ฐ์ด ์๋ 4๊ฐ์ ์ผ๊ฐํ์ด ์๋ค๋ ๋ง์์ด์ ๊ฐ์?
@FunMiles ๋๋ _์๊ฐ__ ๋น์ ์ด ์ด๋๋ก ๊ฐ๋์ง ์ ๊ฒ ๊ฐ์ต๋๋ค. ๊น์ด ์๊ฐํ ์๊ฐ์ด ํ์ํ์ง๋ง ํ์ฌ ์ง์คํด์ผ ํ๋ ๋ค๋ฅธ ๋ง๊ฐ ์์ ์ด ์์ต๋๋ค.
์ถ์ : ์ฝ๊ฐ์ ์ฌ๋ฏธ์๋ ์ํ ๋ฉ๋ชจ:
๋๊ตฐ๊ฐ๊ฐ 2๊ฐ ๋๋ 3๊ฐ์ ์ ๋ ฌ๋ ์ ์์ ์ด๋ป๊ฒ ๊ธฐ์ธ๊ธฐ๋ฅผ ์ป์ ์ ์๋์ง ๊ถ๊ธํดํ๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๊ฑฐ๋ฆฌ์ ๊ธฐ์ธ๊ธฐ์๋ ๊ณ ์ ๋ ํ์ค์ด ์๋ค๋ ์ ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค(์ ํํ ์ถ์ฒ์ ๋ฐ๋ผ ๋ค๋ฆ). ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ผ๋ฐ์ด์
์ ํ์คํ ๊ธ๋ฆฌํ ์์์ ๋ฐ๊นฅ์ชฝ์ ๊ฐ๋ฆฌํต๋๋ค. ๋ฐ๋ผ์ ์๋ฅผ ๋ค์ด ์(1.0, 0.7), (1.0, 0.7+epsilon) ๋ฐ (1.0, 0.7-epsilon)์ 3๊ฐ ์ ๋ชจ๋๊ฐ ๋์ผํ ๊ฑฐ๋ฆฌ์ ์๋ ๊ฒฝ์ฐ ๊ธฐ์ธ๊ธฐ๋ (scale, 0)์
๋๋ค.
ํ์คํ ์ฑ๋ฅ์ด ์ข์ง๋ ์์ง๋ง ์คํ์
์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ฅํฉ๋๋ค. drei ํจํค์ง์ ํจ๊ป troika-text๋ฅผ ํ์ฉํ๋ react-three-fiber
๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํธ๋กํฌ๋ฅผ ์ง์ํ ๋๊น์ง ๋ค๋ฅธ ์ฌ๋๋ค์ด ์์๋ฐฉํธ์ผ๋ก ์๋ฃจ์
์ ์ฐพ๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๊ณต์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
import React from 'react';
import {Text} from 'drei';
const StrokedText: React.FC<
{
strokeWidth?: number;
strokeColor?: string;
strokeResolution?: number;
bold?: boolean;
} & any
> = ({
strokeWidth = 1,
strokeColor: color = '#000000',
strokeResolution = 100,
position,
bold,
...props
}) => {
const font = bold ? FONTS.BOLD : undefined;
const sharedProps = {
...props,
font,
color,
sdfGlyphSize: 12,
debugSDF: true,
};
let zOffset = 0;
const offset = () => (zOffset += 0.001);
return (
<group name="Stroked Text" position={position}>
{Array(strokeWidth)
.fill({})
.map((_, i) => {
const s= i / strokeResolution;
return (
<React.Fragment key={i}>
{/* <Text {...sharedProps} position={[-s, 0, offset()]} />*/}
{/* <Text {...sharedProps} position={[s, 0, offset()]} />*/}
<Text {...sharedProps} position={[0, -s, offset()]} />
<Text {...sharedProps} position={[0, s, offset()]} />
<Text {...sharedProps} position={[-s, -s, offset()]} />
<Text {...sharedProps} position={[s, s, offset()]} />
{/* <Text {...sharedProps} position={[-s, s, offset()]} /> */}
{/* <Text {...sharedProps} position={[s, -s, offset()]} /> */}
</React.Fragment>
);
})}
<Text name="Text" {...props} position={[0, 0, strokeWidth ? offset() : 0]} />
</group>
);
};
export default StrokedText;
๊ทธ๋ฐ ๋ค์ ๋ค๋ฅธ ๊ณณ์์๋ ์ผ๋ฐ์ ์ผ๋ก <Text />
<StrokedText />
๋ก ํธ์ถํ ์ ์์ต๋๋ค.
<StrokedText
color="#ffffff"
fontSize={fontSize}
clipRect={[-0.5, -0.15, 0.5, 0.15]}
textAlign="center"
position={[0, 0, 0.01]}
>
{text}
</StrokedText>
@FunMiles ๋ง์นจ๋ด ๊ทํ์ ์ ์์ ๊ตฌ๋ฌธ ๋ถ์ํ ์๊ฐ์ด ์๊ฒผ์ต๋๋ค. ๊ธ๋ฆฌํ์ SDF ์ฌ๊ฐํ ์ ์ฒด์ ์ ์ฉํ(> 0.0) ๊ฑฐ๋ฆฌ ๊ฐ์ด ํฌํจ๋์ด ์๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋๋ ๋น์ ์ด "x"์ ๋ํ ํ์ ์กฐ์น์์ ๊ทธ๊ฒ์ ๊นจ๋ซ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๊ธฐ์ SDF๋ ์ฟผ๋์ ๊ฒฝ๊ณ ๋ด์์ 0์ผ๋ก ์ ๋จ์ด์ง๋ฏ๋ก ์ธ์ฝํ ์ ์ฉํ ๊ฑฐ๋ฆฌ ๊ธฐ์ธ๊ธฐ๊ฐ ์๋ ์ค์ํ ์์ญ์ด ์์ต๋๋ค.
์ฟผ๋ ์ ์ฒด์ ๊ฑธ์ณ 0์ด ์๋ ๊ธฐ์ธ๊ธฐ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด SDF ์์ฑ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณผ ์ ์์ต๋๋ค...? ์๋ฆฌ๋ด์ด ์๊ฐํ๋ฉด ๊ฑฐ๋ฆฌ ์ ๋ฐ๋์ ๋ํ ์๋ฏธ๊ฐ ์์ ์ ์๊ณ ์ํ๋ผ์ค ํ ์ค์ฒ ๋ด์์ ์บ๋ฆญํฐ ์ฌ์ด์ ์ํฐํฉํธ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค... ๐ค
์ฟผ๋ ์ ์ฒด์ ๊ฑธ์ณ 0์ด ์๋ ๊ธฐ์ธ๊ธฐ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด SDF ์์ฑ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณผ ์ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์๋ํ๊ณ ๋ค, ๊ทธ๊ฒ์ ๊ฑฐ๋ฆฌ ํ๋๊ฐ ์ฟผ๋ ๊ฒฝ๊ณ๋ฅผ ๋์ด ์ธ์ฝ๋๋๋ก ํ์ฉํ์ง๋ง ๋ด๊ฐ ๋๋ ค์ํ๋ ๊ฒ์ฒ๋ผ ๊ธ๋ฆฌํ ์์ฒด์ ํ์ง์ ํฌ๊ฒ ๋จ์ด๋จ๋ฆฝ๋๋ค. ์ด๋ 8๋นํธ ๊ทธ๋ผ๋์ธํธ๋ก๋ง ์์๋ฉ๋๋ค. ๋ ๋จผ ๊ฑฐ๋ฆฌ์ ํผ๋จ๋ฆฌ๋ฉด ๊ฐ ํ ์ ์์ ์ ๋ฐ๋๊ฐ ๋ฎ์์ง๋๋ค. :(
์๋ง๋ ๋ ๋ฒ์งธ ํ ์ค์ฒ ์ฑ๋๋ก ์ธ์ฝ๋ฉ๋ ์ค๊ณฝ์ ์ ๋ํด ๋ณ๋์ SDF๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํ ์ค์ฒ ํฌ๊ธฐ๋ฅผ ๋ ๋ฐฐ๋ก ๋๋ฆฌ์ง๋ง ํฌ๊ฒ ๋๋ ค์๋ ์ ๋ฉ๋๋ค. ๐ค
๋ ๋ฒ์งธ ํ ์ค์ฒ ์ฑ๋๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
@lojjic ๊ทธ๊ฒ์ ๋งค์ฐ ํฉ๋ฆฌ์ ์ผ๋ก ๋ค๋ฆฌ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง๊ธ ๋น์ฅ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ชจ๋ฐฉํฉ๋๋ค. ๋ํ ์ตํธ์ธ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ๊ฐ์๋ฅผ ์์ฒญํ์ง ์์ผ๋ฉด ์ฑ๋ฅ์ด ์ ํ๋์ง ์์ต๋๋ค.
@lojjic @stephencorwin ์ด ์ ์ํ ์ตํธ์ธ ์ ๊ทผ ๋ฐฉ์์ ์๋ฌด๋ ์ง๋ถํ ์ค๋น๊ฐ ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ด ์ง๋ถํ์ง ์๋๋ก ํฉ๋๋ค.
๊ธฐ์ ์ ์ธ ์ธก๋ฉด์ผ๋ก ๋์๊ฐ๋๋ค. ์๋ต์์ X ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. ๋ชจ๋ ๊ธ๋ฆฌํ์ ๋ํด 64x64 ํฝ์ ์ด๋ผ๋ ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ์์ต๋๊น? 8๋นํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ๊ฑฐ๋ฆฌ ๊ณต๊ฐ์ ์ธ์ฝ๋ฉํด์ผ ํ๋ ๊ฒฝ์ฐ 2 _fractional_ ๋นํธ์ ์ ํ๋๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด ์ ํ๋๊ฐ ์ถฉ๋ถํ์ง ์๋ค๊ณ ๋ง์ํ์ ๊ฒ ๊ฐ์ต๋๋ค.
์์ฃผ ์ ์ ๋น์ฉ์ผ๋ก ์ ํ๋๋ฅผ ๋์ด๋ ๋ฐ ์ฌ์ฉ๋๋ ํธ๋ฆญ์ด ์์ ์ ์์ต๋๋ค. 8๋นํธ์ 64x64 ๊ทธ๋ฆฌ๋๋ฅผ ์ํํ๋ ๋์ 2x2 ๋ธ๋ก์ ๋ฐ์ดํฐ๋ฅผ 32๋นํธ ๋ฐ์ดํฐ๋ก ์์ถํฉ๋๋ค. ๋ ํฝ์
์ฌ์ด์ ๋ถํธ ์๋ ๊ฑฐ๋ฆฌ์ ํ ๊ฐ์ง ๋ถ๋ช
ํ ํน์ง์ ๋๊ฐ์ ์ผ๋ก ํญ์ [-1,1] ์ค๋ฅธ์ชฝ๊ณผ ์ผ์ชฝ, ์์ชฝ๊ณผ ์๋์ชฝ ๋ฐ [-sqrt(2), sqrt(2)] ๋ด์ ์๋ค๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ 2x2 ๋ธ๋ก ์ค์ฌ์ SD์ 12๋นํธ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๊ณ ํฝ์
์ ๊ฐ ์ค์ฌ์ 5๋นํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ฌ๊ณผ 2x2 ์ค์ฌ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ธ์ฝ๋ฉํ๊ฒ ๋ฉ๋๋ค. ์ด 5๋นํธ๋ ์ต๋ sqrt(2)/2 ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋
๋๋ค. ํจ๊ณผ์ ์ผ๋ก 5.5๋นํธ ์ ํ๋๋ฅผ ๊ฐ์ต๋๋ค.
์ค์ฌ์ 12๋นํธ๋ ์ต๋ 64์ ๊ฑฐ๋ฆฌ์์ ์ต์ 6๋นํธ์ ์ ํ๋๋ฅผ ์ธ์ฝ๋ฉํฉ๋๋ค. ๊ธฐ์ ์ ์ผ๋ก ์์์ ๋ชจ์๋ฆฌ์ ํ ์ง์ ๋ง ์๋ ๊ฒฝ์ฐ 12๋นํธ๋ ์ต๋ sqrt(2)*64๊น์ง ์ธ์ฝ๋ฉํ ์ ์์ด์ผ ํ์ง๋ง ์์๊ฐ ๋ชจ๋ ๊ธ๋ฆฌํ ์ฃผ์์ ํฉ๋ฆฌ์ ์ผ๋ก ์ค์์ ์์นํ ๊ฒ์ผ๋ก ์ถ์ ๋๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ด ์ค์ ๋ก ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ฌ์ค, ๊ธ๋ฆฌํ ์์ง์์ ๋ฉ์๋ก ๋ธํ๊ฐ ์ธ์ฝ๋ฉํด์ผ ํ๋ ์ ๋ณด๊ฐ ์ ์ต๋๋ค(๊ธ๋ฆฌํ ์์ง์์ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ ๋ ๊ทธ๋ผ๋์ธํธ ํ๋๋ ์ด์์์ ๊ฑฐ์ ๊ท ์ผํด์ง). ๋ฐ๋ผ์ ์ ๋ณด ์ด๋ก ์ ๊ด์ ์์ ๋ณผ ๋ ์ง์์
๋๋ค. ์ธ์ฝ๋ฉ ๊ฐ์ ๊ฐ๋ฅ
๋ ๋ง์ ์ค์ ์ ๋ณด๋ฅผ ์ป์ผ๋ ค๋ฉด .... ๊ทธ๋ฌ๋ ๋๋ ๊ทธ๋ฌํ ์ถ๊ฐ ์ต์ ํ๋ก ์์ํ์ง ์์ ๊ฒ์
๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ํฅ๋ฏธ๋ก์ด ๊ฒฐ๊ณผ ์ค ํ๋๋ ํ ์ค์ฒ๋ง ํ๋์จ์ด๊ฐ ๋ณด๊ฐ์ ์ํํ๋๋ก ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ๋๋ก ๋ฌด๋ฃ๋ก ๊ทธ๋ผ๋์ธํธ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋์์ด ํ์ํ๋ฉด ์ด ๋ชจ๋ ๊ฒ์ ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ์ ๊ตฌํํ ์ ์์ต๋๋ค.
์ถ์ : README.md ์ค ํ๋์์ ๋ณด๋ค ์ ๊ตํ SDF์ ๋ํ ํ ๋ก ์ ๋ณธ ๊ธฐ์ต์ด ์์ต๋๋ค. ๋ด๊ฐ ๊ฟ์ ๊พธ์์ต๋๊น? ๐ ๋ค๋ฅธ ์์คํ ์ด ์ฌ๊ธฐ์์ ๋์์ด ๋ ์ ์๋์ง ์์๋ณด๊ธฐ ์ํด ๋๊ตฐ๊ฐ ๋๋ฅผ ๋ค์ ์๋ดํด ์ค ์ ์์ต๋๊น?
@FunMiles ์์ฃผ ์๋ฆฌํ ์์ถ ์์ด๋์ด์ ๋๋ค. ๋ค๋ฅธ ์ต์ ์ด ์คํจํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ผ๋์ ๋๊ฒ ์ต๋๋ค. ํ๋์จ์ด์ ์ํ ์ ํ ๋ณด๊ฐ์ ์๋ ๊ฒ์ ๋ด๊ฐ ํ์ง ์์๋ ๋๋ ์ ์ถฉ์์ ๋๋ค. ๐
๋นํธ๊ฐ ์ถฉ๋ถํ์ง ์์ ๋ฌธ์ ๊ฐ 0.5๋ฅผ "0" ๊ฑฐ๋ฆฌ๋ก ์ฌ์ฉํ๋ฉด ์ ํ๋๋ฏ๋ก ์ํ ๊ฐ์ ์ ๋ฐ๋ง ์ํ ๋ฌธ์๋ฅผ ์ธ์ฝ๋ฉํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ธ๋ถ ๊ฑฐ๋ฆฌ์๋ ๋ ๋ง์ ๊ฐ์ ์ฌ์ฉํ๊ณ ๋ด๋ถ ๊ฑฐ๋ฆฌ์๋ ๋ ์ ์ ๊ฐ์ ์ฌ์ฉํ๋๋ก ์ ์ฌ์ ์ผ๋ก ์ ํํ์ฌ ์ฃผ๋ณ์์ ์ด๋ ์ ๋ ์ ๋ฐ๋๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋ต์ฅ. "๋ ์ ๊ตํ SDF"๋ ์ฌ๋ฌ ์์ ์ฑ๋์ด ์ฌ์ฉ๋๋ "MSDF"๋ฅผ ์๋ฏธํ ์ ์์ต๋๊น?
@FunMiles ์์ฃผ ์๋ฆฌํ ์์ถ ์์ด๋์ด์ ๋๋ค. ๋ค๋ฅธ ์ต์ ์ด ์คํจํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ผ๋์ ๋๊ฒ ์ต๋๋ค. ํ๋์จ์ด์ ์ํ ์ ํ ๋ณด๊ฐ์ ์๋ ๊ฒ์ ๋ด๊ฐ ํ์ง ์์๋ ๋๋ ์ ์ถฉ์์ ๋๋ค. ๐
๋ณด๊ฐ์ ์์ด๋ฒ๋ฆด๊น ๊ฑฑ์ ํ ํ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋น์ฉ์ ๋งค์ฐ ๋ฎ์ง๋ง ํ๋์จ์ด ์ง์์ด ์์ ๋ ํญ์ ๊ธฐ์ธ๊ธฐ(๋ฐ ์ฝ๊ฐ์ ๊ณก๋ฅ )๋ฅผ ๊ฐ๋ ์ด์ ์ด ๋ ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ค์ ๋ก ์ํ ์ ์ ๋ฐ์ฌ๋ฆผํ๊ณ ๋ฐ์ฌ๋ฆผ๋ ์ํ ์ ์ ๋ํ ์ ์คํ์ ๊ฐ์ ์ป์ต๋๋ค. ์คํฐ ์จ๋ฆฌ์ด์ฑ์ ์ํ ์กฐ๊ฐ์ ๋ถ๋ถ ์ปค๋ฒ๋ง์ ๊ณ์ฐํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๊ทธ๋๋์ธํธ์์ ํ๋ ๊ฒ์ฒ๋ผ ์งํ๋ฉ๋๋ค.
๋นํธ๊ฐ ์ถฉ๋ถํ์ง ์์ ๋ฌธ์ ๊ฐ 0.5๋ฅผ "0" ๊ฑฐ๋ฆฌ๋ก ์ฌ์ฉํ๋ฉด ์ ํ๋๋ฏ๋ก ์ํ ๊ฐ์ ์ ๋ฐ๋ง ์ํ ๋ฌธ์๋ฅผ ์ธ์ฝ๋ฉํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ธ๋ถ ๊ฑฐ๋ฆฌ์๋ ๋ ๋ง์ ๊ฐ์ ์ฌ์ฉํ๊ณ ๋ด๋ถ ๊ฑฐ๋ฆฌ์๋ ๋ ์ ์ ๊ฐ์ ์ฌ์ฉํ๋๋ก ์ ์ฌ์ ์ผ๋ก ์ ํํ์ฌ ์ฃผ๋ณ์์ ์ด๋ ์ ๋ ์ ๋ฐ๋๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์ต๋ 1๋นํธ์ ์ ํ๋๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ฌ์ฑ๊ธฐํ์ง๋ ์์ง๋ง ์ฌ์ ํ ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์์ต๋๋ค.
๋ต์ฅ. "๋ ์ ๊ตํ SDF"๋ ์ฌ๋ฌ ์์ ์ฑ๋์ด ์ฌ์ฉ๋๋ "MSDF"๋ฅผ ์๋ฏธํ ์ ์์ต๋๊น?
๊ทธ๊ฒ ๋ด๊ฐ ์๋ฏธํ๊ฑฐ์ผ. C++์์ ์ด์ ๋ํ GitHub ํ๋ก์ ํธ๋ฅผ ์ฐพ์์ต๋๋ค. ์ธ๋งํ๊ฒ ์์๋์?? ์๋๋ฉด ์ ๊ฐ 2์ฃผ์ ์ ์ฐพ์๋ณธ ์ฌ๋ฌ๊ฐ์ง๋ฅผ ์์ด์ ํท๊ฐ๋ฆฐ๊ฑด๊ฐ์?
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , MSDF๊ฐ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
JavaScript์์ SDF๋ฅผ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ ์์ .md ํ์ผ์ด ์๋์ง ์ฌ์ญค๋ด๋ ๋ ๊น์? ์ด๋ฅผ ํตํด ์์ถ ์์ด๋์ด๋ฅผ ๊ตฌํํ๋ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
SDF๋ https://github.com/protectwise/troika/blob/master/packages/troika-three-text/src/worker/SDFGenerator.js#L134 ์ ๊ตฌ์ถ๋์ด ์์ต๋๋ค. ํ ์ ์ ๊ธ๊ผด ๋จ์๋ก ๋งคํํ๊ณ ์ธก์ ๋ ๊ฑฐ๋ฆฌ๋ฅผ ํ ์ ๊ฐ์ ๊ธฐ๋กํฉ๋๋ค. ๊ฐ 2x2 ๋ธ๋ก์ ์ค์ฌ์ ์ ๋ํด ์ถ๊ฐ ๊ฑฐ๋ฆฌ ์ธก์ ๊ฐ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๋ด ๋๋๋ฅผ ์ด๊ฒ์ผ๋ก ์์ ํ ๊ฐ์ธ๋ ค๊ณ ํ๋ ์ค... GLSL์์ ์์ ํ ๋ณด๊ฐ์ ๋ณต์ ํ๋ ๊ฒ์ ๊ฐ์ฅ ๊ฐ๊น์ด 4๊ฐ์ ๊ฐ์ด ์์ผ๋ฉด ๊ฐ๋จํ๊ณ /์ ๋ ดํด ๋ณด์ ๋๋ค. ์์ถ ์ฒด๊ณ๋ก ์ธ์ฝ๋ฉ๋ ๋ ํด๋น ๊ฐ์ ์ป์ผ๋ ค๋ฉด ๋ค์์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ๊ทธ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ grokkingํ๊ณ ์์ต๋๊น?
์ ์ ๊น๋ง, ๋๋ ์ฌ์ ํ ๋จ์ผ ์ฑ๋ ํ ์ค์ฒ๋ฅผ ์๊ฐํ๊ณ ์์์ต๋๋ค. 4๊ฐ์ rgba ์ฑ๋์ ์ฌ์ฉํ์ฌ ๊ฐ ๋ฐ์ดํฐ ๋ธ๋ก์ ๋จ์ผ ์ฝ๊ธฐ์ ๋๋ค. ๋ฐ๋ผ์ ์ต๋ 4๊ฐ์ ํ ์ค์ฒ ์ํ์ด ์์ต๋๋ค.
๋๋ SDFGenerator.js๋ฅผ ์ฝ๊ธฐ ์์ํ์ต๋๋ค. ๋ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ชจ๋ ๋ฉด์์ ๊ธ๋ฆฌํ ๊ฐ์ฅ์๋ฆฌ๋ก ๋๋ฌ์ธ์ธ ์ง์ ์ ์์ ์ ์๋ ๋ชจ์๋ฆฌ ๊ฒฝ์ฐ์ ๋ํด ์ํ ๋ธ๋ ๋ฉ์ ํน๋ณํ ๊ฐ์ ํ๋ ค๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ์กฐ๊ฐ๋น ๋จ์ผ ํ
์
์ ์ฝ๋ ๊ฒ ์ด์์ ํ์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์กฐ๊ฐ์ ์ค์ฌ์ด ์๋ 2x2 ๋ธ๋ก์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ค์ฌ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ด๊ฐ ์์ํ์ง ๋ชปํ ์ด๋ ค์์ด ์์ ์ ์์์ ๊นจ๋ฌ์์ต๋๋ค... WebGL 1.0์ ์ฌ๊ธฐ์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ด ๋งค์ฐ ์ ํ์ ์
๋๋ค. ๋ถํธ ์๋ ์ ์ ์ ํ ์์ uint
32๋นํธ ์ ์๋ ์๋๋๋ค! ๐คฏ ๊ทธ๋ฆฌ๊ณ ๋นํธ ์ฐ์ฐ์ด ์์ต๋๋ค... ๊ทธ๋์ ์ ๊ฐ ์ ์ํ๋ ์์ถ์ 16๋นํธ ์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๊ธฐ๊ฐ ์กฐ๊ธ ๋ ๊น๋ค๋กญ์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ด WebGL 2.0์์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง ์ฌ๊ธฐ์์ WebGL 1.0์ ๋์์ผ๋ก ํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํฉ๋๊น?
์ด ๋ชจ๋ ๊ฒ์ด WebGL 2.0์์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง ์ฌ๊ธฐ์์ WebGL 1.0์ ๋์์ผ๋ก ํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํฉ๋๊น?
ํ ์คํธ ๊ฐ์๋ฅผ webgl 2๋ก ์ ํํ๊ณ ์ฌ์ฉ์๊ฐ ํด๋น ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๊ฐ์ง๊ณ ์๋์ง ๊ฐ์งํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ webgl 1 ํด๋ฐฑ์ผ๋ก webgl 2 ์ต์ ๋ฒ์ ์ ๋ชจ๋ ์ํํ๋ ๊ฒ์ ์ดํดํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ webgl 2๋ก ์์ํ์ฌ ์ปค๋ฎค๋ํฐ์ ์ค๋ฉฐ๋ค๊ฒ ํ๊ณ ์ฆ์ ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ง์ํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค.
๋๋ ์ ๋ฐ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋์ฒด ์ ๊ทผ ๋ฐฉ์์ด ์๋ค๊ณ ์๊ฐํ๋ฏ๋ก @FunMiles ๋ ์ง๊ธ ์์ถ ๋ฌธ์ ์ ๋ํด ๊ฑฑ์ ํ์ง ์์๋ ๋ฉ๋๋ค.
์๋ ํ์ธ์ @lojjic , ๋ฐฉ๊ธ ํ์ธํ์ต๋๋ค. ์งํ ์ํฉ์ด๋ ๋์์ด ํ์ํ ์ฌํญ์ด ์์ต๋๊น?
์ฐธ๊ณ ์ฌํญ: Safari๋ ๋ง์นจ๋ด WebGL2๋ฅผ ์ง์ํ๊ฒ ๋๋ฏ๋ก ์ด ๊ธฐ๋ฅ์ ๋ํด WebGL1์ ์ง์ํ์ง ์์ ์ ์์ต๋๋ค.
WebGL2 ๊ตฌํ์ ๋ ๊ด๋ฒ์ํ ํ ์คํธ๋ฅผ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํํด์ผ ํ ๋งํผ ์ถฉ๋ถํ ์ข์ ์ํ์ ๋๋ค.
https://trac.webkit.org/changeset/267027/webkit
WebGL 2.0์ด ์์ iPhone 6์ด ์์ต๋๋ค ๐
ํฅ๋ฏธ๋กญ๊ฒ๋ WebGL 1.0์ ๋ด๊ฐ ์๊ฐํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋์ ์๊ตฌ ์ฌํญ์ ์ง์ ํฉ๋๋ค. ์ ์๋ ์ค์ ๋ก ์กด์ฌํ์ง ์์ต๋๋ค.
4.1.3 ์ ์
์ ์๋ ์ฃผ๋ก ํ๋ก๊ทธ๋๋ฐ ์ง์์ผ๋ก ์ง์๋ฉ๋๋ค. ํ๋์จ์ด ์์ค์์ ์ค์ ์ ์๊ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋ฃจํ ๋ฐ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ํจ์จ์ ์ธ ๊ตฌํ ๋ฐ ํ ์ค์ฒ ๋จ์ ์ฐธ์กฐ. ๊ทธ๋ฌ๋ ์์
์ธ์ด์ ์ ์๊ฐ ํ๋์จ์ด์ ์ ์ ์ ํ์ ๋งคํ๋์ด์ผ ํ๋ค๋ ์๊ตฌ ์ฌํญ์ ๋๋ค. ๋ผ๊ณ ์์๋์ง ์๋๋ค.
๊ธฐ๋ณธ ํ๋์จ์ด๋ ๊ด๋ฒ์ํ ์ ์ ์ฐ์ฐ์ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค. OpenGL ES ์ ฐ์ด๋ฉ
์ธ์ด ๊ตฌํ์ ์ ์๋ฅผ ๋ถ๋ ์์์ ์ผ๋ก ๋ณํํ์ฌ ์๋ํ ์ ์์ต๋๋ค. ๊ทธ๋์ ํด๋์ฉ์ด ์๋ค.
๋ํ ๋์.
๊ทธ๋ฌ๋ ๋๋ ํฌ๋ง์ ์์ง ์์์ต๋๋ค. ์กฐ๊ธ ๋ค์ ์๊ฐํด๋ด์ผ๊ฒ ๋ค์...
ํํธ, @lojjic , โโ์ด๋ค ๋์์ ์๊ฐํด ๋๋์ง ์๋ ค์ฃผ์๊ฒ ์ต๋๊น?
@FunMiles ๋ฌผ๋ก ์ ๋๋ค. ๋น์ ํ ์ค์ผ์ผ์ ์ฌ์ฉํ์ฌ ๊ฑฐ๋ฆฌ ๊ฐ์ ์ธ์ฝ๋ฉํ์ฌ ๊ธ๋ฆฌํ ๋ชจ์์ ๋ํ ์ถฉ๋ถํ ์ ๋ฐ๋๋ฅผ ์ ์งํ๋ฉด์ ๊ฑฐ๋ฆฌ ํ๋๋ฅผ ํ ์ค์ฒ์ ๊ฐ์ฅ์๋ฆฌ๊น์ง ํ์ฅํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธ๋ฆฌํ ๊ฒฝ๋ก(1-2 ํ ์ ์ด๋ด)์ ๋งค์ฐ ๊ฐ๊น์ด ๊ฑฐ๋ฆฌ์๋ ์์ ํ ๊ฐ์ด ๋ง์ ๋ฐ๋ฉด ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋ ๊ฑฐ๋ฆฌ์๋ ๋ ์ ์ ๊ฐ์ด ์์ต๋๋ค. ์ ฐ์ด๋๋ ์๋ ์ ํ ๊ฑฐ๋ฆฌ๋ก ๋ค์ ๋ณํํ๋ ๋ฐฉ๋ฒ๋ง ์๋ฉด ๋ฉ๋๋ค. ๊ธ๋ฆฌํ์ ์ ์ ํ ๋ชจ์์ ๋ฉ์ง๊ฒ ๋ณด์ด๊ณ ๋์ถ๋ ์ค๊ณฝ์ ์ ๋ฎ์ ์ ๋ฐ๋๋ ์ด์จ๋ ๋ฐ์ฌ๋ฆผ๋๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ๋์ ๋์ง ์์ต๋๋ค.
์ ๋ 2๊ณ์ธต ์ ํ ์ฒ๋์ ์ง์ ์ฒ๋๋ฅผ ๋ชจ๋ ์ฌ์ฉํ์ฌ ์ด๊ฒ์ ์ฆ๋ช ํ์ต๋๋ค. ๋ ๋ค ์ฅ๋จ์ ์ด ์์ต๋๋ค.
์ ๋ ์ด์ ์ฟผ๋ ์ธ๋ถ์ ๊ทธ๋ผ๋์ธํธ๋ฅผ ๊ทผ์ฌํํ๊ธฐ ์ํด ์ธ์ ๊ฐ์ฅ์๋ฆฌ ๊ฐ์ ์ฌ์ฉํ๋ (๋งค์ฐ ๋๋ํ) ์ ๊ทผ ๋ฐฉ์์ ๊ตฌํํ๋ ์ค์ ๋๋ค. ์ง๊ธ๊น์ง๋ ์ดํด๊ฐ ๋์ง๋ง ๋ชจ์๋ฆฌ ๋ฐ๊นฅ์ชฝ ์์ญ์ ๋ํด ๋ฌด์์ ํด์ผ ํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ข ๋ ๋ค์ด๊ฐ๋ณด๋ฉด ๋ปํ ์๋ ์๊ฒ ์ง๋ง, ์ฌ์ด ๋ต๋ณ์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค :)
์ ๋ ์ด์ ์ฟผ๋ ์ธ๋ถ์ ๊ทธ๋ผ๋์ธํธ๋ฅผ ๊ทผ์ฌํํ๊ธฐ ์ํด ์ธ์ ๊ฐ์ฅ์๋ฆฌ ๊ฐ์ ์ฌ์ฉํ๋ (๋งค์ฐ ๋๋ํ) ์ ๊ทผ ๋ฐฉ์์ ๊ตฌํํ๋ ์ค์ ๋๋ค. ์ง๊ธ๊น์ง๋ ์ดํด๊ฐ ๋์ง๋ง ๋ชจ์๋ฆฌ ๋ฐ๊นฅ์ชฝ ์์ญ์ ๋ํด ๋ฌด์์ ํด์ผ ํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ข ๋ ๋ค์ด๊ฐ๋ณด๋ฉด ๋ปํ ์๋ ์๊ฒ ์ง๋ง, ์ฌ์ด ๋ต๋ณ์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค :)
_๋ชจ์๋ฆฌ ๋ฐ_์ด ๋ฌด์จ ๋ง์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ๊ฐ๊น์ด ํฌ์์ด ๋ชจ์๋ฆฌ ์์ฒด์ธ ๊ฐ ๋ชจ์๋ฆฌ์ ๋ฟ๋ฆฌ๋ฅผ ๋ 1/4 ํ๋ฉด์ ์๋ฏธํฉ๋๊น? ์์ง ๋ฐ ์ํ ๊ฐ์ฅ์๋ฆฌ ๋ชจ๋์ ๊ฐ์ฅ์๋ฆฌ์ ๋ํ ๊ท์น์ ์ฌ์ฉํ๊ณ ๊ฐ๊ฐ์ ๋ํ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ค ํ๊ท ์ ์ํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ถ์ : ์ค๋ ์ผ์ฐ WebGL ์ ์ํ ๋์ผ์ค๋ฅผ ์ฝ์ ํ ์ ํ๋๋ฅผ ๋ฉ๋ฆฌ ๋ฎ์ถ๋ ์์ด๋์ด๊ฐ ๋ ์ฌ๋์ต๋๋ค... ๐ WebGL 1.0์์ ์์ถ ๊ธฐ์ ์ ๊ตฌํํ์ฌ 11๋นํธ์ ์ ํ๋๋ฅผ ์ ๋ ดํ๊ฒ ์ป์ ์ ์๊ธฐ๋ฅผ ์ฌ์ ํ ํฌ๋งํฉ๋๋ค. ๋ ๋ง์ ํ
์คํธ๋ก ๋ ๋ง์ ๋นํธ. ์๋ฅผ ๋ค์ด rgba
๋ฅผ ์ฌ์ฉํ๋ฉด a
๋ ํ๊ท ์ 8๋นํธ๋ฅผ ๋ณด์ ํ ์ ์์ผ๋ฉฐ rgb
๊ฐ๊ฐ์ ๋ํด ์๋ช
๋๊ณ ๋ถํธ๋ 1๋นํธ์ ์ ํ๋๋ฅผ ๋ํ๋
๋๋ค. ํ๊ท , ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก 0-127 ๋ฒ์์ ์๋ ๋๋จธ์ง๋ ํ์ํ 4๊ฐ ๊ฐ ์ค 3๊ฐ์ ๋ํด 7๋นํธ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ๊ฐ 64๋ฅผ ๋บ๋๋ค. ์ค์ ๊ฐ์ center(0 ~ 2^11-1 ๋ฒ์) + dist_i์
๋๋ค. ๋ค ๋ฒ์งธ ๊ฐ์ ํฉ๊ณ๊ฐ ํ๊ท ์ด์ด์ผ ํ๋ฏ๋ก ํฉ๊ณ๋ฅผ ๋นผ์ ๋ณต๊ตฌ๋ฉ๋๋ค. ํ๋๋ 11๋นํธ๋ง ์ป์ ์ ์์ง๋ง ์๋ง๋ ์ถฉ๋ถํ ๊ฒ์
๋๋ค. ๋ ๋ง์ ๋นํธ๋ฅผ ์ป์ผ๋ ค๋ฉด ๊ฐ ๋๋ r
, g
๋ฐ b
์ด -64๋ณด๋ค ์์์ง, ์์์ธ์ง ์์์ธ์ง, 64๋ณด๋ค ํฐ์ง ํ
์คํธํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์์๋ 14๋นํธ๋ฅผ ์ ๊ณตํ๊ณ ์ฐจ์ด์๋ 6๋นํธ๋ง ์ ๊ณตํฉ๋๋ค. ์๋ง๋ ์ข์ ํํ? ๋๋ WebGL 1.0์ด ์ ํ์ฑ์ ๊ฐ์ง์ผ๋ก์จ ์ด๋ฌํ ์๊ฐ์ ๋ฐฉํดํ์ง ์๋๋ค๋ ๊ฒ์ ๋งค์ฐ ๋์จํ๊ฒ ๋ณด์ฅํ๋์ง ํ
์คํธํด์ผ ํ ๊ฒ์
๋๋ค....
๋ค, U์ V๊ฐ ๋ชจ๋ 0-1 ๋ฐ์ ์๋ ์์ญ์ ์๋ฏธํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ํ ๋ฒ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.
@lojjic ๋ค๋ฅธ ์ง๋ฌธ์ผ๋ก ์ด์ ๊ฒ์๋ฌผ์์ ๋ฉ๋ชจ๋ฆฌ ๋๋ฌธ์ SDF ํ ์ ๋น ๋ ๊ฐ์ ํ ์ค์ฒ ๊ฐ์ ๊ฐ๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค. ๋ ์์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ด๋ ๊ฒ์ ์ ํธํ์ง๋ง 64x64 ๊ทธ๋ฆฌ๋์ 256๊ฐ ๊ธ๋ฆฌํ๋ 1/4MB์ ํ ์ค์ฒ ๋ฉ๋ชจ๋ฆฌ๋ง ์ฌ์ฉํฉ๋๋ค. ์ผ๋ถ ์ธ์ด์๋ ๋ ๋ง์ ๊ธ๋ฆฌํ๊ฐ ํ์ํ ์ ์์ง๋ง BBC๋ ์ ๋ฌธ์ ์ฝ์ผ๋ ค๋ฉด 2000/3000์๋ง ํ์ํ๋ค๊ณ ๋งํฉ๋๋ค. ๋ฐ๋ผ์ 4000์๋ ํ ์ SDF๋น 1๋ฐ์ดํธ๋ก 4MB๋ฅผ ๋ง๋ญ๋๋ค. ๊ฑฑ์ ํ ๊ฐ์น๊ฐ ์์ต๋๊น?
@FunMiles ๊ณต์ ํ ์ง์ , ๊ทธ๋ฆฌ๊ณ ๋๋ ์ฌ์ค ๊ทธ tbh์ ๋ํด๋ณ๋ก ๊ฑฑ์ ํ์ง ์์์ต๋๋ค.
๋ช ๊ฐ์ง ํด๊ฒฐํด์ผ ํ ์์
์ด ๋จ์ ์์ง๋ง b19cd3aff4b0876253d76b3fc66b7e2a1f16a7e5๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. react-three-fiber๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ ์ํด ์ด๊ฒ์ drei v2.2.0์์ ๋ฆด๋ฆฌ์ค๋์์ต๋๋ค.
https://github.com/pmndrs/drei/pull/156
์ด๊ฒ์ด ๋ซํ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์์
์ ๋ํด ๊ฐ์ฌํ๋ค๋ ๋ง์ ์ ํ๊ณ ์ถ์ต๋๋ค. ๋ด ์ฑ์์ ์๋ํ๋๋ก ํ์ต๋๋ค. ์์ฑ์ด ์ค๊ณฝ์ ํฌ๊ธฐ์ ๋ํด ์ซ์๋ง ํ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ์ดํดํ๋ ๋ฐ ์ฝ๊ฐ์ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฐ๊ณผ๋ ๋ด๊ฐ ํ์๋ก ํ ๊ฒ์
๋๋ค.
@FunMiles ๋ฉ์ ธ์! outlineWidth
์ ์ซ์ ๊ฐ์ ์ฌ์ฉํ ์ _ ์์ด์ผ_ ํฉ๋๋ค. ์ด๋ค ์ด์ ๋ก๋ ์ด๊ฒ์ด ์๋ํ์ง ์๋ ๊ฒฝ์ฐ ์๋ ค์ฃผ์ธ์.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ณผ์ ์์ ์๊ฒฌ์ ๋ณด๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ฌ์ ํ ๋น์ ์ด ์ธ๊ธํ ์ข ๋ฅ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ ๋ฐ์ด๋ ์ธ๋ถ์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ถ๋๋ฝ๊ฒ ์ธ์ฝํ ์ ์์์ต๋๋ค. ๊ทธ๋์ ๋๊บผ์ด ์ค๊ณฝ์ ์ ํ์ฌ ํนํ ๋ชจ์๋ฆฌ์ ์ธํ๋ถํํ ๋นํธ๊ฐ ์์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ์ถฉ๋ถํฉ๋๋ค(์ต๋ ~ 10% ๊ธ๊ผด ํฌ๊ธฐ). ๋๋ ์ฌ์ ํ ๊ทธ๊ฒ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Mapbox์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. @anzorb. ๋๋ ๊ทธ๋ค์ ๊ตฌํ์ ๋ ์์ธํ ํ์ธํ๊ฒ ์ง๋ง, ๊ทธ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ(๊ทธ๋ค์ ์์๋ผ์ธ์ "ํ๊ด"์ด๋ผ๊ณ ๋ถ๋ฆ)์์ ์ด์ ์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ SDF ์ํ ์๊ณ๊ฐ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ SDF ์์ฑ ๋ฐ ์ํ๋ผ์ค ํจํน ์ ๋ต์ ๋ด ๊ฒ๊ณผ ๋ค๋ฅด๋ฉฐ ๊ธ๋ฆฌํ๋น ๋น๊ท ์ผ ๋์คํด์ค ํ๋ ํฌ๊ธฐ์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ผํ ์ต๋ ์ค๊ณฝ์ ๋๋น ์ ํ์ด ์์ ๊ฒ์ ๋๋ค.
๋๋ ์ค์ ๋ก ํ์ค ํ์ ์ํ์ ์ฌ์ฉํ์ฌ _ํ๋ฉด ๊ณต๊ฐ_ ์ค๊ณฝ์ ์ ๋ํด ์ฝ๊ฐ์ ์ง์ ์ ์ด๋ฃจ์์ต๋๋ค. ์ค๊ณฝ์ ์ ์๋ฏธํ๋ ํ๋ฉด ๊ณต๊ฐ์ ์๋ฅผ ๋ค์ด ํ ์คํธ์ ํฌ๊ธฐ/์ถ์ฒ ๋๋ ๊ธฐ์ธ๊ธฐ์ ๊ด๊ณ์์ด ๋๋น๊ฐ 1 ํ๋ฉด ํฝ์ ์ด ๋ฉ๋๋ค. ๋ชฉํ๊ฐ ๋ฐฐ๊ฒฝ๊ณผ์ ๋๋น๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๋ผ๋ฉด ํ ์คํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ ์ค๊ณฝ์ ๋งํผ ์ข์ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ํ ์๊ฒฌ์ด ์์ต๋๊น?