BASIC의 ZX 스펙트럼 광선 추적기

BASIC의 ZX 스펙트럼 광선 추적기

소스 노드 : 3085593

[Gabriel Gambetta]는 단 912바이트의 JavaScript로 작성된 Raytracer인 Tiny Raytracer의 저자로서 Ray Tracer에 대해 몇 가지 알고 있습니다. 오랫동안 사람 영국이 디자인한 ZX Spectrum의 피해자, 이 두 가지 사랑이 합쳐질 수 있을까요? Tiny Raytracer가 ZX Spectrum에 맞을 수 있습니까? 베이직에서? 정답은 우리가 사랑하는 종의 많은 한계에도 불구하고 긍정적입니다..

<img decoding="async" data-attachment-id="661085" data-permalink="https://hackaday.com/2024/01/26/a-zx-spectrum-raytracer-in-basic/screenshot-from-2024-01-25-21-02-18/" data-orig-file="https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png" data-orig-size="940,648" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Screenshot from 2024-01-25 21-02-18" data-image-description="

https://gabrielgambetta.com/zx-raytracer.html

” 데이터-이미지-캡션 데이터-중형 파일=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” 데이터-대형 파일 =”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?w=800″ 클래스=”wp-image-661085 크기- 매체” src=”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic.png” alt 너비=”400″ 높이=”276″ srcset= ”https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png 940w, https://platoaistream.com/wp-content/uploads/ 2024/01/a-zx-spectrum-raytracer-in-basic-1.png?resize=250,172 250w, https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer -in-basic-1.png?resize=400,276 400w, https://platoaistream.com/wp-content/uploads/2024/01/a-zx-spectrum-raytracer-in-basic-1.png?resize= 800,551 800w” 크기 =”(최대 너비: 400px) 100vw, 400px”>

15가지 기본 색상만으로 광선 추적

이야기는 [가브리엘]의 이야기로 시작됩니다. CGFS(컴퓨터 그래픽 처음부터 시작) 레이트레이서 알고리즘 편집을 위해 VSCode를 사용하여 ZX Spectrum의 매우 제한된 BASIC 방언으로 포팅된 기존 코드 베이스, BAS2TAP 테이프 이미지 파일(기본적으로 오디오 트랙)을 생성하고 다음과 같이 실행합니다. 퓨즈. 툴체인이 정렬된 상태에서 [Gabriel]은 구의 광선 교차 방정식을 처리하기에 충분한 코드를 추가하고 32개의 구 장면을 22×15 픽셀 컬러 이미지로 렌더링하며 단 32분의 런타임만 소요됩니다. 동료 환자들은 스펙트럼에 전경 및 배경 픽셀에 대한 두 가지 색상 값이 있는 22×8 블록 속성 배열(또는 색상 배열)이 있다는 것을 기억할 것입니다. 각 속성 블록에는 8×256 픽셀이 포함되어 있으며 각 픽셀은 전경(켜짐) 또는 배경(꺼짐)이 될 수 있습니다. 그런 다음 다음 단계는 단순히 광선 추적을 전체 176으로 확장하여 픽셀과 블록을 처리하도록 코드를 확장하는 것이었습니다. ×XNUMX 해상도, 각 블록에 대해 가장 일반적인 두 가지 색상을 결정하고 전체 블록에 대해 해당 색상을 실행합니다. 그것은 매우 스펙트럼적인 '속성 충돌' 방식으로 작동합니다.

하지만 이제 런타임은 17시간입니다! 다음으로, 몇 가지 스펙트럼 BASIC 핵을 사용하고 블록의 각 모서리 픽셀에 광선을 캐스팅하는 것과 같은 일부 그래픽 근사치를 사용하여 성능을 조정하는 지점입니다. 동일한 경우 나머지 60픽셀을 모두 동일하게 색칠하고 계속 진행합니다. . 이러한 노력으로 런타임이 XNUMX시간으로 단축되었습니다.

다음 [Gabriel]은 평면 조명 모델을 용감하게 버리고 단일 광원을 모델링한 후 단색 스펙트럼 세계에 남아 있는 유일한 트릭인 각 블록의 강도 값을 디더링하는 트릭을 간단한 방법을 사용하여 꺼냅니다. 8×8 순서 디더 패턴, 모든 것을 고려하면 그다지 나쁘지는 않은 것 같습니다. 완성을 향한 길에 잠시 멈춰서 그림자 추가 실행시간이 17시간으로 돌아왔지만 그만한 가치가 있습니다. 분명히 이것은 구체가 주로 특징이지만 원칙은 있고 큐브는 코드 몇 줄만 더 있으면 되는 단일 장면 유형에 최적화되어 있습니다. 받는 사람이 있나요?

레이트레이싱은 사람들이 부적절한 하드웨어에 끼워 넣는 것을 좋아하는 재미있지만 복잡한 작업 중 하나입니다. TI-84Plus CE 그래프 계산기처럼요, 접근하기가 조금 어렵다면, 여기도 마찬가지로 미친 일이 있습니다. 일반 Excel에서 실행 중.

타임 스탬프 :

더보기 해킹 하루