luv

Workshop wiki

gallery.lisp

captures/gallery.lisp

system luv/showcase · 42 definitions · on GitHub

in-package#:luv.showcase

The first broad gallery folio: portrait compositions for phones, clean authored motion, and one deliberately gameplay-shaped landscape walk. Each subject still owns its world and motion; this file only shares the hidden-session lifecycle and the portrait frame. #RFUR2R #I380Q9

defungallery-look-pose
xyztarget-xtarget-ytarget-zfield-of-view

Make a camera pose at X/Y/Z looking directly at TARGET-X/Y/Z.

let*
dx
-target-xx
dy
-target-yy
dz
-target-zz
flat
sqrt
+
*dxdx
*dzdz
luvcraft::make-camera-pose
atandxdz
atandyflat
field-of-view
defunmake-gallery-camera
pose
let
camera
make-instance'luvcraft:fly-camera
camera
defunremove-gallery-hud-overlays
session

Remove HUD-stage presentation without removing world/physics drawers.

dolist
overlay
copy-list
luvcraft:luvcraft-session-overlayssession
defunremove-gallery-lobby-overlay
session

Remove only the lobby instrument while retaining the ordinary play HUD.

dolist
overlay
copy-list
luvcraft:luvcraft-session-overlayssession
defuncall-with-gallery-session
function&keytitleworldcamerasky-clocksky-profilecritterswidthheightclean-p

Call function with one fully resident, source-owned gallery session.

call-with-pre-noon-ridge-grade
lambda

The grade owner has already saved every process-global value. These subject-local changes remain visible to the canvas thread and its unwind restores the prior live grade after the session is closed.

let
sessionnil
unwind-protect
progn
setfsession
luvcraft:start-luvcraft:titletitle:widthwidth:heightheight:visible-pnil:frames-per-secondnil:worldworld:cameracamera:sky-clocksky-clock:sky-profilesky-profile:critters
orcritters
:residency-radiusresidency-radius
let
desired
hash-table-count
luvcraft::luvcraft-session-desired-chunkssession
formatt"capture ~A: preparing ~D terrain chunks~%"titledesired
finish-output
formatt"capture ~A: scene ready~%"title
finish-output
funcallfunctionsession
whensession
defuncall-with-generated-gallery-session
function&keytitleseedposeday-fractionwidthheightclean-p

Call function in one deterministic generated little world.

defungallery-ridge-pose
&key
portrait-pnil
lateral-offset0.0d0
height8.75d0
pitch0.20d0

The proven seed-121 ridge composition, optionally widened for portrait.

let*
luvcraft::make-camera-pose
luvcraft::make-vec3
+-46.0d0
*lateral-offset
cosyaw
height
--36.0d0
*lateral-offset
sinyaw
yawpitchfield-of-view
defunfilm-gallery-camera-path
sessionpathnamepose-at-frame&key
include-hud-pnil
include-viewmodel-pnil

Film pose-at-frame with deterministic shader time and visible progress.

let
frame-count
*secondsframe-rate
luvcraft:film-luvcraft-sessionsessionpathname:secondsseconds:frame-rateframe-rate:include-hud-pinclude-hud-p:include-viewmodel-pinclude-viewmodel-p:before-frame
lambda
setf
luvcraft::luvcraft-session-last-frame-timesession
/frame
coerceframe-rate'double-float
luvcraft::set-camera-pose
luvcraft:luvcraft-session-camerasession
funcallpose-at-frameframeframe-count
when
zerop
modframeframe-rate
formatt"capture gallery film: second ~D/~D~%"
1+
/frameframe-rate
seconds
finish-output

Generated terrain: the same real little world as #NLCFX0 and #TRYHPN, recomposed vertically rather than cropped after rendering.

