Сейчас я пытаюсь понять трассировщик лучей, разработанный Кевином Бисоном (smallpt: http://www.kevinbeason.com/smallpt/), и если я правильно понимаю код, он случайным образом выбирает либо отражать, либо преломлять луч (если поверхность и отражающая, и преломляющая).
Строки 71-73:
return obj.e + f.mult(depth>2 ? (erand48(Xi)
Кто-нибудь может объяснить недостатки использования только одного луча вместо обоих? Я никогда не слышал об этой технике, и мне любопытно, каков компромисс, учитывая, что она приводит к огромному снижению сложности.