[DX11 입문 제19장] 지형 렌더링에 유한 차분법? 중심 차분법?

GPG 시리즈 관련 질답, 논의 공간.

Moderator: 류광

비회원

지형 렌더링에 유한 차분법? 중심 차분법?

Post by 비회원 »

이전 챕터까지는 어느정도 이해하고 있는데요..

지형 렌더링이 좀 어렵네요..
아무리 구글링하고 책과, 소스를 몇번씩 봐도 잘 모르는
몇가지 질문 올리겠습니다. ㅠㅠ

1. 노말,변위맵핑과는 다르게 왜 이 챕터의 지형렌더링 예제에서는 정점 정보에 Normal과 TangentU값을 주지 않는 것인가요?

2. 픽셀셰이더에서 나오는 중심차분법... 유한차분법이 문제가 좀 있어서 중심차분법을 사용한다고 적혀있는데..
유한차분법,중심차분법의 개념과 TBN기저벡터구성에 씌인 이유를 알고 싶습니다.
아무리 구글링해도... 정보를 찾기 힘드네요..ㅣㅠㅠ

3. 셰이더에서 TiledTex의 용도가 궁금합니다.
셰이더리소스배열과 관련 있는것 같은데..
그냥 생각하기에.. 각 텍셀에 맞는 셰이더리소스를 찾아 그 위치의 샘플링된 색상값을 가져오면 되는걸로 생각이 드는데요..

dout.TiledTex = dout.Tex*gTexScale;
->
// Sample layers in texture array.
float4 c0 = gLayerMapArray.Sample( samLinear, float3(pin.TiledTex, 0.0f) );
float4 c1 = gLayerMapArray.Sample( samLinear, float3(pin.TiledTex, 1.0f) );
float4 c2 = gLayerMapArray.Sample( samLinear, float3(pin.TiledTex, 2.0f) );
float4 c3 = gLayerMapArray.Sample( samLinear, float3(pin.TiledTex, 3.0f) );
float4 c4 = gLayerMapArray.Sample( samLinear, float3(pin.TiledTex, 4.0f) );
->
// Sample the blend map.
float4 t = gBlendMap.Sample( samLinear, pin.Tex );
->
// Blend the layers on top of each other.
float4 texColor = c0;
texColor = lerp(texColor, c1, t.r);
texColor = lerp(texColor, c2, t.g);
texColor = lerp(texColor, c3, t.b);
texColor = lerp(texColor, c4, t.a);

이와 같은 순서로 각 위치의 텍셀색상값을 가져오는게 이해가 잘 안되네요..


환절기 감기 조심하세요.^^
비회원

....자답...

Post by 비회원 »

자답인데요..

1번 질문은..
처음 그리드지형(어느점이나 항상 위쪽을 향하고 셰이더에서 어짜피 다시 계산)이니 만들어 입력기에 넣어주니 당연히 노말이나 탄젠트 값이 없는것 같습니다.

3번은 아직 제가 책 뒷부분을 제대로 보지못하고 질문을 올렸네요.
다시 책 내용을 정독해 보겠습니다.

2번은.. 아직 잘 이해가 안되는데요..
한 텍셀의 양옆, 위아래를 CellSpace만큼씩 넓혀서
tangent와 bitan을 구해서 최종적으로 법선정보normalW를 구하는 것 같습니다.

gTexelCellSpaceU마큼 사이드를 넓혀서 TBN을 구하는 이유가 무엇인지..
그리고
float3 tangent = normalize(float3(2.0f*gWorldCellSpace, rightY - leftY, 0.0f));
float3 bitan = normalize(float3(0.0f, bottomY - topY, -2.0f*gWorldCellSpace));
이 계산법에 어떻게 되는건지 아직 잘 모르겠네요..
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

좀 가물가물한데 2번은 유한차분법 자체에 문제가 있는 것이 아니라 유한차분법을 영역 셰이더에서 사용한 것이 문제였다는 뜻인 것 같습니다. 중심차분법은 여러 유한차분법 중 하나인데 본문에 그런 언급이 없어서 혼동이 생긴 것 같습니다.

유한차분법에는 전진차분법(x와 x+delta)과 후진차분법(x-delta와 x), 그리고 중심차분법(x-delta와 x+delta)이 있는데 중심차분법이 오차가 더 작다고 합니다. 상하좌우 가장자리를 한 단위씩 넓히는 것은 -delta와 +delta 때문이겠고요.
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

그리고 tangent, bitan 계산은 그냥 19.2.5절 처음 두 수식을 문맥에 맞게 코드로 옮긴 것일 뿐입니다. 코드에 등장하는 2.0f은 나누기 2h를 피하기 위한 것이고요(어차피 단위벡터로 정규화하므로 이렇게 하는 게 효율적입니다...라고는 하지만 요즘 하드웨어+컴파일러에서 나누기, 특히 2로 나누기를 너무 겁낼 필요는 없다는 이야기도 있고요).
비회원

감사합니다..

Post by 비회원 »

답변주신게 이해하는데 많은 도움이 됐습니다.

전진차분법(x와 x+delta) 후진차분법(x-delta와 x), 그리고 중심차분법(x-delta와 x+delta)

한국말이 참 어렵네요..ㅎㅎ 이렇게 설명해주시니.. 좀 와닫네요...

항상 질문을 올리고 다시 고민해서 생각하고 느끼는 점은..
아 내가 책을 덜봤구나 느끼네요..

감사합니다.
Post Reply