luv:define-capturepre-noon-under-the-trees
:figurenlcfx0:kind:image:extension"png":description"A lower clean ridge view using trunks and crowns as warm foreground."
pathname
call-with-generated-gallery-session
lambda
session
luvcraft:capture-luvcraft-screenshotsessionpathname:include-hud-pnil:include-viewmodel-pnil
:title"pre-noon under the trees":seed121:pose
gallery-ridge-pose:lateral-offset-4.0d0:height7.85d0:pitch0.12d0
:day-fraction+pre-noon-ridge-day-fraction+:width+gallery-landscape-width+:height+gallery-landscape-height+:clean-pt
luv:define-capturepre-noon-under-the-trees-portrait
:figurenlcfx0:kind:image:extension"png":layout:portrait:description"A phone-first low ridge portrait framed by seed 121's tree crowns."
pathname
call-with-generated-gallery-session
lambda
session
luvcraft:capture-luvcraft-screenshotsessionpathname:include-hud-pnil:include-viewmodel-pnil
:title"pre-noon under the trees portrait":seed121:pose
gallery-ridge-pose:portrait-pt:lateral-offset-4.0d0:height7.85d0:pitch0.16d0
:day-fraction+pre-noon-ridge-day-fraction+:width+gallery-portrait-width+:height+gallery-portrait-height+:clean-pt
luv:define-capturepre-noon-ridge-portrait-glide
:figurenlcfx0:kind:video:extension"mp4":layout:portrait:description"A clean phone-first glide through warm trees toward the central ridge."
pathname
call-with-generated-gallery-session
lambda
session
film-gallery-camera-pathsessionpathname
lambda
frameframe-count
let
progress
/frame
coerce
max1
1-frame-count
'double-float
gallery-ridge-pose:portrait-pt:lateral-offset
+-3.0d0
*6.0d0progress
:height8.2d0:pitch0.17d0
:title"pre-noon ridge portrait glide":seed121:pose
gallery-ridge-pose:portrait-pt:lateral-offset-3.0d0
:day-fraction+pre-noon-ridge-day-fraction+:width+gallery-portrait-width+:height+gallery-portrait-height+:clean-pt
luv:define-captureridge-play-view
:figurenlcfx0:kind:image:extension"png":description"The same ridge as ordinary play, retaining crosshair, hotbar, and body."
pathname
call-with-generated-gallery-session
lambda
session
luvcraft:capture-luvcraft-screenshotsessionpathname:include-hud-pt:include-viewmodel-pt
:title"ridge play view":seed121:pose:day-fraction+pre-noon-ridge-day-fraction+:width+gallery-landscape-width+:height+gallery-landscape-height+:clean-pnil
luv:define-captureridge-walk-with-hud
:figurenlcfx0:kind:video:extension"mp4":description"A short real player walk with the ordinary crosshair, hotbar, and body."
pathname
call-with-generated-gallery-session
lambda
session
let*
intent
luvcraft:luvcraft-session-movement-intentsession
camera
luvcraft:luvcraft-session-camerasession
unwind-protect
progn
setft
luvcraft:film-luvcraft-sessionsessionpathname:secondsseconds:frame-rateframe-rate:include-hud-pt:include-viewmodel-pt:before-frame
lambda
setf
+1.05d0
*0.08d0
sin
*2d0piframe
/1d0
*secondsframe-rate
luvcraft::advance-luvcraft-session-tosession
/frame
coerceframe-rate'double-float
when
zerop
modframeframe-rate
formatt"capture ridge-walk-with-hud: second ~D/~D~%"
1+
/frameframe-rate
seconds
finish-output
:title"ridge walk with HUD":seed121:pose:day-fraction+pre-noon-ridge-day-fraction+:width+gallery-landscape-width+:height+gallery-landscape-height+:clean-pnil
defuncapture-day-cycle-portrait
pathnameday-fractiontitle
call-with-generated-gallery-session
lambda
session
luvcraft:capture-luvcraft-screenshotsessionpathname:include-hud-pnil:include-viewmodel-pnil
:titletitle:seed121:pose:day-fractionday-fraction:width+gallery-portrait-width+:height+gallery-portrait-height+:clean-pt
luv:define-capturelittle-world-blue-hour-portrait
:figuretryhpn:kind:image:extension"png":layout:portrait:description"The fixed little world recomposed vertically at blue hour."
pathname
capture-day-cycle-portraitpathname0.21"little world blue hour portrait"
luv:define-capturelittle-world-sunrise-portrait
:figuretryhpn:kind:image:extension"png":layout:portrait:description"A tall sunrise view with long shadows below a cool zenith."
pathname
capture-day-cycle-portraitpathname0.28"little world sunrise portrait"
luv:define-capturelittle-world-sunset-portrait
:figuretryhpn:kind:image:extension"png":layout:portrait:description"A tall sunset view preserving warm fog and lateral light."
pathname
capture-day-cycle-portraitpathname0.72"little world sunset portrait"

Crystal grove: a compact source-owned set where blocklight, emissive material, foliage, masonry, and depth all remain legible in one frame.

defunmake-gallery-crystal-grove-world
let
dotimes
chunk-x2
dotimes
chunk-z2
luvcraft::ensure-world-chunkworldchunk-x0chunk-z
loopforxbelow32do
loopforzbelow32do
setfluvcraft::*dirt-block*
if
or
<=14x17
<=14z17
luvcraft::*stone-block*luvcraft::*grass-block*
dolist
coordinate'
15215
16216
17217
9222
22221
23210
destructuring-bind
xyz
coordinate
setfluvcraft:*crystal-block*
dolist
tree'
8186
24147
24256
destructuring-bind
xztop
tree
loopforyfrom2belowtopdo
setfluvcraft::*wood-block*
loopfordxfrom-2to2do
loopfordzfrom-2to2whendo
setfluvcraft::*leaf-block*
world
defungallery-crystal-grove-pose
angle&keyportrait-p
let*
centre-x16.0d0
centre-z16.0d0
radius15.5d0
x
+centre-x
*radius
z
-centre-z
*radius
gallery-look-posex5.2d0zcentre-x3.0d0centre-z
defuncall-with-crystal-grove-session
call-with-gallery-sessionfunction:title"crystal grove afterglow":widthwidth:heightheight:clean-pclean-p:residency-radius0:world:camera:sky-clock:sky-profile:exposure0.68:bloom-gain0.34:shaft-gain0.10
luv:define-capturecrystal-grove-afterglow-still
:figureq8zifd:kind:image:extension"png":description"A clean crystal grove showing facets, blocklight, foliage, and masonry."
pathname
luv:define-capturecrystal-grove-afterglow-portrait
:figureq8zifd:kind:image:extension"png":layout:portrait:description"The crystal grove composed vertically for luminous depth on a phone."
pathname
luv:define-capturecrystal-grove-night-portrait
:figureq8zifd:kind:video:extension"mp4":layout:portrait:description"A restrained portrait arc revealing the crystal blocklight volume."
pathname
call-with-crystal-grove-session
lambda
session
film-gallery-camera-pathsessionpathname
lambda
frameframe-count
let
progress
/frame
coerce
max1
1-frame-count
'double-float
gallery-crystal-grove-pose
+-0.24d0
*0.48d0progress
:portrait-pt
+gallery-portrait-width++gallery-portrait-height+t

