Troika: ํ…์ŠคํŠธ ๊ฐœ์š”

์— ๋งŒ๋“  2020๋…„ 08์›” 20์ผ  ยท  39์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: protectwise/troika

ํ…์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํฐ์ƒ‰ ํ…์ŠคํŠธ ์ฃผ์œ„์— ๊ฒ€์ • ํ…์ŠคํŠธ ์œค๊ณฝ์„ ์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ troika-three-text์™€ ๊ด€๋ จํ•˜์—ฌ ์…ฐ์ด๋”๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ํšจ๊ณผ๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”!

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Mapbox์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. @anzorb. ๋‚˜๋Š” ๊ทธ๋“ค์˜ ๊ตฌํ˜„์„ ๋” ์ž์„ธํžˆ ํ™•์ธํ•˜๊ฒ ์ง€๋งŒ, ๊ทธ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ(๊ทธ๋“ค์€ ์•„์›ƒ๋ผ์ธ์„ "ํ›„๊ด‘"์ด๋ผ๊ณ  ๋ถ€๋ฆ„)์—์„œ ์ด์ „์— ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ SDF ์•ŒํŒŒ ์ž„๊ณ„๊ฐ’ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์˜ SDF ์ƒ์„ฑ ๋ฐ ์•„ํ‹€๋ผ์Šค ํŒจํ‚น ์ „๋žต์€ ๋‚ด ๊ฒƒ๊ณผ ๋‹ค๋ฅด๋ฉฐ ๊ธ€๋ฆฌํ”„๋‹น ๋น„๊ท ์ผ ๋””์Šคํ„ด์Šค ํ•„๋“œ ํฌ๊ธฐ์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์ผํ•œ ์ตœ๋Œ€ ์œค๊ณฝ์„  ๋„ˆ๋น„ ์ œํ•œ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‹ค์ œ๋กœ ํ‘œ์ค€ ํŒŒ์ƒ ์ƒํ’ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ _ํ™”๋ฉด ๊ณต๊ฐ„_ ์œค๊ณฝ์„ ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ์ง„์ „์„ ์ด๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค. ์œค๊ณฝ์„ ์„ ์˜๋ฏธํ•˜๋Š” ํ™”๋ฉด ๊ณต๊ฐ„์€ ์˜ˆ๋ฅผ ๋“ค์–ด ํ…์ŠคํŠธ์˜ ํฌ๊ธฐ/์ถ•์ฒ™ ๋˜๋Š” ๊ธฐ์šธ๊ธฐ์— ๊ด€๊ณ„์—†์ด ๋„ˆ๋น„๊ฐ€ 1 ํ™”๋ฉด ํ”ฝ์…€์ด ๋ฉ๋‹ˆ๋‹ค. ๋ชฉํ‘œ๊ฐ€ ๋ฐฐ๊ฒฝ๊ณผ์˜ ๋Œ€๋น„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ํ…์ŠคํŠธ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋˜๋Š” ์œค๊ณฝ์„ ๋งŒํผ ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  39 ๋Œ“๊ธ€

์ƒ‰์ƒ์„ ์ง€์ •ํ•  ์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ debugSDF ํ”Œ๋ž˜๊ทธ๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
image
sdf๋ฅผ ํ‘œ์‹œํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ‰์ƒ์„ ์ง€์ •ํ•˜๊ณ  ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์ž ์žฌ์ ์œผ๋กœ ์•ฝ๊ฐ„ ๋” ์„ ๋ช…ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์•„์›ƒ๋ผ์ธ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์€ ๋„ˆ๋ฌด ์–ด๋ ต์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ผ๋งˆ ์ „์— textOutline์„ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ๋๋‚ด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ก ์ ์œผ๋กœ ๊ธ€๋ฆฌํ”„ ๊ฐ€์žฅ์ž๋ฆฌ๋Š” ๊ฐ€์žฅ์ž๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€ํ˜ธ ์žˆ๋Š” ๊ฑฐ๋ฆฌ ํ•„๋“œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ˜„์žฌ ์…ฐ์ด๋” ์ฝ”๋“œ ์—์„œ 0.5 ์ด์ง€๋งŒ, ์œ ๋‹ˆํผ์œผ๋กœ ์ „๋‹ฌํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ ์…ฐ์ด๋”๋Š” ๋‹จ์ผ ๊ทธ๋ฆฌ๊ธฐ ํ˜ธ์ถœ์—์„œ ์ผ๋ฐ˜ ๊ธ€๋ฆฌํ”„์™€ ๊ทธ ์ฃผ์œ„์˜ ์œค๊ณฝ์„ ์„ ๋ชจ๋‘ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์œค๊ณฝ์„  ๋„ˆ๋น„(๋‹จ์œ„๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ) ๋ฐ ์ƒ‰์ƒ ์œค๊ณฝ ์˜์—ญ.

