ಕ್ರಾಂತಿಕಾರಿ WebGL ಮೆಶ್ ಶೇಡರ್ ಪೈಪ್ಲೈನ್ ಅನ್ನು ಅನ್ವೇಷಿಸಿ. ಟಾಸ್ಕ್ ಆಂಪ್ಲಿಫಿಕೇಶನ್ ಮುಂದಿನ ಪೀಳಿಗೆಯ ವೆಬ್ ಗ್ರಾಫಿಕ್ಸ್ಗಾಗಿ ಬೃಹತ್ ಜ್ಯಾಮಿತಿ ರಚನೆ ಮತ್ತು ಸುಧಾರಿತ ಕಲಿಂಗ್ ಅನ್ನು ಹೇಗೆ ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಎಂದು ತಿಳಿಯಿರಿ.
ಜ್ಯಾಮಿತಿಯನ್ನು ಅನಾವರಣಗೊಳಿಸುವುದು: WebGLನ ಮೆಶ್ ಶೇಡರ್ ಟಾಸ್ಕ್ ಆಂಪ್ಲಿಫಿಕೇಶನ್ ಪೈಪ್ಲೈನ್ನ ಆಳವಾದ ಅವಲೋಕನ
ವೆಬ್ ಇನ್ನು ಮುಂದೆ ಸ್ಥಿರ, ಎರಡು-ಆಯಾಮದ ಮಾಧ್ಯಮವಾಗಿ ಉಳಿದಿಲ್ಲ. ಇದು ಉಸಿರುಕಟ್ಟುವ ಉತ್ಪನ್ನ ಕಾನ್ಫಿಗರೇಟರ್ಗಳು ಮತ್ತು ವಾಸ್ತುಶಿಲ್ಪದ ದೃಶ್ಯೀಕರಣಗಳಿಂದ ಹಿಡಿದು ಸಂಕೀರ್ಣ ಡೇಟಾ ಮಾದರಿಗಳು ಮತ್ತು ಪೂರ್ಣ ಪ್ರಮಾಣದ ಆಟಗಳವರೆಗೆ ಶ್ರೀಮಂತ, ತಲ್ಲೀನಗೊಳಿಸುವ 3D ಅನುಭವಗಳಿಗಾಗಿ ಒಂದು ರೋಮಾಂಚಕ ವೇದಿಕೆಯಾಗಿ ವಿಕಸನಗೊಂಡಿದೆ. ಆದಾಗ್ಯೂ, ಈ ವಿಕಸನವು ಗ್ರಾಫಿಕ್ಸ್ ಪ್ರೊಸೆಸಿಂಗ್ ಯುನಿಟ್ (GPU) ಮೇಲೆ ಅಭೂತಪೂರ್ವ ಬೇಡಿಕೆಗಳನ್ನು ಇರಿಸುತ್ತದೆ. ವರ್ಷಗಳಿಂದ, ಪ್ರಮಾಣಿತ ರಿಯಲ್-ಟೈಮ್ ಗ್ರಾಫಿಕ್ಸ್ ಪೈಪ್ಲೈನ್, ಶಕ್ತಿಯುತವಾಗಿದ್ದರೂ, ತನ್ನ ಹಳೆಯ ಸ್ವರೂಪವನ್ನು ತೋರಿಸಿದೆ, ಆಗಾಗ್ಗೆ ಆಧುನಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಅಗತ್ಯವಿರುವ ಜ್ಯಾಮಿತೀಯ ಸಂಕೀರ್ಣತೆಗೆ ಅಡಚಣೆಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
ಮೆಶ್ ಶೇಡರ್ ಪೈಪ್ಲೈನ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ, ಇದು WEBGL_mesh_shader ವಿಸ್ತರಣೆಯ ಮೂಲಕ ಈಗ ವೆಬ್ನಲ್ಲಿ ಪ್ರವೇಶಿಸಬಹುದಾದ ಒಂದು ಮಾದರಿ-ಬದಲಾಯಿಸುವ ವೈಶಿಷ್ಟ್ಯವಾಗಿದೆ. ಈ ಹೊಸ ಮಾದರಿಯು ನಾವು GPU ನಲ್ಲಿ ಜ್ಯಾಮಿತಿಯನ್ನು ಹೇಗೆ ಯೋಚಿಸುತ್ತೇವೆ ಮತ್ತು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತೇವೆ ಎಂಬುದನ್ನು ಮೂಲಭೂತವಾಗಿ ಬದಲಾಯಿಸುತ್ತದೆ. ಇದರ ಹೃದಯಭಾಗದಲ್ಲಿ ಒಂದು ಶಕ್ತಿಯುತ ಪರಿಕಲ್ಪನೆ ಇದೆ: ಟಾಸ್ಕ್ ಆಂಪ್ಲಿಫಿಕೇಶನ್. ಇದು ಕೇವಲ ಒಂದು ಹೆಚ್ಚುವರಿ ಅಪ್ಡೇಟ್ ಅಲ್ಲ; ಇದು ಒಂದು ಕ್ರಾಂತಿಕಾರಿ ಜಿಗಿತವಾಗಿದ್ದು, ಶೆಡ್ಯೂಲಿಂಗ್ ಮತ್ತು ಜ್ಯಾಮಿತಿ ರಚನೆಯ ತರ್ಕವನ್ನು CPU ನಿಂದ ನೇರವಾಗಿ GPU ನ ಹೆಚ್ಚು ಸಮಾನಾಂತರ ವಾಸ್ತುಶಿಲ್ಪಕ್ಕೆ ಸರಿಸುತ್ತದೆ, ವೆಬ್ ಬ್ರೌಸರ್ನಲ್ಲಿ ಹಿಂದೆ ಅವ್ಯಾವಹಾರಿಕ ಅಥವಾ ಅಸಾಧ್ಯವಾಗಿದ್ದ ಸಾಧ್ಯತೆಗಳನ್ನು ತೆರೆಯುತ್ತದೆ.
ಈ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ ನಿಮ್ಮನ್ನು ಮೆಶ್ ಶೇಡರ್ ಜ್ಯಾಮಿತಿ ಪೈಪ್ಲೈನ್ನ ಆಳವಾದ ಅವಲೋಕನಕ್ಕೆ ಕರೆದೊಯ್ಯುತ್ತದೆ. ನಾವು ಅದರ ವಾಸ್ತುಶಿಲ್ಪವನ್ನು ಅನ್ವೇಷಿಸುತ್ತೇವೆ, ಟಾಸ್ಕ್ ಮತ್ತು ಮೆಶ್ ಶೇಡರ್ಗಳ ವಿಭಿನ್ನ ಪಾತ್ರಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುತ್ತೇವೆ ಮತ್ತು ಮುಂದಿನ ಪೀಳಿಗೆಯ ದೃಷ್ಟಿ ಬೆರಗುಗೊಳಿಸುವ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಟಾಸ್ಕ್ ಆಂಪ್ಲಿಫಿಕೇಶನ್ ಅನ್ನು ಹೇಗೆ ಬಳಸಿಕೊಳ್ಳಬಹುದು ಎಂಬುದನ್ನು ಕಂಡುಕೊಳ್ಳುತ್ತೇವೆ.
ಒಂದು ತ್ವರಿತ ಹಿನ್ನೋಟ: ಸಾಂಪ್ರದಾಯಿಕ ಜ್ಯಾಮಿತಿ ಪೈಪ್ಲೈನ್ನ ಮಿತಿಗಳು
ಮೆಶ್ ಶೇಡರ್ಗಳ ನಾವೀನ್ಯತೆಯನ್ನು ನಿಜವಾಗಿಯೂ ಪ್ರಶಂಸಿಸಲು, ನಾವು ಮೊದಲು ಅವು ಬದಲಾಯಿಸುವ ಪೈಪ್ಲೈನ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು. ದಶಕಗಳಿಂದ, ರಿಯಲ್-ಟೈಮ್ ಗ್ರಾಫಿಕ್ಸ್ ತುಲನಾತ್ಮಕವಾಗಿ ಸ್ಥಿರ-ಕಾರ್ಯದ ಪೈಪ್ಲೈನ್ನಿಂದ ಪ್ರಾಬಲ್ಯ ಹೊಂದಿದೆ:
- ವರ್ಟೆಕ್ಸ್ ಶೇಡರ್: ಪ್ರತ್ಯೇಕ ವರ್ಟಿಸಸ್ಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿ, ಅವುಗಳನ್ನು ಸ್ಕ್ರೀನ್ ಸ್ಪೇಸ್ಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ.
- (ಐಚ್ಛಿಕ) ಟೆಸ್ಸೆಲ್ಲೇಶನ್ ಶೇಡರ್ಗಳು: ಹೆಚ್ಚು ಸೂಕ್ಷ್ಮ ವಿವರಗಳನ್ನು ರಚಿಸಲು ಜ್ಯಾಮಿತಿಯ ಪ್ಯಾಚ್ಗಳನ್ನು ಉಪವಿಭಾಗಿಸುತ್ತದೆ.
- (ಐಚ್ಛಿಕ) ಜ್ಯಾಮಿತಿ ಶೇಡರ್: ಫ್ಲೈನಲ್ಲಿ ಪ್ರಿಮಿಟಿವ್ಗಳನ್ನು (ಪಾಯಿಂಟ್ಗಳು, ಲೈನ್ಗಳು, ತ್ರಿಕೋನಗಳು) ರಚಿಸಬಹುದು ಅಥವಾ ನಾಶಪಡಿಸಬಹುದು.
- ರಾಸ್ಟರೈಸರ್: ಪ್ರಿಮಿಟಿವ್ಗಳನ್ನು ಪಿಕ್ಸೆಲ್ಗಳಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ.
- ಫ್ರಾಗ್ಮೆಂಟ್ ಶೇಡರ್: ಪ್ರತಿ ಪಿಕ್ಸೆಲ್ನ ಅಂತಿಮ ಬಣ್ಣವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ.
ಈ ಮಾದರಿಯು ನಮಗೆ ಉತ್ತಮವಾಗಿ ಸೇವೆ ಸಲ್ಲಿಸಿದೆ, ಆದರೆ ಇದು ಅಂತರ್ಗತ ಮಿತಿಗಳನ್ನು ಹೊಂದಿದೆ, ವಿಶೇಷವಾಗಿ ದೃಶ್ಯಗಳು ಸಂಕೀರ್ಣತೆಯಲ್ಲಿ ಬೆಳೆದಂತೆ:
- ಸಿಪಿಯು-ಬೌಂಡ್ ಡ್ರಾ ಕಾಲ್ಗಳು: ನಿಖರವಾಗಿ ಏನನ್ನು ಚಿತ್ರಿಸಬೇಕು ಎಂಬುದನ್ನು ಕಂಡುಹಿಡಿಯುವ ಅಗಾಧವಾದ ಕಾರ್ಯವನ್ನು ಸಿಪಿಯು ಹೊಂದಿದೆ. ಇದರಲ್ಲಿ ಫ್ರಸ್ಟಮ್ ಕಲಿಂಗ್ (ಕ್ಯಾಮೆರಾದ ನೋಟದಿಂದ ಹೊರಗಿರುವ ವಸ್ತುಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು), ಅಕ್ಲೂಷನ್ ಕಲಿಂಗ್ (ಇತರ ವಸ್ತುಗಳಿಂದ ಮರೆಯಾಗಿರುವ ವಸ್ತುಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು), ಮತ್ತು ಲೆವೆಲ್-ಆಫ್-ಡಿಟೇಲ್ (LOD) ಸಿಸ್ಟಮ್ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು ಸೇರಿದೆ. ಲಕ್ಷಾಂತರ ವಸ್ತುಗಳಿರುವ ದೃಶ್ಯಕ್ಕಾಗಿ, ಇದು ಸಿಪಿಯು ಪ್ರಾಥಮಿಕ ಅಡಚಣೆಯಾಗಲು ಕಾರಣವಾಗಬಹುದು, ಹಸಿದ ಜಿಪಿಯುಗೆ ಸಾಕಷ್ಟು ವೇಗವಾಗಿ ಡೇಟಾ ಪೂರೈಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.
- ಕಠಿಣ ಇನ್ಪುಟ್ ರಚನೆ: ಪೈಪ್ಲೈನ್ ಕಠಿಣ ಇನ್ಪುಟ್-ಪ್ರೊಸೆಸಿಂಗ್ ಮಾದರಿಯ ಸುತ್ತಲೂ ನಿರ್ಮಿಸಲ್ಪಟ್ಟಿದೆ. ಇನ್ಪುಟ್ ಅಸೆಂಬ್ಲರ್ ವರ್ಟಿಸಸ್ಗಳನ್ನು ಒಂದೊಂದಾಗಿ ನೀಡುತ್ತದೆ, ಮತ್ತು ಶೇಡರ್ಗಳು ಅವುಗಳನ್ನು ತುಲನಾತ್ಮಕವಾಗಿ ನಿರ್ಬಂಧಿತ ರೀತಿಯಲ್ಲಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತವೆ. ಇದು ಆಧುನಿಕ ಜಿಪಿಯು ವಾಸ್ತುಶಿಲ್ಪಗಳಿಗೆ ಸೂಕ್ತವಲ್ಲ, ಇದು ಸುಸಂಬದ್ಧ, ಸಮಾನಾಂತರ ಡೇಟಾ ಸಂಸ್ಕರಣೆಯಲ್ಲಿ ಉತ್ತಮವಾಗಿದೆ.
- ಅಸಮರ್ಥ ಆಂಪ್ಲಿಫಿಕೇಶನ್: ಜ್ಯಾಮಿತಿ ಶೇಡರ್ಗಳು ಜ್ಯಾಮಿತಿ ಆಂಪ್ಲಿಫಿಕೇಶನ್ಗೆ (ಒಂದು ಇನ್ಪುಟ್ ಪ್ರಿಮಿಟಿವ್ನಿಂದ ಹೊಸ ತ್ರಿಕೋನಗಳನ್ನು ರಚಿಸುವುದು) ಅವಕಾಶ ನೀಡಿದರೂ, ಅವು ಕುಖ್ಯಾತವಾಗಿ ಅಸಮರ್ಥವಾಗಿದ್ದವು. ಅವುಗಳ ಔಟ್ಪುಟ್ ನಡವಳಿಕೆಯು ಹಾರ್ಡ್ವೇರ್ಗೆ ಆಗಾಗ್ಗೆ ಅನಿರೀಕ್ಷಿತವಾಗಿತ್ತು, ಇದು ಕಾರ್ಯಕ್ಷಮತೆಯ ಸಮಸ್ಯೆಗಳಿಗೆ ಕಾರಣವಾಯಿತು ಮತ್ತು ಅನೇಕ ದೊಡ್ಡ-ಪ್ರಮಾಣದ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಅವುಗಳನ್ನು ಬಳಸಲಾಗದಂತೆ ಮಾಡಿತು.
- ವ್ಯರ್ಥ ಕೆಲಸ: ಸಾಂಪ್ರದಾಯಿಕ ಪೈಪ್ಲೈನ್ನಲ್ಲಿ, ನೀವು ರೆಂಡರ್ ಮಾಡಲು ತ್ರಿಕೋನವನ್ನು ಕಳುಹಿಸಿದರೆ, ವರ್ಟೆಕ್ಸ್ ಶೇಡರ್ ಮೂರು ಬಾರಿ ರನ್ ಆಗುತ್ತದೆ, ಆ ತ್ರಿಕೋನವು ಅಂತಿಮವಾಗಿ ಕಲ್ ಮಾಡಲ್ಪಟ್ಟರೂ ಅಥವಾ ಹಿಮ್ಮುಖವಾಗಿರುವ ಪಿಕ್ಸೆಲ್-ತೆಳುವಾದ ಚೂರಾಗಿದ್ದರೂ ಸಹ. ಅಂತಿಮ ಚಿತ್ರಕ್ಕೆ ಏನೂ ಕೊಡುಗೆ ನೀಡದ ಜ್ಯಾಮಿತಿಯ ಮೇಲೆ ಸಾಕಷ್ಟು ಸಂಸ್ಕರಣಾ ಶಕ್ತಿಯನ್ನು ವ್ಯಯಿಸಲಾಗುತ್ತದೆ.
ಮಾದರಿ ಬದಲಾವಣೆ: ಮೆಶ್ ಶೇಡರ್ ಪೈಪ್ಲೈನ್ನ ಪರಿಚಯ
ಮೆಶ್ ಶೇಡರ್ ಪೈಪ್ಲೈನ್ ವರ್ಟೆಕ್ಸ್, ಟೆಸ್ಸೆಲ್ಲೇಶನ್ ಮತ್ತು ಜ್ಯಾಮಿತಿ ಶೇಡರ್ ಹಂತಗಳನ್ನು ಹೊಸ, ಹೆಚ್ಚು ಹೊಂದಿಕೊಳ್ಳುವ ಎರಡು-ಹಂತದ ಮಾದರಿಯೊಂದಿಗೆ ಬದಲಾಯಿಸುತ್ತದೆ:
- ಟಾಸ್ಕ್ ಶೇಡರ್ (ಐಚ್ಛಿಕ): ಎಷ್ಟು ಕೆಲಸ ಮಾಡಬೇಕೆಂದು ನಿರ್ಧರಿಸುವ ಉನ್ನತ-ಮಟ್ಟದ ನಿಯಂತ್ರಣ ಹಂತ. ಇದನ್ನು ಆಂಪ್ಲಿಫಿಕೇಶನ್ ಶೇಡರ್ ಎಂದೂ ಕರೆಯುತ್ತಾರೆ.
- ಮೆಶ್ ಶೇಡರ್: "ಮೆಶ್ಲೆಟ್ಗಳು" ಎಂದು ಕರೆಯಲ್ಪಡುವ ಸಣ್ಣ, ಸ್ವಯಂ-ಒಳಗೊಂಡಿರುವ ಜ್ಯಾಮಿತಿಯ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಉತ್ಪಾದಿಸಲು ಡೇಟಾ ಬ್ಯಾಚ್ಗಳ ಮೇಲೆ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಕಾರ್ಯನಿರ್ವಾಹಕ ಹಂತ.
ಈ ಹೊಸ ವಿಧಾನವು ರೆಂಡರಿಂಗ್ ತತ್ವಶಾಸ್ತ್ರವನ್ನು ಮೂಲಭೂತವಾಗಿ ಬದಲಾಯಿಸುತ್ತದೆ. ಪ್ರತಿ ವಸ್ತುವಿಗೆ ಪ್ರತಿಯೊಂದು ಡ್ರಾ ಕಾಲ್ ಅನ್ನು ಸಿಪಿಯು ಸೂಕ್ಷ್ಮವಾಗಿ ನಿರ್ವಹಿಸುವ ಬದಲು, ಅದು ಈಗ ಒಂದೇ, ಶಕ್ತಿಯುತ ಡ್ರಾ ಆದೇಶವನ್ನು ನೀಡಬಹುದು, ಅದು ಮೂಲಭೂತವಾಗಿ ಜಿಪಿಯುಗೆ ಹೇಳುತ್ತದೆ: "ಇಲ್ಲಿ ಒಂದು ಸಂಕೀರ್ಣ ದೃಶ್ಯದ ಉನ್ನತ-ಮಟ್ಟದ ವಿವರಣೆಯಿದೆ; ನೀವು ವಿವರಗಳನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ."
ಜಿಪಿಯು, ಟಾಸ್ಕ್ ಮತ್ತು ಮೆಶ್ ಶೇಡರ್ಗಳನ್ನು ಬಳಸಿ, ನಂತರ ಕಲಿಂಗ್, ಎಲ್ಒಡಿ ಆಯ್ಕೆ ಮತ್ತು ಪ್ರೊಸಿಜರಲ್ ಉತ್ಪಾದನೆಯನ್ನು ಹೆಚ್ಚು ಸಮಾನಾಂತರ ರೀತಿಯಲ್ಲಿ ನಿರ್ವಹಿಸಬಹುದು, ವಾಸ್ತವವಾಗಿ ಗೋಚರಿಸುವ ಜ್ಯಾಮಿತಿಯನ್ನು ಉತ್ಪಾದಿಸಲು ಅಗತ್ಯವಾದ ಕೆಲಸವನ್ನು ಮಾತ್ರ ಪ್ರಾರಂಭಿಸುತ್ತದೆ. ಇದು ಜಿಪಿಯು-ಚಾಲಿತ ರೆಂಡರಿಂಗ್ ಪೈಪ್ಲೈನ್ನ ಸಾರವಾಗಿದೆ, ಮತ್ತು ಇದು ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಸ್ಕೇಲೆಬಿಲಿಟಿಗೆ ಗೇಮ್-ಚೇಂಜರ್ ಆಗಿದೆ.
ನಿರ್ವಾಹಕ: ಟಾಸ್ಕ್ (ಆಂಪ್ಲಿಫಿಕೇಶನ್) ಶೇಡರ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು
ಟಾಸ್ಕ್ ಶೇಡರ್ ಹೊಸ ಪೈಪ್ಲೈನ್ನ ಮೆದುಳು ಮತ್ತು ಅದರ ಅದ್ಭುತ ಶಕ್ತಿಯ ಕೀಲಿಯಾಗಿದೆ. ಇದು ಐಚ್ಛಿಕ ಹಂತವಾಗಿದೆ, ಆದರೆ "ಆಂಪ್ಲಿಫಿಕೇಶನ್" ನಡೆಯುವುದು ಇಲ್ಲಿಯೇ. ಇದರ ಪ್ರಾಥಮಿಕ ಪಾತ್ರವು ವರ್ಟಿಸಸ್ ಅಥವಾ ತ್ರಿಕೋನಗಳನ್ನು ಉತ್ಪಾದಿಸುವುದಲ್ಲ, ಬದಲಿಗೆ ಕೆಲಸದ ರವಾನೆದಾರನಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದು.
ಟಾಸ್ಕ್ ಶೇಡರ್ ಎಂದರೇನು?
ಒಂದು ಬೃಹತ್ ನಿರ್ಮಾಣ ಯೋಜನೆಯ ಪ್ರಾಜೆಕ್ಟ್ ಮ್ಯಾನೇಜರ್ ಆಗಿ ಟಾಸ್ಕ್ ಶೇಡರ್ ಅನ್ನು ಯೋಚಿಸಿ. ಸಿಪಿಯು ಮ್ಯಾನೇಜರ್ಗೆ "ನಗರ ಜಿಲ್ಲೆಯನ್ನು ನಿರ್ಮಿಸಿ" ಎಂಬಂತಹ ಉನ್ನತ-ಮಟ್ಟದ ಗುರಿಯನ್ನು ನೀಡುತ್ತದೆ. ಪ್ರಾಜೆಕ್ಟ್ ಮ್ಯಾನೇಜರ್ (ಟಾಸ್ಕ್ ಶೇಡರ್) ಸ್ವತಃ ಇಟ್ಟಿಗೆಗಳನ್ನು ಹಾಕುವುದಿಲ್ಲ. ಬದಲಾಗಿ, ಇದು ಒಟ್ಟಾರೆ ಕಾರ್ಯವನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುತ್ತದೆ, ನೀಲನಕ್ಷೆಗಳನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ, ಮತ್ತು ಯಾವ ನಿರ್ಮಾಣ ತಂಡಗಳು (ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳು) ಅಗತ್ಯವಿದೆ ಮತ್ತು ಎಷ್ಟು ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ. ಇದು ಒಂದು ನಿರ್ದಿಷ್ಟ ಕಟ್ಟಡವು ಅಗತ್ಯವಿಲ್ಲ (ಕಲಿಂಗ್) ಎಂದು ನಿರ್ಧರಿಸಬಹುದು ಅಥವಾ ಒಂದು ನಿರ್ದಿಷ್ಟ ಪ್ರದೇಶಕ್ಕೆ ಹತ್ತು ತಂಡಗಳು ಬೇಕಾಗುತ್ತವೆ ಆದರೆ ಇನ್ನೊಂದಕ್ಕೆ ಕೇವಲ ಎರಡು ಮಾತ್ರ ಬೇಕು ಎಂದು ನಿರ್ಧರಿಸಬಹುದು.
ತಾಂತ್ರಿಕವಾಗಿ ಹೇಳುವುದಾದರೆ, ಟಾಸ್ಕ್ ಶೇಡರ್ ಕಂಪ್ಯೂಟ್-ರೀತಿಯ ವರ್ಕ್ಗ್ರೂಪ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು ಮೆಮೊರಿಯನ್ನು ಪ್ರವೇಶಿಸಬಹುದು, ಸಂಕೀರ್ಣ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ಮಾಡಬಹುದು, ಮತ್ತು ಮುಖ್ಯವಾಗಿ, ಎಷ್ಟು ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಬೇಕು ಎಂದು ನಿರ್ಧರಿಸಬಹುದು. ಈ ನಿರ್ಧಾರವು ಅದರ ಶಕ್ತಿಯ ತಿರುಳು.
ಆಂಪ್ಲಿಫಿಕೇಶನ್ನ ಶಕ್ತಿ
"ಆಂಪ್ಲಿಫಿಕೇಶನ್" ಎಂಬ ಪದವು ಟಾಸ್ಕ್ ಶೇಡರ್ನ ತನ್ನದೇ ಆದ ಒಂದೇ ವರ್ಕ್ಗ್ರೂಪ್ ಅನ್ನು ತೆಗೆದುಕೊಂಡು ಶೂನ್ಯ, ಒಂದು ಅಥವಾ ಅನೇಕ ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುವ ಸಾಮರ್ಥ್ಯದಿಂದ ಬಂದಿದೆ. ಈ ಸಾಮರ್ಥ್ಯವು ಪರಿವರ್ತನಾತ್ಮಕವಾಗಿದೆ:
- ಶೂನ್ಯವನ್ನು ಪ್ರಾರಂಭಿಸಿ: ಒಂದು ವಸ್ತು ಅಥವಾ ದೃಶ್ಯದ ಒಂದು ಭಾಗವು ಗೋಚರಿಸುವುದಿಲ್ಲ ಎಂದು ಟಾಸ್ಕ್ ಶೇಡರ್ ನಿರ್ಧರಿಸಿದರೆ (ಉದಾಹರಣೆಗೆ, ಕ್ಯಾಮೆರಾದ ಫ್ರಸ್ಟಮ್ನ ಹೊರಗೆ), ಅದು ಸರಳವಾಗಿ ಶೂನ್ಯ ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲು ಆಯ್ಕೆ ಮಾಡಬಹುದು. ಆ ವಸ್ತುವಿಗೆ ಸಂಬಂಧಿಸಿದ ಎಲ್ಲಾ ಸಂಭಾವ್ಯ ಕೆಲಸಗಳು ಮತ್ತಷ್ಟು ಪ್ರಕ್ರಿಯೆಗೊಳ್ಳದೆ ಮಾಯವಾಗುತ್ತವೆ. ಇದು ಸಂಪೂರ್ಣವಾಗಿ ಜಿಪಿಯುನಲ್ಲಿ ನಿರ್ವಹಿಸಲಾದ ಅತ್ಯಂತ ದಕ್ಷವಾದ ಕಲಿಂಗ್ ಆಗಿದೆ.
- ಒಂದನ್ನು ಪ್ರಾರಂಭಿಸಿ: ಇದು ನೇರ ಪಾಸ್-ಥ್ರೂ ಆಗಿದೆ. ಟಾಸ್ಕ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ ಒಂದು ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ ಅಗತ್ಯವಿದೆ ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ.
- ಅನೇಕವನ್ನು ಪ್ರಾರಂಭಿಸಿ: ಪ್ರೊಸಿಜರಲ್ ಉತ್ಪಾದನೆಗೆ ಮ್ಯಾಜಿಕ್ ನಡೆಯುವುದು ಇಲ್ಲಿಯೇ. ಒಂದೇ ಟಾಸ್ಕ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ ಕೆಲವು ಇನ್ಪುಟ್ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಬಹುದು ಮತ್ತು ಸಾವಿರಾರು ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲು ನಿರ್ಧರಿಸಬಹುದು. ಉದಾಹರಣೆಗೆ, ಇದು ಒಂದು ಹೊಲದಲ್ಲಿನ ಪ್ರತಿಯೊಂದು ಹುಲ್ಲಿನ ಎಳೆಗಾಗಿ ಅಥವಾ ದಟ್ಟವಾದ ಸಮೂಹದಲ್ಲಿನ ಪ್ರತಿಯೊಂದು ಕ್ಷುದ್ರಗ್ರಹಕ್ಕಾಗಿ ಒಂದು ವರ್ಕ್ಗ್ರೂಪ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಬಹುದು, ಎಲ್ಲವೂ ಸಿಪಿಯುಯಿಂದ ಒಂದೇ ರವಾನೆ ಆದೇಶದಿಂದ.
ಟಾಸ್ಕ್ ಶೇಡರ್ GLSLನ ಒಂದು ಪರಿಕಲ್ಪನಾ ನೋಟ
ವಿಶಿಷ್ಟತೆಗಳು ಸಂಕೀರ್ಣವಾಗಬಹುದಾದರೂ, GLSL ನಲ್ಲಿನ (ವೆಬ್ಜಿಎಲ್ ವಿಸ್ತರಣೆಗಾಗಿ) ಮೂಲ ಆಂಪ್ಲಿಫಿಕೇಶನ್ ಯಾಂತ್ರಿಕತೆಯು ಆಶ್ಚರ್ಯಕರವಾಗಿ ಸರಳವಾಗಿದೆ. ಇದು `EmitMeshTasksEXT()` ಫಂಕ್ಷನ್ನ ಸುತ್ತ ಸುತ್ತುತ್ತದೆ.
ಗಮನಿಸಿ: ಇದು ಒಂದು ಸರಳೀಕೃತ, ಪರಿಕಲ್ಪನಾತ್ಮಕ ಉದಾಹರಣೆಯಾಗಿದೆ.
#version 310 es
#extension GL_EXT_mesh_shader : require
layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
// ಸಿಪಿಯುಯಿಂದ ಪಾಸ್ ಮಾಡಿದ ಯೂನಿಫಾರ್ಮ್ಗಳು
uniform mat4 u_viewProjectionMatrix;
uniform uint u_totalObjectCount;
// ಅನೇಕ ಆಬ್ಜೆಕ್ಟ್ಗಳಿಗಾಗಿ ಬೌಂಡಿಂಗ್ ಸ್ಪಿಯರ್ಗಳನ್ನು ಹೊಂದಿರುವ ಬಫರ್
struct BoundingSphere {
vec4 centerAndRadius;
};
layout(std430, binding = 0) readonly buffer ObjectBounds {
BoundingSphere bounds[];
} objectBounds;
void main() {
// ವರ್ಕ್ಗ್ರೂಪ್ನಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದು ಥ್ರೆಡ್ ಬೇರೆ ಬೇರೆ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಪರಿಶೀಲಿಸಬಹುದು
uint objectIndex = gl_GlobalInvocationID.x;
if (objectIndex >= u_totalObjectCount) {
return;
}
// ಈ ಆಬ್ಜೆಕ್ಟ್ನ ಬೌಂಡಿಂಗ್ ಸ್ಪಿಯರ್ಗಾಗಿ ಜಿಪಿಯುನಲ್ಲಿ ಫ್ರಸ್ಟಮ್ ಕಲಿಂಗ್ ಮಾಡಿ
BoundingSphere sphere = objectBounds.bounds[objectIndex];
bool isVisible = isSphereInFrustum(sphere.centerAndRadius, u_viewProjectionMatrix);
// ಅದು ಗೋಚರಿಸಿದರೆ, ಅದನ್ನು ಚಿತ್ರಿಸಲು ಒಂದು ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ ಅನ್ನು ಲಾಂಚ್ ಮಾಡಿ.
// ಗಮನಿಸಿ: ಈ ತರ್ಕವು ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾಗಿರಬಹುದು, ಗೋಚರಿಸುವ ಆಬ್ಜೆಕ್ಟ್ಗಳನ್ನು
// ಎಣಿಸಲು ಅಟಾಮಿಕ್ಸ್ ಬಳಸಿ ಮತ್ತು ಎಲ್ಲವನ್ನೂ ಒಂದೇ ಥ್ರೆಡ್ನಿಂದ ರವಾನಿಸಬಹುದು.
if (isVisible) {
// ಇದು ಮೆಶ್ ಟಾಸ್ಕ್ ಅನ್ನು ಲಾಂಚ್ ಮಾಡಲು ಜಿಪಿಯುಗೆ ಹೇಳುತ್ತದೆ. ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು
// ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗೆ ಮಾಹಿತಿಯನ್ನು ರವಾನಿಸಲು ಬಳಸಬಹುದು.
// ಸರಳತೆಗಾಗಿ, ಪ್ರತಿಯೊಂದು ಟಾಸ್ಕ್ ಶೇಡರ್ ಇನ್ವೊಕೇಶನ್ ನೇರವಾಗಿ ಮೆಶ್ ಟಾಸ್ಕ್ಗೆ ಮ್ಯಾಪ್ ಆಗುತ್ತದೆ ಎಂದು ನಾವು ಊಹಿಸುತ್ತೇವೆ.
// ಹೆಚ್ಚು ವಾಸ್ತವಿಕ ಸನ್ನಿವೇಶದಲ್ಲಿ ಒಂದೇ ಥ್ರೆಡ್ನಿಂದ ಗುಂಪು ಮಾಡುವುದು ಮತ್ತು ರವಾನಿಸುವುದು ಒಳಗೊಂಡಿರುತ್ತದೆ.
// ಒಂದು ಸರಳೀಕೃತ ಪರಿಕಲ್ಪನಾ ರವಾನೆ:
// ಪ್ರತಿಯೊಂದು ಗೋಚರ ಆಬ್ಜೆಕ್ಟ್ ತನ್ನದೇ ಆದ ಟಾಸ್ಕ್ ಪಡೆಯುತ್ತದೆ ಎಂದು ನಾವು ಭಾವಿಸುತ್ತೇವೆ, ಆದರೂ ವಾಸ್ತವದಲ್ಲಿ
// ಒಂದು ಟಾಸ್ಕ್ ಶೇಡರ್ ಇನ್ವೊಕೇಶನ್ ಬಹು ಮೆಶ್ ಶೇಡರ್ಗಳನ್ನು ರವಾನಿಸುವುದನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.
EmitMeshTasksEXT(1u, 0u, 0u); // ಇದು ಪ್ರಮುಖ ಆಂಪ್ಲಿಫಿಕೇಶನ್ ಫಂಕ್ಷನ್
}
// ಗೋಚರಿಸದಿದ್ದರೆ, ನಾವು ಏನೂ ಮಾಡುವುದಿಲ್ಲ! ಈ ಪರಿಶೀಲನೆಯನ್ನು ಮೀರಿ ಶೂನ್ಯ ಜಿಪಿಯು ವೆಚ್ಚದಲ್ಲಿ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ.
}
ನೈಜ-ಪ್ರಪಂಚದ ಸನ್ನಿವೇಶದಲ್ಲಿ, ನೀವು ವರ್ಕ್ಗ್ರೂಪ್ನಲ್ಲಿ ಒಂದು ಥ್ರೆಡ್ ಅನ್ನು ಹೊಂದಿರಬಹುದು, ಅದು ಫಲಿತಾಂಶಗಳನ್ನು ಒಟ್ಟುಗೂಡಿಸುತ್ತದೆ ಮತ್ತು ವರ್ಕ್ಗ್ರೂಪ್ ಜವಾಬ್ದಾರರಾಗಿರುವ ಎಲ್ಲಾ ಗೋಚರ ವಸ್ತುಗಳಿಗೆ ಒಂದೇ `EmitMeshTasksEXT` ಕರೆಯನ್ನು ಮಾಡುತ್ತದೆ.
ಕಾರ್ಯಪಡೆ: ಜ್ಯಾಮಿತಿ ರಚನೆಯಲ್ಲಿ ಮೆಶ್ ಶೇಡರ್ನ ಪಾತ್ರ
ಒಮ್ಮೆ ಟಾಸ್ಕ್ ಶೇಡರ್ ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ರವಾನಿಸಿದ ನಂತರ, ಮೆಶ್ ಶೇಡರ್ ಅಧಿಕಾರ ವಹಿಸಿಕೊಳ್ಳುತ್ತದೆ. ಟಾಸ್ಕ್ ಶೇಡರ್ ಪ್ರಾಜೆಕ್ಟ್ ಮ್ಯಾನೇಜರ್ ಆಗಿದ್ದರೆ, ಮೆಶ್ ಶೇಡರ್ ವಾಸ್ತವವಾಗಿ ಜ್ಯಾಮಿತಿಯನ್ನು ನಿರ್ಮಿಸುವ ನುರಿತ ನಿರ್ಮಾಣ ತಂಡವಾಗಿದೆ.
ವರ್ಕ್ಗ್ರೂಪ್ಗಳಿಂದ ಮೆಶ್ಲೆಟ್ಗಳವರೆಗೆ
ಟಾಸ್ಕ್ ಶೇಡರ್ನಂತೆ, ಮೆಶ್ ಶೇಡರ್ ಥ್ರೆಡ್ಗಳ ಸಹಕಾರಿ ವರ್ಕ್ಗ್ರೂಪ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಈ ಸಂಪೂರ್ಣ ವರ್ಕ್ಗ್ರೂಪ್ನ ಸಾಮೂಹಿಕ ಗುರಿಯು ಮೆಶ್ಲೆಟ್ ಎಂದು ಕರೆಯಲ್ಪಡುವ ಒಂದೇ, ಸಣ್ಣ ಜ್ಯಾಮಿತಿಯ ಬ್ಯಾಚ್ ಅನ್ನು ಉತ್ಪಾದಿಸುವುದು. ಮೆಶ್ಲೆಟ್ ಎನ್ನುವುದು ಸರಳವಾಗಿ ವರ್ಟಿಸಸ್ಗಳ ಸಂಗ್ರಹ ಮತ್ತು ಅವುಗಳನ್ನು ಸಂಪರ್ಕಿಸುವ ಪ್ರಿಮಿಟಿವ್ಗಳು (ತ್ರಿಕೋನಗಳು). ಸಾಮಾನ್ಯವಾಗಿ, ಒಂದು ಮೆಶ್ಲೆಟ್ ಸಣ್ಣ ಸಂಖ್ಯೆಯ ವರ್ಟಿಸಸ್ಗಳನ್ನು (ಉದಾ., 128 ರವರೆಗೆ) ಮತ್ತು ತ್ರಿಕೋನಗಳನ್ನು (ಉದಾ., 256 ರವರೆಗೆ) ಹೊಂದಿರುತ್ತದೆ, ಇದು ಆಧುನಿಕ ಜಿಪಿಯು ಕ್ಯಾಶ್ಗಳು ಮತ್ತು ಸಂಸ್ಕರಣಾ ಮಾದರಿಗಳಿಗೆ ಅತ್ಯಂತ ಸ್ನೇಹಪರವಾದ ಗಾತ್ರವಾಗಿದೆ.
ಇದು ವರ್ಟೆಕ್ಸ್ ಶೇಡರ್ನಿಂದ ಮೂಲಭೂತವಾದ ನಿರ್ಗಮನವಾಗಿದೆ, ಅದಕ್ಕೆ ತನ್ನ ನೆರೆಹೊರೆಯವರ ಪರಿಕಲ್ಪನೆ ಇರಲಿಲ್ಲ. ಮೆಶ್ ಶೇಡರ್ನಲ್ಲಿ, ವರ್ಕ್ಗ್ರೂಪ್ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಥ್ರೆಡ್ಗಳು ಮೆಮೊರಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಮತ್ತು ಮೆಶ್ಲೆಟ್ ಅನ್ನು ಸಮರ್ಥವಾಗಿ ನಿರ್ಮಿಸಲು ತಮ್ಮ ಪ್ರಯತ್ನಗಳನ್ನು ಸಂಯೋಜಿಸಬಹುದು.
ವರ್ಟಿಸಸ್ ಮತ್ತು ಪ್ರಿಮಿಟಿವ್ಗಳನ್ನು ರಚಿಸುವುದು
ಒಂದೇ `gl_Position` ಅನ್ನು ಹಿಂತಿರುಗಿಸುವ ಬದಲು, ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ ತನ್ನ ಮೆಶ್ಲೆಟ್ಗಾಗಿ ಸಂಪೂರ್ಣ ಡೇಟಾದೊಂದಿಗೆ ಔಟ್ಪುಟ್ ಅರೇಗಳನ್ನು ತುಂಬುತ್ತದೆ. ಥ್ರೆಡ್ಗಳು ವರ್ಟೆಕ್ಸ್ ಸ್ಥಾನಗಳು, ನಾರ್ಮಲ್ಗಳು, ಯುವಿ ನಿರ್ದೇಶಾಂಕಗಳು, ಮತ್ತು ಇತರ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಈ ಅರೇಗಳಿಗೆ ಬರೆಯಲು ಒಟ್ಟಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತವೆ. ಅವರು ಪ್ರತಿ ತ್ರಿಕೋನವನ್ನು ಯಾವ ವರ್ಟಿಸಸ್ಗಳು ರೂಪಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಮೂಲಕ ಪ್ರಿಮಿಟಿವ್ಗಳನ್ನು ಸಹ ವ್ಯಾಖ್ಯಾನಿಸುತ್ತಾರೆ.
ಮೆಶ್ ಶೇಡರ್ನಲ್ಲಿನ ಅಂತಿಮ ಹಂತವೆಂದರೆ, ಅದು ನಿಖರವಾಗಿ ಎಷ್ಟು ವರ್ಟಿಸಸ್ ಮತ್ತು ಪ್ರಿಮಿಟಿವ್ಗಳನ್ನು ಉತ್ಪಾದಿಸಿದೆ ಎಂದು ಘೋಷಿಸಲು `SetMeshOutputsEXT()` ನಂತಹ ಫಂಕ್ಷನ್ಗೆ ಕರೆ ಮಾಡುವುದು. ನಂತರ ಹಾರ್ಡ್ವೇರ್ ಈ ಮೆಶ್ಲೆಟ್ ಅನ್ನು ತೆಗೆದುಕೊಂಡು ಅದನ್ನು ನೇರವಾಗಿ ರಾಸ್ಟರೈಸರ್ಗೆ ರವಾನಿಸುತ್ತದೆ.
ಮೆಶ್ ಶೇಡರ್ GLSLನ ಒಂದು ಪರಿಕಲ್ಪನಾ ನೋಟ
ಇಲ್ಲಿ ಸರಳವಾದ ಕ್ವಾಡ್ ಅನ್ನು ಉತ್ಪಾದಿಸುವ ಮೆಶ್ ಶೇಡರ್ನ ಪರಿಕಲ್ಪನಾತ್ಮಕ ಉದಾಹರಣೆಯಿದೆ. ಥ್ರೆಡ್ಗಳು ತಮ್ಮ `gl_LocalInvocationID` ಆಧರಿಸಿ ಹೇಗೆ ಸಹಕರಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ಗಮನಿಸಿ.
#version 310 es
#extension GL_EXT_mesh_shader : require
// ನಮ್ಮ ಮೆಶ್ಲೆಟ್ಗಾಗಿ ಗರಿಷ್ಠ ಔಟ್ಪುಟ್ಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ
layout(max_vertices = 4, max_primitives = 2) out;
layout(triangles) out;
layout(local_size_x = 4, local_size_y = 1, local_size_z = 1) in;
// ನಾವು ಈ ಬಿಲ್ಟ್-ಇನ್ ಔಟ್ಪುಟ್ ಅರೇಗಳಿಗೆ ವರ್ಟೆಕ್ಸ್ ಡೇಟಾವನ್ನು ಬರೆಯುತ್ತೇವೆ
out gl_MeshVerticesEXT {
vec4 position;
vec2 uv;
} vertices[];
// ನಾವು ಈ ಅರೇಗೆ ತ್ರಿಕೋನ ಇಂಡೆಕ್ಸ್ಗಳನ್ನು ಬರೆಯುತ್ತೇವೆ
out uint gl_MeshPrimitivesEXT[];
uniform mat4 u_modelViewProjectionMatrix;
void main() {
// ಈ ಮೆಶ್ಲೆಟ್ಗಾಗಿ ರಚಿಸಬೇಕಾದ ಒಟ್ಟು ವರ್ಟಿಸಸ್ ಮತ್ತು ಪ್ರಿಮಿಟಿವ್ಗಳು
const uint vertexCount = 4;
const uint primitiveCount = 2;
// ನಾವು ನಿಜವಾಗಿ ಎಷ್ಟು ವರ್ಟಿಸಸ್ ಮತ್ತು ಪ್ರಿಮಿಟಿವ್ಗಳನ್ನು ಔಟ್ಪುಟ್ ಮಾಡುತ್ತಿದ್ದೇವೆ ಎಂದು ಹಾರ್ಡ್ವೇರ್ಗೆ ತಿಳಿಸಿ
SetMeshOutputsEXT(vertexCount, primitiveCount);
// ಒಂದು ಕ್ವಾಡ್ಗಾಗಿ ವರ್ಟೆಕ್ಸ್ ಸ್ಥಾನಗಳನ್ನು ಮತ್ತು ಯುವಿಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ
vec4 positions[4] = vec4[4](
vec4(-0.5, 0.5, 0.0, 1.0),
vec4(-0.5, -0.5, 0.0, 1.0),
vec4(0.5, 0.5, 0.0, 1.0),
vec4(0.5, -0.5, 0.0, 1.0)
);
vec2 uvs[4] = vec2[4](
vec2(0.0, 1.0),
vec2(0.0, 0.0),
vec2(1.0, 1.0),
vec2(1.0, 0.0)
);
// ವರ್ಕ್ಗ್ರೂಪ್ನಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದು ಥ್ರೆಡ್ ಒಂದು ವರ್ಟೆಕ್ಸ್ ಅನ್ನು ರಚಿಸಲಿ
uint id = gl_LocalInvocationID.x;
if (id < vertexCount) {
vertices[id].position = u_modelViewProjectionMatrix * positions[id];
vertices[id].uv = uvs[id];
}
// ಮೊದಲ ಎರಡು ಥ್ರೆಡ್ಗಳು ಕ್ವಾಡ್ಗಾಗಿ ಎರಡು ತ್ರಿಕೋನಗಳನ್ನು ರಚಿಸಲಿ
if (id == 0) {
// ಮೊದಲ ತ್ರಿಕೋನ: 0, 1, 2
gl_MeshPrimitivesEXT[0] = 0u;
gl_MeshPrimitivesEXT[1] = 1u;
gl_MeshPrimitivesEXT[2] = 2u;
}
if (id == 1) {
// ಎರಡನೇ ತ್ರಿಕೋನ: 1, 3, 2
gl_MeshPrimitivesEXT[3] = 1u;
gl_MeshPrimitivesEXT[4] = 3u;
gl_MeshPrimitivesEXT[5] = 2u;
}
}
ಪ್ರಾಯೋಗಿಕ ಮ್ಯಾಜಿಕ್: ಟಾಸ್ಕ್ ಆಂಪ್ಲಿಫಿಕೇಶನ್ಗಾಗಿ ಬಳಕೆಯ ಪ್ರಕರಣಗಳು
ಈ ಪೈಪ್ಲೈನ್ನ ನಿಜವಾದ ಶಕ್ತಿಯು ನಾವು ಅದನ್ನು ಸಂಕೀರ್ಣ, ನೈಜ-ಪ್ರಪಂಚದ ರೆಂಡರಿಂಗ್ ಸವಾಲುಗಳಿಗೆ ಅನ್ವಯಿಸಿದಾಗ ಬಹಿರಂಗಗೊಳ್ಳುತ್ತದೆ.
ಬಳಕೆಯ ಪ್ರಕರಣ 1: ಬೃಹತ್ ಪ್ರೊಸಿಜರಲ್ ಜ್ಯಾಮಿತಿ ರಚನೆ
ನೂರಾರು ಸಾವಿರ ವಿಶಿಷ್ಟ ಕ್ಷುದ್ರಗ್ರಹಗಳೊಂದಿಗೆ ದಟ್ಟವಾದ ಕ್ಷುದ್ರಗ್ರಹ ಕ್ಷೇತ್ರವನ್ನು ರೆಂಡರಿಂಗ್ ಮಾಡುವುದನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ. ಹಳೆಯ ಪೈಪ್ಲೈನ್ನೊಂದಿಗೆ, ಸಿಪಿಯು ಪ್ರತಿಯೊಂದು ಕ್ಷುದ್ರಗ್ರಹದ ವರ್ಟೆಕ್ಸ್ ಡೇಟಾವನ್ನು ಉತ್ಪಾದಿಸಬೇಕಾಗಿತ್ತು ಮತ್ತು ಪ್ರತಿಯೊಂದಕ್ಕೂ ಪ್ರತ್ಯೇಕ ಡ್ರಾ ಕಾಲ್ ಅನ್ನು ನೀಡಬೇಕಾಗಿತ್ತು, ಇದು ಸಂಪೂರ್ಣವಾಗಿ ಅಸಮರ್ಥನೀಯ ವಿಧಾನವಾಗಿದೆ.
ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಫ್ಲೋ:
- ಸಿಪಿಯು ಒಂದೇ ಡ್ರಾ ಕಾಲ್ ಅನ್ನು ನೀಡುತ್ತದೆ: `drawMeshTasksEXT(1, 1)`. ಇದು ಕ್ಷೇತ್ರದ ತ್ರಿಜ್ಯ ಮತ್ತು ಕ್ಷುದ್ರಗ್ರಹದ ಸಾಂದ್ರತೆಯಂತಹ ಕೆಲವು ಉನ್ನತ-ಮಟ್ಟದ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ಯೂನಿಫಾರ್ಮ್ ಬಫರ್ನಲ್ಲಿ ರವಾನಿಸುತ್ತದೆ.
- ಒಂದೇ ಟಾಸ್ಕ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ ಕಾರ್ಯಗತಗೊಳ್ಳುತ್ತದೆ. ಇದು ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ಓದುತ್ತದೆ ಮತ್ತು, ಹೇಳುವುದಾದರೆ, 50,000 ಕ್ಷುದ್ರಗ್ರಹಗಳು ಬೇಕು ಎಂದು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ. ನಂತರ ಅದು `EmitMeshTasksEXT(50000, 0, 0)` ಗೆ ಕರೆ ಮಾಡುತ್ತದೆ.
- ಜಿಪಿಯು 50,000 ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಸಮಾನಾಂತರವಾಗಿ ಪ್ರಾರಂಭಿಸುತ್ತದೆ.
- ಪ್ರತಿಯೊಂದು ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ ತನ್ನ ವಿಶಿಷ್ಟ ID (`gl_WorkGroupID`) ಅನ್ನು ಬೀಜವಾಗಿ ಬಳಸಿ ಒಂದು ವಿಶಿಷ್ಟ ಕ್ಷುದ್ರಗ್ರಹಕ್ಕಾಗಿ ವರ್ಟಿಸಸ್ ಮತ್ತು ತ್ರಿಕೋನಗಳನ್ನು ಪ್ರೊಸಿಜರಲ್ ಆಗಿ ಉತ್ಪಾದಿಸುತ್ತದೆ.
ಇದರ ಫಲಿತಾಂಶವು ಬಹುತೇಕ ಸಂಪೂರ್ಣವಾಗಿ ಜಿಪಿಯುನಲ್ಲಿ ಉತ್ಪತ್ತಿಯಾದ ಬೃಹತ್, ಸಂಕೀರ್ಣ ದೃಶ್ಯವಾಗಿದೆ, ಇದು ಭೌತಶಾಸ್ತ್ರ ಮತ್ತು AI ನಂತಹ ಇತರ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಸಿಪಿಯು ಅನ್ನು ಮುಕ್ತಗೊಳಿಸುತ್ತದೆ.
ಬಳಕೆಯ ಪ್ರಕರಣ 2: ಬೃಹತ್ ಪ್ರಮಾಣದಲ್ಲಿ ಜಿಪಿಯು-ಚಾಲಿತ ಕಲಿಂಗ್
ಲಕ್ಷಾಂತರ ಪ್ರತ್ಯೇಕ ವಸ್ತುಗಳನ್ನು ಹೊಂದಿರುವ ವಿವರವಾದ ನಗರ ದೃಶ್ಯವನ್ನು ಪರಿಗಣಿಸಿ. ಸಿಪಿಯು ಸರಳವಾಗಿ ಪ್ರತಿ ಫ್ರೇಮ್ನಲ್ಲಿ ಪ್ರತಿಯೊಂದು ವಸ್ತುವಿನ ಗೋಚರತೆಯನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.
ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಫ್ಲೋ:
- ಸಿಪಿಯು ದೃಶ್ಯದಲ್ಲಿನ ಪ್ರತಿಯೊಂದು ವಸ್ತುವಿಗಾಗಿ ಬೌಂಡಿಂಗ್ ವಾಲ್ಯೂಮ್ಗಳನ್ನು (ಉದಾ., ಗೋಳಗಳು ಅಥವಾ ಪೆಟ್ಟಿಗೆಗಳು) ಹೊಂದಿರುವ ದೊಡ್ಡ ಬಫರ್ ಅನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡುತ್ತದೆ. ಇದು ಒಮ್ಮೆ ಮಾತ್ರ ನಡೆಯುತ್ತದೆ, ಅಥವಾ ವಸ್ತುಗಳು ಚಲಿಸಿದಾಗ ಮಾತ್ರ.
- ಸಿಪಿಯು ಒಂದೇ ಡ್ರಾ ಕಾಲ್ ಅನ್ನು ನೀಡುತ್ತದೆ, ಬೌಂಡಿಂಗ್ ವಾಲ್ಯೂಮ್ಗಳ ಸಂಪೂರ್ಣ ಪಟ್ಟಿಯನ್ನು ಸಮಾನಾಂತರವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಕಷ್ಟು ಟಾಸ್ಕ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ.
- ಪ್ರತಿಯೊಂದು ಟಾಸ್ಕ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗೆ ಬೌಂಡಿಂಗ್ ವಾಲ್ಯೂಮ್ ಪಟ್ಟಿಯ ಒಂದು ಭಾಗವನ್ನು ನಿಗದಿಪಡಿಸಲಾಗಿದೆ. ಇದು ತನ್ನ ನಿಯೋಜಿತ ವಸ್ತುಗಳ ಮೂಲಕ ಪುನರಾವರ್ತಿಸುತ್ತದೆ, ಪ್ರತಿಯೊಂದಕ್ಕೂ ಫ್ರಸ್ಟಮ್ ಕಲಿಂಗ್ (ಮತ್ತು ಸಂಭಾವ್ಯವಾಗಿ ಅಕ್ಲೂಷನ್ ಕಲಿಂಗ್) ನಿರ್ವಹಿಸುತ್ತದೆ, ಮತ್ತು ಎಷ್ಟು ಗೋಚರಿಸುತ್ತವೆ ಎಂದು ಎಣಿಸುತ್ತದೆ.
- ಅಂತಿಮವಾಗಿ, ಇದು ನಿಖರವಾಗಿ ಅಷ್ಟು ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ, ಗೋಚರ ವಸ್ತುಗಳ ID ಗಳನ್ನು ರವಾನಿಸುತ್ತದೆ.
- ಪ್ರತಿಯೊಂದು ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ ಒಂದು ಆಬ್ಜೆಕ್ಟ್ ID ಅನ್ನು ಪಡೆಯುತ್ತದೆ, ಬಫರ್ನಿಂದ ಅದರ ಮೆಶ್ ಡೇಟಾವನ್ನು ಹುಡುಕುತ್ತದೆ, ಮತ್ತು ರೆಂಡರಿಂಗ್ಗಾಗಿ ಅನುಗುಣವಾದ ಮೆಶ್ಲೆಟ್ಗಳನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ.
ಇದು ಸಂಪೂರ್ಣ ಕಲಿಂಗ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಜಿಪಿಯುಗೆ ಸರಿಸುತ್ತದೆ, ಸಿಪಿಯು-ಆಧಾರಿತ ವಿಧಾನವನ್ನು ತಕ್ಷಣವೇ ದುರ್ಬಲಗೊಳಿಸುವಂತಹ ಸಂಕೀರ್ಣತೆಯ ದೃಶ್ಯಗಳಿಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ.
ಬಳಕೆಯ ಪ್ರಕರಣ 3: ಡೈನಾಮಿಕ್ ಮತ್ತು ದಕ್ಷ ಮಟ್ಟದ ವಿವರ (LOD)
LOD ವ್ಯವಸ್ಥೆಗಳು ಕಾರ್ಯಕ್ಷಮತೆಗೆ ನಿರ್ಣಾಯಕವಾಗಿವೆ, ದೂರದಲ್ಲಿರುವ ವಸ್ತುಗಳಿಗೆ ಸರಳ ಮಾದರಿಗಳಿಗೆ ಬದಲಾಯಿಸುತ್ತವೆ. ಮೆಶ್ ಶೇಡರ್ಗಳು ಈ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಹೆಚ್ಚು ಸೂಕ್ಷ್ಮ ಮತ್ತು ದಕ್ಷವಾಗಿಸುತ್ತವೆ.
ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಫ್ಲೋ:
- ಒಂದು ವಸ್ತುವಿನ ಡೇಟಾವನ್ನು ಮೆಶ್ಲೆಟ್ಗಳ ಶ್ರೇಣಿಯಾಗಿ ಪೂರ್ವ-ಸಂಸ್ಕರಿಸಲಾಗುತ್ತದೆ. ಒರಟಾದ LOD ಗಳು ಕಡಿಮೆ, ದೊಡ್ಡ ಮೆಶ್ಲೆಟ್ಗಳನ್ನು ಬಳಸುತ್ತವೆ.
- ಈ ವಸ್ತುವಿಗಾಗಿ ಒಂದು ಟಾಸ್ಕ್ ಶೇಡರ್ ಕ್ಯಾಮೆರಾದಿಂದ ಅದರ ದೂರವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ.
- ದೂರವನ್ನು ಆಧರಿಸಿ, ಇದು ಯಾವ LOD ಮಟ್ಟವು ಸೂಕ್ತವಾಗಿದೆ ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ. ನಂತರ ಅದು ಆ LOD ಗಾಗಿ ಪ್ರತಿ-ಮೆಶ್ಲೆಟ್ ಆಧಾರದ ಮೇಲೆ ಕಲಿಂಗ್ ಮಾಡಬಹುದು. ಉದಾಹರಣೆಗೆ, ದೊಡ್ಡ ವಸ್ತುವಿಗಾಗಿ, ಅದು ಗೋಚರಿಸದ ವಸ್ತುವಿನ ಹಿಂಭಾಗದಲ್ಲಿರುವ ಮೆಶ್ಲೆಟ್ಗಳನ್ನು ಕಲ್ ಮಾಡಬಹುದು.
- ಇದು ಆಯ್ದ LOD ಯ ಗೋಚರ ಮೆಶ್ಲೆಟ್ಗಳಿಗಾಗಿ ಮಾತ್ರ ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ.
ಇದು ಸೂಕ್ಷ್ಮ-ಧಾನ್ಯದ, ಆನ್-ದಿ-ಫ್ಲೈ LOD ಆಯ್ಕೆ ಮತ್ತು ಕಲಿಂಗ್ಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ, ಇದು ಸಿಪಿಯು ಸಂಪೂರ್ಣ ಮಾದರಿಗಳನ್ನು ಬದಲಾಯಿಸುವುದಕ್ಕಿಂತ ಹೆಚ್ಚು ದಕ್ಷವಾಗಿದೆ.
ಪ್ರಾರಂಭಿಸುವುದು: `WEBGL_mesh_shader` ವಿಸ್ತರಣೆಯನ್ನು ಬಳಸುವುದು
ಪ್ರಯೋಗ ಮಾಡಲು ಸಿದ್ಧರಿದ್ದೀರಾ? WebGL ನಲ್ಲಿ ಮೆಶ್ ಶೇಡರ್ಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಲು ಪ್ರಾಯೋಗಿಕ ಹಂತಗಳು ಇಲ್ಲಿವೆ.
ಬೆಂಬಲಕ್ಕಾಗಿ ಪರಿಶೀಲಿಸುವುದು
ಮೊದಲ ಮತ್ತು ಅಗ್ರಗಣ್ಯವಾಗಿ, ಇದು ಅತ್ಯಾಧುನಿಕ ವೈಶಿಷ್ಟ್ಯವಾಗಿದೆ. ಬಳಕೆದಾರರ ಬ್ರೌಸರ್ ಮತ್ತು ಹಾರ್ಡ್ವೇರ್ ಅದನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆಯೇ ಎಂದು ನೀವು ಪರಿಶೀಲಿಸಬೇಕು.
const gl = canvas.getContext('webgl2');
const meshShaderExtension = gl.getExtension('WEBGL_mesh_shader');
if (!meshShaderExtension) {
console.error("ನಿಮ್ಮ ಬ್ರೌಸರ್ ಅಥವಾ ಜಿಪಿಯು WEBGL_mesh_shader ಅನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ.");
// ಸಾಂಪ್ರದಾಯಿಕ ರೆಂಡರಿಂಗ್ ಪಥಕ್ಕೆ ಹಿಂತಿರುಗಿ
}
ಹೊಸ ಡ್ರಾ ಕಾಲ್
`drawArrays` ಮತ್ತು `drawElements` ಅನ್ನು ಮರೆತುಬಿಡಿ. ಹೊಸ ಪೈಪ್ಲೈನ್ ಅನ್ನು ಹೊಸ ಆಜ್ಞೆಯೊಂದಿಗೆ ಆಹ್ವಾನಿಸಲಾಗುತ್ತದೆ. `getExtension` ನಿಂದ ನೀವು ಪಡೆಯುವ ವಿಸ್ತರಣಾ ಆಬ್ಜೆಕ್ಟ್ ಹೊಸ ಫಂಕ್ಷನ್ಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ.
// 10 ಟಾಸ್ಕ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಲಾಂಚ್ ಮಾಡಿ.
// ಪ್ರತಿಯೊಂದು ವರ್ಕ್ಗ್ರೂಪ್ ಶೇಡರ್ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ local_size ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ.
meshShaderExtension.drawMeshTasksEXT(0, 10);
`count` ಆರ್ಗ್ಯುಮೆಂಟ್ ಟಾಸ್ಕ್ ಶೇಡರ್ನ ಎಷ್ಟು ಸ್ಥಳೀಯ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಬೇಕು ಎಂದು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ನೀವು ಟಾಸ್ಕ್ ಶೇಡರ್ ಅನ್ನು ಬಳಸದಿದ್ದರೆ, ಇದು ನೇರವಾಗಿ ಮೆಶ್ ಶೇಡರ್ ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ.
ಶೇಡರ್ ಕಂಪೈಲೇಶನ್ ಮತ್ತು ಲಿಂಕಿಂಗ್
ಪ್ರಕ್ರಿಯೆಯು ಸಾಂಪ್ರದಾಯಿಕ GLSL ಗೆ ಹೋಲುತ್ತದೆ, ಆದರೆ ನೀವು `meshShaderExtension.MESH_SHADER_EXT` ಮತ್ತು `meshShaderExtension.TASK_SHADER_EXT` ಪ್ರಕಾರದ ಶೇಡರ್ಗಳನ್ನು ರಚಿಸುತ್ತೀರಿ. ನೀವು ವರ್ಟೆಕ್ಸ್ ಮತ್ತು ಫ್ರಾಗ್ಮೆಂಟ್ ಶೇಡರ್ ಅನ್ನು ಲಿಂಕ್ ಮಾಡುವಂತೆಯೇ ಅವುಗಳನ್ನು ಪ್ರೋಗ್ರಾಂ ಆಗಿ ಒಟ್ಟಿಗೆ ಲಿಂಕ್ ಮಾಡುತ್ತೀರಿ.
ನಿರ್ಣಾಯಕವಾಗಿ, ಎರಡೂ ಶೇಡರ್ಗಳಿಗಾಗಿ ನಿಮ್ಮ GLSL ಮೂಲ ಕೋಡ್ ವಿಸ್ತರಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನಿರ್ದೇಶನದೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗಬೇಕು:
#extension GL_EXT_mesh_shader : require
ಕಾರ್ಯಕ್ಷಮತೆಯ ಪರಿಗಣನೆಗಳು ಮತ್ತು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು
- ಸರಿಯಾದ ವರ್ಕ್ಗ್ರೂಪ್ ಗಾತ್ರವನ್ನು ಆರಿಸಿ: ನಿಮ್ಮ ಶೇಡರ್ನಲ್ಲಿನ `layout(local_size_x = N)` ನಿರ್ಣಾಯಕವಾಗಿದೆ. 32 ಅಥವಾ 64 ರ ಗಾತ್ರವು ಸಾಮಾನ್ಯವಾಗಿ ಉತ್ತಮ ಆರಂಭಿಕ ಹಂತವಾಗಿದೆ, ಏಕೆಂದರೆ ಇದು ಆಧಾರವಾಗಿರುವ ಹಾರ್ಡ್ವೇರ್ ವಾಸ್ತುಶಿಲ್ಪಗಳೊಂದಿಗೆ ಚೆನ್ನಾಗಿ ಹೊಂದಿಕೊಳ್ಳುತ್ತದೆ, ಆದರೆ ನಿಮ್ಮ ನಿರ್ದಿಷ್ಟ ಕೆಲಸದ ಹೊರೆಗೆ ಸೂಕ್ತವಾದ ಗಾತ್ರವನ್ನು ಕಂಡುಹಿಡಿಯಲು ಯಾವಾಗಲೂ ಪ್ರೊಫೈಲ್ ಮಾಡಿ.
- ನಿಮ್ಮ ಟಾಸ್ಕ್ ಶೇಡರ್ ಅನ್ನು ಹಗುರವಾಗಿಡಿ: ಟಾಸ್ಕ್ ಶೇಡರ್ ಒಂದು ಶಕ್ತಿಯುತ ಸಾಧನವಾಗಿದೆ, ಆದರೆ ಇದು ಸಂಭಾವ್ಯ ಅಡಚಣೆಯೂ ಆಗಿದೆ. ನೀವು ಇಲ್ಲಿ ನಿರ್ವಹಿಸುವ ಕಲಿಂಗ್ ಮತ್ತು ತರ್ಕವು ಸಾಧ್ಯವಾದಷ್ಟು ದಕ್ಷವಾಗಿರಬೇಕು. ಅವುಗಳನ್ನು ಪೂರ್ವ-ಲೆಕ್ಕಾಚಾರ ಮಾಡಬಹುದಾದರೆ ನಿಧಾನ, ಸಂಕೀರ್ಣ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ತಪ್ಪಿಸಿ.
- ಮೆಶ್ಲೆಟ್ ಗಾತ್ರವನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡಿ: ಪ್ರತಿ ಮೆಶ್ಲೆಟ್ಗೆ ವರ್ಟಿಸಸ್ ಮತ್ತು ಪ್ರಿಮಿಟಿವ್ಗಳ ಸಂಖ್ಯೆಗೆ ಹಾರ್ಡ್ವೇರ್-ಅವಲಂಬಿತ ಸ್ವೀಟ್ ಸ್ಪಾಟ್ ಇದೆ. ನೀವು ಘೋಷಿಸುವ `max_vertices` ಮತ್ತು `max_primitives` ಅನ್ನು ಎಚ್ಚರಿಕೆಯಿಂದ ಆಯ್ಕೆ ಮಾಡಬೇಕು. ತುಂಬಾ ಚಿಕ್ಕದಾಗಿದ್ದರೆ, ವರ್ಕ್ಗ್ರೂಪ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುವ ಓವರ್ಹೆಡ್ ಪ್ರಾಬಲ್ಯ ಸಾಧಿಸುತ್ತದೆ. ತುಂಬಾ ದೊಡ್ಡದಾಗಿದ್ದರೆ, ನೀವು ಸಮಾನಾಂತರತೆ ಮತ್ತು ಕ್ಯಾಶ್ ದಕ್ಷತೆಯನ್ನು ಕಳೆದುಕೊಳ್ಳುತ್ತೀರಿ.
- ಡೇಟಾ ಸುಸಂಬದ್ಧತೆ ಮುಖ್ಯ: ಟಾಸ್ಕ್ ಶೇಡರ್ನಲ್ಲಿ ಕಲಿಂಗ್ ಮಾಡುವಾಗ, ಸುಸಂಬದ್ಧ ಪ್ರವೇಶ ಮಾದರಿಗಳನ್ನು ಉತ್ತೇಜಿಸಲು ನಿಮ್ಮ ಬೌಂಡಿಂಗ್ ವಾಲ್ಯೂಮ್ ಡೇಟಾವನ್ನು ಮೆಮೊರಿಯಲ್ಲಿ ಜೋಡಿಸಿ. ಇದು ಜಿಪಿಯು ಕ್ಯಾಶ್ಗಳು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಕೆಲಸ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.
- ಅವುಗಳನ್ನು ಯಾವಾಗ ತಪ್ಪಿಸಬೇಕು ಎಂದು ತಿಳಿಯಿರಿ: ಮೆಶ್ ಶೇಡರ್ಗಳು ಮ್ಯಾಜಿಕ್ ಬುಲೆಟ್ ಅಲ್ಲ. ಬೆರಳೆಣಿಕೆಯಷ್ಟು ಸರಳ ವಸ್ತುಗಳನ್ನು ರೆಂಡರಿಂಗ್ ಮಾಡಲು, ಮೆಶ್ ಪೈಪ್ಲೈನ್ನ ಓವರ್ಹೆಡ್ ಸಾಂಪ್ರದಾಯಿಕ ವರ್ಟೆಕ್ಸ್ ಪೈಪ್ಲೈನ್ಗಿಂತ ನಿಧಾನವಾಗಿರಬಹುದು. ಅವುಗಳ ಸಾಮರ್ಥ್ಯಗಳು ಎಲ್ಲಿ ಹೊಳೆಯುತ್ತವೆಯೋ ಅಲ್ಲಿ ಅವುಗಳನ್ನು ಬಳಸಿ: ಬೃಹತ್ ವಸ್ತುಗಳ ಸಂಖ್ಯೆಗಳು, ಸಂಕೀರ್ಣ ಪ್ರೊಸಿಜರಲ್ ಉತ್ಪಾದನೆ, ಮತ್ತು ಜಿಪಿಯು-ಚಾಲಿತ ಕೆಲಸದ ಹೊರೆಗಳು.
ತೀರ್ಮಾನ: ವೆಬ್ನಲ್ಲಿ ರಿಯಲ್-ಟೈಮ್ ಗ್ರಾಫಿಕ್ಸ್ನ ಭವಿಷ್ಯ ಈಗ ಇಲ್ಲಿದೆ
ಟಾಸ್ಕ್ ಆಂಪ್ಲಿಫಿಕೇಶನ್ನೊಂದಿಗೆ ಮೆಶ್ ಶೇಡರ್ ಪೈಪ್ಲೈನ್ ಕಳೆದ ದಶಕದಲ್ಲಿ ರಿಯಲ್-ಟೈಮ್ ಗ್ರಾಫಿಕ್ಸ್ನಲ್ಲಿನ ಅತ್ಯಂತ ಮಹತ್ವದ ಪ್ರಗತಿಗಳಲ್ಲಿ ಒಂದನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಕಠಿಣ, ಸಿಪಿಯು-ನಿರ್ವಹಣೆಯ ಪ್ರಕ್ರಿಯೆಯಿಂದ ಹೊಂದಿಕೊಳ್ಳುವ, ಜಿಪಿಯು-ಚಾಲಿತ ಪ್ರಕ್ರಿಯೆಗೆ ಮಾದರಿಯನ್ನು ಬದಲಾಯಿಸುವ ಮೂಲಕ, ಇದು ಜ್ಯಾಮಿತೀಯ ಸಂಕೀರ್ಣತೆ ಮತ್ತು ದೃಶ್ಯ ಪ್ರಮಾಣಕ್ಕೆ ಹಿಂದಿನ ಅಡೆತಡೆಗಳನ್ನು ಒಡೆಯುತ್ತದೆ.
ಈ ತಂತ್ರಜ್ಞಾನವು, ವಲ್ಕನ್, ಡೈರೆಕ್ಟ್ಎಕ್ಸ್ 12 ಅಲ್ಟಿಮೇಟ್, ಮತ್ತು ಮೆಟಲ್ನಂತಹ ಆಧುನಿಕ ಗ್ರಾಫಿಕ್ಸ್ API ಗಳ ದಿಕ್ಕಿನೊಂದಿಗೆ ಹೊಂದಿಕೊಂಡಿದೆ, ಇನ್ನು ಮುಂದೆ ಉನ್ನತ-ಮಟ್ಟದ ನೇಟಿವ್ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಸೀಮಿತವಾಗಿಲ್ಲ. WebGL ನಲ್ಲಿ ಅದರ ಆಗಮನವು ಹಿಂದೆಂದಿಗಿಂತಲೂ ಹೆಚ್ಚು ವಿವರವಾದ, ಕ್ರಿಯಾತ್ಮಕ ಮತ್ತು ತಲ್ಲೀನಗೊಳಿಸುವ ವೆಬ್-ಆಧಾರಿತ ಅನುಭವಗಳ ಹೊಸ ಯುಗಕ್ಕೆ ಬಾಗಿಲು ತೆರೆಯುತ್ತದೆ. ಈ ಹೊಸ ಮಾದರಿಯನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಲು ಸಿದ್ಧರಿರುವ ಡೆವಲಪರ್ಗಳಿಗೆ, ಸೃಜನಶೀಲ ಸಾಧ್ಯತೆಗಳು ವಾಸ್ತವಿಕವಾಗಿ ಮಿತಿಯಿಲ್ಲ. ಸಂಪೂರ್ಣ ಪ್ರಪಂಚಗಳನ್ನು ಫ್ಲೈನಲ್ಲಿ ಉತ್ಪಾದಿಸುವ ಶಕ್ತಿಯು, ಮೊದಲ ಬಾರಿಗೆ, ಅಕ್ಷರಶಃ ನಿಮ್ಮ ಬೆರಳ ತುದಿಯಲ್ಲಿದೆ, ನೇರವಾಗಿ ವೆಬ್ ಬ್ರೌಸರ್ನೊಳಗೆ.