ವೆಬ್ಎಕ್ಸ್ಆರ್ ಡೆಪ್ತ್ ಬಫರ್ ರೆಸಲ್ಯೂಶನ್ ನಿರ್ವಹಣೆ, ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡುವುದು, ಮತ್ತು ದೃಢವಾದ ಎಆರ್ ಅಕ್ಲೂಷನ್ ಹಾಗೂ ಸಂವಹನಕ್ಕಾಗಿ ಗುಣಮಟ್ಟ ನಿಯಂತ್ರಣವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಡೆವಲಪರ್ಗಳಿಗಾಗಿ ಒಂದು ಆಳವಾದ ಮಾರ್ಗದರ್ಶಿ.
ವೆಬ್ಎಕ್ಸ್ಆರ್ ಡೆಪ್ತ್ನಲ್ಲಿ ಪ್ರಾವೀಣ್ಯತೆ: ಡೆಪ್ತ್ ಬಫರ್ ರೆಸಲ್ಯೂಶನ್ ಮತ್ತು ಗುಣಮಟ್ಟ ನಿಯಂತ್ರಣದ ಕುರಿತು ಆಳವಾದ ವಿಶ್ಲೇಷಣೆ
ಆಗ್ಮೆಂಟೆಡ್ ರಿಯಾಲಿಟಿ (AR) ವೈಜ್ಞಾನಿಕ ಕಾದಂಬರಿಯ ಗಡಿಯನ್ನು ದಾಟಿ, ನಾವು ಡಿಜಿಟಲ್ ಮಾಹಿತಿಯೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುವ ರೀತಿಯನ್ನು ಮರುರೂಪಿಸುವ ಒಂದು ಸ್ಪಷ್ಟವಾದ, ಶಕ್ತಿಯುತ ಸಾಧನವಾಗಿ ಮಾರ್ಪಟ್ಟಿದೆ. ಎಆರ್ನ ಮ್ಯಾಜಿಕ್, ವಾಸ್ತವವನ್ನು ಮತ್ತು ವರ್ಚುವಲ್ ಅನ್ನು ಮನಬಂದಂತೆ ಸಂಯೋಜಿಸುವ ಅದರ ಸಾಮರ್ಥ್ಯದಲ್ಲಿದೆ. ನಿಮ್ಮ ಲಿವಿಂಗ್ ರೂಮ್ ಫರ್ನಿಚರ್ ಸುತ್ತಲೂ ಸಂಚರಿಸುವ ವರ್ಚುವಲ್ ಪಾತ್ರ, ನೈಜ-ಪ್ರಪಂಚದ ವಸ್ತುವನ್ನು ನಿಖರವಾಗಿ ಅಳೆಯುವ ಡಿಜಿಟಲ್ ಅಳತೆ ಸಾಧನ, ಅಥವಾ ನೈಜ-ಪ್ರಪಂಚದ ಕಂಬದ ಹಿಂದೆ ಸರಿಯಾಗಿ ಅಡಗಿರುವ ವರ್ಚುವಲ್ ಕಲಾಕೃತಿ - ಈ ಅನುಭವಗಳು ಒಂದು ನಿರ್ಣಾಯಕ ತಂತ್ರಜ್ಞಾನದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿವೆ: ನೈಜ-ಸಮಯದ ಪರಿಸರವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು. ವೆಬ್-ಆಧಾರಿತ ಎಆರ್ಗೆ ಈ ತಿಳುವಳಿಕೆಯ ಹೃದಯಭಾಗದಲ್ಲಿರುವುದು ವೆಬ್ಎಕ್ಸ್ಆರ್ ಡೆಪ್ತ್ API ಆಗಿದೆ.
ಡೆಪ್ತ್ APIಯು, ಸಾಧನದ ಕ್ಯಾಮೆರಾದಿಂದ ನೋಡಿದಂತೆ ನೈಜ-ಪ್ರಪಂಚದ ಜ್ಯಾಮಿತಿಯ ಪ್ರತಿ-ಫ್ರೇಮ್ ಅಂದಾಜನ್ನು ಡೆವಲಪರ್ಗಳಿಗೆ ಒದಗಿಸುತ್ತದೆ. ಈ ಡೇಟಾವನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಡೆಪ್ತ್ ಮ್ಯಾಪ್ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ, ಮತ್ತು ಇದು ಅಕ್ಲೂಷನ್, ವಾಸ್ತವಿಕ ಭೌತಶಾಸ್ತ್ರ ಮತ್ತು ಪರಿಸರದ ಮೆಶಿಂಗ್ನಂತಹ ಅತ್ಯಾಧುನಿಕ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಪ್ರಮುಖವಾಗಿದೆ. ಆದಾಗ್ಯೂ, ಈ ಡೆಪ್ತ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸುವುದು ಕೇವಲ ಮೊದಲ ಹೆಜ್ಜೆಯಾಗಿದೆ. ಕಚ್ಚಾ ಡೆಪ್ತ್ ಮಾಹಿತಿಯು ಸಾಮಾನ್ಯವಾಗಿ ಗದ್ದಲದಿಂದ ಕೂಡಿರುತ್ತದೆ, ಅಸಮಂಜಸವಾಗಿರುತ್ತದೆ ಮತ್ತು ಮುಖ್ಯ ಕ್ಯಾಮೆರಾ ಫೀಡ್ಗಿಂತ ಕಡಿಮೆ ರೆಸಲ್ಯೂಶನ್ ಹೊಂದಿರುತ್ತದೆ. ಸರಿಯಾದ ನಿರ್ವಹಣೆಯಿಲ್ಲದೆ, ಇದು ಮಿನುಗುವ ಅಕ್ಲೂಷನ್ಗಳು, ಅಸ್ಥಿರ ಭೌತಶಾಸ್ತ್ರ, ಮತ್ತು ತಲ್ಲೀನಗೊಳಿಸುವ ಭ್ರಮೆಯ ಸಾಮಾನ್ಯ ಕುಸಿತಕ್ಕೆ ಕಾರಣವಾಗಬಹುದು.
ಈ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿಯು ಮೂಲಭೂತ ಎಆರ್ನಿಂದಾಚೆ ಸಾಗಿ, ನಿಜವಾಗಿಯೂ ದೃಢವಾದ, ನಂಬಲರ್ಹವಾದ ಅನುಭವಗಳ ಕ್ಷೇತ್ರಕ್ಕೆ ಕಾಲಿಡಲು ಬಯಸುವ ವೆಬ್ಎಕ್ಸ್ಆರ್ ಡೆವಲಪರ್ಗಳಿಗಾಗಿದೆ. ನಾವು ಡೆಪ್ತ್ ಬಫರ್ ರೆಸಲ್ಯೂಶನ್ ಪರಿಕಲ್ಪನೆಯನ್ನು ವಿಭಜಿಸುತ್ತೇವೆ, ಅದರ ಗುಣಮಟ್ಟವನ್ನು ಕುಗ್ಗಿಸುವ ಅಂಶಗಳನ್ನು ಅನ್ವೇಷಿಸುತ್ತೇವೆ ಮತ್ತು ಗುಣಮಟ್ಟ ನಿಯಂತ್ರಣ, ಫಿಲ್ಟರಿಂಗ್ ಮತ್ತು ಮೌಲ್ಯೀಕರಣಕ್ಕಾಗಿ ಪ್ರಾಯೋಗಿಕ ತಂತ್ರಗಳ ಒಂದು ಟೂಲ್ಬಾಕ್ಸ್ ಅನ್ನು ಒದಗಿಸುತ್ತೇವೆ. ಈ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ, ನೀವು ಗದ್ದಲದ, ಕಚ್ಚಾ ಡೇಟಾವನ್ನು ಮುಂದಿನ ಪೀಳಿಗೆಯ ಎಆರ್ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಸ್ಥಿರ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹ ಅಡಿಪಾಯವಾಗಿ ಪರಿವರ್ತಿಸಬಹುದು.
ಅಧ್ಯಾಯ 1: ವೆಬ್ಎಕ್ಸ್ಆರ್ ಡೆಪ್ತ್ APIಯ ಮೂಲಭೂತ ಅಂಶಗಳು
ನಾವು ಡೆಪ್ತ್ ಮ್ಯಾಪ್ ಗುಣಮಟ್ಟವನ್ನು ನಿಯಂತ್ರಿಸುವ ಮೊದಲು, ಅದು ಏನೆಂದು ಮತ್ತು ನಾವು ಅದನ್ನು ಹೇಗೆ ಪ್ರವೇಶಿಸುತ್ತೇವೆ ಎಂಬುದನ್ನು ಮೊದಲು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು. ವೆಬ್ಎಕ್ಸ್ಆರ್ ಡೆಪ್ತ್ ಸೆನ್ಸಿಂಗ್ APIಯು ವೆಬ್ಎಕ್ಸ್ಆರ್ ಡಿವೈಸ್ APIಯ ಒಂದು ಮಾಡ್ಯೂಲ್ ಆಗಿದ್ದು, ಇದು ಸಾಧನದ ಸೆನ್ಸರ್ಗಳಿಂದ ಸೆರೆಹಿಡಿಯಲಾದ ಡೆಪ್ತ್ ಮಾಹಿತಿಯನ್ನು ಬಹಿರಂಗಪಡಿಸುತ್ತದೆ.
ಡೆಪ್ತ್ ಮ್ಯಾಪ್ ಎಂದರೇನು?
ಒಂದು ಚಿತ್ರವನ್ನು ತೆಗೆದುಕೊಳ್ಳುವುದನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ, ಆದರೆ ಪ್ರತಿ ಪಿಕ್ಸೆಲ್ಗೆ ಬಣ್ಣದ ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸುವ ಬದಲು, ನೀವು ಕ್ಯಾಮೆರಾದಿಂದ ಆ ಪಿಕ್ಸೆಲ್ ಪ್ರತಿನಿಧಿಸುವ ವಸ್ತುವಿನ ಅಂತರವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತೀರಿ. ಮೂಲಭೂತವಾಗಿ ಇದೇ ಡೆಪ್ತ್ ಮ್ಯಾಪ್. ಇದು 2D ಚಿತ್ರ, ಸಾಮಾನ್ಯವಾಗಿ ಗ್ರೇಸ್ಕೇಲ್ನಲ್ಲಿರುತ್ತದೆ, ಅಲ್ಲಿ ಪಿಕ್ಸೆಲ್ನ ತೀವ್ರತೆಯು ಅಂತರಕ್ಕೆ ಅನುಗುಣವಾಗಿರುತ್ತದೆ. ಪ್ರಕಾಶಮಾನವಾದ ಪಿಕ್ಸೆಲ್ಗಳು ಹತ್ತಿರವಿರುವ ವಸ್ತುಗಳನ್ನು ಪ್ರತಿನಿಧಿಸಬಹುದು, ಆದರೆ ಗಾಢವಾದ ಪಿಕ್ಸೆಲ್ಗಳು ದೂರದಲ್ಲಿರುವ ವಸ್ತುಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ (ಅಥವಾ ದೃಶ್ಯೀಕರಣವನ್ನು ಅವಲಂಬಿಸಿ ಇದಕ್ಕೆ ವಿರುದ್ಧವಾಗಿರಬಹುದು).
ಈ ಡೇಟಾವನ್ನು ನಿಮ್ಮ WebGL ಕಾಂಟೆಕ್ಸ್ಟ್ಗೆ `XRDepthInformation.texture` ಎಂಬ ಟೆಕ್ಸ್ಚರ್ ಆಗಿ ಒದಗಿಸಲಾಗುತ್ತದೆ. ಇದು ನಿಮ್ಮ ಶೇಡರ್ಗಳಲ್ಲಿ ನೇರವಾಗಿ GPU ಮೇಲೆ ಹೆಚ್ಚು ದಕ್ಷತೆಯಿಂದ, ಪ್ರತಿ-ಪಿಕ್ಸೆಲ್ ಡೆಪ್ತ್ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ನಿರ್ವಹಿಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ - ನೈಜ-ಸಮಯದ ಎಆರ್ಗೆ ಇದು ಒಂದು ನಿರ್ಣಾಯಕ ಕಾರ್ಯಕ್ಷಮತೆಯ ಪರಿಗಣನೆಯಾಗಿದೆ.
ವೆಬ್ಎಕ್ಸ್ಆರ್ ಡೆಪ್ತ್ ಮಾಹಿತಿಯನ್ನು ಹೇಗೆ ಒದಗಿಸುತ್ತದೆ
API ಅನ್ನು ಬಳಸಲು, ನಿಮ್ಮ ವೆಬ್ಎಕ್ಸ್ಆರ್ ಸೆಷನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುವಾಗ ನೀವು ಮೊದಲು `depth-sensing` ವೈಶಿಷ್ಟ್ಯವನ್ನು ವಿನಂತಿಸಬೇಕು:
const session = await navigator.xr.requestSession('immersive-ar', { requiredFeatures: ['depth-sensing'] });
ನೀವು ಡೇಟಾ ಫಾರ್ಮ್ಯಾಟ್ ಮತ್ತು ಬಳಕೆಯ ಆದ್ಯತೆಗಳನ್ನು ಸಹ ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು, ಅದನ್ನು ನಾವು ನಂತರ ಕಾರ್ಯಕ್ಷಮತೆ ವಿಭಾಗದಲ್ಲಿ ಅನ್ವೇಷಿಸುತ್ತೇವೆ. ಸೆಷನ್ ಸಕ್ರಿಯವಾದ ನಂತರ, ನಿಮ್ಮ `requestAnimationFrame` ಲೂಪ್ನಲ್ಲಿ, ನೀವು WebGL ಲೇಯರ್ನಿಂದ ಇತ್ತೀಚಿನ ಡೆಪ್ತ್ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯುತ್ತೀರಿ:
const depthInfo = xrWebView.getDepthInformation(xrFrame.getViewerPose(xrReferenceSpace));
ಒಂದು ವೇಳೆ `depthInfo` ಲಭ್ಯವಿದ್ದರೆ, ಅದು ಹಲವಾರು ನಿರ್ಣಾಯಕ ಮಾಹಿತಿಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ:
- texture: ಕಚ್ಚಾ ಡೆಪ್ತ್ ಮೌಲ್ಯಗಳನ್ನು ಹೊಂದಿರುವ `WebGLTexture`.
- normDepthFromViewMatrix: ವ್ಯೂ-ಸ್ಪೇಸ್ ನಿರ್ದೇಶಾಂಕಗಳನ್ನು ಸಾಮಾನ್ಯೀಕರಿಸಿದ ಡೆಪ್ತ್ ಟೆಕ್ಸ್ಚರ್ ನಿರ್ದೇಶಾಂಕಗಳಾಗಿ ಪರಿವರ್ತಿಸಲು ಒಂದು ಮ್ಯಾಟ್ರಿಕ್ಸ್.
- rawValueToMeters: ಟೆಕ್ಸ್ಚರ್ನಿಂದ ಕಚ್ಚಾ, ಘಟಕ-ರಹಿತ ಮೌಲ್ಯಗಳನ್ನು ಮೀಟರ್ಗಳಾಗಿ ಪರಿವರ್ತಿಸಲು ಒಂದು ಸ್ಕೇಲಿಂಗ್ ಫ್ಯಾಕ್ಟರ್. ನೈಜ-ಪ್ರಪಂಚದ ನಿಖರವಾದ ಅಳತೆಗಳಿಗೆ ಇದು ಅತ್ಯಗತ್ಯ.
ಈ ಡೇಟಾವನ್ನು ಉತ್ಪಾದಿಸುವ ಆಧಾರವಾಗಿರುವ ತಂತ್ರಜ್ಞಾನವು ಸಾಧನದಿಂದ ಸಾಧನಕ್ಕೆ ಬದಲಾಗುತ್ತದೆ. ಕೆಲವು ಟೈಮ್-ಆಫ್-ಫ್ಲೈಟ್ (ToF) ಅಥವಾ ಸ್ಟ್ರಕ್ಚರ್ಡ್ ಲೈಟ್ನಂತಹ ಸಕ್ರಿಯ ಸಂವೇದಕಗಳನ್ನು ಬಳಸುತ್ತವೆ, ಇವು ಅತಿಗೆಂಪು ಬೆಳಕನ್ನು ಪ್ರಕ್ಷೇಪಿಸುತ್ತವೆ ಮತ್ತು ಅದರ ಹಿಂತಿರುಗುವಿಕೆಯನ್ನು ಅಳೆಯುತ್ತವೆ. ಇನ್ನು ಕೆಲವು ಸ್ಟೀರಿಯೋಸ್ಕೋಪಿಕ್ ಕ್ಯಾಮೆರಾಗಳಂತಹ ನಿಷ್ಕ್ರಿಯ ವಿಧಾನಗಳನ್ನು ಬಳಸುತ್ತವೆ, ಇವು ಎರಡು ಚಿತ್ರಗಳ ನಡುವಿನ ಹೋಲಿಕೆಯನ್ನು ಕಂಡುಹಿಡಿದು ಆಳವನ್ನು ಲೆಕ್ಕಹಾಕುತ್ತವೆ. ಡೆವಲಪರ್ ಆಗಿ, ನೀವು ಹಾರ್ಡ್ವೇರ್ ಅನ್ನು ನಿಯಂತ್ರಿಸುವುದಿಲ್ಲ, ಆದರೆ ಅದರ ಮಿತಿಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಅದು ಉತ್ಪಾದಿಸುವ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಲು ಪ್ರಮುಖವಾಗಿದೆ.
ಅಧ್ಯಾಯ 2: ಡೆಪ್ತ್ ಬಫರ್ ರೆಸಲ್ಯೂಶನ್ನ ಎರಡು ಮುಖಗಳು
ಡೆವಲಪರ್ಗಳು "ರೆಸಲ್ಯೂಶನ್" ಎಂದು ಕೇಳಿದಾಗ, ಅವರು ಸಾಮಾನ್ಯವಾಗಿ ಚಿತ್ರದ ಅಗಲ ಮತ್ತು ಎತ್ತರದ ಬಗ್ಗೆ ಯೋಚಿಸುತ್ತಾರೆ. ಡೆಪ್ತ್ ಮ್ಯಾಪ್ಗಳಿಗೆ, ಇದು ಕಥೆಯ ಅರ್ಧ ಭಾಗ ಮಾತ್ರ. ಡೆಪ್ತ್ ರೆಸಲ್ಯೂಶನ್ ಎರಡು-ಭಾಗಗಳ ಪರಿಕಲ್ಪನೆಯಾಗಿದೆ, ಮತ್ತು ಎರಡೂ ಭಾಗಗಳು ಗುಣಮಟ್ಟಕ್ಕೆ ನಿರ್ಣಾಯಕವಾಗಿವೆ.
ಸ್ಪೇಷಿಯಲ್ ರೆಸಲ್ಯೂಶನ್: 'ಏನು' ಮತ್ತು 'ಎಲ್ಲಿ'
ಸ್ಪೇಷಿಯಲ್ ರೆಸಲ್ಯೂಶನ್ ಡೆಪ್ತ್ ಟೆಕ್ಸ್ಚರ್ನ ಆಯಾಮಗಳನ್ನು ಸೂಚಿಸುತ್ತದೆ, ಉದಾಹರಣೆಗೆ, 320x240 ಅಥವಾ 640x480 ಪಿಕ್ಸೆಲ್ಗಳು. ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಸಾಧನದ ಬಣ್ಣದ ಕ್ಯಾಮೆರಾ ರೆಸಲ್ಯೂಶನ್ಗಿಂತ (ಇದು 1920x1080 ಅಥವಾ ಹೆಚ್ಚಿನದಾಗಿರಬಹುದು) ಗಣನೀಯವಾಗಿ ಕಡಿಮೆಯಿರುತ್ತದೆ. ಈ ವ್ಯತ್ಯಾಸವು ಎಆರ್ ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ಗಳಿಗೆ ಪ್ರಾಥಮಿಕ ಮೂಲವಾಗಿದೆ.
- ವಿವರಗಳ ಮೇಲೆ ಪರಿಣಾಮ: ಕಡಿಮೆ ಸ್ಪೇಷಿಯಲ್ ರೆಸಲ್ಯೂಶನ್ ಎಂದರೆ ಪ್ರತಿ ಡೆಪ್ತ್ ಪಿಕ್ಸೆಲ್ ನೈಜ ಪ್ರಪಂಚದ ದೊಡ್ಡ ಪ್ರದೇಶವನ್ನು ಆವರಿಸುತ್ತದೆ. ಇದು ಸೂಕ್ಷ್ಮ ವಿವರಗಳನ್ನು ಸೆರೆಹಿಡಿಯುವುದನ್ನು ಅಸಾಧ್ಯವಾಗಿಸುತ್ತದೆ. ಮೇಜಿನ ಅಂಚುಗಳು ಬ್ಲಾಕ್-ಬ್ಲಾಕ್ ಆಗಿ ಕಾಣಿಸಬಹುದು, ತೆಳುವಾದ ದೀಪದ ಕಂಬವು ಸಂಪೂರ್ಣವಾಗಿ ಕಣ್ಮರೆಯಾಗಬಹುದು, ಮತ್ತು ಹತ್ತಿರದಲ್ಲಿರುವ ವಸ್ತುಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸವು ಮಸುಕಾಗುತ್ತದೆ.
- ಅಕ್ಲೂಷನ್ ಮೇಲೆ ಪರಿಣಾಮ: ಈ ಸಮಸ್ಯೆ ಇಲ್ಲಿ ಹೆಚ್ಚು ಸ್ಪಷ್ಟವಾಗಿ ಗೋಚರಿಸುತ್ತದೆ. ವರ್ಚುವಲ್ ವಸ್ತುವೊಂದು ನೈಜ-ಪ್ರಪಂಚದ ವಸ್ತುವಿನ ಹಿಂದೆ ಭಾಗಶಃ ಇರುವಾಗ, ಅಕ್ಲೂಷನ್ ಗಡಿಯಲ್ಲಿನ ಕಡಿಮೆ-ರೆಸಲ್ಯೂಶನ್ "ಮೆಟ್ಟಿಲುಗಳ" ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ಗಳು ಸ್ಪಷ್ಟವಾಗಿ ಗೋಚರಿಸುತ್ತವೆ ಮತ್ತು ತಲ್ಲೀನತೆಯನ್ನು ಮುರಿಯುತ್ತವೆ.
ಇದನ್ನು ಕಡಿಮೆ-ರೆಸಲ್ಯೂಶನ್ ಛಾಯಾಚಿತ್ರದಂತೆ ಯೋಚಿಸಿ. ನೀವು ಸಾಮಾನ್ಯ ಆಕಾರಗಳನ್ನು ಗುರುತಿಸಬಹುದು, ಆದರೆ ಎಲ್ಲಾ ಸೂಕ್ಷ್ಮ ವಿವರಗಳು ಮತ್ತು ಸ್ಪಷ್ಟವಾದ ಅಂಚುಗಳು ಕಳೆದುಹೋಗಿರುತ್ತವೆ. ಡೆವಲಪರ್ಗಳಿಗೆ ಇರುವ ಸವಾಲು ಎಂದರೆ, ಈ ಕಡಿಮೆ-ರೆಸಲ್ಯೂಶನ್ ಡೇಟಾವನ್ನು ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ "ಅಪ್ಸ್ಯಾಂಪಲ್" ಮಾಡುವುದು ಅಥವಾ ಅದರೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಿ ಉತ್ತಮ-ರೆಸಲ್ಯೂಶನ್ ಫಲಿತಾಂಶವನ್ನು ಸೃಷ್ಟಿಸುವುದು.
ಬಿಟ್ ಡೆಪ್ತ್ (ನಿಖರತೆ): 'ಎಷ್ಟು ದೂರ'
ಬಿಟ್ ಡೆಪ್ತ್, ಅಥವಾ ನಿಖರತೆ, ಎಷ್ಟು ವಿಭಿನ್ನ ಅಂತರದ ಹಂತಗಳನ್ನು ಪ್ರತಿನಿಧಿಸಬಹುದು ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. ಇದು ಡೆಪ್ತ್ ಮ್ಯಾಪ್ನಲ್ಲಿನ ಪ್ರತಿ ಪಿಕ್ಸೆಲ್ ಮೌಲ್ಯದ ಸಂಖ್ಯಾತ್ಮಕ ನಿಖರತೆಯಾಗಿದೆ. ವೆಬ್ಎಕ್ಸ್ಆರ್ APIಯು 16-ಬಿಟ್ ಸಹಿ-ರಹಿತ ಪೂರ್ಣಾಂಕಗಳು (`ushort`) ಅಥವಾ 32-ಬಿಟ್ ಫ್ಲೋಟಿಂಗ್-ಪಾಯಿಂಟ್ ಸಂಖ್ಯೆಗಳ (`float`)ಂತಹ ವಿವಿಧ ಸ್ವರೂಪಗಳಲ್ಲಿ ಡೇಟಾವನ್ನು ಒದಗಿಸಬಹುದು.
- 8-ಬಿಟ್ ಡೆಪ್ತ್ (256 ಮಟ್ಟಗಳು): 8-ಬಿಟ್ ಸ್ವರೂಪವು ಕೇವಲ 256 ಪ್ರತ್ಯೇಕ ಅಂತರಗಳನ್ನು ಪ್ರತಿನಿಧಿಸಬಲ್ಲದು. 5 ಮೀಟರ್ ವ್ಯಾಪ್ತಿಯಲ್ಲಿ, ಇದರರ್ಥ ಪ್ರತಿ ಹಂತವು ಸುಮಾರು 2 ಸೆಂಟಿಮೀಟರ್ ಅಂತರದಲ್ಲಿದೆ. 1.00 ಮೀ ಮತ್ತು 1.01 ಮೀ ನಲ್ಲಿರುವ ವಸ್ತುಗಳಿಗೆ ಒಂದೇ ಡೆಪ್ತ್ ಮೌಲ್ಯವನ್ನು ನಿಗದಿಪಡಿಸಬಹುದು, ಇದು "ಡೆಪ್ತ್ ಕ್ವಾಂಟೈಸೇಶನ್" ಅಥವಾ ಬ್ಯಾಂಡಿಂಗ್ ಎಂಬ ವಿದ್ಯಮಾನಕ್ಕೆ ಕಾರಣವಾಗುತ್ತದೆ.
- 16-ಬಿಟ್ ಡೆಪ್ತ್ (65,536 ಮಟ್ಟಗಳು): ಇದು ಒಂದು ಗಮನಾರ್ಹ ಸುಧಾರಣೆ ಮತ್ತು ಸಾಮಾನ್ಯ ಸ್ವರೂಪವಾಗಿದೆ. ಇದು ಹೆಚ್ಚು ಸುಗಮ ಮತ್ತು ನಿಖರವಾದ ಅಂತರದ ಪ್ರಾತಿನಿಧ್ಯವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಕ್ವಾಂಟೈಸೇಶನ್ ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ಗಳನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ ಮತ್ತು ಹೆಚ್ಚು ಸೂಕ್ಷ್ಮವಾದ ಡೆಪ್ತ್ ವ್ಯತ್ಯಾಸಗಳನ್ನು ಸೆರೆಹಿಡಿಯಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
- 32-ಬಿಟ್ ಫ್ಲೋಟ್: ಇದು ಅತ್ಯಧಿಕ ನಿಖರತೆಯನ್ನು ನೀಡುತ್ತದೆ ಮತ್ತು ವೈಜ್ಞಾನಿಕ ಅಥವಾ ಅಳತೆ ಅನ್ವಯಗಳಿಗೆ ಸೂಕ್ತವಾಗಿದೆ. ಇದು ಪೂರ್ಣಾಂಕ ಸ್ವರೂಪಗಳ ಸ್ಥಿರ-ಹಂತದ ಸಮಸ್ಯೆಯನ್ನು ತಪ್ಪಿಸುತ್ತದೆ ಆದರೆ ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಮೆಮೊರಿ ವೆಚ್ಚವನ್ನು ಹೊಂದಿದೆ.
ಕಡಿಮೆ ಬಿಟ್ ಡೆಪ್ತ್ "Z-ಫೈಟಿಂಗ್"ಗೆ ಕಾರಣವಾಗಬಹುದು, ಅಲ್ಲಿ ಸ್ವಲ್ಪ ವಿಭಿನ್ನ ಆಳದಲ್ಲಿರುವ ಎರಡು ಮೇಲ್ಮೈಗಳು ಮುಂದೆ ರೆಂಡರ್ ಆಗಲು ಸ್ಪರ್ಧಿಸುತ್ತವೆ, ಇದು ಮಿನುಗುವ ಪರಿಣಾಮವನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ. ಇದು ನಯವಾದ ಮೇಲ್ಮೈಗಳನ್ನು ಮೆಟ್ಟಿಲುಗಳಂತೆ ಅಥವಾ ಬ್ಯಾಂಡ್ಗಳಂತೆ ಕಾಣುವಂತೆ ಮಾಡುತ್ತದೆ, ಇದು ಭೌತಶಾಸ್ತ್ರದ ಸಿಮ್ಯುಲೇಶನ್ಗಳಲ್ಲಿ ವಿಶೇಷವಾಗಿ ಗಮನಕ್ಕೆ ಬರುತ್ತದೆ, ಅಲ್ಲಿ ವರ್ಚುವಲ್ ಚೆಂಡು ನಯವಾದ ಇಳಿಜಾರಿನ ಬದಲು ಮೆಟ್ಟಿಲುಗಳ ಸರಣಿಯ ಕೆಳಗೆ ಉರುಳುತ್ತಿರುವಂತೆ ಕಾಣಿಸಬಹುದು.
ಅಧ್ಯಾಯ 3: ನೈಜ ಪ್ರಪಂಚ vs. ಆದರ್ಶ ಡೆಪ್ತ್ ಮ್ಯಾಪ್: ಗುಣಮಟ್ಟದ ಮೇಲೆ ಪ್ರಭಾವ ಬೀರುವ ಅಂಶಗಳು
ಒಂದು ಪರಿಪೂರ್ಣ ಜಗತ್ತಿನಲ್ಲಿ, ಪ್ರತಿ ಡೆಪ್ತ್ ಮ್ಯಾಪ್ ಸ್ಫಟಿಕ-ಸ್ಪಷ್ಟ, ಉತ್ತಮ-ರೆಸಲ್ಯೂಶನ್ ಮತ್ತು ವಾಸ್ತವದ ಸಂಪೂರ್ಣ ನಿಖರವಾದ ಪ್ರಾತಿನಿಧ್ಯವಾಗಿರುತ್ತದೆ. ವಾಸ್ತವದಲ್ಲಿ, ಡೆಪ್ತ್ ಡೇಟಾ ಗೊಂದಲಮಯವಾಗಿರುತ್ತದೆ ಮತ್ತು ವ್ಯಾಪಕ ಶ್ರೇಣಿಯ ಪರಿಸರೀಯ ಮತ್ತು ಹಾರ್ಡ್ವೇರ್-ಆಧಾರಿತ ಸಮಸ್ಯೆಗಳಿಗೆ ಗುರಿಯಾಗುತ್ತದೆ.
ಹಾರ್ಡ್ವೇರ್ ಅವಲಂಬನೆಗಳು
ನಿಮ್ಮ ಕಚ್ಚಾ ಡೇಟಾದ ಗುಣಮಟ್ಟವು ಮೂಲಭೂತವಾಗಿ ಸಾಧನದ ಹಾರ್ಡ್ವೇರ್ನಿಂದ ಸೀಮಿತವಾಗಿರುತ್ತದೆ. ನೀವು ಸಂವೇದಕಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೂ, ದೃಢವಾದ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಅವುಗಳ ವಿಶಿಷ್ಟ ವೈಫಲ್ಯದ ಅಂಶಗಳ ಬಗ್ಗೆ ತಿಳಿದಿರುವುದು ಬಹಳ ಮುಖ್ಯ.
- ಸಂವೇದಕದ ಪ್ರಕಾರ: ಅನೇಕ ಉನ್ನತ-ಮಟ್ಟದ ಮೊಬೈಲ್ ಸಾಧನಗಳಲ್ಲಿ ಸಾಮಾನ್ಯವಾದ ಟೈಮ್-ಆಫ್-ಫ್ಲೈಟ್ (ToF) ಸಂವೇದಕಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಉತ್ತಮವಾಗಿರುತ್ತವೆ ಆದರೆ ಸುತ್ತುವರಿದ ಅತಿಗೆಂಪು ಬೆಳಕಿನಿಂದ (ಉದಾಹರಣೆಗೆ, ಪ್ರಕಾಶಮಾನವಾದ ಸೂರ್ಯನ ಬೆಳಕು) ಪ್ರಭಾವಿತವಾಗಬಹುದು. ಸ್ಟೀರಿಯೋಸ್ಕೋಪಿಕ್ ಸಿಸ್ಟಮ್ಗಳು ಸರಳ ಬಿಳಿ ಗೋಡೆಯಂತಹ ಟೆಕ್ಸ್ಚರ್-ರಹಿತ ಮೇಲ್ಮೈಗಳೊಂದಿಗೆ ಹೆಣಗಾಡಬಹುದು, ಏಕೆಂದರೆ ಎರಡು ಕ್ಯಾಮೆರಾ ವೀಕ್ಷಣೆಗಳ ನಡುವೆ ಹೊಂದಿಸಲು ಯಾವುದೇ ವಿಶಿಷ್ಟ ಲಕ್ಷಣಗಳಿರುವುದಿಲ್ಲ.
- ಸಾಧನದ ಪವರ್ ಪ್ರೊಫೈಲ್: ಬ್ಯಾಟರಿ ಉಳಿಸಲು, ಸಾಧನವು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಕಡಿಮೆ-ರೆಸಲ್ಯೂಶನ್ ಅಥವಾ ಹೆಚ್ಚು ಗದ್ದಲದ ಡೆಪ್ತ್ ಮ್ಯಾಪ್ ಅನ್ನು ಒದಗಿಸಬಹುದು. ಕೆಲವು ಸಾಧನಗಳು ವಿಭಿನ್ನ ಸಂವೇದನಾ ವಿಧಾನಗಳ ನಡುವೆ ಪರ್ಯಾಯವಾಗಿ ಬದಲಾಗಬಹುದು, ಇದು ಗುಣಮಟ್ಟದಲ್ಲಿ ಗಮನಾರ್ಹ ಬದಲಾವಣೆಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ.
ಪರಿಸರೀಯ ವಿಧ್ವಂಸಕರು
ನಿಮ್ಮ ಬಳಕೆದಾರರು ಇರುವ ಪರಿಸರವು ಡೆಪ್ತ್ ಡೇಟಾ ಗುಣಮಟ್ಟದ ಮೇಲೆ ಅಗಾಧ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ. ನಿಮ್ಮ ಎಆರ್ ಅಪ್ಲಿಕೇಶನ್ ಈ ಸಾಮಾನ್ಯ ಸವಾಲುಗಳಿಗೆ ಸ್ಥಿತಿಸ್ಥಾಪಕವಾಗಿರಬೇಕು.
- ಕಷ್ಟಕರವಾದ ಮೇಲ್ಮೈ ಗುಣಲಕ್ಷಣಗಳು:
- ಪ್ರತಿಫಲಕ ಮೇಲ್ಮೈಗಳು: ಕನ್ನಡಿಗಳು ಮತ್ತು ಹೊಳಪು ಮಾಡಿದ ಲೋಹಗಳು ಪೋರ್ಟಲ್ಗಳಂತೆ ವರ್ತಿಸುತ್ತವೆ, ಮೇಲ್ಮೈಯ ಆಳವನ್ನು ತೋರಿಸುವ ಬದಲು ಪ್ರತಿಫಲಿತ ದೃಶ್ಯದ ಆಳವನ್ನು ತೋರಿಸುತ್ತವೆ. ಇದು ನಿಮ್ಮ ಡೆಪ್ತ್ ಮ್ಯಾಪ್ನಲ್ಲಿ ವಿಚಿತ್ರ ಮತ್ತು ತಪ್ಪಾದ ಜ್ಯಾಮಿತಿಯನ್ನು ರಚಿಸಬಹುದು.
- ಪಾರದರ್ಶಕ ಮೇಲ್ಮೈಗಳು: ಗಾಜು ಮತ್ತು ಸ್ಪಷ್ಟ ಪ್ಲಾಸ್ಟಿಕ್ ಸಾಮಾನ್ಯವಾಗಿ ಡೆಪ್ತ್ ಸಂವೇದಕಗಳಿಗೆ ಅಗೋಚರವಾಗಿರುತ್ತವೆ, ಇದು ದೊಡ್ಡ ರಂಧ್ರಗಳಿಗೆ ಅಥವಾ ಅವುಗಳ ಹಿಂದಿರುವ ವಸ್ತುಗಳ ತಪ್ಪಾದ ಡೆಪ್ತ್ ರೀಡಿಂಗ್ಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ.
- ಕಪ್ಪು ಅಥವಾ ಬೆಳಕು-ಹೀರಿಕೊಳ್ಳುವ ಮೇಲ್ಮೈಗಳು: ತುಂಬಾ ಕಪ್ಪು, ಮ್ಯಾಟ್ ಮೇಲ್ಮೈಗಳು (ಕಪ್ಪು ವೆಲ್ವೆಟ್ನಂತೆ) ಸಕ್ರಿಯ ಸಂವೇದಕಗಳಿಂದ ಅತಿಗೆಂಪು ಬೆಳಕನ್ನು ಹೀರಿಕೊಳ್ಳಬಹುದು, ಇದರ ಪರಿಣಾಮವಾಗಿ ಡೇಟಾ ಕಾಣೆಯಾಗುತ್ತದೆ (ರಂಧ್ರಗಳು).
- ಬೆಳಕಿನ ಪರಿಸ್ಥಿತಿಗಳು: ಪ್ರಬಲವಾದ ಸೂರ್ಯನ ಬೆಳಕು ToF ಸಂವೇದಕಗಳನ್ನು ಮುಳುಗಿಸಬಹುದು, ಗಮನಾರ್ಹ ಗದ್ದಲವನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ಇದಕ್ಕೆ ವಿರುದ್ಧವಾಗಿ, ಅತ್ಯಂತ ಕಡಿಮೆ-ಬೆಳಕಿನ ಪರಿಸ್ಥಿತಿಗಳು ನಿಷ್ಕ್ರಿಯ ಸ್ಟೀರಿಯೋ ಸಿಸ್ಟಮ್ಗಳಿಗೆ ಸವಾಲಾಗಿರಬಹುದು, ಏಕೆಂದರೆ ಅವು ಗೋಚರ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಅವಲಂಬಿಸಿರುತ್ತವೆ.
- ದೂರ ಮತ್ತು ವ್ಯಾಪ್ತಿ: ಪ್ರತಿಯೊಂದು ಡೆಪ್ತ್ ಸಂವೇದಕವು ಒಂದು ಸೂಕ್ತ ಕಾರ್ಯಾಚರಣೆಯ ವ್ಯಾಪ್ತಿಯನ್ನು ಹೊಂದಿರುತ್ತದೆ. ತುಂಬಾ ಹತ್ತಿರವಿರುವ ವಸ್ತುಗಳು ಫೋಕಸ್ನಿಂದ ಹೊರಗಿರಬಹುದು, ಆದರೆ ದೂರದ ವಸ್ತುಗಳಿಗೆ ನಿಖರತೆಯು ಗಮನಾರ್ಹವಾಗಿ ಕ್ಷೀಣಿಸುತ್ತದೆ. ಹೆಚ್ಚಿನ ಗ್ರಾಹಕ-ದರ್ಜೆಯ ಸಂವೇದಕಗಳು ಕೇವಲ 5-8 ಮೀಟರ್ಗಳವರೆಗೆ ಮಾತ್ರ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿರುತ್ತವೆ.
- ಮೋಷನ್ ಬ್ಲರ್: ಸಾಧನದ ಅಥವಾ ದೃಶ್ಯದಲ್ಲಿನ ವಸ್ತುಗಳ ತ್ವರಿತ ಚಲನೆಯು ಡೆಪ್ತ್ ಮ್ಯಾಪ್ನಲ್ಲಿ ಮೋಷನ್ ಬ್ಲರ್ಗೆ ಕಾರಣವಾಗಬಹುದು, ಇದು ಮಸುಕಾದ ಅಂಚುಗಳು ಮತ್ತು ತಪ್ಪಾದ ರೀಡಿಂಗ್ಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ.
ಅಧ್ಯಾಯ 4: ಡೆವಲಪರ್ನ ಟೂಲ್ಬಾಕ್ಸ್: ಗುಣಮಟ್ಟ ನಿಯಂತ್ರಣಕ್ಕಾಗಿ ಪ್ರಾಯೋಗಿಕ ತಂತ್ರಗಳು
ಈಗ ನಾವು ಸಮಸ್ಯೆಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಂಡಿದ್ದೇವೆ, ಪರಿಹಾರಗಳ ಮೇಲೆ ಗಮನ ಹರಿಸೋಣ. ಗುರಿಯು ಪರಿಪೂರ್ಣವಾದ ಡೆಪ್ತ್ ಮ್ಯಾಪ್ ಅನ್ನು ಸಾಧಿಸುವುದಲ್ಲ - ಅದು ಸಾಮಾನ್ಯವಾಗಿ ಅಸಾಧ್ಯ. ಕಚ್ಚಾ, ಗದ್ದಲದ ಡೇಟಾವನ್ನು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ನ ಅಗತ್ಯಗಳಿಗೆ ಸ್ಥಿರ, ಸ್ಥಿರ ಮತ್ತು ಸಾಕಷ್ಟು ಉತ್ತಮವಾದ ವಸ್ತುವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವುದು ಗುರಿಯಾಗಿದೆ. ಕೆಳಗಿನ ಎಲ್ಲಾ ತಂತ್ರಗಳನ್ನು ನೈಜ-ಸಮಯದ ಕಾರ್ಯಕ್ಷಮತೆಗಾಗಿ ನಿಮ್ಮ WebGL ಶೇಡರ್ಗಳಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕು.
ತಂತ್ರ 1: ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರಿಂಗ್ (ಕಾಲಾನಂತರದಲ್ಲಿ ಸುಗಮಗೊಳಿಸುವುದು)
ಫ್ರೇಮ್ನಿಂದ ಫ್ರೇಮ್ಗೆ ಡೆಪ್ತ್ ಡೇಟಾವು ತುಂಬಾ "ಜಿಟ್ಟರಿ" ಆಗಿರಬಹುದು, ಪ್ರತ್ಯೇಕ ಪಿಕ್ಸೆಲ್ಗಳು ತಮ್ಮ ಮೌಲ್ಯಗಳನ್ನು ವೇಗವಾಗಿ ಬದಲಾಯಿಸುತ್ತವೆ. ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರಿಂಗ್ ಪ್ರಸ್ತುತ ಫ್ರೇಮ್ನ ಡೆಪ್ತ್ ಡೇಟಾವನ್ನು ಹಿಂದಿನ ಫ್ರೇಮ್ಗಳ ಡೇಟಾದೊಂದಿಗೆ ಮಿಶ್ರಣ ಮಾಡುವ ಮೂಲಕ ಇದನ್ನು ಸುಗಮಗೊಳಿಸುತ್ತದೆ.
ಎಕ್ಸ್ಪೋನೆನ್ಶಿಯಲ್ ಮೂವಿಂಗ್ ಆವರೇಜ್ (EMA) ಒಂದು ಸರಳ ಮತ್ತು ಪರಿಣಾಮಕಾರಿ ವಿಧಾನವಾಗಿದೆ. ನಿಮ್ಮ ಶೇಡರ್ನಲ್ಲಿ, ಹಿಂದಿನ ಫ್ರೇಮ್ನಿಂದ ಸುಗಮಗೊಳಿಸಿದ ಡೆಪ್ತ್ ಅನ್ನು ಸಂಗ್ರಹಿಸುವ "ಹಿಸ್ಟರಿ" ಟೆಕ್ಸ್ಚರ್ ಅನ್ನು ನೀವು ನಿರ್ವಹಿಸುತ್ತೀರಿ.
ಪರಿಕಲ್ಪನಾತ್ಮಕ ಶೇಡರ್ ತರ್ಕ:
float smoothing_factor = 0.6; // 0 ಮತ್ತು 1ರ ನಡುವಿನ ಮೌಲ್ಯ. ಹೆಚ್ಚಿನ ಮೌಲ್ಯ = ಹೆಚ್ಚು ಸುಗಮಗೊಳಿಸುವಿಕೆ.
vec2 tex_coord = ...; // ಪ್ರಸ್ತುತ ಪಿಕ್ಸೆಲ್ನ ಟೆಕ್ಸ್ಚರ್ ನಿರ್ದೇಶಾಂಕ
float current_depth = texture2D(new_depth_map, tex_coord).r;
float previous_depth = texture2D(history_depth_map, tex_coord).r;
// ಪ್ರಸ್ತುತ ಡೆಪ್ತ್ ಮಾನ್ಯವಾಗಿದ್ದರೆ ಮಾತ್ರ ಅಪ್ಡೇಟ್ ಮಾಡಿ (0 ಅಲ್ಲ)
if (current_depth > 0.0) {
float smoothed_depth = mix(current_depth, previous_depth, smoothing_factor);
// ಮುಂದಿನ ಫ್ರೇಮ್ಗಾಗಿ ಹೊಸ ಹಿಸ್ಟರಿ ಟೆಕ್ಸ್ಚರ್ಗೆ ಸುಗಮಗೊಳಿಸಿದ_ಡೆಪ್ತ್ ಅನ್ನು ಬರೆಯಿರಿ
} else {
// ಪ್ರಸ್ತುತ ಡೇಟಾ ಅಮಾನ್ಯವಾಗಿದ್ದರೆ, ಹಳೆಯ ಡೇಟಾವನ್ನು ಹಾಗೆಯೇ ಮುಂದುವರಿಸಿ
// ಹೊಸ ಹಿಸ್ಟರಿ ಟೆಕ್ಸ್ಚರ್ಗೆ ಹಿಂದಿನ_ಡೆಪ್ತ್ ಅನ್ನು ಬರೆಯಿರಿ
}
ಅನುಕೂಲಗಳು: ಅಧಿಕ-ಆವರ್ತನದ ಗದ್ದಲ ಮತ್ತು ಮಿನುಗುವಿಕೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಅತ್ಯುತ್ತಮವಾಗಿದೆ. ಅಕ್ಲೂಷನ್ಗಳು ಮತ್ತು ಭೌತಶಾಸ್ತ್ರದ ಸಂವಹನಗಳು ಹೆಚ್ಚು ಸ್ಥಿರವಾಗಿರುವಂತೆ ಮಾಡುತ್ತದೆ.
ಅನಾನುಕೂಲಗಳು: ಸ್ವಲ್ಪ ವಿಳಂಬ ಅಥವಾ "ಘೋಸ್ಟಿಂಗ್" ಪರಿಣಾಮವನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ, ವಿಶೇಷವಾಗಿ ವೇಗವಾಗಿ ಚಲಿಸುವ ವಸ್ತುಗಳೊಂದಿಗೆ. `smoothing_factor` ಅನ್ನು ಸ್ಥಿರತೆ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯಾಶೀಲತೆಯ ನಡುವೆ ಸಮತೋಲನಗೊಳಿಸಲು ಟ್ಯೂನ್ ಮಾಡಬೇಕು.
ತಂತ್ರ 2: ಸ್ಪೇಷಿಯಲ್ ಫಿಲ್ಟರಿಂಗ್ (ನೆರೆಯವರೊಂದಿಗೆ ಸುಗಮಗೊಳಿಸುವುದು)
ಸ್ಪೇಷಿಯಲ್ ಫಿಲ್ಟರಿಂಗ್ ಒಂದು ಪಿಕ್ಸೆಲ್ನ ಮೌಲ್ಯವನ್ನು ಅದರ ನೆರೆಯ ಪಿಕ್ಸೆಲ್ಗಳ ಮೌಲ್ಯಗಳ ಆಧಾರದ ಮೇಲೆ ಮಾರ್ಪಡಿಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ಪ್ರತ್ಯೇಕವಾದ ದೋಷಯುಕ್ತ ಪಿಕ್ಸೆಲ್ಗಳನ್ನು ಸರಿಪಡಿಸಲು ಮತ್ತು ಸಣ್ಣ ಉಬ್ಬುಗಳನ್ನು ಸುಗಮಗೊಳಿಸಲು ಇದು ಉತ್ತಮವಾಗಿದೆ.
- ಗಾಸಿಯನ್ ಬ್ಲರ್: ಸರಳವಾದ ಬ್ಲರ್ ಗದ್ದಲವನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದು, ಆದರೆ ಇದು ಪ್ರಮುಖವಾದ ಚೂಪಾದ ಅಂಚುಗಳನ್ನು ಸಹ ಮೃದುಗೊಳಿಸುತ್ತದೆ, ಇದು ಮೇಜುಗಳ ಮೇಲೆ ದುಂಡಗಿನ ಮೂಲೆಗಳಿಗೆ ಮತ್ತು ಮಸುಕಾದ ಅಕ್ಲೂಷನ್ ಗಡಿಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ಈ ಬಳಕೆಯ ಸಂದರ್ಭಕ್ಕಾಗಿ ಇದು ಸಾಮಾನ್ಯವಾಗಿ ತುಂಬಾ ಆಕ್ರಮಣಕಾರಿಯಾಗಿದೆ.
- ಬೈಲ್ಯಾಟರಲ್ ಫಿಲ್ಟರ್: ಇದು ಒಂದು ಅಂಚು-ಕಾಪಾಡುವ ಸುಗಮಗೊಳಿಸುವ ಫಿಲ್ಟರ್. ಇದು ನೆರೆಯ ಪಿಕ್ಸೆಲ್ಗಳನ್ನು ಸರಾಸರಿ ಮಾಡುವ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಆದರೆ ಇದು ಕೇಂದ್ರ ಪಿಕ್ಸೆಲ್ಗೆ ಸಮಾನವಾದ ಡೆಪ್ತ್ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿರುವ ನೆರೆಯವರಿಗೆ ಹೆಚ್ಚು ತೂಕವನ್ನು ನೀಡುತ್ತದೆ. ಇದರರ್ಥ ಇದು ಸಮತಟ್ಟಾದ ಗೋಡೆಯನ್ನು ಸುಗಮಗೊಳಿಸುತ್ತದೆ ಆದರೆ ಡೆಪ್ತ್ ಅಸಮಂಜಸತೆಯ (ಡೆಸ್ಕ್ನ ಅಂಚಿನಂತಹ) ಅಂಚುಗಳಾದ್ಯಂತ ಪಿಕ್ಸೆಲ್ಗಳನ್ನು ಸರಾಸರಿ ಮಾಡುವುದಿಲ್ಲ. ಇದು ಡೆಪ್ತ್ ಮ್ಯಾಪ್ಗಳಿಗೆ ಹೆಚ್ಚು ಸೂಕ್ತವಾಗಿದೆ ಆದರೆ ಸರಳ ಬ್ಲರ್ಗಿಂತ ಗಣನಾತ್ಮಕವಾಗಿ ಹೆಚ್ಚು ದುಬಾರಿಯಾಗಿದೆ.
ತಂತ್ರ 3: ರಂಧ್ರ ತುಂಬುವುದು ಮತ್ತು ಇನ್ಪೇಂಟಿಂಗ್
ಸಾಮಾನ್ಯವಾಗಿ, ನಿಮ್ಮ ಡೆಪ್ತ್ ಮ್ಯಾಪ್ "ರಂಧ್ರಗಳನ್ನು" (0 ಮೌಲ್ಯದ ಪಿಕ್ಸೆಲ್ಗಳು) ಹೊಂದಿರುತ್ತದೆ, ಅಲ್ಲಿ ಸಂವೇದಕವು ರೀಡಿಂಗ್ ಪಡೆಯಲು ವಿಫಲವಾಗಿದೆ. ಈ ರಂಧ್ರಗಳು ವರ್ಚುವಲ್ ವಸ್ತುಗಳು ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕಾಣಿಸಿಕೊಳ್ಳಲು ಅಥವಾ ಕಣ್ಮರೆಯಾಗಲು ಕಾರಣವಾಗಬಹುದು. ಸರಳವಾದ ರಂಧ್ರ-ತುಂಬುವ ತಂತ್ರಗಳು ಇದನ್ನು ತಗ್ಗಿಸಬಹುದು.
ಪರಿಕಲ್ಪನಾತ್ಮಕ ಶೇಡರ್ ತರ್ಕ:
vec2 tex_coord = ...;
float center_depth = texture2D(depth_map, tex_coord).r;
if (center_depth == 0.0) {
// ಇದು ರಂಧ್ರವಾಗಿದ್ದರೆ, ನೆರೆಯವರನ್ನು ಸ್ಯಾಂಪಲ್ ಮಾಡಿ ಮತ್ತು ಮಾನ್ಯವಾದವುಗಳನ್ನು ಸರಾಸರಿ ಮಾಡಿ
float total_depth = 0.0;
float valid_samples = 0.0;
// ... 3x3 ಅಥವಾ 5x5 ನೆರೆಯವರ ಗ್ರಿಡ್ ಮೇಲೆ ಲೂಪ್ ಮಾಡಿ ...
// if (neighbor_depth > 0.0) { total_depth += neighbor_depth; valid_samples++; }
if (valid_samples > 0.0) {
center_depth = total_depth / valid_samples;
}
}
// (ಸಂಭಾವ್ಯವಾಗಿ ತುಂಬಿದ) center_depth ಮೌಲ್ಯವನ್ನು ಬಳಸಿ
ಹೆಚ್ಚು ಸುಧಾರಿತ ತಂತ್ರಗಳು ರಂಧ್ರದ ಅಂಚುಗಳಿಂದ ಒಳಕ್ಕೆ ಡೆಪ್ತ್ ಮೌಲ್ಯಗಳನ್ನು ಪ್ರಸಾರ ಮಾಡುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ, ಆದರೆ ಸರಳವಾದ ನೆರೆಯವರ ಸರಾಸರಿಯು ಸಹ ಸ್ಥಿರತೆಯನ್ನು ಗಣನೀಯವಾಗಿ ಸುಧಾರಿಸಬಹುದು.
ತಂತ್ರ 4: ರೆಸಲ್ಯೂಶನ್ ಅಪ್ಸ್ಯಾಂಪ್ಲಿಂಗ್
ಚರ್ಚಿಸಿದಂತೆ, ಡೆಪ್ತ್ ಮ್ಯಾಪ್ ಸಾಮಾನ್ಯವಾಗಿ ಬಣ್ಣದ ಚಿತ್ರಕ್ಕಿಂತ ಕಡಿಮೆ ರೆಸಲ್ಯೂಶನ್ ಹೊಂದಿರುತ್ತದೆ. ನಿಖರವಾದ ಪ್ರತಿ-ಪಿಕ್ಸೆಲ್ ಅಕ್ಲೂಷನ್ ನಿರ್ವಹಿಸಲು, ನಾವು ಉತ್ತಮ-ರೆಸಲ್ಯೂಶನ್ ಡೆಪ್ತ್ ಮ್ಯಾಪ್ ಅನ್ನು ರಚಿಸಬೇಕಾಗಿದೆ.
- ಬೈಲಿನಿಯರ್ ಇಂಟರ್ಪೋಲೇಶನ್: ಇದು ಸರಳವಾದ ವಿಧಾನವಾಗಿದೆ. ನಿಮ್ಮ ಶೇಡರ್ನಲ್ಲಿ ಕಡಿಮೆ-ರೆಸಲ್ಯೂಶನ್ ಡೆಪ್ತ್ ಟೆಕ್ಸ್ಚರ್ ಅನ್ನು ಸ್ಯಾಂಪಲ್ ಮಾಡುವಾಗ, GPUನ ಹಾರ್ಡ್ವೇರ್ ಸ್ಯಾಂಪ್ಲರ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಾಲ್ಕು ಹತ್ತಿರದ ಡೆಪ್ತ್ ಪಿಕ್ಸೆಲ್ಗಳನ್ನು ಮಿಶ್ರಣ ಮಾಡಬಹುದು. ಇದು ವೇಗವಾಗಿರುತ್ತದೆ ಆದರೆ ಅಂಚುಗಳು ತುಂಬಾ ಮಸುಕಾಗಿರುತ್ತವೆ.
- ಎಡ್ಜ್-ಅವೇರ್ ಅಪ್ಸ್ಯಾಂಪ್ಲಿಂಗ್: ಹೆಚ್ಚು ಸುಧಾರಿತ ವಿಧಾನವು ಉತ್ತಮ-ರೆಸಲ್ಯೂಶನ್ ಬಣ್ಣದ ಚಿತ್ರವನ್ನು ಮಾರ್ಗದರ್ಶಿಯಾಗಿ ಬಳಸುತ್ತದೆ. ತರ್ಕವೇನೆಂದರೆ, ಬಣ್ಣದ ಚಿತ್ರದಲ್ಲಿ ಚೂಪಾದ ಅಂಚು ಇದ್ದರೆ (ಉದಾ., ತಿಳಿ ಗೋಡೆಯ ವಿರುದ್ಧ ಕಪ್ಪು ಕುರ್ಚಿಯ ಅಂಚು), ಡೆಪ್ತ್ ಮ್ಯಾಪ್ನಲ್ಲಿಯೂ ಚೂಪಾದ ಅಂಚು ಇರಬೇಕು. ಇದು ವಸ್ತುವಿನ ಗಡಿಗಳಾದ್ಯಂತ ಮಸುಕಾಗುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ಮೊದಲಿನಿಂದ ಕಾರ್ಯಗತಗೊಳಿಸಲು ಸಂಕೀರ್ಣವಾಗಿದ್ದರೂ, ಜಾಯಿಂಟ್ ಬೈಲ್ಯಾಟರಲ್ ಅಪ್ಸ್ಯಾಂಪ್ಲರ್ನಂತಹ ತಂತ್ರಗಳನ್ನು ಬಳಸುವುದು ಇದರ ಮೂಲಭೂತ ಆಲೋಚನೆಯಾಗಿದೆ, ಇದು ಉತ್ತಮ-ರೆಸಲ್ಯೂಶನ್ ಕ್ಯಾಮೆರಾ ಟೆಕ್ಸ್ಚರ್ನಲ್ಲಿನ ಸ್ಪೇಷಿಯಲ್ ದೂರ ಮತ್ತು ಬಣ್ಣದ ಹೋಲಿಕೆ ಎರಡನ್ನೂ ಆಧರಿಸಿ ಫಿಲ್ಟರ್ ತೂಕವನ್ನು ಮಾರ್ಪಡಿಸುತ್ತದೆ.
ತಂತ್ರ 5: ಡೀಬಗ್ಗಿಂಗ್ ಮತ್ತು ದೃಶ್ಯೀಕರಣ
ನೀವು ನೋಡಲಾಗದ್ದನ್ನು ಸರಿಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ಗುಣಮಟ್ಟ ನಿಯಂತ್ರಣ ಟೂಲ್ಬಾಕ್ಸ್ನಲ್ಲಿನ ಅತ್ಯಂತ ಶಕ್ತಿಶಾಲಿ ಸಾಧನವೆಂದರೆ ಡೆಪ್ತ್ ಮ್ಯಾಪ್ ಅನ್ನು ನೇರವಾಗಿ ದೃಶ್ಯೀಕರಿಸುವ ಸಾಮರ್ಥ್ಯ. ನೀವು ಡೆಪ್ತ್ ಟೆಕ್ಸ್ಚರ್ ಅನ್ನು ಪರದೆಯ ಮೇಲೆ ಕ್ವಾಡ್ಗೆ ರೆಂಡರ್ ಮಾಡಬಹುದು. ಕಚ್ಚಾ ಡೆಪ್ತ್ ಮೌಲ್ಯಗಳು ಗೋಚರ ವ್ಯಾಪ್ತಿಯಲ್ಲಿಲ್ಲವಾದ್ದರಿಂದ, ನಿಮ್ಮ ಫ್ರಾಗ್ಮೆಂಟ್ ಶೇಡರ್ನಲ್ಲಿ ನೀವು ಅವುಗಳನ್ನು ಸಾಮಾನ್ಯೀಕರಿಸಬೇಕಾಗುತ್ತದೆ.
ಪರಿಕಲ್ಪನಾತ್ಮಕ ಸಾಮಾನ್ಯೀಕರಣ ಶೇಡರ್ ತರ್ಕ:
float raw_depth = texture2D(depth_map, tex_coord).r;
float depth_in_meters = raw_depth * rawValueToMeters;
// ದೃಶ್ಯೀಕರಣಕ್ಕಾಗಿ 0-1 ಶ್ರೇಣಿಗೆ ಸಾಮಾನ್ಯೀಕರಿಸಿ, ಉದಾ., 5-ಮೀಟರ್ ಗರಿಷ್ಠ ಶ್ರೇಣಿಗಾಗಿ
float max_viz_range = 5.0;
float normalized_color = clamp(depth_in_meters / max_viz_range, 0.0, 1.0);
gl_FragColor = vec4(normalized_color, normalized_color, normalized_color, 1.0);
ಕಚ್ಚಾ, ಫಿಲ್ಟರ್ ಮಾಡಿದ ಮತ್ತು ಅಪ್ಸ್ಯಾಂಪಲ್ ಮಾಡಿದ ಡೆಪ್ತ್ ಮ್ಯಾಪ್ಗಳನ್ನು ಅಕ್ಕಪಕ್ಕದಲ್ಲಿ ನೋಡುವ ಮೂಲಕ, ನಿಮ್ಮ ಫಿಲ್ಟರಿಂಗ್ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ನೀವು ಅಂತರ್ಬೋಧೆಯಿಂದ ಟ್ಯೂನ್ ಮಾಡಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಗುಣಮಟ್ಟ ನಿಯಂತ್ರಣ ಅಲ್ಗಾರಿದಮ್ಗಳ ಪರಿಣಾಮವನ್ನು ತಕ್ಷಣವೇ ನೋಡಬಹುದು.
ಅಧ್ಯಾಯ 5: ಕೇಸ್ ಸ್ಟಡಿ - ದೃಢವಾದ ಅಕ್ಲೂಷನ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದು
ಈ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ಡೆಪ್ತ್ API ಯ ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಬಳಕೆಯ ಪ್ರಕರಣವಾದ ಅಕ್ಲೂಷನ್ನೊಂದಿಗೆ ಒಟ್ಟಿಗೆ ಜೋಡಿಸೋಣ. ಗುರಿಯು ವರ್ಚುವಲ್ ವಸ್ತುವನ್ನು ನೈಜ-ಪ್ರಪಂಚದ ವಸ್ತುಗಳ ಹಿಂದೆ ಸರಿಯಾಗಿ ಕಾಣುವಂತೆ ಮಾಡುವುದು.
ಮೂಲ ತರ್ಕ (ಫ್ರಾಗ್ಮೆಂಟ್ ಶೇಡರ್ನಲ್ಲಿ)
ಈ ಪ್ರಕ್ರಿಯೆಯು ನಿಮ್ಮ ವರ್ಚುವಲ್ ವಸ್ತುವಿನ ಪ್ರತಿಯೊಂದು ಪಿಕ್ಸೆಲ್ಗೆ ಸಂಭವಿಸುತ್ತದೆ:
- ವರ್ಚುವಲ್ ಫ್ರಾಗ್ಮೆಂಟ್ನ ಡೆಪ್ತ್ ಪಡೆಯಿರಿ: ವರ್ಟೆಕ್ಸ್ ಶೇಡರ್ನಲ್ಲಿ, ನೀವು ವರ್ಟೆಕ್ಸ್ನ ಕ್ಲಿಪ್-ಸ್ಪೇಸ್ ಸ್ಥಾನವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತೀರಿ. ಈ ಸ್ಥಾನದ Z-ಕಾಂಪೊನೆಂಟ್, ಪರ್ಸ್ಪೆಕ್ಟಿವ್ ಡಿವೈಡ್ ನಂತರ, ನಿಮ್ಮ ವರ್ಚುವಲ್ ವಸ್ತುವಿನ ಡೆಪ್ತ್ ಅನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಈ ಮೌಲ್ಯವನ್ನು ಫ್ರಾಗ್ಮೆಂಟ್ ಶೇಡರ್ಗೆ ಪಾಸ್ ಮಾಡಿ.
- ನೈಜ-ಪ್ರಪಂಚದ ಡೆಪ್ತ್ ಪಡೆಯಿರಿ: ಫ್ರಾಗ್ಮೆಂಟ್ ಶೇಡರ್ನಲ್ಲಿ, ಪ್ರಸ್ತುತ ವರ್ಚುವಲ್ ಫ್ರಾಗ್ಮೆಂಟ್ಗೆ ಡೆಪ್ತ್ ಮ್ಯಾಪ್ನಲ್ಲಿ ಯಾವ ಪಿಕ್ಸೆಲ್ ಅನುರೂಪವಾಗಿದೆ ಎಂಬುದನ್ನು ನೀವು ಕಂಡುಹಿಡಿಯಬೇಕು. ನಿಮ್ಮ ಫ್ರಾಗ್ಮೆಂಟ್ನ ವ್ಯೂ-ಸ್ಪೇಸ್ ಸ್ಥಾನವನ್ನು ಡೆಪ್ತ್ ಮ್ಯಾಪ್ನ ಟೆಕ್ಸ್ಚರ್ ನಿರ್ದೇಶಾಂಕಗಳಾಗಿ ಪರಿವರ್ತಿಸಲು API ಒದಗಿಸಿದ `normDepthFromViewMatrix` ಅನ್ನು ನೀವು ಬಳಸಬಹುದು.
- ನೈಜ ಡೆಪ್ತ್ ಅನ್ನು ಸ್ಯಾಂಪಲ್ ಮಾಡಿ ಮತ್ತು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿ: ನಿಮ್ಮ (ಆದರ್ಶಪ್ರಾಯವಾಗಿ, ಮೊದಲೇ-ಫಿಲ್ಟರ್ ಮಾಡಿದ ಮತ್ತು ಅಪ್ಸ್ಯಾಂಪಲ್ ಮಾಡಿದ) ಡೆಪ್ತ್ ಮ್ಯಾಪ್ ಅನ್ನು ಸ್ಯಾಂಪಲ್ ಮಾಡಲು ಆ ಟೆಕ್ಸ್ಚರ್ ನಿರ್ದೇಶಾಂಕಗಳನ್ನು ಬಳಸಿ. `rawValueToMeters` ಬಳಸಿ ಕಚ್ಚಾ ಮೌಲ್ಯವನ್ನು ಮೀಟರ್ಗಳಿಗೆ ಪರಿವರ್ತಿಸಲು ಮರೆಯದಿರಿ.
- ಹೋಲಿಸಿ ಮತ್ತು ತಿರಸ್ಕರಿಸಿ: ನಿಮ್ಮ ವರ್ಚುವಲ್ ಫ್ರಾಗ್ಮೆಂಟ್ನ ಡೆಪ್ತ್ ಅನ್ನು ನೈಜ-ಪ್ರಪಂಚದ ಡೆಪ್ತ್ನೊಂದಿಗೆ ಹೋಲಿಕೆ ಮಾಡಿ. ಆ ಪಿಕ್ಸೆಲ್ನಲ್ಲಿ ವರ್ಚುವಲ್ ವಸ್ತುವು ನೈಜ-ಪ್ರಪಂಚದ ವಸ್ತುವಿಗಿಂತ ದೂರದಲ್ಲಿದ್ದರೆ (ಹೆಚ್ಚಿನ ಡೆಪ್ತ್ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿದ್ದರೆ), ಆಗ ಅದು ಅಕ್ಲೂಡ್ ಆಗಿದೆ. GLSL ನಲ್ಲಿ, ಆ ಪಿಕ್ಸೆಲ್ ಅನ್ನು ರೆಂಡರ್ ಮಾಡುವುದನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ನಿಲ್ಲಿಸಲು `discard` ಕೀವರ್ಡ್ ಬಳಸಿ.
ಗುಣಮಟ್ಟ ನಿಯಂತ್ರಣವಿಲ್ಲದೆ: ಅಕ್ಲೂಷನ್ನ ಅಂಚುಗಳು ಬ್ಲಾಕ್-ಬ್ಲಾಕ್ ಆಗಿರುತ್ತವೆ (ಕಡಿಮೆ ಸ್ಪೇಷಿಯಲ್ ರೆಸಲ್ಯೂಶನ್ನಿಂದಾಗಿ) ಮತ್ತು ಮಿನುಗುತ್ತವೆ ಅಥವಾ ಫಿಜ್ ಆಗುತ್ತವೆ (ಟೆಂಪೊರಲ್ ನಾಯ್ಸ್ನಿಂದಾಗಿ). ಇದು ನಿಮ್ಮ ವರ್ಚುವಲ್ ವಸ್ತುವಿಗೆ ಗದ್ದಲದ ಮಾಸ್ಕ್ ಅನ್ನು ಒರಟಾಗಿ ಅನ್ವಯಿಸಿದಂತೆ ಕಾಣುತ್ತದೆ.
ಗುಣಮಟ್ಟ ನಿಯಂತ್ರಣದೊಂದಿಗೆ: ಅಧ್ಯಾಯ 4 ರ ತಂತ್ರಗಳನ್ನು ಅನ್ವಯಿಸುವ ಮೂಲಕ - ಡೇಟಾವನ್ನು ಸ್ಥಿರಗೊಳಿಸಲು ಟೆಂಪೊರಲ್ ಫಿಲ್ಟರ್ ಅನ್ನು ಚಾಲನೆ ಮಾಡುವುದು ಮತ್ತು ಎಡ್ಜ್-ಅವೇರ್ ಅಪ್ಸ್ಯಾಂಪ್ಲಿಂಗ್ ವಿಧಾನವನ್ನು ಬಳಸುವುದು - ಅಕ್ಲೂಷನ್ ಗಡಿಯು ನಯವಾದ ಮತ್ತು ಸ್ಥಿರವಾಗುತ್ತದೆ. ವರ್ಚುವಲ್ ವಸ್ತುವು ನೈಜ ದೃಶ್ಯದ ಒಂದು ಭಾಗವಾಗಿ ದೃಢವಾಗಿ ಮತ್ತು ನಂಬಲರ್ಹವಾಗಿ ಕಾಣಿಸುತ್ತದೆ.
ಅಧ್ಯಾಯ 6: ಕಾರ್ಯಕ್ಷಮತೆ, ಕಾರ್ಯಕ್ಷಮತೆ, ಕಾರ್ಯಕ್ಷಮತೆ
ಪ್ರತಿ ಫ್ರೇಮ್ನಲ್ಲಿ ಡೆಪ್ತ್ ಡೇಟಾವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವುದು ಗಣನಾತ್ಮಕವಾಗಿ ದುಬಾರಿಯಾಗಬಹುದು. ಕಳಪೆ ಅನುಷ್ಠಾನವು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ನ ಫ್ರೇಮ್ ದರವನ್ನು ಎಆರ್ಗೆ ಆರಾಮದಾಯಕ ಮಿತಿಗಿಂತ ಕೆಳಕ್ಕೆ ಸುಲಭವಾಗಿ ಎಳೆಯಬಹುದು, ಇದು ವಾಕರಿಕೆ ತರಿಸುವ ಅನುಭವಕ್ಕೆ ಕಾರಣವಾಗುತ್ತದೆ. ಇಲ್ಲಿ ಕೆಲವು ಚೌಕಾಶಿ-ರಹಿತ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳಿವೆ.
GPU ಮೇಲೆ ಇರಿ
ನಿಮ್ಮ ಮುಖ್ಯ ರೆಂಡರ್ ಲೂಪ್ನಲ್ಲಿ ಡೆಪ್ತ್ ಟೆಕ್ಸ್ಚರ್ ಡೇಟಾವನ್ನು ಎಂದಿಗೂ CPU ಗೆ ಮರಳಿ ಓದಬೇಡಿ (ಉದಾ., `readPixels` ಬಳಸಿ). ಈ ಕಾರ್ಯಾಚರಣೆಯು ನಂಬಲಾಗದಷ್ಟು ನಿಧಾನವಾಗಿರುತ್ತದೆ ಮತ್ತು ರೆಂಡರಿಂಗ್ ಪೈಪ್ಲೈನ್ ಅನ್ನು ಸ್ಥಗಿತಗೊಳಿಸುತ್ತದೆ, ನಿಮ್ಮ ಫ್ರೇಮ್ ದರವನ್ನು ನಾಶಪಡಿಸುತ್ತದೆ. ಎಲ್ಲಾ ಫಿಲ್ಟರಿಂಗ್, ಅಪ್ಸ್ಯಾಂಪ್ಲಿಂಗ್ ಮತ್ತು ಹೋಲಿಕೆ ತರ್ಕವನ್ನು GPU ಮೇಲಿನ ಶೇಡರ್ಗಳಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕು.
ನಿಮ್ಮ ಶೇಡರ್ಗಳನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡಿ
- ಸೂಕ್ತವಾದ ನಿಖರತೆಯನ್ನು ಬಳಸಿ: ಸಾಧ್ಯವಾದಲ್ಲೆಲ್ಲಾ ಫ್ಲೋಟ್ಗಳು ಮತ್ತು ವೆಕ್ಟರ್ಗಳಿಗಾಗಿ `highp` ಬದಲಿಗೆ `mediump` ಬಳಸಿ. ಇದು ಮೊಬೈಲ್ GPUಗಳಲ್ಲಿ ಗಮನಾರ್ಹ ಕಾರ್ಯಕ್ಷಮತೆಯ ವರ್ಧಕವನ್ನು ಒದಗಿಸಬಹುದು.
- ಟೆಕ್ಸ್ಚರ್ ಲುಕಪ್ಗಳನ್ನು ಕಡಿಮೆ ಮಾಡಿ: ಪ್ರತಿಯೊಂದು ಟೆಕ್ಸ್ಚರ್ ಸ್ಯಾಂಪಲ್ಗೂ ಒಂದು ವೆಚ್ಚವಿದೆ. ಫಿಲ್ಟರ್ಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವಾಗ, ಸಾಧ್ಯವಾದಲ್ಲೆಲ್ಲಾ ಸ್ಯಾಂಪಲ್ಗಳನ್ನು ಮರುಬಳಕೆ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ. ಉದಾಹರಣೆಗೆ, 3x3 ಬಾಕ್ಸ್ ಬ್ಲರ್ ಅನ್ನು ಎರಡು ಪಾಸ್ಗಳಾಗಿ (ಒಂದು ಸಮತಲ, ಒಂದು ಲಂಬ) ವಿಂಗಡಿಸಬಹುದು, ಇದಕ್ಕೆ ಒಟ್ಟಾರೆಯಾಗಿ ಕಡಿಮೆ ಟೆಕ್ಸ್ಚರ್ ರೀಡ್ಗಳು ಬೇಕಾಗುತ್ತವೆ.
- ಬ್ರಾಂಚಿಂಗ್ ದುಬಾರಿಯಾಗಿದೆ: ಶೇಡರ್ನಲ್ಲಿ ಸಂಕೀರ್ಣ `if/else` ಹೇಳಿಕೆಗಳು ಕಾರ್ಯಕ್ಷಮತೆಯ ಸಮಸ್ಯೆಗಳನ್ನು ಉಂಟುಮಾಡಬಹುದು. ಕೆಲವೊಮ್ಮೆ, ಎರಡೂ ಫಲಿತಾಂಶಗಳನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಿ ಮತ್ತು ಫಲಿತಾಂಶವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು `mix()` ಅಥವಾ `step()` ನಂತಹ ಗಣಿತದ ಕಾರ್ಯವನ್ನು ಬಳಸುವುದು ವೇಗವಾಗಿರುತ್ತದೆ.
ವೆಬ್ಎಕ್ಸ್ಆರ್ ಫೀಚರ್ ನೆಗೋಷಿಯೇಷನ್ ಅನ್ನು ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ಬಳಸಿ
ನೀವು `depth-sensing` ವೈಶಿಷ್ಟ್ಯವನ್ನು ವಿನಂತಿಸಿದಾಗ, ನೀವು ಆದ್ಯತೆಗಳೊಂದಿಗೆ ಡಿಸ್ಕ್ರಿಪ್ಟರ್ ಅನ್ನು ಒದಗಿಸಬಹುದು:
{ requiredFeatures: ['depth-sensing'],
depthSensing: {
usagePreference: ['cpu-optimized', 'gpu-optimized'],
dataFormatPreference: ['luminance-alpha', 'float32']
}
}
- usagePreference: `gpu-optimized` ನೀವು ನೈಜ-ಸಮಯದ ರೆಂಡರಿಂಗ್ಗೆ ಬಯಸುವಂತಹದ್ದು, ಏಕೆಂದರೆ ಇದು ನೀವು ಪ್ರಾಥಮಿಕವಾಗಿ GPU ಮೇಲೆ ಡೆಪ್ತ್ ಡೇಟಾವನ್ನು ಬಳಸುತ್ತೀರಿ ಎಂದು ಸಿಸ್ಟಮ್ಗೆ ಸೂಚಿಸುತ್ತದೆ. `cpu-optimized` ಅನ್ನು ಅಸಮಕಾಲಿಕ ಮೆಶ್ ಪುನರ್ನಿರ್ಮಾಣದಂತಹ ಕಾರ್ಯಗಳಿಗಾಗಿ ಬಳಸಬಹುದು.
- dataFormatPreference: `float32` ಅನ್ನು ವಿನಂತಿಸುವುದರಿಂದ ನಿಮಗೆ ಅತ್ಯಧಿಕ ನಿಖರತೆ ಸಿಗುತ್ತದೆ ಆದರೆ ಕಾರ್ಯಕ್ಷಮತೆಯ ವೆಚ್ಚವಿರಬಹುದು. `luminance-alpha` 16-ಬಿಟ್ ಡೆಪ್ತ್ ಮೌಲ್ಯವನ್ನು ಎರಡು 8-ಬಿಟ್ ಚಾನಲ್ಗಳಲ್ಲಿ ಸಂಗ್ರಹಿಸುತ್ತದೆ, ಇದನ್ನು ಪುನರ್ನಿರ್ಮಿಸಲು ನಿಮ್ಮ ಶೇಡರ್ನಲ್ಲಿ ಸ್ವಲ್ಪ ಬಿಟ್-ಶಿಫ್ಟಿಂಗ್ ತರ್ಕದ ಅಗತ್ಯವಿರುತ್ತದೆ ಆದರೆ ಕೆಲವು ಹಾರ್ಡ್ವೇರ್ಗಳಲ್ಲಿ ಹೆಚ್ಚು ಕಾರ್ಯಕ್ಷಮತೆ ಹೊಂದಿರಬಹುದು. ಸಿಸ್ಟಮ್ ಲಭ್ಯವಿರುವುದನ್ನು ಒದಗಿಸುವುದರಿಂದ, ನೀವು ಯಾವ ಫಾರ್ಮ್ಯಾಟ್ ಅನ್ನು ನಿಜವಾಗಿ ಸ್ವೀಕರಿಸಿದ್ದೀರಿ ಎಂಬುದನ್ನು ಯಾವಾಗಲೂ ಪರಿಶೀಲಿಸಿ.
ಅಡಾಪ್ಟಿವ್ ಗುಣಮಟ್ಟವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿ
ಗುಣಮಟ್ಟಕ್ಕೆ ಒಂದು-ಗಾತ್ರ-ಎಲ್ಲಕ್ಕೂ-ಸರಿಹೊಂದುವ ವಿಧಾನವು ಸೂಕ್ತವಲ್ಲ. ಉನ್ನತ-ಮಟ್ಟದ ಸಾಧನವು ಸಂಕೀರ್ಣವಾದ ಮಲ್ಟಿ-ಪಾಸ್ ಬೈಲ್ಯಾಟರಲ್ ಫಿಲ್ಟರ್ ಅನ್ನು ನಿಭಾಯಿಸಬಲ್ಲದು, ಆದರೆ ಕಡಿಮೆ-ಮಟ್ಟದ ಸಾಧನವು ಹೆಣಗಾಡಬಹುದು. ಅಡಾಪ್ಟಿವ್ ಗುಣಮಟ್ಟದ ವ್ಯವಸ್ಥೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿ:
- ಪ್ರಾರಂಭದಲ್ಲಿ, ಸಾಧನದ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಬೆಂಚ್ಮಾರ್ಕ್ ಮಾಡಿ ಅಥವಾ ಅದರ ಮಾದರಿಯನ್ನು ಪರಿಶೀಲಿಸಿ.
- ಕಾರ್ಯಕ್ಷಮತೆಯ ಆಧಾರದ ಮೇಲೆ, ವಿಭಿನ್ನ ಶೇಡರ್ ಅಥವಾ ವಿಭಿನ್ನ ಫಿಲ್ಟರಿಂಗ್ ತಂತ್ರಗಳ ಸೆಟ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ.
- ಉತ್ತಮ ಗುಣಮಟ್ಟ: ಟೆಂಪೊರಲ್ EMA + ಬೈಲ್ಯಾಟರಲ್ ಫಿಲ್ಟರ್ + ಎಡ್ಜ್-ಅವೇರ್ ಅಪ್ಸ್ಯಾಂಪ್ಲಿಂಗ್.
- ಮಧ್ಯಮ ಗುಣಮಟ್ಟ: ಟೆಂಪೊರಲ್ EMA + ಸರಳ 3x3 ನೆರೆಯವರ ಸರಾಸರಿ.
- ಕಡಿಮೆ ಗುಣಮಟ್ಟ: ಯಾವುದೇ ಫಿಲ್ಟರಿಂಗ್ ಇಲ್ಲ, ಕೇವಲ ಮೂಲಭೂತ ಬೈಲಿನಿಯರ್ ಇಂಟರ್ಪೋಲೇಶನ್.
ಇದು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಸಾಧ್ಯವಾದಷ್ಟು ವ್ಯಾಪಕ ಶ್ರೇಣಿಯ ಸಾಧನಗಳಲ್ಲಿ ಸರಾಗವಾಗಿ ಚಲಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ, ಪ್ರತಿ ಬಳಕೆದಾರರಿಗೆ ಸಾಧ್ಯವಾದಷ್ಟು ಉತ್ತಮ ಅನುಭವವನ್ನು ಒದಗಿಸುತ್ತದೆ.
ತೀರ್ಮಾನ: ಡೇಟಾದಿಂದ ಅನುಭವದವರೆಗೆ
ವೆಬ್ಎಕ್ಸ್ಆರ್ ಡೆಪ್ತ್ API ಹೊಸ ಮಟ್ಟದ ತಲ್ಲೀನತೆಗೆ ಒಂದು ಹೆಬ್ಬಾಗಿಲಾಗಿದೆ, ಆದರೆ ಇದು ಪರಿಪೂರ್ಣ ಎಆರ್ಗೆ ಪ್ಲಗ್-ಅಂಡ್-ಪ್ಲೇ ಪರಿಹಾರವಲ್ಲ. ಅದು ಒದಗಿಸುವ ಕಚ್ಚಾ ಡೇಟಾ ಕೇವಲ ಒಂದು ಆರಂಭಿಕ ಹಂತವಾಗಿದೆ. ನಿಜವಾದ ಪಾಂಡಿತ್ಯವು ಡೇಟಾದ ಅಪೂರ್ಣತೆಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದರಲ್ಲಿದೆ - ಅದರ ರೆಸಲ್ಯೂಶನ್ ಮಿತಿಗಳು, ಅದರ ಗದ್ದಲ, ಅದರ ಪರಿಸರೀಯ ದೌರ್ಬಲ್ಯಗಳು - ಮತ್ತು ಚಿಂತನಶೀಲ, ಕಾರ್ಯಕ್ಷಮತೆ-ಪ್ರಜ್ಞೆಯುಳ್ಳ ಗುಣಮಟ್ಟ ನಿಯಂತ್ರಣ ಪೈಪ್ಲೈನ್ ಅನ್ನು ಅನ್ವಯಿಸುವುದರಲ್ಲಿದೆ.
ಟೆಂಪೊರಲ್ ಮತ್ತು ಸ್ಪೇಷಿಯಲ್ ಫಿಲ್ಟರಿಂಗ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮೂಲಕ, ರಂಧ್ರಗಳು ಮತ್ತು ರೆಸಲ್ಯೂಶನ್ ವ್ಯತ್ಯಾಸಗಳನ್ನು ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ನಿರ್ವಹಿಸುವ ಮೂಲಕ, ಮತ್ತು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ನಿರಂತರವಾಗಿ ದೃಶ್ಯೀಕರಿಸುವ ಮೂಲಕ, ನೀವು ಗದ್ದಲದ, ಜಿಟ್ಟರಿ ಸಿಗ್ನಲ್ ಅನ್ನು ನಿಮ್ಮ ಸೃಜನಾತ್ಮಕ ದೃಷ್ಟಿಗೆ ಸ್ಥಿರವಾದ ಅಡಿಪಾಯವಾಗಿ ಪರಿವರ್ತಿಸಬಹುದು. ಒಂದು ಕಿರಿಕಿರಿಯುಂಟುಮಾಡುವ ಎಆರ್ ಡೆಮೊ ಮತ್ತು ನಿಜವಾಗಿಯೂ ನಂಬಲರ್ಹವಾದ, ತಲ್ಲೀನಗೊಳಿಸುವ ಅನುಭವದ ನಡುವಿನ ವ್ಯತ್ಯಾಸವು ಸಾಮಾನ್ಯವಾಗಿ ಈ ಡೆಪ್ತ್ ಮಾಹಿತಿಯ ಎಚ್ಚರಿಕೆಯ ನಿರ್ವಹಣೆಯಲ್ಲಿದೆ.
ನೈಜ-ಸಮಯದ ಡೆಪ್ತ್ ಸೆನ್ಸಿಂಗ್ ಕ್ಷೇತ್ರವು ನಿರಂತರವಾಗಿ ವಿಕಸನಗೊಳ್ಳುತ್ತಿದೆ. ಭವಿಷ್ಯದ ಪ್ರಗತಿಗಳು AI-ವರ್ಧಿತ ಡೆಪ್ತ್ ಪುನರ್ನಿರ್ಮಾಣ, ಸೆಮ್ಯಾಂಟಿಕ್ ತಿಳುವಳಿಕೆ (ಒಂದು ಪಿಕ್ಸೆಲ್ 'ನೆಲ'ಕ್ಕೆ ಸೇರಿದ್ದು ಅಥವಾ 'ವ್ಯಕ್ತಿ'ಗೆ ಸೇರಿದ್ದು ಎಂದು ತಿಳಿಯುವುದು), ಮತ್ತು ಹೆಚ್ಚಿನ ಸಾಧನಗಳಿಗೆ ಉತ್ತಮ-ರೆಸಲ್ಯೂಶನ್ ಸಂವೇದಕಗಳನ್ನು ತರಬಹುದು. ಆದರೆ ಗುಣಮಟ್ಟ ನಿಯಂತ್ರಣದ ಮೂಲಭೂತ ತತ್ವಗಳು - ಸುಗಮಗೊಳಿಸುವುದು, ಫಿಲ್ಟರಿಂಗ್ ಮಾಡುವುದು, ಮತ್ತು ಡೇಟಾವನ್ನು ಮೌಲ್ಯೀಕರಿಸುವುದು - ಮುಕ್ತ ವೆಬ್ನಲ್ಲಿ ಆಗ್ಮೆಂಟೆಡ್ ರಿಯಾಲಿಟಿಯಲ್ಲಿ ಸಾಧ್ಯವಿರುವ ಗಡಿಗಳನ್ನು ಮೀರಿ ಸಾಗಲು ಗಂಭೀರವಾಗಿರುವ ಯಾವುದೇ ಡೆವಲಪರ್ಗೆ ಅತ್ಯಗತ್ಯ ಕೌಶಲ್ಯಗಳಾಗಿ ಉಳಿಯುತ್ತವೆ.