D2 Rain (1/2)

1,094 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,094
On SlideShare
0
From Embeds
0
Number of Embeds
355
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

D2 Rain (1/2)

  1. 1. Rain 최유표, 김정희
  2. 2. 목차• Motivation• DX10을 사용한 NVIDIA의 방식• 제약 및 개선• ?
  3. 3. Motivation• 텍스쳐 스크롤 방식 – 비가 카메라를 따라다닌다. – 라이트 처리가 힘들다.• 파티클 방식 – 사실적인 라이트 처리가 가능하다. – 하지만 부하가 많다. 얼마나 빠르게 많이 그릴 것인가?
  4. 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. 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 Texturefloat4 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));
  6. 6. 제약 및 개선• GeometryShader가 없다!!• 우리의 계획 – Position Index가 담긴 버텍스버퍼를 가능한 많이 만들어 놓는다. – 텍스쳐(A32R32G32B32)를 랜더타겟으로 위치정 보를 연산한다. – 파티클 렌더링(VS) • Index를 가지고 텍스쳐에서 포지션을 가져온다. • 위치텍스쳐의 픽셀좌표 = index/4 • 트라이앵글순서 = index%4

×