Реализация трассировщика лучей из книги Ray Tracing in One Weekend на C# / .NET 10.
Рендерит сцену со случайно расставленными сферами (diffuse, metal, dielectric) и сохраняет результат в файл output.ppm (формат PPM P3).
- Материалы: Lambertian (диффузный), Metal (с fuzz), Dielectric (стекло с эффектом Френеля по Шлику)
- Антиалиасинг через мультисэмплинг, gamma-коррекция
- Позиционируемая камера: FOV, defocus blur (глубина резкости), focus distance
- Параллельный рендер по строкам (
Parallel.For)
dotnet run --project src/RayTracing -c ReleaseРезультат — output.ppm в текущем каталоге. Открыть можно, например, в GIMP или конвертировать в PNG:
magick output.ppm output.png # ImageMagickПараметры сцены и камеры задаются в Program.cs:
| Параметр | Описание |
|---|---|
ImageWidth |
ширина изображения в пикселях |
AspectRatio |
соотношение сторон |
SamplesPerPixel |
сэмплов на пиксель (качество антиалиасинга) |
MaxDepth |
макс. глубина отскоков луча |
VFov |
вертикальный угол обзора |
LookFrom/LookAt |
позиция и точка прицела камеры |
DefocusAngle |
сила размытия (0 — отключено) |
FocusDist |
дистанция фокусировки |
| Файл | Назначение |
|---|---|
| Program.cs | точка входа, сборка сцены |
| Camera.cs | рендер, генерация лучей, запись PPM |
| Vector3.cs | вектор/точка/цвет и векторная математика |
| Ray.cs | луч |
| Sphere.cs | сфера и пересечение с лучом |
| Hittable.cs | IHittable, HitRecord, список объектов |
| Material.cs | материалы и рассеивание лучей |
| Interval.cs | числовой интервал |
| Common.cs / Types.cs | утилиты, константы, псевдонимы типов |