엔진에 관하여
MascotCapsule 엔진의 사양이나 프로그래밍 등의 기술적인 문제에 관한 FAQ입니다.
- Q: 오브젝트의 일부가 빠져서 표시됩니다.
- Q: 설정한 라이트가 적용되지 않습니다.
- Q: texture가 제대로 맵핑 되지 않습니다. 왜일까요?
- Q: 단말 에뮬레이터와 실단말에서 표시가 차이가 납니다만 괜찮은 걸까요?
- Q: texture의 맵핑 표시가 단말이나 에뮬레이터에 따라서 다릅니다.
- Q: texture의 색이 단말이나 에뮬레이터에 따라 다릅니다.
- Q: 오브젝트의 표시된 위치나 앞뒤관계가 단말이나 에뮬레이터에 따라 다릅니다.
- Q: 폴리곤의 색이 단말이나 에뮬레이터에 따라 다릅니다.
- Q: 일부의 폴리곤에 차이가 생겨 버립니다.
- Q: 의도하지 않는 오브젝트가 앞에 표시됩니다. 왜일까요?
- Q: 니어 클립과 퍼 클립은 어떻게 설정해야 합니까?
- Q: 반투명 폴리곤에 Z값이 적용되지 않습니다.
- Q: 오브젝트의 일부가 빠져서 표시됩니다.
-
A:MascotCapsule : V3 / V4(V3Compatible) / V4 Platform : ALL 클리핑 면의 설정이 부적절한 경우, 모델이 클리핑 되어 버리는 것에 의해 가정하고 있던 렌더링과 다른 결과가 되는 일이 있습니다.
니어 클리핑 면보다 시점에 가까운 위치의 모델은 클리핑 되어 버려 렌더링 되지 않습니다. 또, 퍼 클리핑 면보다 먼 위치의 모델도 렌더링 되지 않습니다. 즉 모델을 렌더링 되기 위해서는 그 모델이 니어 클리핑 면과 퍼 클리핑 면의 사이에 있는 것이 필요하게 됩니다.
[니어 클리핑으로 오브젝트가 사라지는 예]

위의 예에서는 오브젝트의 하나가 완전히 사라지고 있습니다만, 니어 클리핑 면과 오프젝트의 위치 관계에 따라서는 오브젝트의 일부가 표시되기도 합니다. 그러나 그 경우에서도 통상적으로 보여야 되는 면의 대부분이 클립 되어 버리기 때문에 가정한 것과 크게 달라져 버립니다.
[어중간하게 클립된 예]

이러한 경우는 니어 클리핑 면을 시점에 근접시키는 것으로 클립 되는 것을 피할 수 있습니다.
[퍼 클리핑으로 오프젝트가 사라지는 예]

그러면 니어 클리핑 면을 시점에 극히 가까운 위치에, 퍼 클리핑 면을 시점으로부터 극히 먼 위치에 설정하면 좋을까 라고 한다면 이번엔 양 클리핑 면간의 깊이 방향의 정밀도가 문제시 되는 경우가 있습니다.
- Q: 설정한 라이트가 적용되지 않습니다.
-
A:MascotCapsule : V3 / V4(V3Compatible) / V4 Platform : ALL 라이트의 설정이 적절하지 않을 경우, 예상하고 있던 렌더링 결과와 다를 경우가 있습니다.
점광원이나 스포트라이트는 광원으로부터의 거리로 인해 밝기가 바뀌기 때문에, 모델이 광원으로부터 떨어져 있는 경우 어두워져 버리는 현상이 일어납니다. 또 광원이 시점에서 볼 때 모델의 맞은 편에 있으면 그림자가 되어 어두운 부분이 이쪽 측면이 되므로 어두워져 버립니다.
[광원의 위치 관계로 오브젝트가 어둡게 될 때]

위의 예는 광원이 오브젝트의 맞은 편에 있거나 멀리 있어, 오브젝트에 닿는 빛의 강도가 약할 때의 예입니다. 이 예에서는 배경이 하얗기 때문에 분명히 알 수 있지만, 어두운 배경이라면 표시되고 있는지 아닌지를 모를 경우도 있습니다.
게다가 스포트 라이트에서는 거리뿐만이 아니라 방향이나 조사하는 각도도 문제가 되어 지기 때문에 주의가 필요합니다. 아무리 거리가 가까워도 라이트가 오브젝트의 방향을 향하지 않거나 조사각을 좁게 설정했기 때문에 오브젝트가 빛의 맞는 범위의 밖에 있거나 하면 어두워져 버립니다.
[스포트 라이트의 방향이나 조사각으로 오브젝트가 어두워지는 예]

