luv

Workshop wiki

day-cycle.lisp

captures/day-cycle.lisp

system luv/showcase · 10 definitions · on GitHub

in-package#:luv.showcase

One fixed little-world plate at six hours and across one continuous day. The clock is the only authored variable: world, camera, viewport, sky profile, presentation grade, and compositing layers stay fixed. #TRYHPN

defuncall-with-little-world-day-cycle-capture

Call function with the fixed #TRYHPN session and its pinned sky clock.

The caller may change only the clock's pinned day fraction. Teardown restores the process-wide grade even when session shutdown or function signals.

check-typeday-fractionreal
let
sessionnil
saved-grade
mapcar
lambda
entry
cons
carentry
symbol-value
carentry
*little-world-day-cycle-grade*
unwind-protect
progn

These controls are process globals because the renderer reads them on its canvas thread. Set them before constructing the pipelines and restore them only after the session is gone.

dolist
setf
symbol-value
carentry
cdrentry
let*
camera
make-instance'luvcraft:fly-camera:position
luvcraft::make-vec38.0d011.0d0-18.0d0
:yaw0.0d0:pitch-0.30d0
setfsession
luvcraft:start-luvcraft:title"little world - one fixed day":width960:height640:visible-pnil:frames-per-secondnil:worldworld:cameracamera:residency-radius4:sky-clockclock:sky-profile
dolist
overlay
copy-list
luvcraft:luvcraft-session-overlayssession
luvcraft:wait-for-luvcraft-productssession:minimum
hash-table-count
luvcraft::luvcraft-session-desired-chunkssession
funcallfunctionsessionclock
unwind-protect
whensession
dolist
entrysaved-grade
setf
symbol-value
carentry
cdrentry
defuncapture-little-world-day-cycle-still
pathnameday-fraction

Capture one clean plate from the fixed day-cycle scene.

call-with-little-world-day-cycle-captureday-fraction
lambda
sessionclock
declare
ignoreclock
luvcraft:capture-luvcraft-screenshotsessionpathname:include-hud-pnil:include-viewmodel-pnil
luv:define-capturelittle-world-blue-hour
:figuretryhpn:kind:image:extension"png":description"The fixed little world still readable in the blue hour before sunrise."
pathname
luv:define-capturelittle-world-sunrise
:figuretryhpn:kind:image:extension"png":description"The fixed little world at sunrise: warm horizon and long shadows."
pathname
luv:define-capturelittle-world-pre-noon
:figuretryhpn:kind:image:extension"png":description"The fixed little world in neutral pre-noon light for comparison."
pathname
luv:define-capturelittle-world-noon
:figuretryhpn:kind:image:extension"png":description"The fixed little world at noon with short shadows and clear materials."
pathname
luv:define-capturelittle-world-sunset
:figuretryhpn:kind:image:extension"png":description"The fixed little world under warm lateral sunset light and fog."
pathname
luv:define-capturelittle-world-deep-night
:figuretryhpn:kind:image:extension"png":description"The fixed little world as an ambient deep-night silhouette."
pathname
luv:define-capturelittle-world-one-day
:figuretryhpn:kind:video:extension"mp4":description"Eight seconds through one whole sky day from a completely fixed view."
pathname
call-with-little-world-day-cycle-capture0.18
lambda
sessionclock
let*
seconds8
frame-rate24
frame-count
*secondsframe-rate
luvcraft:film-luvcraft-sessionsessionpathname:secondsseconds:frame-rateframe-rate:include-hud-pnil:include-viewmodel-pnil:before-frame
lambda

Hidden film frames do not pass through the presentation loop which normally supplies elapsed time to the cloud shader. Give this authored film its deterministic capture time explicitly.

setf
luvcraft::luvcraft-session-last-frame-timesession
/frame
coerceframe-rate'double-float

The final encoded frame falls one interval before the starting hour, making the following playback-loop boundary continuous.

setf
luvcraft:sky-clock-pinned-day-fractionclock
mod
+0.18
/frame
coerceframe-count'single-float
1.0
when
zerop
modframeframe-rate
formatt"capture little-world-one-day: second ~D/~D~%"
1+
/frameframe-rate
seconds
finish-output