๋‚˜๋Š” ์–ผ๋งˆ ์ „์— textOutline์„ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ๋๋‚ด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋œ๋‹ค๋ฉด ๋งค์šฐ ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค :)
๊ทธ๋Ÿฌ๋‚˜ ์ €๋Š” ์…ฐ์ด๋”๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ผ๋งˆ๋‚˜ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์„์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์œ ์‹ฌํžˆ ์ง€์ผœ๋ณด๊ฒ ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ๊ธˆ ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ๊ณ  ๋‚ด๊ฐ€ ์›๋ž˜ ์™œ ๊ทธ๊ฒƒ์„ ๋๋‚ด์ง€ ์•Š์•˜๋Š”์ง€ ๋นจ๋ฆฌ ๊นจ๋‹ฌ์•˜๋‹ค. SDF๋Š” ๊ฐœ์š”์— _์‚ฌ์šฉํ•  ์ˆ˜_ ์žˆ์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์˜ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์•„์›ƒ๋ผ์ธ์˜ ์ž ์žฌ์ ์ธ ์ตœ๋Œ€ ๋„ˆ๋น„๋Š” ๋””์Šคํ„ด์Šค ํ•„๋“œ ์ž์ฒด์˜ ๋ฒ”์œ„์— ์˜ํ•ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค(64x64 SDF ํ…์Šค์ฒ˜์—์„œ ~8 ํ…์…€).
  • SDF ํ…์Šค์ฒ˜๊ฐ€ ๊ฐ ๊ธ€๋ฆฌํ”„์˜ ๊ฒฝ๊ณ„์— ๋งž๊ฒŒ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ๋ชจ๋“  ๊ธ€๋ฆฌํ”„์—์„œ ์ผ๊ด€๋œ ์‹œ๊ฐ์  ํฌ๊ธฐ์— ํ•ด๋‹นํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ "W"์™€ ๊ฐ™์€ ํฐ ๊ธ€๋ฆฌํ”„๋Š” ์ƒ๋‹นํžˆ ๋‘๊บผ์šด ์œค๊ณฝ์„ ์„ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋งˆ์นจํ‘œ์™€ ๊ฐ™์€ ์ž‘์€ ๊ธ€๋ฆฌํ”„๋Š” ๋งค์šฐ ์–‡์€ ์œค๊ณฝ์„ ๋งŒ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๊ธ€๋ฆฌํ”„๋Š” ์œค๊ณฝ์„ ์„ ์‹œ๊ฐ์ ์œผ๋กœ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ SDF ์ปท์˜คํ”„ ์ง€์ ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์•„์ง ๊ทน๋ณตํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ฒ˜์Œ์— ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๋งŒํผ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@lojjic , ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๐Ÿฅ‡๋ฅผ ์‚ฌ๋ž‘ํ•˜์ง€๋งŒ ํ…์ŠคํŠธ ๊ฐœ์š”๋Š” ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค...

๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ๊ธˆ ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ๊ณ  ๋‚ด๊ฐ€ ์›๋ž˜ ์™œ ๊ทธ๊ฒƒ์„ ๋๋‚ด์ง€ ์•Š์•˜๋Š”์ง€ ๋นจ๋ฆฌ ๊นจ๋‹ฌ์•˜๋‹ค. SDF๋Š” ๊ฐœ์š”์— _์‚ฌ์šฉํ•  ์ˆ˜_ ์žˆ์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์˜ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์•„์›ƒ๋ผ์ธ์˜ ์ž ์žฌ์ ์ธ ์ตœ๋Œ€ ๋„ˆ๋น„๋Š” ๋””์Šคํ„ด์Šค ํ•„๋“œ ์ž์ฒด์˜ ๋ฒ”์œ„์— ์˜ํ•ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค(64x64 SDF ํ…์Šค์ฒ˜์—์„œ ~8 ํ…์…€).
  • SDF ํ…์Šค์ฒ˜๊ฐ€ ๊ฐ ๊ธ€๋ฆฌํ”„์˜ ๊ฒฝ๊ณ„์— ๋งž๊ฒŒ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ๋ชจ๋“  ๊ธ€๋ฆฌํ”„์—์„œ ์ผ๊ด€๋œ ์‹œ๊ฐ์  ํฌ๊ธฐ์— ํ•ด๋‹นํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ "W"์™€ ๊ฐ™์€ ํฐ ๊ธ€๋ฆฌํ”„๋Š” ์ƒ๋‹นํžˆ ๋‘๊บผ์šด ์œค๊ณฝ์„ ์„ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋งˆ์นจํ‘œ์™€ ๊ฐ™์€ ์ž‘์€ ๊ธ€๋ฆฌํ”„๋Š” ๋งค์šฐ ์–‡์€ ์œค๊ณฝ์„ ๋งŒ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๊ธ€๋ฆฌํ”„๋Š” ์œค๊ณฝ์„ ์„ ์‹œ๊ฐ์ ์œผ๋กœ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ SDF ์ปท์˜คํ”„ ์ง€์ ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์•„์ง ๊ทน๋ณตํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ฒ˜์Œ์— ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๋งŒํผ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์œค๊ณฝ์„  ๋ฐ/๋˜๋Š” ๊ทธ๋ฆผ์ž ํšจ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์…ฐ์ด๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์ข…์˜ ํ›„์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!