그 밖에 표시되지 않는다고 하는 현상과는 조금 다릅니다만, 환경광의 설정도 문제가 되는 일이 있습니다. 예를 들어 환경광이 너무 강하면 입체적으로 보이는 쉐이딩이 잘 되지 않는 경우가 있습니다.
[환경광의 설정에 쉐이딩이 잘 되지 않는 예]

- Q: texture가 제대로 맵핑 되지 않습니다. 왜일까요?
-
A:MascotCapsule : V4 Platform : DoJa4.0 texture를 맵핑 한 오브젝트가 예상했던 것과 같이 표시되지 않을 경우, 우선 생각할 수 있는 것은 맵 데이터가 틀리거나 또는, texture 좌표가 틀려 있거나 하는 단순한 미스입니다. 그러나 모두 정상적임에도 불구하고 표시가 이상할 때에는 아래의 항목을 참조해 주세요.
DoJa4.0에서는 texture에 종횡의 사이즈가 다른 화상도 사용 가능합니다만 특정의 조건으로 texture가 올바르게 맵핑 되지 않을 경우가 있습니다. 문제가 발생하는 것은 아래의 조건을 모두 만족하는 경우로 하나라도 해당하지 않는 조건이 있는 경우에는 문제 없습니다.
* MBAC형식의 모델 데이터로의 맵핑
* 종횡의 크기가 모두 2의 제곱
* 종과 횡의 크기가 틀리다
예를 들어 128 x256나 64 x32라는 크기의 texture에서는 문제가 일어 날 가능성이 있습니다. 129 x256라고 하는 2의 제곱이 아닌 크기의 texture나 128 x128과 같이 종횡의 사이즈가 동일한 texture에서는 이 문제는 일어나지 않습니다.
[texture사이즈의 제한에 알맞은 맵핑을 하지 않은 예]

- Q: 단말 에뮬레이터와 실단말에서 표시가 차이가 납니다만 괜찮은 걸까요?
-
A:MascotCapsule : V4 Platform : ALL 대부분의 단말 에뮬레이터에서의 렌더링은 MascotCapsule 엔진의 소프트웨어 렌더러를 사용하고 있습니다. 이에 대해 실단말의 경우 하드웨어에 의한 3D렌더링 가속 기능을 가진 단말에서는 그 단말의 OpenGL|ES 드라이버를 호출해 렌더링을 수행하고 있습니다.
(가속 기능을 갖지 않는 단말에서는 단말 에뮬레이터와 다름없는 소프트웨어 렌더링을 사용하고 있습니다.)
소프트웨어 렌더러에서의 렌더링은 하드웨어에 의한 것과 비교하면 속도적으로 꽤 늦어지기 때문에 정밀도를 약간 희생하여 고속화하는 알고리즘을 채용하고 있습니다. 그렇기 때문에 단말 에뮬레이터에서의 표시 화상이 실단말에서의 화면과 다를 경우가 있습니다. - Q: texture의 맵핑 표시가 단말이나 에뮬레이터에 따라서 다릅니다.
-
A:MascotCapsule : V4 Platform : ALL 소프트웨어 렌더러의 렌더링 고속화 수법으로 차이가 현저하게 나오는 것은 texture를 맵핑 한 폴리곤의 렌더링으로 texture 좌표의 보간 계산이나 퍼스펙티브 콜렉션 계산의 정밀도가 크게 관여를 합니다.
[렌더러의 차이에 의한 texture 렌더링 차이의 예]