Inhabitants: the existing deterministic three-turtle cast, recomposed at their own height instead of presented as an aerial diagnostic plate.

defungallery-turtle-pose
angle&keyportrait-p
close-pnil
let*
centre-x7.8d0
centre-z7.6d0
radius
ifclose-p7.0d09.5d0
x
+centre-x
*radius
z
-centre-z
*radius
gallery-look-posex
ifclose-p3.15d03.55d0
zcentre-x2.45d0centre-z
luv:define-captureturtle-meadow-portrait
:figurew7t2it:kind:image:extension"png":layout:portrait:description"Three turtles at their own height: walking, turning, and resting poses."
pathname
luv:define-captureturtle-meadow-closeup
:figurew7t2it:kind:image:extension"png":description"A low close meadow view preserving turtle scale, materials, and shadow."
pathname
call-with-turtle-gallery-session
lambda
session
luvcraft:capture-luvcraft-screenshotsessionpathname:camera-pose
gallery-turtle-pose-0.18d0:close-pt
:include-hud-pnil:include-viewmodel-pnil
+gallery-landscape-width++gallery-landscape-height+
luv:define-captureturtle-meadow-portrait-dolly
:figurew7t2it:kind:video:extension"mp4":layout:portrait:description"A quiet phone-first dolly around the three posed meadow turtles."
pathname
call-with-turtle-gallery-session
lambda
session
film-gallery-camera-pathsessionpathname
lambda
frameframe-count
let
progress
/frame
coerce
max1
1-frame-count
'double-float
gallery-turtle-pose
+-0.20d0
*0.40d0progress
:portrait-pt
+gallery-portrait-width++gallery-portrait-height+

Physics: a deterministic burst over source-owned stairs. The film moves the bodies rather than orbiting a static proof; the stills advance the same fixed simulation to a settled composition.

defunmake-gallery-ball-stair-world
let
loopforxbelow16do
loopforzbelow16do
setfluvcraft::*stone-block*
loopforzfrom5to14forstep=
1+
do
loopforxfrom3to12do
loopforyfrom1tostepdo
setf
if
oddpstep
luvcraft::*bricks-block*luvcraft::*stone-block*
world
defungallery-ball-stair-pose
&keyportrait-p
gallery-look-pose8.0d05.8d0-7.0d08.0d04.0d09.0d0
defuncall-with-ball-gallery-session
call-with-gallery-session
lambda
session
luvcraft::scatter-party-ballssession:center'
8.0d010.0d012.0d0
:count20
funcallfunctionsession
:title"party ball cascade":widthwidth:heightheight:clean-pt:residency-radius0:world:camera:sky-clock:sky-profile:exposure0.52:bloom-gain0.12:shaft-gain0.20
defunadvance-gallery-ball-cascade
sessionsecondsframe-rate
dotimes
frame
*secondsframe-rate
luvcraft::advance-luvcraft-session-tosession
/frame
coerceframe-rate'double-float
when
zerop
modframeframe-rate
formatt"capture party ball cascade: settling second ~D/~D~%"
1+
/frameframe-rate
seconds
finish-output
luv:define-captureparty-ball-cascade-settled
:figurecscfgf:kind:image:extension"png":description"Beach, smiley, and classic balls settled across source-owned stairs."
pathname
luv:define-captureparty-ball-cascade-portrait-still
:figurecscfgf:kind:image:extension"png":layout:portrait:description"The settled patterned-ball staircase composed vertically for a phone."
pathname
luv:define-captureparty-ball-cascade-portrait
:figurecscfgf:kind:video:extension"mp4":layout:portrait:description"A deterministic patterned-ball burst bouncing and settling down stairs."
pathname
call-with-ball-gallery-session
lambda
session
let
luvcraft:film-luvcraft-sessionsessionpathname:secondsseconds:frame-rateframe-rate:include-hud-pnil:include-viewmodel-pnil:before-frame
lambda
luvcraft::advance-luvcraft-session-tosession
/frame
coerceframe-rate'double-float
when
zerop
modframeframe-rate
formatt"capture party-ball-cascade-portrait: second ~D/~D~%"
1+
/frameframe-rate
seconds
finish-output
+gallery-portrait-width++gallery-portrait-height+