티스토리 뷰

Filtering 되지 않은 texture 사용법

clipless

IntegrateEdge

texturing 에 대한 설명이 추가 되어있다

IntegrateEdge

가장 간단한 라인 integral form은 아래와 같다

float cosTheta = dot(v1, v2);
float theta = acos(cosTheta);
float res = normalize(cross(v1, v2)).z * theta;

v3.0 적용 전의 4 paramter minV를 적용했을 때의 결과는

mat3 Minv = mat3(
    vec3(1, 0, t.y),
    vec3(0, t.z, 0),
    vec3(t.w, 0, t.x)
);

거의 비슷하다

하지만, angle이 커지고 roughness가 커지면 아래와 같은 문제 발생

Normalize M

Clipless approximation

sphere’s form factor is sin(angular_extent)^2 이거 때문이라는데 form factor는 대체;

https://www.microsoft.com/en-us/research/wp-content/uploads/1996/03/arealights.pdf

Eq.6 번에 해당 내용, appendix에 해설이 나온다

elevation angle = dot(n, normalize(F))

이라 되어있는데 n은 (0, 0, 1)로 변환했으므로

    float len = length(vsum);
    float z = vsum.z/len;

실제론 사이각이니 -1 ~ 1 사이인 cos 값이 나오겠다

테이블 생성은 fitLTC의 genSphereTab 에서 수행

우선 i_hemi_sub는 fitLTC의 ihemi 부분에 나온다

    // z = cos(elevation angle)
    float z = 2.0f*U1 - 1.0f;

    // length of average dir., proportional to sin(sigma)^2
    float len = U2;

반면 sphere_integral 이라고 curve fitting 한게 있는데

화면 전체에 해당하는 light에 대해 전체적인 오차가 눈에 뛴다

크기가 상대적으로 적다면 오차는 경미한 수준

#if SPHERE_INTEGRAL
    // original
#else
    // SphereIntegral
    sum = max((len*len + vsum.z)/(len + 1), 0);
#endif

    if (behind && !twoSided)
        sum = 0.0;

Texture without border

filtering은 여전히 필요한게 맞고

F를 direction으로 사용하면 안쪽 영역에만 위치하니 border 추가가 필요없다는 것이다

border 없는 택스트 사용시 기존 소스는 아래와 같은 경계선을 보인다

dir를 프로젝션해서 사용할 경우 경계선이 없다

하지만 border 없이 clamp_to_edge를 사용하여도 괜찮아 보인다

ray의 구현에는 border 처리가 않보이는데 그냥 이렇게 한것 같다

'Game > Graphics' 카테고리의 다른 글

Volumetric Light  (0) 2018.03.21
Area light cont.  (0) 2018.03.18
Ground truth option  (0) 2018.03.13
LTC Implementations  (0) 2018.03.05
LTCs Fittting - Nelder-Mead optimization algorithm  (0) 2018.02.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크