More Related Content Similar to D2 Rain (1/2) (20) D2 Rain (1/2)1. Rain
์ต์ ํ, ๊น์ ํฌ
2. ๋ชฉ์ฐจ
โข Motivation
โข DX10์ ์ฌ์ฉํ NVIDIA์ ๋ฐฉ์
โข ์ ์ฝ ๋ฐ ๊ฐ์
โข ?
3. Motivation
โข ํ
์ค์ณ ์คํฌ๋กค ๋ฐฉ์
โ ๋น๊ฐ ์นด๋ฉ๋ผ๋ฅผ ๋ฐ๋ผ๋ค๋๋ค.
โ ๋ผ์ดํธ ์ฒ๋ฆฌ๊ฐ ํ๋ค๋ค.
โข ํํฐํด ๋ฐฉ์
โ ์ฌ์ค์ ์ธ ๋ผ์ดํธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
โ ํ์ง๋ง ๋ถํ๊ฐ ๋ง๋ค.
์ผ๋ง๋ ๋น ๋ฅด๊ฒ ๋ง์ด ๊ทธ๋ฆด ๊ฒ์ธ๊ฐ?
4. DX10์ ์ด์ฉํ NVIDIA ๋ฐฉ์
1. ๋ฒํ
์ค๋ฒํผ์ ํํฐํด ์์น ์ด๊ธฐํ
์นด๋ฉ๋ผ ์ฃผ๋ณ์๋ง ๋ฟ๋ฆฐ๋ค(์์ ์์๋ 45M)
2. ํํฐํด ์์น๊ฐฑ์ (Draw#1)
VS : ๋ฒํ
์ค๋ฒํผ๋ฅผ input์ผ๋ก ๋ฐ์์ ์ฐ์ฐ
GS : ํ๊ฒ๋ฒํผ๋ก VS์ output์ ์ ์ฅ
3. ํํฐํด Render (Draw#2)
GS : 2-2์ 1์ ์ 4๊ฐ์ ๋น๋ณด๋์ ์ผ๋ก ์์ฑ
PS : ๋ผ์ดํ
์ฐ์ฐ ๋ฐ ํํฐํด ๋๋๋ง
4. ๋ฌผ์ฒด Render (Draw#3)
PS : ๋ฉ์ฌ์ ๋ฌผ๋ฐฉ์ธ์ด ํ๊ธฐ๋ ํจ๊ณผ (์ญ๋)
5. * ์ญ๋
float3 Tan = normalize(In.Tan);
float3 InNormal = normalize(In.Normal);
float wetSurf = saturate(5*saturate(InNormal.y)); // ํํํ ๋ถ๋ถ์์๋ง ์ญ๋๋๋๋ก
โฆ ์๋ต โฆ
float4 N = SceneTextureNormal.Sample( samAniso, In.Texture ); // object์ normal
// SplashBumpTexture๋ 3D Texture
float4 BumpMapVal = SplashBumpTexture.Sample(samAnisoMirror,
float3(In.worldPos.x/2.0 + g_splashXDisplace,
In.worldPos.z/2.0 + g_splashYDisplace,
g_timeCycle))
- 0.5;
N += wetSurf * 2 * (BumpMapVal.x * Tan + BumpMapVal.y * binorm);
N = normalize(N); // ์ญ๋์ ๋ฐ๋ฅธ Normal ๋ณ๊ฒฝ
// ์ญ๋์ ๋ฐ๋ฅธ ์ ๋ณ๊ฒฝ
float3 splashDiffuse = wetSurf * SplashDiffuseTexture.Sample(samAnisoMirror,
float3(In.worldPos.xz, g_timeCycle));
8. ์ ์ฝ ๋ฐ ๊ฐ์
โข GeometryShader๊ฐ ์๋ค!!
โข ์ฐ๋ฆฌ์ ๊ณํ
โ Position Index๊ฐ ๋ด๊ธด ๋ฒํ
์ค๋ฒํผ๋ฅผ ๊ฐ๋ฅํ ๋ง์ด
๋ง๋ค์ด ๋๋๋ค.
โ ํ
์ค์ณ(A32R32G32B32)๋ฅผ ๋๋ํ๊ฒ์ผ๋ก ์์น์
๋ณด๋ฅผ ์ฐ์ฐํ๋ค.
โ ํํฐํด ๋ ๋๋ง(VS)
โข Index๋ฅผ ๊ฐ์ง๊ณ ํ
์ค์ณ์์ ํฌ์ง์
์ ๊ฐ์ ธ์จ๋ค.
โข ์์นํ
์ค์ณ์ ํฝ์
์ขํ = index/4
โข ํธ๋ผ์ด์ต๊ธ์์ = index%4