- Q: texture의 색이 단말이나 에뮬레이터에 따라 다릅니다.
-
A:MascotCapsule : ALL Platform : ALL 환경에 의해서 픽셀 심도의 차이나 라이팅 계산의 차이 등이 있습니다.
극단적 예를 들면 옛날 PC와 같이 RGB가 각각 1bit씩의 심도 밖에 없는 경우(흰색이나 흑을 포함한) 8색 밖에 표현할 수밖에 없습니다.
다계조를 표현할 수 있는 단말과는 명확하게 표시가 다르게 됩니다. 또 픽셀 심도가 동일한 경우에서도 라이팅 계산의 알고리즘이나 계산 정밀도의 차이로 결과가 차이가 난다면 다소 다른 색이 되기도 합니다.
- Q: 오브젝트의 표시된 위치나 앞뒤관계가 단말이나 에뮬레이터에 따라 다릅니다.
-
A:MascotCapsule : V4 Platform : ALL 복수의 오브젝트가 있고 오브젝트 간의 위치가 극히 가까운 경우나 하나의 오브젝트에서도 복수의 폴리곤의 정점 위치가 가까운 경우에 정밀도의 관계에서 깊이 방향(Z)의 좌표 값이 동일 값이 되어 버려 올바른 앞뒤관계로 표시되지 않는 일이 있습니다.
단말 에뮬레이터와 실단말과의 Z심도의 차이 등에 의해 양쪽 모두 똑같이 표시 된다고 한정할 수 없으며, 다른 한쪽의 앞뒤관계가 달라지기도 합니다.
단말 에뮬레이터와 실단말 또는 실단말의 종류에 따라서 3D렌더링을 위한 렌더러가 다를 수 있습니다. 단말 에뮬레이터로 사용하고 있는 소프트웨어 렌더링과 실단말의 OpenGL|ES렌더러에서는 기본적인 3D의 계산•렌더링의 흐름은 같습니다만 세세한 부분에서의 알고리즘이나 계산의 순서 등이 달라서 그것에 따라 계산 정밀도에 차이가 발생합니다. (OpenGL|ES렌더러끼리라도 실장이 차이가 나면 똑같이 차이가 발생할 가능성이 있습니다)
이 때문에 단말 에뮬레이터와 실단말에서 동일 오브젝트를 동일 위치에 렌더링해도 실제로 표시되는 위치가 달라지는 일이 있습니다. 대다수의 경우 계산상은 1픽셀 이하의 차이밖에 없고, 표시 위치가 다를 수도 없습니다. 그러나 몇 안 되는 차이라도 반올림이나 버림 등의 어설픈 처리로 위치가 달라지는 경우가 있을 수 있습니다.
그렇기 때문에 3D렌더링에 있어서 단말에 의존하지 않고 표시 위치를 픽셀 단위로 결정하는 것은 어렵고 어플리케이션의 작성시에도 1 픽셀 정도의 위치 차이는 있는 것이라고 생각해 두는 편이 좋을 것입니다. 반대로 표시 위치가 수픽셀 이상 달라지는 일이 있으면 (하드웨어•드라이버를 포함) 일련의 3D계산 중에서 어디엔가 문제가 발생하고 있을 가능성이 있습니다. - Q: 폴리곤의 색이 단말이나 에뮬레이터에 따라 다릅니다.
-
A:MascotCapsule : V4 Platform : DoJa4.0 DoJa4.0으로 반투명 폴리곤을 포함한 MBAC 형식의 모델을 렌더링 했을 경우 렌더링된 폴리곤의 색이 4.0 이전의 버전과 다를 수 있습니다.
MBAC 형식 데이터에서는 반투명의 브랜드시에 감산(마이너스) 지정이 가능합니다만, DoJa4.0에 사용되고 있는 MascotCapsule V4엔진이 하위 API에 OpenGL|ES 를 사용할 수 있게 되어 있기 때문에 OpenGL|ES 의 브랜드 연산의 사양에 맞추는 형태로 렌더링 처리를 변경하고 있습니다.
그 결과 감산(마이너스) 블랜드를 지정한 폴리곤을 포함한 모델의 색이 4.0 이전의 버전과 다를 수 있습니다.
[마이너스 블랜드를 지정하여 폴리곤을 포함한 모델의 렌더링 예]

위의 화상을 비교해 보면 좌측 하단 부분의 색이 차이가 납니다. 좌측의 V3엔진에서의 렌더링에서는 감산(마이너스) 브랜드가 유효하기 때문에 흰 배경에서의 빨간색의 성분이 감산되어 하늘색이 되어 있습니다. 이것과 비교해 우측의 V4엔진의 렌더링에서는 감산(마이너스) 처리가 실행되지 않고 붉은 색이 그대로 렌더링 되고 있습니다. - Q: 일부의 폴리곤에 차이가 생겨 버립니다
-
A:MascotCapsule : V4 Platform : ALL 실행하는 환경의 정밀도의 문제로 폴리곤이 어긋나 보이는 경우가 있습니다.
이 현상은 항상 오브젝트 전체에서 일어나는 것은 아니고 오브젝트의 일부에서만 발생하는 일이 있습니다. 그렇다기보다 폴리곤 단위로 3D계산을 하고 있으므로 " 개개의 폴리곤 마다 발생하는지 아닌지에 의해 결정된다 " 라고 말하는 편이 좋을 것입니다.
그렇기 때문에 오브젝트 전체적으로는 위치가 어긋나 있지 않지만, 일부의 폴리곤만이 어긋날 수 있습니다. 이 어긋나는 폴리곤이 오브젝트 전체에서 보아 작은 것이라면 표시상 폴리곤이라고 하기보다 몇 개의 픽셀의 집합으로 밖에 보이지 않기 때문에 오브젝트의 일부에서 픽셀이 어긋나 있다고 하는 느낌으로 보여지기도 합니다. - Q: 의도하지 않는 오브젝트가 앞에 표시됩니다. 왜일까요?
-
A:MascotCapsule : V3 / V4(V3Compatible) / V4 Platform : ALL MascotCapsule V4에서는 frame buffer에의 렌더링에 Z buffer법을 사용하고 있습니다. 이것에 대조하여 MascotCapsule V4이전의 버전에서는 Z sort법을 사용하고 있었습니다.
Z buffer법에서는 1픽셀 마다 깊이 판정을 하여서 가장 시점에 가까운 오브젝트가 표시됩니다. 그러나 Z sort법에서는 폴리곤 단위로 Z의 값으로 sort 하여 렌더링 하기때문에 픽셀 단위로 보면 반드시 시점에 제일 가까운 오브젝트가 표시된다고는 할 수 없습니다.
이 때문에 MascotCapsule V4로 렌더링 한 화상과 MascotCapsule V4이전의 버전으로 렌더링 한 화상이 차이가 나는 일이 있습니다. 특히 폴리곤끼리 교차하고 있는 경우 Z sort법에서는 올바르게 렌더링 할 수 없습니다만 Z buffer법에서는 픽셀 단위로 깊이 판정을 행하기 위해 올바른 렌더링이 가능하게 됩니다.
[폴리곤이 교차하고 있는 모델을 렌더링 했을 경우의 차이의 예]

