๐ ์ ๊ทธ๋ฆฌ๊ธฐ
์์ ๋๋ 0์์ ์์ ๊ทธ๋ฆฌ๋ ๊ณต์์ด ์๋ค. ์๋ ๊ณต์์ ๊ทธ๋ํ๋ก ๊ทธ๋ฆฌ๋ฉด ์์ด ๋๋ ๊ฒ์ด๋ค.
x^2 + y^2 = r^2
์ด๋ฅผ ์ธ๋ฆฌ์ผ ๋ ธ๋๋ก ํํํ๋ฉด ์ด๋ ๋ค.
ํ์ง๋ง ์ด๋ฐ ์์ผ๋ก ํํ๋๊ฒ ๋๋๋ฐ, ์ข์๋จ 0,0์ ์ขํ ์์ ๊ธฐ์ค์ผ๋ก ์์ ๊ทธ๋ ธ๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ์ ์์ ์ค์์ผ๋ก ๋ฐ๊พธ๊ธฐ
Subtract๋ฅผ ์ถ๊ฐํ๋ค.
0๋ณด๋ค ๋ฎ์ ๊ฐ์ด ๋์ค๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด power ๋์ multiply ์ฌ์ฉ.
๐ ํน์ ์์น๋ก ์ ๋ฐ๊พธ๊ธฐ
์ด์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด๋ฉด ์์ ์ค์์ ๊ทธ๋ฆด ์ ์๊ฒ ๋์ง๋ง ์ ํํ ์ด๋ ์์น์ ๊ทธ๋ฆด ๊ฒ์ธ์ง ์ ์ฉํ ์๋ ์๋ค. (Subtract(,0.5)
์๋ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๋ฉด 2๊ฐ์ ์์๊ฐ ๊ฐ๊ฐ x์ y ์ขํ ์ญํ ์ ํ๊ณ Power์ Exp๋ฅผ ํตํด ํฌ๊ธฐ๊น์ง ์กฐ์ ํ ์ ์๋ค.
๐ HLSL ์ฝ๋๋ก ๋ณํํ๊ธฐ
float d = length(pos-uv);
return d;
Step ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ 0.5 ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ํฝ์ ๋ง ๋ฐํํ๋ ๊ฒ์ ์ฝ๋๋ก ์์ฑํ๊ธฐ.
float d = length(pos-uv);
return d <= 0.5;
( 0.5๋ฅผ ๋ ๋ฎ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ๋ฉด ์ ํฌ๊ธฐ๊ฐ ๋ ์์์ง๋ค. )
๐ ์์ ํฌ๊ธฐ๋ฅผ ์ ์ดํ ์ ์๋๋ก ๊ฐ์ ๋ณ์๋ก ๋ง๋ค๊ธฐ.
float d = lenght(pos-uv);
return d <= radius;
( custom node input์ radius๋ฅผ ์ถ๊ฐํ๋ค. )
๐ ์์ ๊ณผ์ ์ผ๋ก ๊ทธ๋ฆฐ ์์ ํ์ผ๋ง ํ๊ธฐ.
float d = length(pos-uv);
return d <= radius;
float d = length(pos-(frac(uv*gridSize)));
return d <= radius;
( custom node input์ gridSize๋ฅผ ์ถ๊ฐํ๋ค. )
ํน์ ์๋์ฒ๋ผ๋ ํ ์ ์๋ค.
float result = 0;
for (int x = 0; x < tile.x; x++)
{
for (int y = 0; y <tile.y; y++)
{
float2 pos = float2(x * (1/tile.x),
y * (1/tile.y));
result += step (length(pos-uv+(0.5/tile)),size);
}
}
return(result);
๐ Ref.
'HLSL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HLSL ๋ฐ์ดํฐ ํ์ Struct (0) | 2024.12.12 |
---|---|
์ปค์คํ ๋ ธ๋๋ก ํฝ์ ์ดํํธ (๋ ธ์ด์ฆ ํจํด) ๋ง๋ค๊ธฐ (0) | 2024.12.12 |
๋ฃจํ ํจํด ๋ง๋ค๊ธฐ (0) | 2024.10.29 |