์ฐ์ ๋ด๊ฐ ๋ณด๋ฉด์ ๋ฐ๋ผํ ์ฝ๋๋ ์ฌ
Daniel Ilett ์ฑ๋์ย Voronoi-based Lava in Unity Shader Graph
https://์ ํ๋ถ/pFQ2-HFG_hY?si=N41ho8Y-ke_O5xYV
ํ์คํ์ค ์ค๋ช
ํ๋ ค๊ณ ํ๋ค๊ฐ ๋จธ๋ฆฌ ๋จ๊ฑฐ์์ ธ์ ๊ทธ๋ฅ ์์ง๋ก ์ฌ๋ฆด๊ฒ
ํ์ผ๋ช
, CustomVoronoi.hlsl
inline float2 randomVector(float2 UV, float offset)
{
ย ย float2x2 m = float2x2(15.27, 47.63, 99.41, 89.98);
ย ย UV = frac(sin(mul(UV, m)) * 46839.32);
ย ย return float2(sin(UV.y * +offset) * 0.4 + 0.5, cos(UV.x * offset) * 0.4 + 0.5);ย
}
// Based on code by Inigo Quilez: https://iquilezles.org/articles/voronoilines/
void CustomVoronoi_float(float2 UV, float AngleOffset, float CellDensity, out float DistFromCenter, out float DistFromEdge, out float myDEBUG)
{
ย ย int2 gridPos = floor(UV * CellDensity);
ย ย float2 detailedPos = frac(UV * CellDensity);
ย ย DistFromCenter = 8.0f;
ย ย float2 closestOffset = float2(0, 0);
ย ย for (int y = -1; y <= 1; ++y)
ย ย {
ย ย ย ย for (int x = -1; x <= 1; ++x)
ย ย ย ย {
ย ย ย ย ย ย ย float2ย checkingDir =ย float2ย (x, y);
ย ย ย ย ย ย float2 cellOffset =ย checkingDirย - detailedPos + randomVector(checkingDir + gridPos, AngleOffset);
ย ย ย ย ย ย float2 cellOffset =ย checkingDirย + randomVector(checkingDir + gridPos, AngleOffset)ย - detailedPos;
ย ย ย ย ย ย float distToPoint = dot(cellOffset, cellOffset);
ย ย ย ย ย ย if (distToPoint < DistFromCenter)
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย DistFromCenter = distToPoint;
ย ย ย ย ย ย ย ย closestOffset = cellOffset;
ย ย ย ย ย ย }
ย ย ย ย }
ย ย }
ย ย float2 secV2 = float2(0, 0);
ย ย DistFromEdge = 8.0f;
ย ย for (int y = -1; y <= 1; ++y)
ย ย {
ย ย ย ย for (int x = -1; x <= 1; ++x)
ย ย ย ย {
ย ย ย ย ย ย ย float2ย checkingDir =ย float2ย (x, y);
ย ย ย ย ย ย float2 cellOffset =ย checkingDir+ randomVector(checkingDir + gridPos, AngleOffset) - detailedPos;
ย ย ย ย ย ย float distToEdge = dot(0.5f * (closestOffset + cellOffset), normalize(cellOffset - closestOffset));
ย ย ย ย ย ย DistFromEdge = min(DistFromEdge, distToEdge);
ย ย ย ย }
ย ย }
ย ย myDEBUG = 0;
}
์น ํ๋ถ๋ถ์ด ๋ฌธ์ ์ ๋นจ๊ฐ์์ ๋ฐ์ดํฐ ์ ๋์๊ฐ ํ๋์์ ์ด์ํ๊ฒ ๊ณ์ฐย
ํ ์๋ฐ ์ปดํฐ ๊ป๋ค ์ผ๋ด์ผ๊ฒ ๋ค
์ ฐ์ด๋ ์ด์ ๋ธ๋ฆฌ๋ก ๋น๊ตํด๋ด์ผ๊ฒ ๋๋ฐ
์ด์ ๋ธ๋ฆฌ ๋น๊ตํด๋ดค๋๋ฐ ์ฐจ์ด์ ์ randomVector ํธ์ถ ์์์ ๋๋ค. 1๋ฒ์ ๋จผ์ ๋ง์ ์ ํ๊ณ ํธ์ถํ๋๋ฐ 2๋ฒ์ ํธ์ถํ๊ณ ํ๋ฒ์ ๋ค ๋ํจ ๊ฒฐ๊ณผ์ ์ผ๋ก randomVector ํจ์๊ฐ ์ธ๋ผ์ธ๋๋ฉด์ ์ฌ์ฉํ๋ ๋ ์ง์คํฐ๊ฐ ์ข ๋ค๋ฅด๊ธด ํ๋ฐ ํ ... ๋ฑํ ํฐ ๋ฌธ์ ๋ ์์ด๋ณด์ด๊ธด ํจ
ํน์ ์ด ์ฝ๋ ์ด๋์ include ๋๊ฑฐ๋ ํจ?
์๋๋ฏ randomVector ํจ์์์ inline ๋บ์ ๋๋ ๋ ๊ฒฐ๊ณผ๊ฐ ์ผ์นํจ?
์ ๊ด์ฌ ๊ฐ์ ธ์ค์ ๊ณ ๋ง์ ๊ผด๋ฐ์์ ๋ฐ์ ๊ณต๊ธฐ์ฌ๊ณ ์ด... ํ๋ฒ ํด ๋ณด๊ณ ๋ค์ ๋ต ๋ฌ์์ค๊ป ใฑใท
ใ ใ ใ ใ ใ ใ ใ ใ ์ง์ง ๋ชจ๋ฅด๊ฒ ์ด ํด๋น ๋จธํ ๋ฆฌ์ผ ๋ง๊ณค ์ฐธ์กฐ๋ ์ํ๊ณ inline ํ๋ฒ ๋นผ๋ดค๋๋ฐ ์ฐจ์ด๋ ์๋๋ผ uv๋ฒํผ๋ ์ด๋ฐ ๋ ๋๋ง ์ง์์ ์์์ ์์ ์ด ์๋ค... ์ต์คํฌํธํ ํ์ผ ํ๋ฒ ๊ตฌ๊ธ ๋๋ผ์ด๋ธ๋ก ๊ณต์ ํ๋ฉด ๋ด์ค ์ ์์ด? ์ด์ ์ง์ฆ๋๋ค๋ชปํด ์ ๊ธฐํ๊ณ ๋ฌด์์
ใ ใ ์ฌ๋ฆฌ๋ฉด ํด๊ฒฐํ ์ ์์์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ด๋๋ฆผ
https://drive.google.com/file/d/1BztAkvTaQi_oEvYnmzLx5-x8d866wqfU/view?usp=drive_link
์ง์ง
๊ณ ๋ง๋ค ์ธ๋ก์์ ์ฃฝ์๋ป
ํด๊ฒฐํจ?
์ด์ฌํ ๋๋ฒ๊น ์ ํ๋๋ฐ... ์ดํด๊ฐ ์ ๊ฐ... ๋๋์ฒด ์ ์ด๋ฌ์ง
์ผ๋จ ์์๋ธ ๊ฑด ํฌ๊ฒ ์ ์ค ํ๋์ ๋ฌธ์ ๋ผ๋ ๊ฒ์. 1. ์ด ๊ณ์ฐ์ด float์ ์ ๋ฐ๋์ ๋งค์ฐ ๋ฏผ๊ฐํ๋ค๋๊ฐ (double๋ก ๋ฐ๊ฟจ์ ๋๋ ๋์ผํ ์ด์ ํ์์ด ๋ฐ์ํจ) 2. directX์ ๋ฒ๊ทธ๋ผ๋๊ฐ 3. ์ ๋ํฐ ๋ด๋ถ์์ ์ ฐ์ด๋๊ฐ include๋๋๋ฐ ์ด๊ฒ ์ด์ฐ์ ์ฐ ๋ช ์นญ์ด ๊ฒน์ณ์ ธ์ ์ถฉ๋์ ์ผ์ผ์ผ ๋ง๋ค์ด์ง ๋ฒ๊ทธ๋ผ๋๊ฐ ๊ทธ ์ด๋ ํ๋๋ ๋ฑํ ์ดํด๊ฐ ๋์ง ์์...
ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ๊ธ์ด์ด์ธ๋ฐ ์ง์ง ๊ฐ์ด ๊ณ ๋ฏผํด์ค์ ๊ณ ๋ง์... ๊ทธ๋๋ ๋ด๊ฐ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ๋๋ฌธ์ ๊ณ ์ ํ๊ฑด ์๋๊ฑฐ๊ฐ์์ ์์ฌ์ด ๋๋ค ์ง์ง ๋ค์ํ๋ฒ ๊ณ ๋ง์!!!!
์๋ ๋ฐ๋ณต๋ฌธ์ float2 cellOffset = checkingDir+ randomVector(checkingDir + gridPos, AngleOffset) - detailedPos; ์ฌ๊ธฐ์์ detailedPos ์์น๋ฅผ ๋ฐ๊พธ๋ฉด ์์ค์ detailedPos ์์น๋ ๋ฐ๊ฟ์ผ ์ ๋๋ก ๊ณ์ฐ์ด ๋๋๋ผ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ญ๊ฐ ๋ด๋ถ ์ฐ์ฐ์ ์ต์ ํ ํ๋ต์๊ณ ์ฒ๋ฆฌ๋ฅผ ํด๋ฒ๋ฆฌ๋๊ฑฐ๊ฐ์
๋์ถฉ ๋ง์ด ๋จ. ์ ๋ฐ๋์ ๋ฏผ๊ฐํ๋ค๋ผ๋ ๊ฒ ๊ฐ์ฅ ํด ํ๋ฅ ์ด ๋์ ์ด์ ๊ฐ, ์๋์ ์๋ normalize(cellOffset - closestOffset) ํจ์๋ฅผ ์ ์๊ฐํด๋ณด๋ฉด ๊ฒน์น๋ x,y ๊ฐ์์ ๊ฑฐ์ 0์ ๊ฐ๊น๊ฒ ๋์จ๋ค๋ ๊ฑธ ์ ์ ์์. ์ด๋ normalizeํ๋ฉด ์๋ก ๋ค๋ฅธ๋ฐฉ์์ผ๋ก ๊ณ์ฐ๋ ๊ฐ์ด๋ผ ๊ฐ์ ํ ๋ ์์ฃผ ์์ ์ค์ฐจ๊ฐ ์์ ๊ฒ์ด๊ณ ์๋ฒฝํ๊ฒ 0์ ์๋๋ผ๋ ๋ง์. ๊ทธ๋ฌ๋ฉด ์ฌ์ค์ ๋ฐฉํฅ์ด ๊ฑฐ์ ๋๋คํ๊ฒ ๋ํ๋จ. ๊ทธ๋์ ๊ทธ๋ฐ๊ฒ ์๋๊ฐ ์ถ์.. ๊ทผ๋ฐ ์ด๊ฑฐ ์ฆ๋ช ํ๋ ค๊ณ ๋ด๊ฐ ํ์ ๋ ๋ณํ ์์๋๋ฐ ๋ญ์ง.. ๋ด๊ฐ ๋ฐ๊พผ ์ฝ๋๊ฐ ๋๋ฌด ๋ง์์ ๊ทธ๋ฐ๊ฑธ์ง๋
๊ทธ๋๋ ์ง์ง ๋๋๋ถ์ ๋ถ์พํ๊ฒฝํ์์ ์ ๊ธฐํ๊ฒฝํ์ด ๋๊ฑฐ๊ฐ๋ค ๊ฑด๊ฐํ๊ฒ ํ๋ณตํ๊ฒ ์ค๋ ์ด์!!!!
๋๋ ์ฌ๋ฐ์์. ์ด๋ฐ ๊ธฐ๋ฌํ ๋ฌธ์ ๋ค์ ๋๋ฒ๊น ํ๋ฉด ๋ญ๊ฐ ์ถ๋ฆฌ๊ฒ์ ํ๋ ๊ธฐ๋ถ์ด ๋ค์.