- Q: 니어 클립과 퍼 클립은 어떻게 설정해야 합니까?
-
A:MascotCapsule : V4 Platform : ALL 복수의 오브젝트가 있고 오브젝트간의 위치가 극히 가까운 경우나 하나의 오브젝트에서도 복수의 폴리곤의 정점 위치가 가까운 경우에 정밀도의 관계로 깊이 방향(Z)의 좌표 값이 동일 값이 되어 버려 올바른 전후관계로 표시되지 않는 경우가 있습니다.
이 현상은 Depth buffer 상에서의 Z값의 특성으로부터 시점에서 먼 위치에서 일어나기 쉬워집니다. 이것은 투시 투영으로 시점에 가까운 위치의 물체는 크게 표시되고 시점에서 먼 위치의 물체는 작게 표시되는 것과 관계하고 있습니다. 시점에서 멀리 떨어진 물체는 X, Y방향뿐만이 아니라 Z방향에도 축소되어 렌더링 되는 것입니다.
더욱이 이 문제는 니어 클리핑 면과 퍼 클리핑 면의 설정과도 관계하고 있습니다. Depth buffer에 써지는 Z값은 니어 클리핑 면과 퍼 클리핑 면의 깊이가 각각 Z값의 최대•최소가 되는 것(양쪽 클리핑 면의 사이의 공간이 Depth bufferr가 가질 수 있는 값의 전체 영역이 되는 것) 같이 조정되기 때문 입니다.
즉 두 오브젝트가 위치를 바꾸지 않는다고 해도, 니어 클리핑 면과 퍼 클리핑 면의 간격이 넓어지면 질 수록 Depth buffer상에서의 Z값은 가까워지게 되어 Depth buffer의 정밀도를 넘어 가까워지면 Z값이 동일치가 되어 버려 어느 쪽의 오브젝트가 앞에 있는지를 판단할 수 없게 되어 버립니다.
또 시점으로부터 니어 클리핑 면까지의 거리와 퍼 클리핑 면까지의 거리의 비가 커지면 (조금 전의 Z방향에도 축소되어 렌더링 되는 것에 의해서)시점에서 먼 파 클리핑 면 가까이에서의 Z값의 정밀도가 현저하게 나빠지기 때문에 더욱 문제가 일어나기 쉽게 됩니다.
이 문제를 피하기 위해, 니어 클리핑 면과 퍼 클리핑 면의 양면은 가능한 한 접근하여 설정하는 것이 바람직하다고 여겨지고 있습니다. 단지 함부로 접근하여도 오브젝트가 클립 되어 버리게 되기 때문에 주의가 필요합니다.
일반적으로는 니어 클리핑 면은 제일 앞의 오브젝트보다 조금 시점 가까이의 위치에, 퍼 클리핑 면은 제일 먼 오브젝트보다 시점에서 조금 먼 위치로 설정하는 것이 좋을 것입니다. - Q: 반투명 폴리곤에 Z값이 적용되지 않습니다.
-
A:MascotCapsule : V4 Platform : ALL 렌더링 하는 오브젝트 속에 반투명인 폴리곤이 포함되어 있는 것이 있을 경우 오브젝트가 올바른 전후관계로 렌더링 되지 않을 수도 있습니다. 왜냐하면 반투명인 폴리곤에는 Z burrfer법의 깊이 판정이 적용되지 않고 Depth buffer에도 Z값를 쓰지 않는 사양이기 때문입니다.
그 때문에 반투명 폴리곤을 포함한 오브젝트를 렌더링 할 때는 렌더링 순서에 따라서 올바르지 않은 렌더링 결과가 나오는 일이 있기 때문에 주의가 필요합니다.

