현재 OpenGL-es를 사용하고 있으며 gl 쉐이딩 언어를 사용하고 있습니다. 나는 텍스처에 렌더링하려고하지만 정밀도의 손실을 발견했습니다. 예를 들어 텍스처에 0.5의 float 값을 쓸 때 텍스처에 저장된 실제 값은 약 0.498입니다. 더 높은 정밀도를 얻으려면 어떻게해야합니까?GLSL 프래그먼트 쉐이더의 정밀도 상실
답변
:
vec4 packFloat(const float value) {
const vec4 bitSh = vec4(256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0);
const vec4 bitMsk = vec4(0.0, 1.0/256.0, 1.0/256.0, 1.0/256.0);
vec4 res = fract(value * bitSh);
res -= res.xxyz * bitMsk;
return res;
}
float unpackFloat(const vec4 value) {
const vec4 bitSh = vec4(1.0/(256.0 * 256.0 * 256.0), 1.0/(256.0 * 256.0), 1.0/256.0, 1.0);
return (dot(value, bitSh));
}
이것은 깊이 맵과 같은 값을 저장하기 위해 괜찮을 수도 그리고 이것은 각 픽셀/텍셀에 대해 32 비트 범위의 종류가 될 것입니다.
구성 요소 당 8 비트 이상을 사용하는 텍스처로 렌더링합니다. appropriate OpenGL ES extensions for that이 없으면 일반적으로 할 수있는 일이 많지 않습니다.
조금 보완 된 것 같지만 확장을 사용하는 방법을 보려고합니다. 도와 줘서 고마워! – Timothy
렌더링 파이프 라인의 마지막 단계에서 픽셀 값을 0..1 범위로 조정하므로 다음으로 높은 정밀도로는 충분하지 않을 수도 있습니다. 끝점은 0..1입니다. 따라서 1은 255로 표시되며 1/256 대신 1/255의 계수를 제안합니다.
동일한 내용이 모든 정밀도에 적용됩니다. 0.5는 정확하게 표현할 수 없습니다.
플로트가 0..1의 범위로 스케일 될 것이라는 것을 압니다. 그러나 나는 아직도 약간 혼란 스럽습니다. 나는 0.5가 128/256이고 그것이 고정밀 도로 제시 될 수 있다고 생각했다. – Timothy
정확히 0.5로 표시하려면 float 값을 256으로 나눠야합니다. 그러나 256 개의 8 비트 정수 값만 사용할 수 있습니다. 0은 0.0으로 매핑되고 255는 1.0에 매핑됩니다. 중간에 정확히 정수 값이 없습니다 (예 : 127.5) –
알았습니다. 지금 무엇을해야하는지 알 것 같습니다. 고마워. – Timothy
- 1. Spring queryForLong - 정밀도 상실
- 2. 이중 정밀도 상실 C#
- 3. GLSL 프래그먼트 쉐이더 구문 오류
- 4. GLSL 프래그먼트 쉐이더가 컴파일되지 않습니다
- 5. 쉐이더의 GLSL 텍스처 좌표가 선형이 아닌 이유는 무엇입니까?
- 6. iOS GLSL 프래그먼트 쉐이더에서 기본 산술
- 7. 버텍스 쉐이더의 버텍스 컬러 변경
- 8. WebGL 조각 쉐이더의 크기는 얼마나 될까요?
- 9. 두 점에서도를 계산하는 정확도 상실
- 10. GLSL 3.3 resources
- 11. Three.js가있는 쉐이더의 필드 "value"
- 12. 쉐이더의 Heightmap이 작동하지 않습니다.
- 13. Mac에서 GLSL 버전 설정
- 14. GLSL?
- 15. GLSL
- 16. GLSL 및 glReadPixels
- 17. GLSL 브랜칭 동작
- 18. jQuery 위치가있는 호버링 상실 :
- 19. CodeIgniter가 기본보기를 상실 함
- 20. 일종의 "기능 상실"
- 21. YouTube API에서 상실
- 22. MYSQL의 모든 권한 상실
- 23. Devise의 상실 current_account
- 24. Sql Clr 사용자 정의 형식 float 구문 분석 및 정밀도 상실
- 25. Pow 함수와 쉐이더의 조회 텍스처
- 26. OpenGL 쉐이더의 성능 프로파일 링
- 27. 프래그먼트 이해하기
- 28. 낮은 폴리 표면에서의 glsl 효과
- 29. Mac OS X의 프로필 GLSL 조각 셰이더?
- 30. 프래그먼트 쉐이더 눈금 - 비 계단식 깊이 좌표
고마워요! 나는이 방법이 나를 도울 것이라고 생각하며 나는 이렇게 높은 정밀도를 달성하려고 노력할 것이다! 고맙습니다! – Timothy
잘하면 그것이 작동;) – TheWhiteLlama
이것은 보간을 해제하지 않으면 작동하지 않을 것입니다. –