WebGL ನಲ್ಲಿ ನೈಜ-ಸಮಯದ ನೆರಳು ರೆಂಡರಿಂಗ್ನ ಪ್ರಮುಖ ಪರಿಕಲ್ಪನೆಗಳು ಮತ್ತು ಸುಧಾರಿತ ತಂತ್ರಗಳನ್ನು ತಿಳಿಯಿರಿ. ಈ ಮಾರ್ಗದರ್ಶಿ ನೆರಳು ಮ್ಯಾಪಿಂಗ್, PCF, CSM ಮತ್ತು ಸಾಮಾನ್ಯ ಕಲಾಕೃತಿಗಳಿಗೆ ಪರಿಹಾರಗಳನ್ನು ಒಳಗೊಂಡಿದೆ.
WebGL ನೆರಳು ಮ್ಯಾಪಿಂಗ್: ನೈಜ-ಸಮಯದ ರೆಂಡರಿಂಗ್ಗೆ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ
3D ಕಂಪ್ಯೂಟರ್ ಗ್ರಾಫಿಕ್ಸ್ ಜಗತ್ತಿನಲ್ಲಿ, ನೆರಳುಗಳಿಗಿಂತ ವಾಸ್ತವತೆ ಮತ್ತು ತಲ್ಲೀನತೆಗೆ ಕೆಲವು ಅಂಶಗಳು ಹೆಚ್ಚು ಕೊಡುಗೆ ನೀಡುತ್ತವೆ. ಅವು ವಸ್ತುಗಳ ನಡುವಿನ ಪ್ರಾದೇಶಿಕ ಸಂಬಂಧಗಳು, ಬೆಳಕಿನ ಮೂಲಗಳ ಸ್ಥಳ ಮತ್ತು ದೃಶ್ಯದ ಒಟ್ಟಾರೆ ಜ್ಯಾಮಿತಿಯ ಬಗ್ಗೆ ನಿರ್ಣಾಯಕ ದೃಶ್ಯ ಸೂಚನೆಗಳನ್ನು ಒದಗಿಸುತ್ತವೆ. ನೆರಳುಗಳಿಲ್ಲದೆ, 3D ಪ್ರಪಂಚಗಳು ಚಪ್ಪಟೆಯಾಗಿ, ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡಂತೆ ಮತ್ತು ಕೃತಕವಾಗಿ ಕಾಣಿಸಬಹುದು. WebGL ನಿಂದ ಚಾಲಿತವಾಗುವ ವೆಬ್-ಆಧಾರಿತ 3D ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ, ಉತ್ತಮ-ಗುಣಮಟ್ಟದ, ನೈಜ-ಸಮಯದ ನೆರಳುಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದು ವೃತ್ತಿಪರ-ದರ್ಜೆಯ ಅನುಭವಗಳ ಸಂಕೇತವಾಗಿದೆ. ಈ ಮಾರ್ಗದರ್ಶಿ ಇದನ್ನು ಸಾಧಿಸಲು ಅತ್ಯಂತ ಮೂಲಭೂತ ಮತ್ತು ವ್ಯಾಪಕವಾಗಿ ಬಳಸಲಾಗುವ ತಂತ್ರಕ್ಕೆ ಆಳವಾದ ಡೈವ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ: ನೆರಳು ಮ್ಯಾಪಿಂಗ್.
ನೀವು ಅನುಭವಿ ಗ್ರಾಫಿಕ್ಸ್ ಪ್ರೋಗ್ರಾಮರ್ ಆಗಿರಲಿ ಅಥವಾ ಮೂರನೇ ಆಯಾಮಕ್ಕೆ ಕಾಲಿಡುತ್ತಿರುವ ವೆಬ್ ಡೆವಲಪರ್ ಆಗಿರಲಿ, ಈ ಲೇಖನವು ನಿಮ್ಮ WebGL ಯೋಜನೆಗಳಲ್ಲಿ ನೈಜ-ಸಮಯದ ನೆರಳುಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು, ಕಾರ್ಯಗತಗೊಳಿಸಲು ಮತ್ತು ನಿವಾರಿಸಲು ಜ್ಞಾನವನ್ನು ನಿಮಗೆ ನೀಡುತ್ತದೆ. ನಾವು ಮೂಲ ಸಿದ್ಧಾಂತದಿಂದ ಪ್ರಾಯೋಗಿಕ ಅನುಷ್ಠಾನ ವಿವರಗಳವರೆಗೆ ಪ್ರಯಾಣಿಸುತ್ತೇವೆ, ಸಾಮಾನ್ಯ ಅಪಾಯಗಳು ಮತ್ತು ಆಧುನಿಕ ಗ್ರಾಫಿಕ್ಸ್ ಎಂಜಿನ್ಗಳಲ್ಲಿ ಬಳಸಲಾಗುವ ಸುಧಾರಿತ ತಂತ್ರಗಳನ್ನು ಅನ್ವೇಷಿಸುತ್ತೇವೆ.
ಅಧ್ಯಾಯ 1: ನೆರಳು ಮ್ಯಾಪಿಂಗ್ನ ಮೂಲಭೂತ ಅಂಶಗಳು
ಇದರ ಹೃದಯಭಾಗದಲ್ಲಿ, ನೆರಳು ಮ್ಯಾಪಿಂಗ್ ಒಂದು ಬುದ್ಧಿವಂತ ಮತ್ತು ಸೊಗಸಾದ ತಂತ್ರವಾಗಿದ್ದು, ದೃಶ್ಯದಲ್ಲಿನ ಒಂದು ಬಿಂದುವು ನೆರಳಿನಲ್ಲಿದೆಯೇ ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ, ಸರಳವಾದ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳುವ ಮೂಲಕ: "ಈ ಬಿಂದುವನ್ನು ಬೆಳಕಿನ ಮೂಲದಿಂದ ನೋಡಬಹುದೇ?" ಉತ್ತರ ಇಲ್ಲ ಎಂದಾದರೆ, ಏನೋ ಬೆಳಕನ್ನು ತಡೆಯುತ್ತಿದೆ ಮತ್ತು ಬಿಂದುವು ನೆರಳಿನಲ್ಲಿರಬೇಕು ಎಂದರ್ಥ. ಈ ಪ್ರಶ್ನೆಗೆ ಪ್ರೋಗ್ರಾಮಿಕ್ ಆಗಿ ಉತ್ತರಿಸಲು, ನಾವು ಎರಡು-ಹಂತದ ರೆಂಡರಿಂಗ್ ವಿಧಾನವನ್ನು ಬಳಸುತ್ತೇವೆ.
ನೆರಳು ಮ್ಯಾಪಿಂಗ್ ಎಂದರೇನು? ಪ್ರಮುಖ ಪರಿಕಲ್ಪನೆ
ಸಂಪೂರ್ಣ ತಂತ್ರವು ದೃಶ್ಯವನ್ನು ಎರಡು ಬಾರಿ ರೆಂಡರ್ ಮಾಡುವ ಸುತ್ತ ಸುತ್ತುತ್ತದೆ, ಪ್ರತಿ ಬಾರಿ ವಿಭಿನ್ನ ದೃಷ್ಟಿಕೋನದಿಂದ:
- ಹಂತ 1: ಆಳದ ಹಂತ (ಬೆಳಕಿನ ದೃಷ್ಟಿಕೋನ). ಮೊದಲಿಗೆ, ನಾವು ಸಂಪೂರ್ಣ ದೃಶ್ಯವನ್ನು ಬೆಳಕಿನ ಮೂಲದ ನಿಖರವಾದ ಸ್ಥಾನ ಮತ್ತು ದೃಷ್ಟಿಕೋನದಿಂದ ರೆಂಡರ್ ಮಾಡುತ್ತೇವೆ. ಆದಾಗ್ಯೂ, ಈ ಹಂತದಲ್ಲಿ ನಾವು ಬಣ್ಣಗಳು ಅಥವಾ ಟೆಕಶ್ಚರ್ಗಳ ಬಗ್ಗೆ ಕಾಳಜಿ ವಹಿಸುವುದಿಲ್ಲ. ನಮಗೆ ಬೇಕಾಗಿರುವುದು ಆಳದ ಮಾಹಿತಿ ಮಾತ್ರ. ರೆಂಡರ್ ಮಾಡಲಾದ ಪ್ರತಿಯೊಂದು ವಸ್ತುವಿಗೆ, ನಾವು ಬೆಳಕಿನ ಮೂಲದಿಂದ ಅದರ ದೂರವನ್ನು ದಾಖಲಿಸುತ್ತೇವೆ. ಆಳದ ಮೌಲ್ಯಗಳ ಈ ಸಂಗ್ರಹವನ್ನು ನೆರಳು ನಕ್ಷೆ ಅಥವಾ ಆಳದ ನಕ್ಷೆ ಎಂಬ ವಿಶೇಷ ಟೆಕಶ್ಚರ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಈ ನಕ್ಷೆಯಲ್ಲಿನ ಪ್ರತಿಯೊಂದು ಪಿಕ್ಸೆಲ್ ನಿರ್ದಿಷ್ಟ ದಿಕ್ಕಿನಲ್ಲಿ ಬೆಳಕಿನ ದೃಷ್ಟಿಕೋನದಿಂದ ಹತ್ತಿರದ ವಸ್ತುವಿಗೆ ಇರುವ ದೂರವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ.
- ಹಂತ 2: ಸೀನ್ ಪಾಸ್ (ಕ್ಯಾಮೆರಾದ ದೃಷ್ಟಿಕೋನ). ಮುಂದೆ, ಮುಖ್ಯ ಕ್ಯಾಮೆರಾದ ದೃಷ್ಟಿಕೋನದಿಂದ ನಾವು ಸಾಮಾನ್ಯವಾಗಿ ಮಾಡುವಂತೆ ದೃಶ್ಯವನ್ನು ರೆಂಡರ್ ಮಾಡುತ್ತೇವೆ. ಆದರೆ ಚಿತ್ರಿಸುವ ಪ್ರತಿಯೊಂದು ಪಿಕ್ಸೆಲ್ಗೆ, ನಾವು ಹೆಚ್ಚುವರಿ ಲೆಕ್ಕಾಚಾರವನ್ನು ಮಾಡುತ್ತೇವೆ. ನಾವು 3D ಜಾಗದಲ್ಲಿ ಆ ಪಿಕ್ಸೆಲ್ನ ಸ್ಥಾನವನ್ನು ನಿರ್ಧರಿಸುತ್ತೇವೆ ಮತ್ತು ನಂತರ ಕೇಳುತ್ತೇವೆ: "ಈ ಬಿಂದುವು ಬೆಳಕಿನ ಮೂಲದಿಂದ ಎಷ್ಟು ದೂರದಲ್ಲಿದೆ?" ನಂತರ ನಾವು ಈ ದೂರವನ್ನು ನಮ್ಮ ನೆರಳು ನಕ್ಷೆಯಲ್ಲಿ (ಹಂತ 1 ರಿಂದ) ಅನುಗುಣವಾದ ಸ್ಥಳದಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾದ ಮೌಲ್ಯಕ್ಕೆ ಹೋಲಿಸುತ್ತೇವೆ.
ತರ್ಕ ಸರಳವಾಗಿದೆ:
- ಬೆಳಕಿನಿಂದ ಪಿಕ್ಸೆಲ್ನ ಪ್ರಸ್ತುತ ದೂರವು ನೆರಳು ನಕ್ಷೆಯಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ದೂರಕ್ಕಿಂತ ಹೆಚ್ಚಿನದಾಗಿದ್ದರೆ, ಅದೇ ದೃಷ್ಟಿ ರೇಖೆಯ ಉದ್ದಕ್ಕೂ ಬೆಳಕಿಗೆ ಹತ್ತಿರವಿರುವ ಮತ್ತೊಂದು ವಸ್ತುವಿದೆ ಎಂದರ್ಥ. ಆದ್ದರಿಂದ, ಪ್ರಸ್ತುತ ಪಿಕ್ಸೆಲ್ ನೆರಳಿನಲ್ಲಿದೆ.
- ಪಿಕ್ಸೆಲ್ನ ಅಂತರವು ನೆರಳು ನಕ್ಷೆಯಲ್ಲಿನ ಅಂತರಕ್ಕಿಂತ ಕಡಿಮೆ ಅಥವಾ ಸಮಾನವಾಗಿದ್ದರೆ, ಅದನ್ನು ಯಾವುದೂ ತಡೆಯುತ್ತಿಲ್ಲ ಎಂದರ್ಥ ಮತ್ತು ಪಿಕ್ಸೆಲ್ ಸಂಪೂರ್ಣವಾಗಿ ಬೆಳಗುತ್ತದೆ.
ದೃಶ್ಯವನ್ನು ಹೊಂದಿಸುವುದು
WebGL ನಲ್ಲಿ ನೆರಳು ಮ್ಯಾಪಿಂಗ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು, ನಿಮಗೆ ಹಲವಾರು ಪ್ರಮುಖ ಘಟಕಗಳು ಬೇಕಾಗುತ್ತವೆ:
- ಬೆಳಕಿನ ಮೂಲ: ಇದು ನಿರ್ದೇಶನ ಬೆಳಕು (ಸೂರ್ಯನಂತೆ), ಪಾಯಿಂಟ್ ಲೈಟ್ (ಲೈಟ್ಬಲ್ಬ್ನಂತೆ) ಅಥವಾ ಸ್ಪಾಟ್ಲೈಟ್ ಆಗಿರಬಹುದು. ಬೆಳಕಿನ ಪ್ರಕಾರವು ಆಳದ ಹಂತದಲ್ಲಿ ಬಳಸಲಾದ ಪ್ರೊಜೆಕ್ಷನ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಪ್ರಕಾರವನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ.
- ಫ್ರೇಮ್ಬಫರ್ ಆಬ್ಜೆಕ್ಟ್ (FBO): WebGL ಸಾಮಾನ್ಯವಾಗಿ ಪರದೆಯ ಡೀಫಾಲ್ಟ್ ಫ್ರೇಮ್ಬಫರ್ಗೆ ರೆಂಡರ್ ಮಾಡುತ್ತದೆ. ನಮ್ಮ ನೆರಳು ನಕ್ಷೆಯನ್ನು ರಚಿಸಲು, ನಮಗೆ ಆಫ್-ಸ್ಕ್ರೀನ್ ರೆಂಡರ್ ಟಾರ್ಗೆಟ್ ಅಗತ್ಯವಿದೆ. FBO ಪರದೆಯ ಬದಲಿಗೆ ಟೆಕಶ್ಚರ್ಗೆ ರೆಂಡರ್ ಮಾಡಲು ನಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ನಮ್ಮ FBO ಅನ್ನು ಆಳದ ಟೆಕಶ್ಚರ್ ಲಗತ್ತಿಸುವಿಕೆಯೊಂದಿಗೆ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗುತ್ತದೆ.
- ಶೇಡರ್ಗಳ ಎರಡು ಸೆಟ್ಗಳು: ಆಳದ ಹಂತಕ್ಕಾಗಿ (ತುಂಬಾ ಸರಳವಾದದ್ದು) ಮತ್ತು ಅಂತಿಮ ಸೀನ್ ಪಾಸ್ಗಾಗಿ (ನೆರಳು ಲೆಕ್ಕಾಚಾರದ ತರ್ಕವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ) ನಿಮಗೆ ಒಂದು ಶೇಡರ್ ಪ್ರೋಗ್ರಾಂ ಅಗತ್ಯವಿದೆ.
- ಮ್ಯಾಟ್ರಿಸಸ್: ಕ್ಯಾಮೆರಾಕ್ಕಾಗಿ ನಿಮಗೆ ಪ್ರಮಾಣಿತ ಮಾದರಿ, ವೀಕ್ಷಣೆ ಮತ್ತು ಪ್ರೊಜೆಕ್ಷನ್ ಮ್ಯಾಟ್ರಿಸಸ್ ಅಗತ್ಯವಿದೆ. ನಿರ್ಣಾಯಕವಾಗಿ, ನಿಮಗೆ ಬೆಳಕಿನ ಮೂಲಕ್ಕಾಗಿ ವೀಕ್ಷಣೆ ಮತ್ತು ಪ್ರೊಜೆಕ್ಷನ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಸಹ ಬೇಕಾಗುತ್ತದೆ, ಇದನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಒಂದೇ "ಬೆಳಕಿನ ಜಾಗದ ಮ್ಯಾಟ್ರಿಕ್ಸ್" ಆಗಿ ಸಂಯೋಜಿಸಲಾಗುತ್ತದೆ.
ಅಧ್ಯಾಯ 2: ಎರಡು-ಹಂತದ ರೆಂಡರಿಂಗ್ ಪೈಪ್ಲೈನ್ ವಿವರವಾಗಿ
ಮ್ಯಾಟ್ರಿಸಸ್ ಮತ್ತು ಶೇಡರ್ಗಳ ಪಾತ್ರಗಳ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸಿ, ಎರಡು ರೆಂಡರಿಂಗ್ ಹಂತಗಳನ್ನು ಹಂತ ಹಂತವಾಗಿ ವಿಭಜಿಸೋಣ.
ಹಂತ 1: ಆಳದ ಹಂತ (ಬೆಳಕಿನ ದೃಷ್ಟಿಕೋನದಿಂದ)
ಈ ಹಂತದ ಗುರಿ ನಮ್ಮ ಆಳದ ಟೆಕಶ್ಚರ್ ಅನ್ನು ತುಂಬುವುದು. ಇದು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದು ಇಲ್ಲಿದೆ:
- FBO ಅನ್ನು ಬಂಧಿಸಿ: ಚಿತ್ರಿಸುವ ಮೊದಲು, ಕ್ಯಾನ್ವಾಸ್ ಬದಲಿಗೆ ನಿಮ್ಮ ಕಸ್ಟಮ್ FBO ಗೆ ರೆಂಡರ್ ಮಾಡಲು WebGL ಗೆ ಸೂಚಿಸಿ.
- ವೀಕ್ಷಣಾ ಪೋರ್ಟ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ: ನಿಮ್ಮ ನೆರಳು ನಕ್ಷೆ ಟೆಕಶ್ಚರ್ನ ಗಾತ್ರಕ್ಕೆ ಸರಿಹೊಂದುವಂತೆ ವೀಕ್ಷಣಾ ಪೋರ್ಟ್ ಆಯಾಮಗಳನ್ನು ಹೊಂದಿಸಿ (ಉದಾಹರಣೆಗೆ, 1024x1024 ಪಿಕ್ಸೆಲ್ಗಳು).
- ಆಳದ ಬಫರ್ ಅನ್ನು ತೆರವುಗೊಳಿಸಿ: ರೆಂಡರ್ ಮಾಡುವ ಮೊದಲು FBO ನ ಆಳದ ಬಫರ್ ಅನ್ನು ತೆರವುಗೊಳಿಸಲಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
- ಬೆಳಕಿನ ಮ್ಯಾಟ್ರಿಸಸ್ ಅನ್ನು ರಚಿಸಿ:
- ಬೆಳಕಿನ ವೀಕ್ಷಣಾ ಮ್ಯಾಟ್ರಿಕ್ಸ್: ಈ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಜಗತ್ತನ್ನು ಬೆಳಕಿನ ದೃಷ್ಟಿಕೋನಕ್ಕೆ ಪರಿವರ್ತಿಸುತ್ತದೆ. ನಿರ್ದೇಶನ ಬೆಳಕಿಗೆ, ಇದನ್ನು ಸಾಮಾನ್ಯವಾಗಿ `lookAt` ಕಾರ್ಯದೊಂದಿಗೆ ರಚಿಸಲಾಗುತ್ತದೆ, ಅಲ್ಲಿ "ಕಣ್ಣು" ಬೆಳಕಿನ ಸ್ಥಾನ ಮತ್ತು "ಗುರಿ" ಅದು ತೋರಿಸುತ್ತಿರುವ ದಿಕ್ಕು.
- ಬೆಳಕಿನ ಪ್ರೊಜೆಕ್ಷನ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್: ಸಮಾನಾಂತರ ಕಿರಣಗಳನ್ನು ಹೊಂದಿರುವ ನಿರ್ದೇಶನ ಬೆಳಕಿಗೆ, ಆರ್ಥೋಗ್ರಾಫಿಕ್ ಪ್ರೊಜೆಕ್ಷನ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಪಾಯಿಂಟ್ ಲೈಟ್ಗಳು ಅಥವಾ ಸ್ಪಾಟ್ಲೈಟ್ಗಳಿಗಾಗಿ, ದೃಷ್ಟಿಕೋನ ಪ್ರೊಜೆಕ್ಷನ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಈ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ನೆರಳುಗಳನ್ನು ಬಿತ್ತರಿಸುವ ಜಾಗದಲ್ಲಿನ ಪರಿಮಾಣವನ್ನು (ಬಾಕ್ಸ್ ಅಥವಾ ಫ್ರಸ್ಟಮ್) ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ.
- ಆಳದ ಶೇಡರ್ ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ಬಳಸಿ: ಇದು ಕನಿಷ್ಠ ಶೇಡರ್ ಆಗಿದೆ. ಶೃಂಗ ಶೇಡರ್ನ ಏಕೈಕ ಕೆಲಸವೆಂದರೆ ಬೆಳಕಿನ ವೀಕ್ಷಣೆ ಮತ್ತು ಪ್ರೊಜೆಕ್ಷನ್ ಮ್ಯಾಟ್ರಿಸಸ್ಗಳಿಂದ ಶೃಂಗ ಸ್ಥಾನವನ್ನು ಗುಣಿಸುವುದು. ತುಣುಕು ಶೇಡರ್ ಇನ್ನಷ್ಟು ಸರಳವಾಗಿದೆ: ಇದು ಕೇವಲ ತುಣುಕಿನ ಆಳದ ಮೌಲ್ಯವನ್ನು (ಅದರ z-ನಿರ್ದೇಶಾಂಕ) ಆಳದ ಟೆಕಶ್ಚರ್ಗೆ ಬರೆಯುತ್ತದೆ. ಆಧುನಿಕ WebGL ನಲ್ಲಿ, ಕಸ್ಟಮ್ ತುಣುಕು ಶೇಡರ್ ಸಹ ನಿಮಗೆ ಅಗತ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ FBO ಅನ್ನು ಆಳದ ಬಫರ್ ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೆರೆಹಿಡಿಯಲು ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದು.
- ದೃಶ್ಯವನ್ನು ರೆಂಡರ್ ಮಾಡಿ: ನಿಮ್ಮ ದೃಶ್ಯದಲ್ಲಿ ನೆರಳು-ಬಿತ್ತರಿಸುವ ಎಲ್ಲಾ ವಸ್ತುಗಳನ್ನು ಎಳೆಯಿರಿ. FBO ಈಗ ನಮ್ಮ ಪೂರ್ಣಗೊಂಡ ನೆರಳು ನಕ್ಷೆಯನ್ನು ಒಳಗೊಂಡಿದೆ.
ಹಂತ 2: ಸೀನ್ ಪಾಸ್ (ಕ್ಯಾಮೆರಾದ ದೃಷ್ಟಿಕೋನದಿಂದ)
ಈಗ ನಾವು ಅಂತಿಮ ಚಿತ್ರವನ್ನು ರೆಂಡರ್ ಮಾಡುತ್ತೇವೆ, ನೆರಳುಗಳನ್ನು ನಿರ್ಧರಿಸಲು ನಾವು ರಚಿಸಿದ ನೆರಳು ನಕ್ಷೆಯನ್ನು ಬಳಸುತ್ತೇವೆ.
- FBO ಅನ್ನು ಬಿಚ್ಚಿ: ಡೀಫಾಲ್ಟ್ ಕ್ಯಾನ್ವಾಸ್ ಫ್ರೇಮ್ಬಫರ್ಗೆ ರೆಂಡರ್ ಮಾಡಲು ಹಿಂತಿರುಗಿ.
- ವೀಕ್ಷಣಾ ಪೋರ್ಟ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ: ವೀಕ್ಷಣಾ ಪೋರ್ಟ್ ಅನ್ನು ಕ್ಯಾನ್ವಾಸ್ ಆಯಾಮಗಳಿಗೆ ಹಿಂತಿರುಗಿಸಿ.
- ಪರದೆಯನ್ನು ತೆರವುಗೊಳಿಸಿ: ಕ್ಯಾನ್ವಾಸ್ನ ಬಣ್ಣ ಮತ್ತು ಆಳದ ಬಫರ್ಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ.
- ಸೀನ್ ಶೇಡರ್ ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ಬಳಸಿ: ಇಲ್ಲಿ ಮ್ಯಾಜಿಕ್ ಸಂಭವಿಸುತ್ತದೆ. ಈ ಶೇಡರ್ ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾಗಿದೆ.
- ಶೃಂಗ ಶೇಡರ್: ಈ ಶೇಡರ್ ಎರಡು ಕೆಲಸಗಳನ್ನು ಮಾಡಬೇಕು. ಮೊದಲನೆಯದಾಗಿ, ಕ್ಯಾಮೆರಾದ ಮಾದರಿ, ವೀಕ್ಷಣೆ ಮತ್ತು ಪ್ರೊಜೆಕ್ಷನ್ ಮ್ಯಾಟ್ರಿಸಸ್ಗಳನ್ನು ಬಳಸಿ ಎಂದಿನಂತೆ ಅಂತಿಮ ಶೃಂಗ ಸ್ಥಾನವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ. ಎರಡನೆಯದಾಗಿ, ಇದು ಹಂತ 1 ರಿಂದ ಬೆಳಕಿನ ಜಾಗದ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಬೆಳಕಿನ ದೃಷ್ಟಿಕೋನದಿಂದ ಶೃಂಗದ ಸ್ಥಾನವನ್ನು ಸಹ ಲೆಕ್ಕಾಚಾರ ಮಾಡಬೇಕು. ಈ ಎರಡನೇ ನಿರ್ದೇಶಾಂಕವನ್ನು ತುಣುಕು ಶೇಡರ್ಗೆ ವ್ಯತ್ಯಾಸವಾಗಿ ರವಾನಿಸಲಾಗುತ್ತದೆ.
- ತುಣುಕು ಶೇಡರ್: ಇದು ನೆರಳು ತರ್ಕದ ತಿರುಳು. ಪ್ರತಿ ತುಣುಕುಗೆ:
- ಶೃಂಗ ಶೇಡರ್ನಿಂದ ಬೆಳಕಿನ ಜಾಗದಲ್ಲಿ ಮಧ್ಯಂತರ ಸ್ಥಾನವನ್ನು ಸ್ವೀಕರಿಸಿ.
- ಈ ನಿರ್ದೇಶಾಂಕದಲ್ಲಿ ದೃಷ್ಟಿಕೋನ ವಿಭಜನೆ ಮಾಡಿ (x, y, z ಅನ್ನು w ನಿಂದ ಭಾಗಿಸಿ). ಇದು ಅದನ್ನು ಸಾಮಾನ್ಯೀಕರಿಸಿದ ಸಾಧನ ನಿರ್ದೇಶಾಂಕಗಳಿಗೆ (NDC) ಪರಿವರ್ತಿಸುತ್ತದೆ, ಇದು -1 ರಿಂದ 1 ರವರೆಗೆ ಇರುತ್ತದೆ.
- NDC ಯನ್ನು ಟೆಕಶ್ಚರ್ ನಿರ್ದೇಶಾಂಕಗಳಿಗೆ ಪರಿವರ್ತಿಸಿ (ಇದು 0 ರಿಂದ 1 ರವರೆಗೆ ಇರುತ್ತದೆ) ಆದ್ದರಿಂದ ನಾವು ನಮ್ಮ ನೆರಳು ನಕ್ಷೆಯನ್ನು ಮಾದರಿ ಮಾಡಬಹುದು. ಇದು ಸರಳವಾದ ಸ್ಕೇಲ್ ಮತ್ತು ಬಯಾಸ್ ಕಾರ್ಯಾಚರಣೆಯಾಗಿದೆ: `texCoord = ndc * 0.5 + 0.5;`.
- ಹಂತ 1 ರಲ್ಲಿ ರಚಿಸಲಾದ ನೆರಳು ನಕ್ಷೆ ಟೆಕಶ್ಚರ್ ಅನ್ನು ಮಾದರಿ ಮಾಡಲು ಈ ಟೆಕಶ್ಚರ್ ನಿರ್ದೇಶಾಂಕಗಳನ್ನು ಬಳಸಿ. ಇದು ನಮಗೆ `depthFromShadowMap` ಅನ್ನು ನೀಡುತ್ತದೆ.
- ಬೆಳಕಿನ ದೃಷ್ಟಿಕೋನದಿಂದ ತುಣುಕಿನ ಪ್ರಸ್ತುತ ಆಳವು ಪರಿವರ್ತಿತ ಬೆಳಕಿನ ಜಾಗದ ನಿರ್ದೇಶಾಂಕದಿಂದ ಅದರ z-ಘಟಕವಾಗಿದೆ. ಅದನ್ನು `currentDepth` ಎಂದು ಕರೆಯೋಣ.
- ಆಳಗಳನ್ನು ಹೋಲಿಕೆ ಮಾಡಿ: `currentDepth > depthFromShadowMap` ಆಗಿದ್ದರೆ, ತುಣುಕು ನೆರಳಿನಲ್ಲಿದೆ. "ನೆರಳು ಮೊಡವೆ" ಎಂದು ಕರೆಯಲ್ಪಡುವ ಕಲಾಕೃತಿಯನ್ನು ತಪ್ಪಿಸಲು ನಾವು ಈ ಪರಿಶೀಲನೆಗೆ ಸಣ್ಣ ಬಯಾಸ್ ಅನ್ನು ಸೇರಿಸಬೇಕಾಗುತ್ತದೆ, ಅದರ ಬಗ್ಗೆ ನಾವು ಮುಂದೆ ಚರ್ಚಿಸುತ್ತೇವೆ.
- ಹೋಲಿಕೆಯ ಆಧಾರದ ಮೇಲೆ, ನೆರಳು ಅಂಶವನ್ನು ನಿರ್ಧರಿಸಿ (ಉದಾಹರಣೆಗೆ, ಬೆಳಗಿದಕ್ಕೆ 1.0, ನೆರಳಿನಕ್ಕೆ 0.3).
- ಅಂತಿಮ ಬಣ್ಣ ಲೆಕ್ಕಾಚಾರಕ್ಕೆ ಈ ನೆರಳು ಅಂಶವನ್ನು ಅನ್ವಯಿಸಿ (ಉದಾಹರಣೆಗೆ, ಸುತ್ತುವರಿದ ಮತ್ತು ಪ್ರಸರಣ ಬೆಳಕಿನ ಘಟಕಗಳನ್ನು ನೆರಳು ಅಂಶದಿಂದ ಗುಣಿಸಿ).
- ದೃಶ್ಯವನ್ನು ರೆಂಡರ್ ಮಾಡಿ: ದೃಶ್ಯದಲ್ಲಿರುವ ಎಲ್ಲಾ ವಸ್ತುಗಳನ್ನು ಎಳೆಯಿರಿ.
ಅಧ್ಯಾಯ 3: ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಗಳು ಮತ್ತು ಪರಿಹಾರಗಳು
ಮೂಲ ನೆರಳು ಮ್ಯಾಪಿಂಗ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದು ಹಲವಾರು ಸಾಮಾನ್ಯ ದೃಶ್ಯ ಕಲಾಕೃತಿಗಳನ್ನು ತ್ವರಿತವಾಗಿ ಬಹಿರಂಗಪಡಿಸುತ್ತದೆ. ಉತ್ತಮ-ಗುಣಮಟ್ಟದ ಫಲಿತಾಂಶಗಳನ್ನು ಸಾಧಿಸಲು ಅವುಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮತ್ತು ಸರಿಪಡಿಸುವುದು ನಿರ್ಣಾಯಕ.
ನೆರಳು ಮೊಡವೆ (ಸ್ವಯಂ-ನೆರಳಿನ ಕಲಾಕೃತಿಗಳು)
ಸಮಸ್ಯೆ: ಸಂಪೂರ್ಣವಾಗಿ ಬೆಳಗಿರಬೇಕಾದ ಮೇಲ್ಮೈಗಳಲ್ಲಿ ನೀವು ವಿಚಿತ್ರವಾದ, ತಪ್ಪಾದ ಕಪ್ಪು ಗೆರೆಗಳ ಮಾದರಿಗಳನ್ನು ಅಥವಾ ಮೊಯಿರೆ ತರಹದ ಮಾದರಿಗಳನ್ನು ನೋಡಬಹುದು. ಇದನ್ನು "ನೆರಳು ಮೊಡವೆ" ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ನೆರಳು ನಕ್ಷೆಯಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಆಳದ ಮೌಲ್ಯ ಮತ್ತು ಸೀನ್ ಪಾಸ್ ಸಮಯದಲ್ಲಿ ಲೆಕ್ಕಹಾಕಲಾದ ಆಳದ ಮೌಲ್ಯವು ಅದೇ ಮೇಲ್ಮೈಗೆ ಇರುವುದರಿಂದ ಇದು ಸಂಭವಿಸುತ್ತದೆ. ಫ್ಲೋಟಿಂಗ್-ಪಾಯಿಂಟ್ ನಿಖರತೆಗಳು ಮತ್ತು ನೆರಳು ನಕ್ಷೆಯ ಸೀಮಿತ ರೆಸಲ್ಯೂಶನ್ನಿಂದಾಗಿ, ಸಣ್ಣ ದೋಷಗಳು ತುಣುಕು ತಾನೇ ತಾನೇ ಹಿಂದೆ ಇದೆ ಎಂದು ತಪ್ಪಾಗಿ ನಿರ್ಧರಿಸಲು ಕಾರಣವಾಗಬಹುದು, ಇದರ ಪರಿಣಾಮವಾಗಿ ಸ್ವಯಂ-ನೆರಳು ಉಂಟಾಗುತ್ತದೆ.
ಪರಿಹಾರ: ಆಳದ ಬಯಾಸ್. ಹೋಲಿಕೆಗೆ ಮೊದಲು `currentDepth` ಗೆ ಸಣ್ಣ ಬಯಾಸ್ ಅನ್ನು ಪರಿಚಯಿಸುವುದು ಸರಳವಾದ ಪರಿಹಾರವಾಗಿದೆ. ತುಣುಕನ್ನು ಅದು ನಿಜವಾಗಿರುವುದಕ್ಕಿಂತ ಸ್ವಲ್ಪ ಹತ್ತಿರದಲ್ಲಿರುವಂತೆ ಮಾಡುವುದರಿಂದ, ನಾವು ಅದನ್ನು ತನ್ನದೇ ಆದ ನೆರಳಿನಿಂದ "ಹೊರಗೆ" ತಳ್ಳುತ್ತೇವೆ.
float shadow = currentDepth > depthFromShadowMap + bias ? 0.3 : 1.0;
ಸರಿಯಾದ ಬಯಾಸ್ ಮೌಲ್ಯವನ್ನು ಕಂಡುಹಿಡಿಯುವುದು ಸೂಕ್ಷ್ಮವಾದ ಸಮತೋಲನ ಕಾಯ್ದುಕೊಳ್ಳುವ ಕ್ರಿಯೆಯಾಗಿದೆ. ತುಂಬಾ ಚಿಕ್ಕದಾದರೆ, ಮೊಡವೆ ಉಳಿಯುತ್ತದೆ. ತುಂಬಾ ದೊಡ್ಡದಾದರೆ, ನೀವು ಮುಂದಿನ ಸಮಸ್ಯೆಯನ್ನು ಪಡೆಯುತ್ತೀರಿ.
ಪೀಟರ್ ಪ್ಯಾನಿಂಗ್
ಸಮಸ್ಯೆ: ಹಾರಲು ಮತ್ತು ತನ್ನ ನೆರಳನ್ನು ಕಳೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಾದ ಪಾತ್ರದ ಹೆಸರನ್ನು ಇಡಲಾಗಿರುವ ಈ ಕಲಾಕೃತಿಯು ವಸ್ತುವಿನ ನಡುವೆ ಮತ್ತು ಅದರ ನೆರಳಿನ ನಡುವೆ ಗೋಚರಿಸುವ ಅಂತರವಾಗಿ ಪ್ರಕಟವಾಗುತ್ತದೆ. ವಸ್ತುಗಳು ತೇಲುತ್ತಿರುವಂತೆ ಅಥವಾ ಅವು ವಿಶ್ರಮಿಸಬೇಕಾದ ಮೇಲ್ಮೈಗಳಿಂದ ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡಂತೆ ಇದು ಕಾಣುವಂತೆ ಮಾಡುತ್ತದೆ. ಇದು ತುಂಬಾ ದೊಡ್ಡದಾದ ಆಳದ ಬಯಾಸ್ ಅನ್ನು ಬಳಸುವುದರ ನೇರ ಪರಿಣಾಮವಾಗಿದೆ.
ಪರಿಹಾರ: ಸ್ಲೋಪ್-ಸ್ಕೇಲ್ ಆಳದ ಬಯಾಸ್. ಸ್ಥಿರವಾದ ಬಯಾಸ್ಗಿಂತ ಹೆಚ್ಚು ದೃಢವಾದ ಪರಿಹಾರವೆಂದರೆ, ಬೆಳಕಿಗೆ ಸಂಬಂಧಿಸಿದಂತೆ ಮೇಲ್ಮೈಯ ಕಡಿದಾದ ಅನುಪಾತವನ್ನು ಅವಲಂಬಿಸಿ ಬಯಾಸ್ ಅನ್ನು ಮಾಡುವುದು. ಕಡಿದಾದ ಬಹುಭುಜಾಕೃತಿಗಳು ಮೊಡವೆಗೆ ಹೆಚ್ಚು ಒಳಗಾಗುತ್ತವೆ ಮತ್ತು ದೊಡ್ಡ ಬಯಾಸ್ ಅಗತ್ಯವಿದೆ. ಚಪ್ಪಟೆಯಾದ ಬಹುಭುಜಾಕೃತಿಗಳಿಗೆ ಚಿಕ್ಕ ಬಯಾಸ್ ಬೇಕಾಗುತ್ತದೆ. WebGL ಸೇರಿದಂತೆ ಹೆಚ್ಚಿನ ಗ್ರಾಫಿಕ್ಸ್ API ಗಳು ಆಳದ ಹಂತದಲ್ಲಿ ಈ ರೀತಿಯ ಬಯಾಸ್ ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅನ್ವಯಿಸಲು ಕ್ರಿಯಾತ್ಮಕತೆಯನ್ನು ಒದಗಿಸುತ್ತವೆ, ಇದು ಸಾಮಾನ್ಯವಾಗಿ ತುಣುಕು ಶೇಡರ್ನಲ್ಲಿ ಹಸ್ತಚಾಲಿತ ಬಯಾಸ್ಗಿಂತ ಉತ್ತಮವಾಗಿದೆ.
ದೃಷ್ಟಿಕೋನ ಏಲಿಯಾಸಿಂಗ್ (ಜಾಗೆಡ್ ಎಡ್ಜ್ಗಳು)
ಸಮಸ್ಯೆ: ನಿಮ್ಮ ನೆರಳುಗಳ ಅಂಚುಗಳು ಬ್ಲಾಕಿ, ಜಾಗೆಡ್ ಮತ್ತು ಪಿಕ್ಸಲೇಟೆಡ್ ಆಗಿ ಕಾಣುತ್ತವೆ. ಇದು ಏಲಿಯಾಸಿಂಗ್ನ ಒಂದು ರೂಪವಾಗಿದೆ. ನೆರಳು ನಕ್ಷೆಯ ರೆಸಲ್ಯೂಶನ್ ಸೀಮಿತವಾಗಿರುವುದರಿಂದ ಇದು ಸಂಭವಿಸುತ್ತದೆ. ನೆರಳು ನಕ್ಷೆಯಲ್ಲಿನ ಒಂದು ಪಿಕ್ಸೆಲ್ (ಅಥವಾ ಟೆಕ್ಸೆಲ್) ಅಂತಿಮ ದೃಶ್ಯದಲ್ಲಿ ಮೇಲ್ಮೈಯಲ್ಲಿ ದೊಡ್ಡ ಪ್ರದೇಶವನ್ನು ಆವರಿಸಬಹುದು, ವಿಶೇಷವಾಗಿ ಕ್ಯಾಮೆರಾದ ಬಳಿ ಇರುವ ಅಥವಾ ಗ್ರೇಜಿಂಗ್ ಕೋನದಲ್ಲಿ ವೀಕ್ಷಿಸುವ ಮೇಲ್ಮೈಗಳಿಗೆ. ರೆಸಲ್ಯೂಶನ್ನಲ್ಲಿನ ಈ ಹೊಂದಾಣಿಕೆಯು ವಿಶಿಷ್ಟವಾದ ಬ್ಲಾಕಿ ನೋಟಕ್ಕೆ ಕಾರಣವಾಗುತ್ತದೆ.
ಪರಿಹಾರ: ನೆರಳು ನಕ್ಷೆ ರೆಸಲ್ಯೂಶನ್ ಅನ್ನು ಹೆಚ್ಚಿಸುವುದು (ಉದಾಹರಣೆಗೆ, 1024x1024 ರಿಂದ 4096x4096 ಗೆ) ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಆದರೆ ಇದು ಗಮನಾರ್ಹವಾದ ಮೆಮೊರಿ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ವೆಚ್ಚದಲ್ಲಿ ಬರುತ್ತದೆ ಮತ್ತು ಸಮಸ್ಯೆಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಪರಿಹರಿಸುವುದಿಲ್ಲ. ನೈಜ ಪರಿಹಾರಗಳು ಹೆಚ್ಚು ಸುಧಾರಿತ ತಂತ್ರಗಳಲ್ಲಿವೆ.
ಅಧ್ಯಾಯ 4: ಸುಧಾರಿತ ನೆರಳು ಮ್ಯಾಪಿಂಗ್ ತಂತ್ರಗಳು
ಮೂಲ ನೆರಳು ಮ್ಯಾಪಿಂಗ್ ಅಡಿಪಾಯವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಆದರೆ ವೃತ್ತಿಪರ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಅದರ ಮಿತಿಗಳನ್ನು, ವಿಶೇಷವಾಗಿ ಏಲಿಯಾಸಿಂಗ್ ಅನ್ನು ನಿವಾರಿಸಲು ಹೆಚ್ಚು ಅತ್ಯಾಧುನಿಕ ಅಲ್ಗಾರಿದಮ್ಗಳನ್ನು ಬಳಸುತ್ತವೆ.
ಶೇಕಡಾವಾರು-ಹತ್ತಿರದ ಫಿಲ್ಟರಿಂಗ್ (PCF)
ನೆರಳು ಅಂಚುಗಳನ್ನು ಮೃದುಗೊಳಿಸಲು ಮತ್ತು ಏಲಿಯಾಸಿಂಗ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಲು PCF ಅತ್ಯಂತ ಸಾಮಾನ್ಯವಾದ ತಂತ್ರವಾಗಿದೆ. ನೆರಳು ನಕ್ಷೆಯಿಂದ ಒಂದೇ ಮಾದರಿಯನ್ನು ತೆಗೆದುಕೊಳ್ಳುವ ಬದಲು ಮತ್ತು ಬೈನರಿ (ನೆರಳಿನಲ್ಲಿದೆ ಅಥವಾ ನೆರಳಿನಲ್ಲಿಲ್ಲ) ನಿರ್ಧಾರವನ್ನು ತೆಗೆದುಕೊಳ್ಳುವ ಬದಲು, PCF ಗುರಿ ನಿರ್ದೇಶಾಂಕದ ಸುತ್ತಲಿನ ಪ್ರದೇಶದಿಂದ ಬಹು ಮಾದರಿಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ.
ಪರಿಕಲ್ಪನೆ: ಪ್ರತಿ ತುಣುಕುಗೆ, ನಾವು ನೆರಳು ನಕ್ಷೆಯನ್ನು ಒಮ್ಮೆ ಮಾತ್ರವಲ್ಲ, ತುಣುಕಿನ ಪ್ರಕ್ಷೇಪಿತ ಟೆಕಶ್ಚರ್ ನಿರ್ದೇಶಾಂಕದ ಸುತ್ತಲೂ ಗ್ರಿಡ್ ಮಾದರಿಯಲ್ಲಿ (ಉದಾಹರಣೆಗೆ, 3x3 ಅಥವಾ 5x5) ಮಾದರಿ ಮಾಡುತ್ತೇವೆ. ಈ ಮಾದರಿಗಳಲ್ಲಿ ಪ್ರತಿಯೊಂದಕ್ಕೂ, ನಾವು ಆಳದ ಹೋಲಿಕೆಯನ್ನು ಮಾಡುತ್ತೇವೆ. ಅಂತಿಮ ನೆರಳು ಮೌಲ್ಯವು ಈ ಎಲ್ಲಾ ಹೋಲಿಕೆಗಳ ಸರಾಸರಿ ಆಗಿದೆ. ಉದಾಹರಣೆಗೆ, 9 ಮಾದರಿಗಳಲ್ಲಿ 4 ನೆರಳಿನಲ್ಲಿದ್ದರೆ, ತುಣುಕು 4/9 ನೇ ಭಾಗದಷ್ಟು ನೆರಳಿನಲ್ಲಿರುತ್ತದೆ, ಇದರ ಪರಿಣಾಮವಾಗಿ ಮೃದುವಾದ ಪೆನಂಬ್ರಾ (ನೆರಳಿನ ಮೃದುವಾದ ಅಂಚು) ಉಂಟಾಗುತ್ತದೆ.
ಅನುಷ್ಠಾನ: ಇದನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ತುಣುಕು ಶೇಡರ್ನಲ್ಲಿ ಮಾಡಲಾಗುತ್ತದೆ. ಇದು ಸಣ್ಣ ಕರ್ನಲ್ನ ಮೇಲೆ ಪುನರಾವರ್ತಿಸುವ ಲೂಪ್ ಅನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ಪ್ರತಿ ಆಫ್ಸೆಟ್ನಲ್ಲಿ ನೆರಳು ನಕ್ಷೆಯನ್ನು ಮಾದರಿ ಮಾಡುತ್ತದೆ ಮತ್ತು ಫಲಿತಾಂಶಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. WebGL 2 ಯಂತ್ರಾಂಶ ಬೆಂಬಲವನ್ನು ನೀಡುತ್ತದೆ (`texture` ಜೊತೆಗೆ `sampler2DShadow`), ಇದು ಹೋಲಿಕೆ ಮತ್ತು ಫಿಲ್ಟರಿಂಗ್ ಅನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ.
ಪ್ರಯೋಜನ: ಗಟ್ಟಿಯಾದ, ಏಲಿಯಾಸ್ಡ್ ಅಂಚುಗಳನ್ನು ಮೃದುವಾದ, ಮೃದುವಾದವುಗಳೊಂದಿಗೆ ಬದಲಾಯಿಸುವ ಮೂಲಕ ನೆರಳಿನ ಗುಣಮಟ್ಟವನ್ನು ತೀವ್ರವಾಗಿ ಸುಧಾರಿಸುತ್ತದೆ.
ವೆಚ್ಚ: ಪ್ರತಿ ತುಣುಕಿಗೆ ತೆಗೆದುಕೊಳ್ಳುವ ಮಾದರಿಗಳ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ಕಾರ್ಯಕ್ಷಮತೆ ಕಡಿಮೆಯಾಗುತ್ತದೆ.
ಕ್ಯಾಸ್ಕೇಡೆಡ್ ನೆರಳು ನಕ್ಷೆಗಳು (CSM)
CSM ಬಹಳ ದೊಡ್ಡ ದೃಶ್ಯದಲ್ಲಿ ಒಂದೇ ನಿರ್ದೇಶನ ಬೆಳಕಿನ ಮೂಲದಿಂದ (ಸೂರ್ಯನಂತೆ) ನೆರಳುಗಳನ್ನು ರೆಂಡರ್ ಮಾಡಲು ಉದ್ಯಮದ-ಪ್ರಮಾಣಿತ ಪರಿಹಾರವಾಗಿದೆ. ಇದು ದೃಷ್ಟಿಕೋನ ಏಲಿಯಾಸಿಂಗ್ ಸಮಸ್ಯೆಯನ್ನು ನೇರವಾಗಿ ಪರಿಹರಿಸುತ್ತದೆ.
ಪರಿಕಲ್ಪನೆ: ಕ್ಯಾಮೆರಾದ ಬಳಿ ಇರುವ ವಸ್ತುಗಳಿಗೆ ದೂರದಲ್ಲಿರುವ ವಸ್ತುಗಳಿಗಿಂತ ಹೆಚ್ಚಿನ ನೆರಳು ರೆಸಲ್ಯೂಶನ್ ಅಗತ್ಯವಿರುತ್ತದೆ ಎಂಬುದು ಪ್ರಮುಖ ಕಲ್ಪನೆ. CSM ಕ್ಯಾಮೆರಾದ ವೀಕ್ಷಣಾ ಫ್ರಸ್ಟಮ್ ಅನ್ನು ಅದರ ಆಳದ ಉದ್ದಕ್ಕೂ ಹಲವಾರು ವಿಭಾಗಗಳು ಅಥವಾ "ಕ್ಯಾಸ್ಕೇಡ್ಗಳಾಗಿ" ವಿಂಗಡಿಸುತ್ತದೆ. ಪ್ರತ್ಯೇಕವಾದ, ಉತ್ತಮ-ಗುಣಮಟ್ಟದ ನೆರಳು ನಕ್ಷೆಯನ್ನು ನಂತರ ಪ್ರತಿ ಕ್ಯಾಸ್ಕೇಡ್ಗೆ ರೆಂಡರ್ ಮಾಡಲಾಗುತ್ತದೆ. ಕ್ಯಾಮೆರಾಗೆ ಹತ್ತಿರವಿರುವ ಕ್ಯಾಸ್ಕೇಡ್ ಪ್ರಪಂಚದ ಜಾಗದ ಸಣ್ಣ ಪ್ರದೇಶವನ್ನು ಆವರಿಸುತ್ತದೆ ಮತ್ತು ಆದ್ದರಿಂದ ಬಹಳ ಹೆಚ್ಚಿನ ಪರಿಣಾಮಕಾರಿ ರೆಸಲ್ಯೂಶನ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ದೂರದಲ್ಲಿರುವ ಕ್ಯಾಸ್ಕೇಡ್ಗಳು ಅದೇ ಟೆಕಶ್ಚರ್ ಗಾತ್ರದೊಂದಿಗೆ ಕ್ರಮೇಣ ದೊಡ್ಡ ಪ್ರದೇಶಗಳನ್ನು ಆವರಿಸುತ್ತವೆ, ಇದು ಸ್ವೀಕಾರಾರ್ಹವಾಗಿದೆ ಏಕೆಂದರೆ ಆ ವಿವರಗಳು ಆಟಗಾರನಿಗೆ ಕಡಿಮೆ ಗೋಚರಿಸುತ್ತವೆ.
ಅನುಷ್ಠಾನ: ಇದು ಗಮನಾರ್ಹವಾಗಿ ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾಗಿದೆ.
- CPU ನಲ್ಲಿ, ಕ್ಯಾಮೆರಾ ಫ್ರಸ್ಟಮ್ ಅನ್ನು 2-4 ಕ್ಯಾಸ್ಕೇಡ್ಗಳಾಗಿ ವಿಂಗಡಿಸಿ.
- ಪ್ರತಿ ಕ್ಯಾಸ್ಕೇಡ್ಗೆ, ಬೆಳಕಿಗೆ ಬಿಗಿಯಾದ-ಫಿಟ್ಟಿಂಗ್ ಆರ್ಥೋಗ್ರಾಫಿಕ್ ಪ್ರೊಜೆಕ್ಷನ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಿ, ಅದು ಫ್ರಸ್ಟಮ್ನ ಆ ವಿಭಾಗವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಸುತ್ತುವರಿಯುತ್ತದೆ.
- ರೆಂಡರಿಂಗ್ ಲೂಪ್ನಲ್ಲಿ, ಆಳದ ಹಂತವನ್ನು ಹಲವಾರು ಬಾರಿ ನಿರ್ವಹಿಸಿ - ಪ್ರತಿ ಕ್ಯಾಸ್ಕೇಡ್ಗೆ ಒಮ್ಮೆ, ವಿಭಿನ್ನ ನೆರಳು ನಕ್ಷೆಗೆ (ಅಥವಾ ಟೆಕಶ್ಚರ್ ಅಟ್ಲಾಸ್ನ ಪ್ರದೇಶ) ರೆಂಡರ್ ಮಾಡಿ.
- ಅಂತಿಮ ಸೀನ್ ಪಾಸ್ ತುಣುಕು ಶೇಡರ್ನಲ್ಲಿ, ಕ್ಯಾಮೆರಾದಿಂದ ಅದರ ದೂರವನ್ನು ಆಧರಿಸಿ ಪ್ರಸ್ತುತ ತುಣುಕು ಯಾವ ಕ್ಯಾಸ್ಕೇಡ್ಗೆ ಸೇರಿದೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಿ.
- ನೆರಳನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ಸೂಕ್ತವಾದ ಕ್ಯಾಸ್ಕೇಡ್ನ ನೆರಳು ನಕ್ಷೆಯನ್ನು ಮಾದರಿ ಮಾಡಿ.
ಪ್ರಯೋಜನ: ವ್ಯಾಪಕ ಅಂತರಗಳಲ್ಲಿ ಸ್ಥಿರವಾಗಿ ಹೆಚ್ಚಿನ ರೆಸಲ್ಯೂಶನ್ ನೆರಳುಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದು ಹೊರಾಂಗಣ ಪರಿಸರಕ್ಕೆ ಪರಿಪೂರ್ಣವಾಗಿದೆ.
ವೇರಿಯೆನ್ಸ್ ನೆರಳು ನಕ್ಷೆಗಳು (VSM)
VSM ಮೃದುವಾದ ನೆರಳುಗಳನ್ನು ರಚಿಸುವ ಮತ್ತೊಂದು ತಂತ್ರವಾಗಿದೆ, ಆದರೆ ಇದು PCF ಗಿಂತ ವಿಭಿನ್ನ ವಿಧಾನವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ.
ಪರಿಕಲ್ಪನೆ: ನೆರಳು ನಕ್ಷೆಯಲ್ಲಿ ಆಳವನ್ನು ಮಾತ್ರ ಸಂಗ್ರಹಿಸುವ ಬದಲು, VSM ಎರಡು ಮೌಲ್ಯಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ: ಆಳ (ಮೊದಲ ಕ್ಷಣ) ಮತ್ತು ಆಳದ ವರ್ಗ (ಎರಡನೇ ಕ್ಷಣ). ಈ ಎರಡು ಮೌಲ್ಯಗಳು ಆಳದ ವಿತರಣೆಯ ವ್ಯತ್ಯಾಸವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ನಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಚೆಬಿಶೇವ್ನ ಅಸಮಾನತೆ ಎಂಬ ಗಣಿತೀಯ ಸಾಧನವನ್ನು ಬಳಸಿ, ತುಣುಕು ನೆರಳಿನಲ್ಲಿರುವ ಸಂಭವನೀಯತೆಯನ್ನು ನಾವು ಅಂದಾಜು ಮಾಡಬಹುದು. ಪ್ರಮುಖ ಅನುಕೂಲವೆಂದರೆ VSM ಟೆಕಶ್ಚರ್ ಅನ್ನು ಪ್ರಮಾಣಿತ ಯಂತ್ರಾಂಶ-ವೇಗವರ್ಧಿತ ರೇಖೀಯ ಫಿಲ್ಟರಿಂಗ್ ಮತ್ತು ಮಿಪ್ಮ್ಯಾಪಿಂಗ್ ಬಳಸಿ ಮಸುಕುಗೊಳಿಸಬಹುದು, ಇದು ಪ್ರಮಾಣಿತ ಆಳದ ನಕ್ಷೆಗೆ ಗಣಿತೀಯವಾಗಿ ಅಮಾನ್ಯವಾಗಿದೆ. ಇದು ಸ್ಥಿರ ಕಾರ್ಯಕ್ಷಮತೆಯ ವೆಚ್ಚದಲ್ಲಿ ದೊಡ್ಡ, ಮೃದುವಾದ ಮತ್ತು ನಯವಾದ ನೆರಳು ಪೆನಂಬ್ರಾಗಳಿಗೆ ಅನುಮತಿಸುತ್ತದೆ.
ಅನಾನುಕೂಲ: VSM ನ ಮುಖ್ಯ ದೌರ್ಬಲ್ಯವೆಂದರೆ "ಬೆಳಕು ರಕ್ತಸ್ರಾವ", ಅಲ್ಲಿ ಬೆಳಕು ಅತಿಕ್ರಮಿಸುವ ಆಕ್ಲೂಡರ್ಗಳೊಂದಿಗಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ ವಸ್ತುಗಳ ಮೂಲಕ ರಕ್ತಸ್ರಾವವಾಗಬಹುದು, ಏಕೆಂದರೆ ಸಂಖ್ಯಾಶಾಸ್ತ್ರೀಯ ಅಂದಾಜು ಮುರಿಯಬಹುದು.
ಅಧ್ಯಾಯ 5: ಪ್ರಾಯೋಗಿಕ ಅನುಷ್ಠಾನ ಸಲಹೆಗಳು & ಕಾರ್ಯಕ್ಷಮತೆ
ನಿಮ್ಮ ನೆರಳು ನಕ್ಷೆ ರೆಸಲ್ಯೂಶನ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದು
ನಿಮ್ಮ ನೆರಳು ನಕ್ಷೆಯ ರೆಸಲ್ಯೂಶನ್ ಗುಣಮಟ್ಟ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ನಡುವಿನ ನೇರ ವಿನಿಮಯವಾಗಿದೆ. ದೊಡ್ಡ ಟೆಕಶ್ಚರ್ ತೀಕ್ಷ್ಣವಾದ ನೆರಳುಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ ಆದರೆ ಹೆಚ್ಚು ವೀಡಿಯೊ ಮೆಮೊರಿಯನ್ನು ಬಳಸುತ್ತದೆ ಮತ್ತು ರೆಂಡರ್ ಮಾಡಲು ಮತ್ತು ಮಾದರಿ ಮಾಡಲು ಹೆಚ್ಚು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ಸಾಮಾನ್ಯ ಗಾತ್ರಗಳು ಸೇರಿವೆ:
- 1024x1024: ಅನೇಕ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಉತ್ತಮ ಮೂಲ ರೇಖೆ.
- 2048x2048: ಡೆಸ್ಕ್ಟಾಪ್ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಗಮನಾರ್ಹವಾದ ಗುಣಮಟ್ಟದ ಸುಧಾರಣೆಯನ್ನು ನೀಡುತ್ತದೆ.
- 4096x4096: ಉತ್ತಮ ಗುಣಮಟ್ಟ, ಸಾಮಾನ್ಯವಾಗಿ ಹೀರೋ ಸ್ವತ್ತುಗಳಿಗೆ ಅಥವಾ ದೃಢವಾದ ಕಲ್ಲಿಂಗ್ ಹೊಂದಿರುವ ಎಂಜಿನ್ಗಳಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ.
ಬೆಳಕಿನ ಫ್ರಸ್ಟಮ್ ಅನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡುವುದು
ನಿಮ್ಮ ನೆರಳು ನಕ್ಷೆಯಲ್ಲಿನ ಪ್ರತಿಯೊಂದು ಪಿಕ್ಸೆಲ್ನಿಂದ ಹೆಚ್ಚಿನದನ್ನು ಪಡೆಯಲು, ಬೆಳಕಿನ ಪ್ರೊಜೆಕ್ಷನ್ ಪರಿಮಾಣ (ಅದರ ಆರ್ಥೋಗ್ರಾಫಿಕ್ ಬಾಕ್ಸ್ ಅಥವಾ ದೃಷ್ಟಿಕೋನ ಫ್ರಸ್ಟಮ್) ನೆರಳುಗಳು ಬೇಕಾಗುವ ದೃಶ್ಯ ಅಂಶಗಳಿಗೆ ಸಾಧ್ಯವಾದಷ್ಟು ಬಿಗಿಯಾಗಿ ಹೊಂದಿಸುವುದು ಬಹಳ ಮುಖ್ಯ. ನಿರ್ದೇಶನ ಬೆಳಕಿಗೆ, ಇದರರ್ಥ ಅದರ ಆರ್ಥೋಗ್ರಾಫಿಕ್ ಪ್ರೊಜೆಕ್ಷನ್ ಅನ್ನು ಕ್ಯಾಮೆರಾದ ಫ್ರಸ್ಟಮ್ನ ಗೋಚರಿಸುವ ಭಾಗವನ್ನು ಮಾತ್ರ ಸುತ್ತುವರಿಯಲು ಹೊಂದಿಸುವುದು. ನೆರಳು ನಕ್ಷೆಯಲ್ಲಿ ವ್ಯರ್ಥವಾದ ಯಾವುದೇ ಸ್ಥಳವು ವ್ಯರ್ಥವಾದ ರೆಸಲ್ಯೂಶನ್ ಆಗಿದೆ.
WebGL ವಿಸ್ತರಣೆಗಳು ಮತ್ತು ಆವೃತ್ತಿಗಳು
WebGL 1 vs. WebGL 2: WebGL 1 ರಲ್ಲಿ ನೆರಳು ಮ್ಯಾಪಿಂಗ್ ಸಾಧ್ಯವಾದರೂ, WebGL 2 ರಲ್ಲಿ ಇದು ಹೆಚ್ಚು ಸುಲಭ ಮತ್ತು ಪರಿಣಾಮಕಾರಿಯಾಗಿದೆ. ಆಳದ ಟೆಕಶ್ಚರ್ ಅನ್ನು ರಚಿಸಲು WebGL 1 ಗೆ `WEBGL_depth_texture` ವಿಸ್ತರಣೆ ಅಗತ್ಯವಿದೆ. WebGL 2 ಈ ಕಾರ್ಯವನ್ನು ಅಂತರ್ಗತವಾಗಿ ಹೊಂದಿದೆ. ಇದಲ್ಲದೆ, WebGL 2 ನೆರಳು ಸ್ಯಾಂಪ್ಲರ್ಗಳಿಗೆ (`sampler2DShadow`) ಪ್ರವೇಶವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದು ಯಂತ್ರಾಂಶ-ವೇಗವರ್ಧಿತ PCF ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ, ಇದು ಶೇಡರ್ನಲ್ಲಿ ಹಸ್ತಚಾಲಿತ PCF ಲೂಪ್ಗಳಿಗಿಂತ ಗಮನಾರ್ಹ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ.
ನೆರಳುಗಳನ್ನು ಡೀಬಗ್ ಮಾಡುವುದು
ನೆರಳುಗಳನ್ನು ಡೀಬಗ್ ಮಾಡಲು ಕುಖ್ಯಾತವಾಗಿ ಕಷ್ಟವಾಗಬಹುದು. ಒಂದೇ ಅತ್ಯಂತ ಉಪಯುಕ್ತ ತಂತ್ರವೆಂದರೆ ನೆರಳು ನಕ್ಷೆಯನ್ನು ದೃಶ್ಯೀಕರಿಸುವುದು. ನಿರ್ದಿಷ್ಟ ಬೆಳಕಿನ ಮೂಲದಿಂದ ಆಳದ ಟೆಕಶ್ಚರ್ ಅನ್ನು ಪರದೆಯ ಮೇಲೆ ಕ್ವಾಡ್ಗೆ ನೇರವಾಗಿ ರೆಂಡರ್ ಮಾಡಲು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ಮಾರ್ಪಡಿಸಿ. ಇದು ಬೆಳಕು ಏನು "ನೋಡುತ್ತದೆ" ಎಂಬುದನ್ನು ನಿಖರವಾಗಿ ನೋಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಇದು ನಿಮ್ಮ ಬೆಳಕಿನ ಮ್ಯಾಟ್ರಿಸಸ್, ಫ್ರಸ್ಟಮ್ ಕಲ್ಲಿಂಗ್ ಅಥವಾ ಆಳದ ಹಂತದಲ್ಲಿನ ವಸ್ತು ರೆಂಡರಿಂಗ್ನೊಂದಿಗೆ ಸಮಸ್ಯೆಗಳನ್ನು ತಕ್ಷಣವೇ ಬಹಿರಂಗಪಡಿಸುತ್ತದೆ.
ತೀರ್ಮಾನ
ನೈಜ-ಸಮಯದ ನೆರಳು ಮ್ಯಾಪಿಂಗ್ ಆಧುನಿಕ 3D ಗ್ರಾಫಿಕ್ಸ್ನ ಮೂಲಾಧಾರವಾಗಿದೆ, ಇದು ಚಪ್ಪಟೆಯಾದ, ನಿರ್ಜೀವ ದೃಶ್ಯಗಳನ್ನು ನಂಬಲರ್ಹ ಮತ್ತು ಕ್ರಿಯಾತ್ಮಕ ಪ್ರಪಂಚಗಳಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ. ಬೆಳಕಿನ ದೃಷ್ಟಿಕೋನದಿಂದ ರೆಂಡರಿಂಗ್ ಮಾಡುವ ಪರಿಕಲ್ಪನೆಯು ಸರಳವಾಗಿದ್ದರೂ, ಉತ್ತಮ-ಗುಣಮಟ್ಟದ, ಕಲಾಕೃತಿ-ಮುಕ್ತ ಫಲಿತಾಂಶಗಳನ್ನು ಸಾಧಿಸಲು ಎರಡು-ಹಂತದ ಪೈಪ್ಲೈನ್ನಿಂದ ಆಳದ ಬಯಾಸ್ ಮತ್ತು ಏಲಿಯಾಸಿಂಗ್ನ ಸೂಕ್ಷ್ಮ ವ್ಯತ್ಯಾಸಗಳವರೆಗೆ ಆಧಾರವಾಗಿರುವ ಯಂತ್ರಶಾಸ್ತ್ರದ ಬಗ್ಗೆ ಆಳವಾದ ತಿಳುವಳಿಕೆ ಅಗತ್ಯವಿದೆ.
ಮೂಲ ಅನುಷ್ಠಾನದೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸುವ ಮೂಲಕ, ನೆರಳು ಮೊಡವೆ ಮತ್ತು ಜಾಗೆಡ್ ಎಡ್ಜ್ಗಳಂತಹ ಸಾಮಾನ್ಯ ಕಲಾಕೃತಿಗಳನ್ನು ನೀವು ಕ್ರಮೇಣ ಪರಿಹರಿಸಬಹುದು. ಅಲ್ಲಿಂದ, ಮೃದುವಾದ ನೆರಳುಗಳಿಗಾಗಿ PCF ಅಥವಾ ದೊಡ್ಡ-ಪ್ರಮಾಣದ ಪರಿಸರಕ್ಕಾಗಿ ಕ್ಯಾಸ್ಕೇಡೆಡ್ ನೆರಳು ನಕ್ಷೆಗಳಂತಹ ಸುಧಾರಿತ ತಂತ್ರಗಳೊಂದಿಗೆ ನಿಮ್ಮ ದೃಶ್ಯಗಳನ್ನು ನೀವು ಹೆಚ್ಚಿಸಬಹುದು. ನೆರಳು ರೆಂಡರಿಂಗ್ಗೆ ಹೋಗುವುದು ಕಂಪ್ಯೂಟರ್ ಗ್ರಾಫಿಕ್ಸ್ ಅನ್ನು ತುಂಬಾ ಆಕರ್ಷಕವಾಗಿಸುವ ಕಲೆ ಮತ್ತು ವಿಜ್ಞಾನದ ಮಿಶ್ರಣದ ಪರಿಪೂರ್ಣ ಉದಾಹರಣೆಯಾಗಿದೆ. ಈ ತಂತ್ರಗಳೊಂದಿಗೆ ಪ್ರಯೋಗಿಸಲು, ಅವುಗಳ ಗಡಿಗಳನ್ನು ತಳ್ಳಲು ಮತ್ತು ನಿಮ್ಮ WebGL ಯೋಜನೆಗಳಿಗೆ ಹೊಸ ಮಟ್ಟದ ವಾಸ್ತವತೆಯನ್ನು ತರಲು ನಾವು ನಿಮ್ಮನ್ನು ಪ್ರೋತ್ಸಾಹಿಸುತ್ತೇವೆ.