๋‹ฌ์„ฑํ•˜๋ ค๋Š” ํšจ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Screen Shot 2020-08-31 at 4 32 03 PM

ํŽธ์ง‘ : ์ด๊ฒƒ์€ 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>

image

@FunMiles ๋งˆ์นจ๋‚ด ๊ท€ํ•˜์˜ ์ œ์•ˆ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ์‹œ๊ฐ„์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ธ€๋ฆฌํ”„์˜ SDF ์‚ฌ๊ฐํ˜• ์ „์ฒด์— ์œ ์šฉํ•œ(> 0.0) ๊ฑฐ๋ฆฌ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด "x"์— ๋Œ€ํ•œ ํ›„์† ์กฐ์น˜์—์„œ ๊ทธ๊ฒƒ์„ ๊นจ๋‹ซ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ SDF๋Š” ์ฟผ๋“œ์˜ ๊ฒฝ๊ณ„ ๋‚ด์—์„œ 0์œผ๋กœ ์ž˜ ๋–จ์–ด์ง€๋ฏ€๋กœ ์™ธ์‚ฝํ•  ์œ ์šฉํ•œ ๊ฑฐ๋ฆฌ ๊ธฐ์šธ๊ธฐ๊ฐ€ ์—†๋Š” ์ค‘์š”ํ•œ ์˜์—ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

image

์ฟผ๋“œ ์ „์ฒด์— ๊ฑธ์ณ 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๊ฐœ์˜ ๊ฐ’์ด ์žˆ์œผ๋ฉด ๊ฐ„๋‹จํ•˜๊ณ /์ €๋ ดํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์••์ถ• ์ฒด๊ณ„๋กœ ์ธ์ฝ”๋”ฉ๋  ๋•Œ ํ•ด๋‹น ๊ฐ’์„ ์–ป์œผ๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ •ํ™•ํžˆ ํ…์…€์˜ ์ค‘์•™์— ์žˆ๋Š” ๊ฒฝ์šฐ: 2๊ฐœ ๋˜๋Š” 3๊ฐœ์˜ ํ…์Šค์ฒ˜ ์ƒ˜ํ”Œ
  • 2x2 ๋ธ”๋ก์˜ 4๊ฐœ์˜ ํ…์…€ ์‚ฌ์ด์ธ ๊ฒฝ์šฐ: 4๊ฐœ์˜ ํ…์Šค์ฒ˜ ์ƒ˜ํ”Œ
  • ๋‘ ์ธ์ ‘ ๋ธ”๋ก ์‚ฌ์ด์— ์žˆ๋Š” ๊ฒฝ์šฐ: ~9 ํ…์Šค์ฒ˜ ์ƒ˜ํ”Œ~ 7 ๋˜๋Š” 8 ํ…์Šค์ฒ˜ ์ƒ˜ํ”Œ
  • 4๊ฐœ์˜ ์ธ์ ‘ ๋ธ”๋ก ์‚ฌ์ด์ธ ๊ฒฝ์šฐ: ~11 ํ…์Šค์ฒ˜ ์ƒ˜ํ”Œ~13 ํ…์Šค์ฒ˜ ์ƒ˜ํ”Œ

๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ 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

์ด๊ฒƒ์ด ๋‹ซํ˜€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ž‘์—…์— ๋Œ€ํ•ด ๊ฐ์‚ฌํ•˜๋‹ค๋Š” ๋ง์„ ์ „ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚ด ์•ฑ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ์†์„ฑ์ด ์œค๊ณฝ์„  ํฌ๊ธฐ์— ๋Œ€ํ•ด ์ˆซ์ž๋งŒ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฐ๊ณผ๋Š” ๋‚ด๊ฐ€ ํ•„์š”๋กœ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
Screen Shot 2020-11-09 at 7 44 52 PM

@FunMiles ๋ฉ‹์ ธ์š”! outlineWidth ์— ์ˆซ์ž ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ _ ์žˆ์–ด์•ผ_ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ๋กœ๋“  ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์„ธ์š”.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ์˜๊ฒฌ์„ ๋ณด๋‚ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋‹น์‹ ์ด ์–ธ๊ธ‰ํ•œ ์ข…๋ฅ˜์˜ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋“œ ๋ฐ”์šด๋“œ ์™ธ๋ถ€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์™ธ์‚ฝํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‘๊บผ์šด ์œค๊ณฝ์„ ์€ ํ˜„์žฌ ํŠนํžˆ ๋ชจ์„œ๋ฆฌ์— ์šธํ‰๋ถˆํ‰ํ•œ ๋น„ํŠธ๊ฐ€ ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค(์ตœ๋Œ€ ~ 10% ๊ธ€๊ผด ํฌ๊ธฐ). ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