Аз дори ти предлагам да сложиш текстурите към Опционалните и да сложиш цвят в задължителните вместо него (дори да е random, ако искаш). Рейтрейсър не е лесно да се имплементира, особено на сравнително непознат език. Вероятно ще забиеш на много места, така че стреми се проектът ти да е с минимални задължителни изисквания, за да тръгне и да работи. И след това надграждай с каквото друго трябва или пък ти е интересно.
Някъде бях чел, че при описване на игра (в някой от дизайн документите) трябва фийчърите да се разделят в поне три категории (имената ги измислих, че въобще не ги помня):
1) Задължителни (без които играта не може да мине, основното в нея, т.е. обещавам че това ще направя);
2) Желани (имплементират се след задължителните и колкото има време за тях);
3) Бонус (нещо, което би било много хубаво да се направи, но играта може спокойно да мине и без тях, ако се наложи).
Именно по този начин аз ще си разделя моя проект. Ще гледам да имплементирам всичко задължително, колкото да работи и да има нещо общо с основната идея, след това каквото мога от желателните и колкото време имам. И, евентуално, ако остане време, а всичките желателни са имплементирани, може да подхвана нещо и от бонуса. Но надали.
Така че помисли, кой ти е наистина bare minimum, с който можеш да минеш и да имаш някакъв рейтрейсър, макар и почти неизползваем в нормалния живот, но все пак да рейтрейсва нещо. Това ще ти е "Задължителното" (например трасиране на кубове, random цвят, един лъч на пиксел, без после да се отрязява (т.е. просто взимаш звета където е попаднал)).
След това сложи в Желаните фийчъри, това, което ще го направи все пак един ограничен, но достатъчно кадърен рейтрейсър (тук вече може и да не успееш да имплементираш всичко, но голяма работа, поне имаш минимума). Тук можеш да сложиш трасиране и на други обекти като равнини, сфери, сложи текстури или пък не произволен цвят, повече лъчи на пиксел.
Вече в бонуса можеш да сложиш разни шейдъри и BRDF-и като отражения, пречупвания. Трейсъра да не спира след първия hit, ами създава няколко нови лъчи и пуска тях, normal и bump map и т.н. Тук вече можеш да оставиш въобръжението да се вихри и лигите да текат. Вероятно няма да стигнеш до никое от тия преди края на курса, но кой знае. Пък и току виж си го продължиш след като си предадеш проекта, например в свободното време или някое и друго лято.
Този подход има и added bonus: ще ти е много трудно да напишеш завързан на възел код (най-малкото после ще ти се наложи да го рефакторираш).