๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
HLSL

์› ๊ทธ๋ฆฌ๊ธฐ + ํƒ€์ผ๋ง

by z03y 2024. 10. 28.


 

๐ŸŒ ์› ๊ทธ๋ฆฌ๊ธฐ

์›์  ๋˜๋Š” 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. 

https://youtu.be/95Xr4GG-7zY?si=zCu0gt5s9ymmjHWh

๋ฐ˜์‘ํ˜•