Shadertoy 'Bleepy blocks' λΆμ
03 May 2021 β’ 0 CommentsβBleepy blocksβ by Daedelus
Β
λμ
κ±°μ 2λ λ° λ§μ Shadertoy κ΄λ ¨ ν¬μ€ν μ νκ² λμμ΅λλ€. κ·Έλμ λ§μ μΌμ΄ μμμ§λ§ λ€νν creative codingμ μΈκ³μ λμμ€κ² λμ΄ κΈ°μ©λλ€. μ§κΈμ κ°λ¨ν μμ νμ΄λ³΄λ μλ―Έμμ μ½κ° 짧μ μ½λλ₯Ό μ΄ν΄λ³΄λλ‘ νκ² μ΅λλ€. λΆμν μ½λλ βBleepy blocksβμ λλ€. μ΄ μ½λλ Three.js κΈ°μ΄ νν 리μΌμ μμ΄λν μ΄(Shadertoy) νμ©νκΈ°μλ μ¬μ©λ λ§νΌ μ λͺ ν μ½λμ λλ€. κ·ΈλΌ μμν΄λ³΄λλ‘ νκ² μ΅λλ€.
Β
Texture μ λ ₯
μμ μ Shadertoy λΉλ°©μΈ ν¨κ³Ό λΆμμμ μ¬μ©νλ κ²μ²λΌ μ΄ μ½λμμλ ν μ€μ²λ₯Ό μ¬μ©ν©λλ€. μ¬μ©λλ ν μ€μ²λ 8x8 ν½μ ν¬κΈ°μ μμ λλ€ λ Έμ΄μ¦μ λλ€. μ°Έκ³ λ‘ Shadertoy λΉλ°©μΈ ν¨κ³Ό λΆμμμλ 256x256 ν¬κΈ°μ λλ€ λ Έμ΄μ¦ μ΄λ―Έμ§κ° μ¬μ©λμμ΅λλ€. μ°λ¦¬κ° μ¬μ©ν 8x8 ν½μ μ΄λ―Έμ§μ μ΄λ¦μ λ² μ΄μ΄(bayer)λ‘, μΉ΄λ©λΌμ μ΄λ―Έμ§ μΌμμ λ°°μΉλλ 격μλ¬΄λ¬ ν¨ν΄μ μ΄λ¦μ λλ€.
Shadertoyμμ μ¬μ©λλ 8x8 ν½μ ν¬κΈ°μ λ² μ΄μ΄ ν¨ν΄
λ¨Όμ ν¨ν΄ μ΄λ―Έμ§λ₯Ό λΆλ¬μ€κ² μ΅λλ€. μ΄ μ½λμμλ texture0
μ΄λΌλ μ΄λ¦μΌλ‘ μ΄λ―Έμ§λ₯Ό λΆλ¬μ€λλ‘ μ§μ νμ΅λλ€(Shadertoyμμλ iChannel0
μ΄λΌλ μ΄λ¦μΌλ‘ 첫λ²μ§Έ ν
μ€μ²λ₯Ό λΆλ¬μ΅λλ€).
μ μ½λμ κ²°κ³Όλ‘ λ² μ΄μ΄ ν¨ν΄ μ΄λ―Έμ§κ° νλ©΄μ νμλ©λλ€. uv
λ μ’νκ³ κ³μ°μ κ±°μ³μ ν
μ€μ³λ₯Ό 1:1 λΉμ¨λ‘ νμλλλ‘ ν©λλ€. 5νμ μ£Όμμ²λ¦¬ ν΄λ³΄λ©΄ μ΄λ―Έμ§κ° νλ©΄μ κ½ μ°¨λλ‘, μ½κ° κΉ¨μ§ λΉμ¨λ‘ νμλλ κ²μ νμΈν μ μμ΅λλ€.
6ν λμ 7νμ μ£Όμμ²λ¦¬λ₯Ό ν΄μ ν΄λ κ²°κ³Όμλ λ³νκ° μμ΅λλ€. μ΄κ²μ ν
μ€μ³λ₯Ό nearest
νν°λ‘ λΆλ¬μ€κ³ μκΈ° λλ¬Έμ
λλ€. μ΄μ λ°λλλ νν°λ§ λ°©λ²μΌλ‘λ linear
νν°κ° μμ΅λλ€. nearest
νν°λ κ°μ΄λ°κ° ν
μ€μ³ μ’νμ κ°μ₯ κ°κΉμ΄ ν½μ
μ μ ννκ³ , linear
νν°λ μΈμ ν ν½μ
μ 컬λ¬λ€μ΄ 거리μ λΉλ‘ν΄μ νΌν©λ μμμ μ»κ² λ©λλ€.1
7ν λμ 6νμ μ¨λ μκ΄μ΄ μκΈ° λλ¬Έμ, floor
ν¨μλ₯Ό μ¬μ©νμ§ μκ³ uv
λ§ μ¬μ©νκ² μ΅λλ€. λ€μμ p
λΌλ κ°μ νλ©΄μ νμν΄λ³΄λ μ½λμ
λλ€.
Β
λΆμ΄ λ°μμ§λ ν¨κ³Ό
λ¨Όμ 8νμμλ ν
μ€μ³ κ°μ noise
λΌλ λ³μμ μ μ₯ν©λλ€. ν
μ€μ³λ νλ°±μ΄κΈ° λλ¬Έμ r, g, b λͺ¨λ κ°μ κ°μ κ°μ§κ³ μμ΅λλ€. κ·Έ λ€μμ p
λΌλ κ°μ μκ° κ°μΈ time
μ΄ λν΄μ§κ³ noise
μ r, g, b κ°μ λͺ¨λ λν©λλ€. mod
ν¨μλ λλ¨Έμ§λ₯Ό λ°ννλλ°, λλ²μ§Έ μΈμκ° λλλ μλ₯Ό λνλ
λλ€. 1.0μΌλ‘ λλκΈ° λλ¬Έμ μ¬κΈ°μ mod
ν¨μμ λ°νκ°μ 0.0~1.0 μ¬μ΄μ
λλ€. κ²°κ³Όμ μΌλ‘ νλ©΄μ λμ€λ κ°μ κ²μ μ(0.0)κ³Ό ν°μ(1.0) μ¬μ΄μμ ννλ©λλ€.
ννμμ μ°¨μ΄λ₯Ό μ’ λ μμ보기 μν΄ 9νμ μ£Όμμ²λ¦¬νκ³ 10νμ μ£Όμμ ν΄μ ν΄ λ³΄λ©΄ μ°¨μ΄λ₯Ό λλ μ μμ΅λλ€. 9νμ 10νλ³΄λ€ κ°μ μ°¨μ΄λ₯Ό κ°μ‘°ν©λλ€.
9ν μ£Όμμ²λ¦¬νκ³ 11νμ μ£Όμμ ν΄μ νλ©΄, 9νμ λμκ³Όλ λ°λλ‘ λΆμ΄ μ μ λ°μμ§λ λ―ν ν¨κ³Όλ₯Ό νμΈν μ μμ΅λλ€.
10νμμ p
κ°μ min, max ν¨μλ₯Ό λν΄μ£Όλ©΄ κ°μ΄ μ²μ²ν λ³νλ λͺ¨μ΅μμ μ’ λ μμ°μ€λ½κ² μ ꡬμ λΆμ΄ λ€μ΄μλ€κ° κΊΌμ§λ κ² κ°μ ν¨κ³Όλ₯Ό μ€λλ€. μ΄ p
κ°μ΄ ꡬ체μ μΌλ‘ μ΄λ»κ² λ³νλμ§λ₯Ό κ·Έλνλ‘ νμΈν΄ λ³΄κ² μ΅λλ€.
κ·Έλνλ‘ κ°μ νμΈν΄λ³΄λ 3νμ λΉν΄ 2νμ κ·Έλνλ μ’ λ λΎ°μ‘±νκ³ μ’μ λͺ¨μμ
λλ€. 2νμ κ·Έλνμμ p
κ°μ 0μ λ¨Έλͺ°λ¬ μλ μκ°, μ¦ κΊΌμ Έ μλ μκ°μ΄ μλ κ·Έλνλ³΄λ€ ν¨μ¬ κΉλλ€. λͺ¨λ λΆμ΄ λμμ μΌμ§μ§ μκ³ μκΈ° λλ¬Έμ λ² μ΄μ΄ ν¨ν΄μ΄ μ’ λ λλ ·νκ² λ³΄μ΄κ² λ©λλ€.
λ§μ§λ§μΌλ‘ κ° λνΈμ μ£μ§λ₯Ό λ₯κΈκ² κΉμμ£Όκ³ μμ μ νμ£Όλ λΆλΆμ΄ λ¨μμ΅λλ€.
μ¬κΈ°μ r
μ΄λΌλ κ°μ νλ©΄μ νμν΄ λ³΄λ©΄ κ° λνΈμ κ°μ₯μ리μ ν΄λΉνλ κ°μλ§ λΆμμκ³Ό μ΄λ‘μμ ν΄λΉνλ x, y κ°μ΄ μ‘΄μ¬νλ κ²μ νμΈν μ μμ΅λλ€. r κ°μ mod
κ³μ°μ κ²°κ³Όμ΄κΈ° λλ¬Έμ 0.0~1.0μΌ κ²μ΄κ³ , μ¬κΈ°μ 0.5λ₯Ό λΉΌκ³ μ κ³±μ ν΄μ£ΌκΈ° λλ¬Έμ 0.0~0.25 μ¬μ΄μ λ²μλ₯Ό κ°μ§λ κ°μΌ κ²μ
λλ€.
15νμ μ¬κΈ°μ r κ°μ dot
κ³μ°(dot.x * dot.x + dot.y * dot.y
)μ ν΄μ€ λ€μ 12λ₯Ό κ³±νκ³ , 1κ³Όμ min κ°μ μ°Ύμ λ€μ κ·Έκ²μ μ κ³±ν΄μ£Όκ³ 1μμ λΊλλ€. μ΅λκ°μΈ 0.25λ μ΄ κ³μ°μ κ±°μΉλ©΄ 0.25 * 0.25 * 12 = 0.75κ° λκ³ , μ¬κΈ°μ λ€μ μ κ³±μ νλ©΄ 0.5625κ° λ©λλ€. λ§μ§λ§μΌλ‘ λ€μ 1μμ λΉΌλ©΄ 0.4375κ° λ κ²μ
λλ€. μ΄ κ°μ΄ μ΅λκ°μ΄μκ³ , μ΅μκ°μΈ 0μ μ΄ κ³μ°μ κ±°μΉλ©΄ 1μ΄ λ©λλ€.
λ§λ‘ νννλ©΄ 볡μ‘νμ§λ§ 16νμ μ£Όμμ μ κ±°νμ¬ νλ©΄μΌλ‘ νννλ©΄ λ¬΄μ² κ°λ¨ν©λλ€. 14νμμ λ΄€λ κ°μ΄ λΆλλ½κ² μμΌλ‘ κ³μ°λλ κ²μ νμΈν μ μμ΅λλ€. λνΈμ ν΄λΉνλ λΆλΆμ λͺ¨λ ν° μ, μ¦ 1.0μ κ°κΉμ΄ κ°μ΄ λ©λλ€.
μμ κ·Έλνμμλ κ²°κ³Όκ°μ΄ λΆλλ½κ² κΉμ΄λ μ£μ§κ° λλ κ²μ νμΈν μ μμ΅λλ€. μ΄ κ°μ p
μ κ³±ν κ²μ΄ 15νμ κ³μ°μ
λλ€.
17νμ μ£Όμμ ν΄μ ν΄λ³΄λ©΄ μ΄ κ°μ pμ κ³±νμ λμ κ²°κ³Όλ₯Ό νμΈν μ μμ΅λλ€. κ·Έλ¦¬κ³ 18νμ μ£Όμμ ν΄μ νλ©΄ μ¬κΈ°μ νΈλ₯Έμ κ³μ΄μ μ‘°λͺ μ μ ν κ²°κ³Όλ₯Ό νμΈν μ μμ΅λλ€.
μ΄μμΌλ‘ μ½λ λΆμμ λ§μΉκ² μ΅λλ€. μ€λλ§μ΄λΌ 짧μ μ½λλ₯Ό 보μ¬λλ Έλλ° λ€μμλ μ’ λ 볡μ‘ν μ½λλ‘ λμμ€λ©΄ μ’κ² μ΅λλ€. μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€.