티스토리 뷰
이까지 오는데 너무 많이 걸렸는데,
여기서 또 Pixel Query를 하네
Deferred context랑 안맞기도 한데 그냥 context로 해도 stall 이 있는듯.
https://www.3dgep.com/forward-plus/ 에서는
이전 프레임 (또는 이전 2 프레임)의 쿼리 결과가
시간적 일관성 이론 [15] 에 의존하는 현재 프레임의 쿼리 결과 대신 사용되는
경우 실속을 피할 수 있습니다 . 이렇게하면 여러 광원에 대해 여러 쿼리
개체를 만들어야하기 때문에 쿼리 개체를 여러 프레임에 걸쳐 유지해야하는
경우 다시 쿼리 개체를 사용할 수 없기 때문에 이러한 쿼리 개체를 다시
사용할 수 없습니다.
또, 다시 Query pool 을 만들어야하나.
만들어도 저 시간적 일관성이 어떻게 얻어지는거지;
motion blur 쪽에서도 이상한 방법 사용하던데
우선, light 추가 부터
128개 추가시켰는데 우선 시간도 문제이지만 light 가 들어갔는지 파악이 안된다.
확인을 위해 main 을 끄고 red light 만 추가시키면
HDR Tone mapping 을 먼저 넣어야 겠다.
넣다보니 전에 넣은 Fxaa pixel 이 이번에 업데이트한 부분하고 안맞아서
생긴 문제란걸 알았다.
톤 매핑이 없다고 해서 하얗게 뜨진 않고;
1로 날라내니 전체적으로 밝아진다 :> 많이 밝은 부분의 정보가 날라간다. 가 끝임
128 Light (1 Directional) - model 은 2개인데 mesh로 분류하면 42, 8 개로 나눠짐.
Foward:
Deferred: Light 의 범위로 제한 걸지 않고 Full Quad 로 rendering 했을 경우
처음 결과를 봤을 땐 혼란 스러웠는데;
배경 model 이 화면을 많이 차있고 모두 transparent 로 분류됨(alpha texture를 가져서)
Full screen quad로 128 개 라이트를 처리함.
foward의 경우 50번 draw 되지만, 최상위에 있는 pixel 만 처리됨.
이래서 이런 결과가 나온게 아닌가 함.
Deferred: Light 의 Range clipping
3dgrep에서 설명한 방법대로 수행하였다.
Deferred Rendering in Killzone 2 의 방법에서 culling 방향을 바꾼건데
Realtime rendering 의 deferred rendering chapter의 최적화 부분에 언급이 있다.
이러면 3dgrep 에서 설명한 것처럼 near plane 쪽 light는 안짤리고 표시되나 반대로 far plane 쪽에 걸친 light가 짤린다고 한다.
Forward 쪽에도 똑같이 range clipping 추가하고 다시 측정
투명이 너무 많다...
PS. Cone 의 원점이 가운데 있는걸 까먹고 spot light 가 너무 작다고 저 부분만 2시간 넘게 본거 같다. 의욕과 멘탈이 나간건 덤.
3DGrep은 AssImp 의 primitive generate 가 가능한 format 으로 기록한후 import 한다.
std::shared_ptr<Scene> RenderDeviceDX11::CreateCylinder( float baseRadius, float apexRadius, float height, const glm::vec3& axis )
{
std::shared_ptr<Scene> scene = CreateScene();
std::stringstream ss;
// Create a white diffuse material for the cylinder.
// f red green blue Kd Ks Shine transmittance indexOfRefraction
ss << "f 1 1 1 1 0 0 0 0" << std::endl;
ss << "c" << std::endl;
// base.x base.y base.z baseRadius
ss << "0 0 0 " << baseRadius << std::endl;
glm::vec3 apex = axis * height;
// apex.x apex.y apex.z apexRadius
ss << apex.x << " " << apex.y << " " << apex.z << " " << apexRadius << std::endl;
scene->LoadFromString( ss.str(), "nff" )
}
'Game > MMD' 카테고리의 다른 글
Tone mapping (3) (0) | 2017.09.22 |
---|---|
Outline (1) (0) | 2017.09.21 |
Bullet (5) Skinning (0) | 2017.08.31 |
Bullet (5) Skinning (0) | 2017.08.31 |
Boost spirit (0) | 2017.08.29 |
- Total
- Today
- Yesterday