From 19a7c241ef890770a88d51c84fed2bfc3bbb20b0 Mon Sep 17 00:00:00 2001 From: Leonard Souza Date: Fri, 14 Aug 2026 17:44:15 -0700 Subject: [PATCH 1/5] Add eyeballs --- .github/workflows/release.yml | 28 ++++++- CMakeLists.txt | 9 +++ qml/Main.qml | 9 ++- qml/OozeEyes.qml | 137 ++++++++++++++++++++++++++++++++++ qml/OozeVisual.qml | 9 +++ resources/maps/eye_albedo.jpg | Bin 0 -> 33830 bytes resources/maps/eye_normal.png | Bin 0 -> 106367 bytes resources/meshes/eye.mesh | Bin 0 -> 227404 bytes src/effects/OozeEffect.cpp | 14 ++++ src/effects/OozeEffect.h | 20 +++++ 10 files changed, 222 insertions(+), 4 deletions(-) create mode 100644 qml/OozeEyes.qml create mode 100644 resources/maps/eye_albedo.jpg create mode 100644 resources/maps/eye_normal.png create mode 100644 resources/meshes/eye.mesh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 83f2d92..44aa09b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -342,9 +342,24 @@ jobs: # reads a whole directory and emits one per archive; it # has no notion of architecture, so the two are produced apart # and the sparkle:cpu attribute is added on the way in. + # Located with find, never by a constructed path. + # + # upload-artifact@v4 roots an artifact at the least common + # ancestor of everything it matched. This job's upload lists + # both `build/*.zip` and `build-version.txt`, so that ancestor + # is the workspace and the files arrive under + # artifacts//build/… — not artifacts//. Building the + # path by hand assumed otherwise and failed here after all three + # platforms had signed and notarized. for ARCH in arm64 x64; do mkdir -p "feed-$ARCH" - cp artifacts/hyperbin-macos-$ARCH/hyperbin-${VERSION}-macos-${ARCH}.zip "feed-$ARCH/" + ZIP=$(find artifacts -type f -name "hyperbin-*-macos-${ARCH}.zip" | head -1) + if [ -z "$ZIP" ]; then + echo "::error::no macOS ${ARCH} zip in the artifacts" + find artifacts -type f | sed 's/^/ /' + exit 1 + fi + cp "$ZIP" "feed-$ARCH/" ./sparkle/bin/generate_appcast --ed-key-file "$KEY" \ --download-url-prefix "${CDN_URL}/releases/${VERSION}/" \ "feed-$ARCH/" @@ -387,8 +402,15 @@ jobs: - name: Build the Windows appcast run: | - EXE="artifacts/hyperbin-windows-x64/hyperbin-${VERSION}-windows-x64.exe" - SIG=$(cat artifacts/hyperbin-windows-x64/eddsa-signature.txt) + # find, not a constructed path — see the macOS appcast step. + EXE=$(find artifacts -type f -name "hyperbin-*-windows-x64.exe" | head -1) + SIGFILE=$(find artifacts -type f -name "eddsa-signature.txt" | head -1) + if [ -z "$EXE" ] || [ -z "$SIGFILE" ]; then + echo "::error::missing Windows installer or its EdDSA signature" + find artifacts -type f | sed 's/^/ /' + exit 1 + fi + SIG=$(cat "$SIGFILE") LEN=$(stat -f%z "$EXE") BUILD=$(git rev-list --count "$GITHUB_REF_NAME") # sparkle:version is the build number WinSparkle compares; diff --git a/CMakeLists.txt b/CMakeLists.txt index 164b97b..19c0b00 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -304,6 +304,7 @@ qt_add_qml_module(hyperbin qml/Main.qml qml/BinGlyph.qml qml/OozeVisual.qml + qml/OozeEyes.qml qml/Permissions.qml qml/Splash.qml qml/HyperbinLockup.qml @@ -359,6 +360,14 @@ qt_add_resources(hyperbin "hyperbin_icons" # that silently falls back to the system UI face on every machine # but the one it was designed on is not a brand. resources/Inter-SemiBold.ttf + # The eyeballs in the goo. Converted from a glTF with balsam; + # see docs/effects.md. The source model's cornea is a second, + # transparent mesh — left out on purpose, because a transparent + # PBR shell costs a full extra pass to produce a highlight that + # is sub-pixel at the size this is drawn. + resources/meshes/eye.mesh + resources/maps/eye_albedo.jpg + resources/maps/eye_normal.png ) qt_add_resources(hyperbin "hyperbin_shaders3d" PREFIX "/shaders3d" diff --git a/qml/Main.qml b/qml/Main.qml index 50199f6..06bb659 100644 --- a/qml/Main.qml +++ b/qml/Main.qml @@ -72,7 +72,14 @@ Window { // margins are proportional to the icon, so this is the // same geometry the Dock produces, just larger. binRect = Qt.rect(90, 40, 300, 300); - fullness = 0.85; + // HYPERBIN_PREVIEW_FULL pins the slider, so anything that + // scales with fullness — the ooze's level, how many eyes + // surface — can be shot at a chosen value instead of + // being dragged to it by hand. + fullness = Number(Qt.application.arguments.indexOf("--full") >= 0 + ? Qt.application.arguments[ + Qt.application.arguments.indexOf("--full") + 1] + : 0.85); frameIntervalMs = 16; } } diff --git a/qml/OozeEyes.qml b/qml/OozeEyes.qml new file mode 100644 index 0000000..730d744 --- /dev/null +++ b/qml/OozeEyes.qml @@ -0,0 +1,137 @@ +import QtQuick +import QtQuick3D + +// Eyeballs suspended in the gel. +// +// They drift through the body, turn up in greater numbers as the bin +// fills, and all look at the camera — which is what makes the thing read +// as awake rather than as debris. The pupils flick between fixations the +// way real eyes do: a saccade is close to instantaneous, so these snap +// rather than glide. Easing them would look like something searching; +// snapping looks like something watching. +Node { + id: eyes + + /// The OozeEffect. Supplies the level, the clock, and eyeAt(). + required property var effect + /// The camera's tilt in degrees. The gaze frame leans back by this + /// so every eye faces the lens. + required property real camTilt + /// The bin's width in scene units; eye size is a fraction of it. + required property real binWidth + + /// The most that can ever be on screen. + /// + /// The delegate count is CONSTANT and the level only decides how many + /// of them are visible. Driving the count from the level rebuilds + /// every delegate on the frame it changes, and this scene has been + /// here before: the bubbles did exactly that and cost four times the + /// whole effect before they were removed. + readonly property int maxEyes: 9 + readonly property real level: effect ? effect.level : 0 + readonly property real time: effect ? effect.time : 0 + readonly property int active: Math.round(level * maxEyes) + + // A stable per-eye value in [0,1). Same index, same number, every + // frame — so an eye keeps its size and its path instead of being + // re-rolled whenever anything re-evaluates. + function rnd(a, b) { + const s = Math.sin(a * 127.1 + b * 311.7) * 43758.5453; + return s - Math.floor(s); + } + + Repeater3D { + model: eyes.maxEyes + + delegate: Node { + id: eye + required property int index + + readonly property real seedA: eyes.rnd(index, 1) + readonly property real seedB: eyes.rnd(index, 2) + readonly property real seedC: eyes.rnd(index, 3) + + // RADIUS, not diameter. The mesh is a unit sphere, so a + // scale of s spans 2s — sized as a diameter, the first pass + // came out at twice the intent and the eyes sat on the gel + // rather than in it. + readonly property real size: eyes.binWidth * (0.036 + 0.028 * seedA) + readonly property real drift: 0.045 + 0.075 * seedB + + // Around the bin, and up and down it. The vertical wander is + // small: an eye that travels the body's whole height reads as + // falling, not floating. + readonly property real angle: seedC * 6.2831853 + + eyes.time * drift * (seedA > 0.5 ? 1 : -1) + readonly property real height: 0.18 + 0.62 * seedB + + 0.06 * Math.sin(eyes.time * drift * 2.1 + + index) + + // How deep it sits, as a fraction of the body's half-width. + // + // The useful range is narrow and not obvious. An eye breaks + // the surface only once sink exceeds 1 - eyeRadius/bodyRadius, + // which for these sizes is about 0.92 — below that it is + // wholly inside and merely ghosts through the gel. So this + // rides just under and just over 1: the low end buries it, + // the high end stands it half clear, and the swing carries + // each eye slowly between the two. + readonly property real sink: 0.965 + 0.075 * Math.sin(eyes.time * 0.31 + index * 2.0) + + visible: index < eyes.active && eyes.effect + position: eyes.effect ? eyes.effect.eyeAt(height, angle, sink) + : Qt.vector3d(0, 0, 0) + + // --- the gaze frame ----------------------------------------- + // Leaned back to match the camera, so a child pointing along + // +z is pointing down the lens. The camera is orthographic, + // so this is the same for every eye no matter where it sits — + // there is no per-eye look-at to compute. + eulerRotation.x: -eyes.camTilt + + Node { + // The saccade. Floor(time) picks a fixation, and the + // fixation is hashed into an offset, so the eye holds + // still and then jumps — no interpolation anywhere. + readonly property int fix: Math.floor(eyes.time * 1.6 + eye.index * 3.7) + readonly property bool blank: eyes.rnd(fix, eye.index) > 0.72 + + // A fixation that lands on the camera, roughly one in + // four, is what sells the rest: an eye that is always + // darting never appears to have noticed you. + eulerRotation.x: blank ? 0 : (eyes.rnd(fix, eye.index + 11) - 0.5) * 26 + eulerRotation.y: blank ? 0 : (eyes.rnd(fix, eye.index + 23) - 0.5) * 34 + + Model { + source: "qrc:/icons/meshes/eye.mesh" + // The iris is on the model's -z; +z is the back of + // the eyeball. Measured by rendering the mesh from + // six directions rather than read off the asset. + eulerRotation.y: 180 + scale: Qt.vector3d(eye.size, eye.size, eye.size) + materials: eyeMaterial + } + } + } + } + + PrincipledMaterial { + id: eyeMaterial + baseColorMap: Texture { + source: "qrc:/icons/maps/eye_albedo.jpg" + generateMipmaps: true + mipFilter: Texture.Linear + } + normalMap: Texture { + source: "qrc:/icons/maps/eye_normal.png" + generateMipmaps: true + mipFilter: Texture.Linear + } + // Wet, not shiny. The cornea mesh was dropped, so the highlight + // has to come from the material — and a glossy sphere with no + // clearcoat reads as a marble. + roughness: 0.18 + specularAmount: 0.9 + cullMode: PrincipledMaterial.BackFaceCulling + } +} diff --git a/qml/OozeVisual.qml b/qml/OozeVisual.qml index f4af089..2cb93f7 100644 --- a/qml/OozeVisual.qml +++ b/qml/OozeVisual.qml @@ -88,6 +88,15 @@ Item { - root.width / 2 : 0 y: root.effect ? -(root.effect.binRect.y + root.effect.binRect.height / 2 - root.height / 2) : 0 + // The eyes go in BEFORE the gel in the scene graph so the gel's + // transparent pass composites over them — an eye drawn after it + // sits on top of the body instead of inside it. + OozeEyes { + effect: root.effect + camTilt: cam.tilt + binWidth: root.binW + } + Model { id: sludge geometry: OozeGeometry { diff --git a/resources/maps/eye_albedo.jpg b/resources/maps/eye_albedo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61bd7f0f136e6962935fedb2fd5bbe498af59504 GIT binary patch literal 33830 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

l%EW09;kab#umQEUCPbxyOQ879hl4VVawuzS# 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�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 XWKU*zKDO`P00vN3)={cfK!*MY+<3$; literal 0 HcmV?d00001 diff --git a/resources/meshes/eye.mesh b/resources/meshes/eye.mesh new file mode 100644 index 0000000000000000000000000000000000000000..99038c24dc925bd1461cec193a2673f103c8305d GIT binary patch literal 227404 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

H)2C-4&ci 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𝔵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 z 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 #include #include +#include namespace hyperbin { @@ -80,6 +81,25 @@ class OozeEffect : public Effect float rimRadius() const { return m_shape.rimRadius(); } QObject *iconTexture() const; + /// Where to put an eye, in bin-local units. + /// + /// The scene cannot work this out for itself: the body's half-width + /// at a given height comes from the measured silhouette, and that + /// lives here. Reusing it means an eye is placed against the same + /// profile the mesh is swept from, so the two cannot drift apart — + /// the same reason OozeGeometry asks rather than measuring again. + /// + /// @param t 0 at the pool, 1 at the gel's surface. + /// @param angle radians around the bin's axis; 0 faces the camera. + /// @param sink fraction of the body's half-width to sit at. Below 1 + /// the eye is buried, at 1 its centre is on the surface + /// and half of it stands proud. The vertex shader then + /// displaces the surface over it, so the same value + /// submerges an eye where the gel bulges and exposes it + /// where the gel thins — which is the variation that + /// makes them look suspended rather than stuck on. + Q_INVOKABLE QVector3D eyeAt(float t, float angle, float sink) const; + const OozeSim &sim() const { return m_sim; } /// The gel's silhouette, measured from the bin's artwork. Read by /// OozeGeometry, which sweeps the mesh from it — bulk data, so it is From 3cfaac5896eed32a9b957d603dd53f9fde31ddb7 Mon Sep 17 00:00:00 2001 From: Leonard Souza Date: Fri, 14 Aug 2026 17:46:49 -0700 Subject: [PATCH 2/5] =?UTF-8?q?Take=20the=20publish=20fix=20back=20off=20t?= =?UTF-8?q?his=20branch=20It=20rode=20in=20with=20the=20eyeball=20commit?= =?UTF-8?q?=20by=20accident.=20The=20artifact-path=20fix=20is=20a=20releas?= =?UTF-8?q?e-pipeline=20change=20with=20nothing=20to=20do=20with=20the=20g?= =?UTF-8?q?oo,=20and=20a=20tag=20is=20waiting=20on=20it=20=E2=80=94=20so?= =?UTF-8?q?=20it=20goes=20out=20on=20its=20own=20branch=20rather=20than=20?= =?UTF-8?q?waiting=20for=20this=20one=20to=20be=20ready.=20Reverted=20rath?= =?UTF-8?q?er=20than=20amended:=20this=20branch=20is=20already=20pushed,?= =?UTF-8?q?=20and=20rewriting=20a=20ref=20someone=20may=20have=20fetched?= =?UTF-8?q?=20to=20save=20one=20commit=20is=20a=20bad=20trade.=20Co-Author?= =?UTF-8?q?ed-By:=20Claude=20Opus=205=20(1M=20context)=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 44aa09b..83f2d92 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -342,24 +342,9 @@ jobs: # reads a whole directory and emits one per archive; it # has no notion of architecture, so the two are produced apart # and the sparkle:cpu attribute is added on the way in. - # Located with find, never by a constructed path. - # - # upload-artifact@v4 roots an artifact at the least common - # ancestor of everything it matched. This job's upload lists - # both `build/*.zip` and `build-version.txt`, so that ancestor - # is the workspace and the files arrive under - # artifacts//build/… — not artifacts//. Building the - # path by hand assumed otherwise and failed here after all three - # platforms had signed and notarized. for ARCH in arm64 x64; do mkdir -p "feed-$ARCH" - ZIP=$(find artifacts -type f -name "hyperbin-*-macos-${ARCH}.zip" | head -1) - if [ -z "$ZIP" ]; then - echo "::error::no macOS ${ARCH} zip in the artifacts" - find artifacts -type f | sed 's/^/ /' - exit 1 - fi - cp "$ZIP" "feed-$ARCH/" + cp artifacts/hyperbin-macos-$ARCH/hyperbin-${VERSION}-macos-${ARCH}.zip "feed-$ARCH/" ./sparkle/bin/generate_appcast --ed-key-file "$KEY" \ --download-url-prefix "${CDN_URL}/releases/${VERSION}/" \ "feed-$ARCH/" @@ -402,15 +387,8 @@ jobs: - name: Build the Windows appcast run: | - # find, not a constructed path — see the macOS appcast step. - EXE=$(find artifacts -type f -name "hyperbin-*-windows-x64.exe" | head -1) - SIGFILE=$(find artifacts -type f -name "eddsa-signature.txt" | head -1) - if [ -z "$EXE" ] || [ -z "$SIGFILE" ]; then - echo "::error::missing Windows installer or its EdDSA signature" - find artifacts -type f | sed 's/^/ /' - exit 1 - fi - SIG=$(cat "$SIGFILE") + EXE="artifacts/hyperbin-windows-x64/hyperbin-${VERSION}-windows-x64.exe" + SIG=$(cat artifacts/hyperbin-windows-x64/eddsa-signature.txt) LEN=$(stat -f%z "$EXE") BUILD=$(git rev-list --count "$GITHUB_REF_NAME") # sparkle:version is the build number WinSparkle compares; From 5bc414665c2bfddfaee2ae1cec2af966cbc78d2e Mon Sep 17 00:00:00 2001 From: Leonard Souza Date: Sat, 15 Aug 2026 14:30:25 -0700 Subject: [PATCH 3/5] Add blinking to eye balls --- CMakeLists.txt | 2 + qml/OozeEyes.qml | 267 ++++++++++++++++++++++------------- qml/OozeVisual.qml | 30 +++- shaders/eye3d.frag | 123 ++++++++++++++++ shaders/eye3d.vert | 26 ++++ shaders/ooze3d.frag | 84 ++++++++++- shaders/ooze3d.vert | 60 +++++++- src/effects/OozeEffect.cpp | 233 +++++++++++++++++++++++++++++- src/effects/OozeEffect.h | 81 ++++++++--- src/effects/OozeGeometry.cpp | 7 +- src/effects/OozeShape.h | 10 ++ 11 files changed, 788 insertions(+), 135 deletions(-) create mode 100644 shaders/eye3d.frag create mode 100644 shaders/eye3d.vert diff --git a/CMakeLists.txt b/CMakeLists.txt index 19c0b00..0a832bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -375,6 +375,8 @@ qt_add_resources(hyperbin "hyperbin_shaders3d" FILES shaders/ooze3d.vert shaders/ooze3d.frag + shaders/eye3d.vert + shaders/eye3d.frag ) # Headless swarm check. No GUI, so it runs on CI and under the debugger diff --git a/qml/OozeEyes.qml b/qml/OozeEyes.qml index 730d744..61b651e 100644 --- a/qml/OozeEyes.qml +++ b/qml/OozeEyes.qml @@ -1,137 +1,200 @@ import QtQuick import QtQuick3D -// Eyeballs suspended in the gel. +// Eyeballs set into the gel. // -// They drift through the body, turn up in greater numbers as the bin -// fills, and all look at the camera — which is what makes the thing read -// as awake rather than as debris. The pupils flick between fixations the -// way real eyes do: a saccade is close to instantaneous, so these snap -// rather than glide. Easing them would look like something searching; -// snapping looks like something watching. +// They do not travel. Where each one sits, how big it is and which way +// the gel faces under it all come from OozeEffect, which owns the body's +// profile — see its eyeSpheres/eyeNormals. What is left here is the part +// that needs the CAMERA, which the scene owns and the effect does not: +// aiming them. +// +// The pupils flick between fixations the way real eyes do: a saccade is +// close to instantaneous, so these snap rather than glide. Easing them +// would look like something searching; snapping looks like something +// watching. Node { id: eyes - /// The OozeEffect. Supplies the level, the clock, and eyeAt(). + /// The OozeEffect. Supplies the clock and where the eyes are. required property var effect - /// The camera's tilt in degrees. The gaze frame leans back by this - /// so every eye faces the lens. + /// The camera's tilt in degrees. Every gaze starts from here. required property real camTilt - /// The bin's width in scene units; eye size is a fraction of it. - required property real binWidth - /// The most that can ever be on screen. + /// The gel's own colour and how it absorbs and scatters, handed + /// straight down from the material that draws the body. + /// + /// Passed rather than restated. The lids are goo closing over the + /// ball and are shaded with the same maths, so if these two ever + /// disagreed the lid would be a slightly different substance from the + /// body it is supposed to be part of — the kind of difference nobody + /// spots as a wrong number, only as "the eyes look stuck on". + required property color gooTint + required property real gooAbsorption + required property real gooScatter + + /// How far the gel's own surface pulls a gaze off the camera. + /// + /// At 0 every eye stares down the lens wherever it sits, which is + /// what this looked like first and why the ones out near the + /// silhouette read as decals: an eye buried in something has an + /// orbit, and an orbit points where the surface points. At 1 they + /// would face straight out of the body and the ones on the sides + /// would be looking away entirely. /// - /// The delegate count is CONSTANT and the level only decides how many - /// of them are visible. Driving the count from the level rebuilds - /// every delegate on the frame it changes, and this scene has been - /// here before: the bubbles did exactly that and cost four times the - /// whole effect before they were removed. - readonly property int maxEyes: 9 - readonly property real level: effect ? effect.level : 0 + /// A third is the useful amount. It costs the eyes on the front + /// almost nothing — the normal there is already the camera — and + /// turns one on the flank by about thirty degrees, which is enough to + /// read as set into the surface and not so much that it stops + /// watching you. + property real gazeBias: 0.35 + + readonly property var spheres: effect ? effect.eyeSpheres : [] + readonly property var normals: effect ? effect.eyeNormals : [] readonly property real time: effect ? effect.time : 0 - readonly property int active: Math.round(level * maxEyes) + + /// Toward the camera. It is orthographic, so this is the same + /// direction everywhere in the scene and there is no per-eye look-at + /// to compute — only the lean away from it that the gel asks for. + readonly property vector3d camDir: Qt.vector3d( + 0, Math.sin(camTilt * Math.PI / 180), Math.cos(camTilt * Math.PI / 180)) + + /// The camera's own up, in the scene. The lids close along it, so + /// they sweep the face of each ball that is actually visible rather + /// than some direction that only happens to suit the eyes on the + /// body's wall. It is camDir turned a quarter turn about x. + readonly property vector3d camUp: Qt.vector3d( + 0, Math.cos(camTilt * Math.PI / 180), -Math.sin(camTilt * Math.PI / 180)) // A stable per-eye value in [0,1). Same index, same number, every - // frame — so an eye keeps its size and its path instead of being - // re-rolled whenever anything re-evaluates. + // frame — so an eye keeps its saccade instead of being re-rolled + // whenever anything re-evaluates. function rnd(a, b) { const s = Math.sin(a * 127.1 + b * 311.7) * 43758.5453; return s - Math.floor(s); } Repeater3D { - model: eyes.maxEyes + // CONSTANT, and the list's length only decides how many are + // shown. Driving the count from the level rebuilds every delegate + // on the frame it changes, and this scene has been here before: + // the bubbles did exactly that and cost four times the whole + // effect before they were removed. + model: eyes.effect ? eyes.effect.maxEyes : 0 delegate: Node { id: eye required property int index - readonly property real seedA: eyes.rnd(index, 1) - readonly property real seedB: eyes.rnd(index, 2) - readonly property real seedC: eyes.rnd(index, 3) - - // RADIUS, not diameter. The mesh is a unit sphere, so a - // scale of s spans 2s — sized as a diameter, the first pass - // came out at twice the intent and the eyes sat on the gel - // rather than in it. - readonly property real size: eyes.binWidth * (0.036 + 0.028 * seedA) - readonly property real drift: 0.045 + 0.075 * seedB - - // Around the bin, and up and down it. The vertical wander is - // small: an eye that travels the body's whole height reads as - // falling, not floating. - readonly property real angle: seedC * 6.2831853 - + eyes.time * drift * (seedA > 0.5 ? 1 : -1) - readonly property real height: 0.18 + 0.62 * seedB - + 0.06 * Math.sin(eyes.time * drift * 2.1 - + index) - - // How deep it sits, as a fraction of the body's half-width. - // - // The useful range is narrow and not obvious. An eye breaks - // the surface only once sink exceeds 1 - eyeRadius/bodyRadius, - // which for these sizes is about 0.92 — below that it is - // wholly inside and merely ghosts through the gel. So this - // rides just under and just over 1: the low end buries it, - // the high end stands it half clear, and the swing carries - // each eye slowly between the two. - readonly property real sink: 0.965 + 0.075 * Math.sin(eyes.time * 0.31 + index * 2.0) - - visible: index < eyes.active && eyes.effect - position: eyes.effect ? eyes.effect.eyeAt(height, angle, sink) - : Qt.vector3d(0, 0, 0) + readonly property bool out: index < eyes.spheres.length + readonly property var sphere: out ? eyes.spheres[index] : null + readonly property var normal: out ? eyes.normals[index] : null + readonly property real size: sphere ? sphere.w : 1 + /// 1 wide open, 0 shut. Rides in the normal's spare slot. + readonly property real open: normal ? normal.w : 1 - // --- the gaze frame ----------------------------------------- - // Leaned back to match the camera, so a child pointing along - // +z is pointing down the lens. The camera is orthographic, - // so this is the same for every eye no matter where it sits — - // there is no per-eye look-at to compute. - eulerRotation.x: -eyes.camTilt + visible: out + position: sphere ? Qt.vector3d(sphere.x, sphere.y, sphere.z) + : Qt.vector3d(0, 0, 0) + // --- the gaze frame ----------------------------------------- + // Somewhere between the lens and the way the gel faces here. + readonly property vector3d gaze: normal + ? eyes.camDir.times(1 - eyes.gazeBias) + .plus(Qt.vector3d(normal.x, normal.y, normal.z) + .times(eyes.gazeBias)) + .normalized() + : eyes.camDir + + // Yaw then pitch, as two nested nodes rather than one node's + // eulerRotation. Which order Qt composes a pair of Euler + // angles in is a thing to look up and get wrong; nesting says + // it outright, and the pair is exactly the decomposition of a + // direction into (turn, then lift): + // + // Ry(yaw) * Rx(pitch) * +z = (sin y cos p, -sin p, cos y cos p) Node { - // The saccade. Floor(time) picks a fixation, and the - // fixation is hashed into an offset, so the eye holds - // still and then jumps — no interpolation anywhere. - readonly property int fix: Math.floor(eyes.time * 1.6 + eye.index * 3.7) - readonly property bool blank: eyes.rnd(fix, eye.index) > 0.72 - - // A fixation that lands on the camera, roughly one in - // four, is what sells the rest: an eye that is always - // darting never appears to have noticed you. - eulerRotation.x: blank ? 0 : (eyes.rnd(fix, eye.index + 11) - 0.5) * 26 - eulerRotation.y: blank ? 0 : (eyes.rnd(fix, eye.index + 23) - 0.5) * 34 - - Model { - source: "qrc:/icons/meshes/eye.mesh" - // The iris is on the model's -z; +z is the back of - // the eyeball. Measured by rendering the mesh from - // six directions rather than read off the asset. - eulerRotation.y: 180 - scale: Qt.vector3d(eye.size, eye.size, eye.size) - materials: eyeMaterial + eulerRotation.y: Math.atan2(eye.gaze.x, eye.gaze.z) * 180 / Math.PI + + Node { + eulerRotation.x: -Math.asin(Math.max(-1, Math.min(1, eye.gaze.y))) + * 180 / Math.PI + + Node { + // The saccade. Floor(time) picks a fixation, and + // the fixation is hashed into an offset, so the + // eye holds still and then jumps — no + // interpolation anywhere. + readonly property int fix: + Math.floor(eyes.time * 1.6 + eye.index * 3.7) + readonly property bool blank: eyes.rnd(fix, eye.index) > 0.72 + + // A fixation that lands on the camera, roughly one + // in four, is what sells the rest: an eye that is + // always darting never appears to have noticed + // you. + eulerRotation.x: blank ? 0 : (eyes.rnd(fix, eye.index + 11) - 0.5) * 26 + eulerRotation.y: blank ? 0 : (eyes.rnd(fix, eye.index + 23) - 0.5) * 34 + + Model { + source: "qrc:/icons/meshes/eye.mesh" + // The iris is on the model's -z; +z is the + // back of the eyeball. Measured by rendering + // the mesh from six directions rather than + // read off the asset. + eulerRotation.y: 180 + scale: Qt.vector3d(eye.size, eye.size, eye.size) + + // One material per eye, and it has to be: + // `openness` is a uniform, and nine eyes + // blinking on nine different clocks need nine + // values of it. They share one shader and one + // pipeline — this is nine uniform buffers, + // not nine programs — and the maps are + // declared once above and merely referenced, + // so it is also one copy of each texture. + materials: CustomMaterial { + shadingMode: CustomMaterial.Shaded + cullMode: CustomMaterial.BackFaceCulling + property real openness: eye.open + property real gooTime: eyes.time + property vector3d camUp: eyes.camUp + property vector3d gazeW: eye.gaze + // Keeps the ragged rim of one eye's lid + // from being the same rag as its + // neighbour's. + property real gooSeed: eye.index * 7.31 + property color gooTint: eyes.gooTint + property real gooAbsorption: eyes.gooAbsorption + property real gooScatter: eyes.gooScatter + property TextureInput eyeAlbedo: TextureInput { + texture: albedoMap + } + property TextureInput eyeNormalMap: TextureInput { + texture: normalMap + } + vertexShader: "qrc:/shaders3d/eye3d.vert" + fragmentShader: "qrc:/shaders3d/eye3d.frag" + } + } + } } } } } - PrincipledMaterial { - id: eyeMaterial - baseColorMap: Texture { - source: "qrc:/icons/maps/eye_albedo.jpg" - generateMipmaps: true - mipFilter: Texture.Linear - } - normalMap: Texture { - source: "qrc:/icons/maps/eye_normal.png" - generateMipmaps: true - mipFilter: Texture.Linear - } - // Wet, not shiny. The cornea mesh was dropped, so the highlight - // has to come from the material — and a glossy sphere with no - // clearcoat reads as a marble. - roughness: 0.18 - specularAmount: 0.9 - cullMode: PrincipledMaterial.BackFaceCulling + // Declared once, referenced by all nine materials, so this is one + // upload of each rather than nine. + Texture { + id: albedoMap + source: "qrc:/icons/maps/eye_albedo.jpg" + generateMipmaps: true + mipFilter: Texture.Linear + } + Texture { + id: normalMap + source: "qrc:/icons/maps/eye_normal.png" + generateMipmaps: true + mipFilter: Texture.Linear } } diff --git a/qml/OozeVisual.qml b/qml/OozeVisual.qml index 2cb93f7..7696dff 100644 --- a/qml/OozeVisual.qml +++ b/qml/OozeVisual.qml @@ -28,6 +28,14 @@ Item { readonly property real binW: effect ? effect.binSize.width : 40 readonly property real binH: effect ? effect.binSize.height : 40 + // Where the eyes are, so the gel can climb them. (x, y, z, radius), + // and only the ones currently out are in the list — see + // OozeEffect::eyeSpheres. + readonly property var eyeList: effect ? effect.eyeSpheres : [] + function eyeSphere(i) { + return i < eyeList.length ? eyeList[i] : Qt.vector4d(0, 0, 0, 0) + } + View3D { anchors.fill: parent camera: cam @@ -94,7 +102,11 @@ Item { OozeEyes { effect: root.effect camTilt: cam.tilt - binWidth: root.binW + // The lids are the same substance as the body, so they read + // the body's numbers rather than carrying their own. + gooTint: sludgeMaterial.tint + gooAbsorption: sludgeMaterial.absorption + gooScatter: sludgeMaterial.scatter } Model { @@ -156,6 +168,22 @@ Item { property real dispersion: 0.35 property color tint: "#6fbf3a" + // The eyes, one uniform each. + // + // Nine of them written out rather than a loop, because a + // CustomMaterial has no array uniform and GLSL cannot index a + // uniform that is not an array. A slot nobody is using has a + // radius of zero, which the shader reads as "not there". + property vector4d eye0: root.eyeSphere(0) + property vector4d eye1: root.eyeSphere(1) + property vector4d eye2: root.eyeSphere(2) + property vector4d eye3: root.eyeSphere(3) + property vector4d eye4: root.eyeSphere(4) + property vector4d eye5: root.eyeSphere(5) + property vector4d eye6: root.eyeSphere(6) + property vector4d eye7: root.eyeSphere(7) + property vector4d eye8: root.eyeSphere(8) + vertexShader: "qrc:/shaders3d/ooze3d.vert" fragmentShader: "qrc:/shaders3d/ooze3d.frag" } diff --git a/shaders/eye3d.frag b/shaders/eye3d.frag new file mode 100644 index 0000000..eb0e25a --- /dev/null +++ b/shaders/eye3d.frag @@ -0,0 +1,123 @@ +VARYING vec3 vDirW; + +// sRGB in, linear out. Same reason as the gel's: a shaded CustomMaterial +// hands BASE_COLOR to Qt's own lighting and the scene tonemaps on the way +// out, so a colour literal or an 8-bit map fed in raw is gamma-encoded +// twice. +vec3 toLinear(vec3 c) +{ + return pow(max(c, vec3(0.0)), vec3(2.2)); +} + +float h31(vec3 p) +{ + return fract(sin(dot(p, vec3(127.1, 311.7, 74.7))) * 43758.5453); +} +float vnoise3(vec3 p) +{ + vec3 i = floor(p), f = fract(p); + f = f * f * (3.0 - 2.0 * f); + float a = mix(h31(i), h31(i + vec3(1, 0, 0)), f.x); + float b = mix(h31(i + vec3(0, 1, 0)), h31(i + vec3(1, 1, 0)), f.x); + float c = mix(h31(i + vec3(0, 0, 1)), h31(i + vec3(1, 0, 1)), f.x); + float d = mix(h31(i + vec3(0, 1, 1)), h31(i + vec3(1, 1, 1)), f.x); + return mix(mix(a, b, f.y), mix(c, d, f.y), f.z); +} + +// The lids, drawn ON the eyeball. +// +// The obvious build is a second sphere around this one, split and peeled +// back, wearing the gel's own material. It cannot work here, and the +// reason is worth writing down because it is not about the modelling: +// +// * the gel is drawn AFTER the eyes and is transparent, so it is depth +// tested and does not depth write. Wherever the ball is nearer than +// the gel, the ball wins outright — so nothing in the gel's fragment +// shader can ever cover an eye, however opaque it makes itself. +// +// * the gel CAN cover one by moving, which is what the socket does. +// But the body is 64 segments round and at these sizes one segment +// is as wide as a whole eye, so the gel can only close over one as a +// blob. A blink is a fast, crisp edge; that read as mush. +// +// The ball has neither problem. Its mesh is dense, and it is the nearest +// surface, so it owns these pixels by construction. What makes it read as +// goo rather than as an eyelid is that it is shaded through the SAME +// absorption and scattering the gel uses, from the same tint: where the +// cover is thin the eyeball still shows through it, and it goes opaque +// further in. The lid is not a colour, it is depth of goo. +void MAIN() +{ + vec4 albedo = texture(eyeAlbedo, UV0); + vec3 eyeCol = toLinear(albedo.rgb); + vec3 n0 = normalize(NORMAL); + + // --- how far under the goo ----------------------------------------- + // Latitude up the face of the ball you can actually SEE: the camera's + // up, squared off against this eye's own gaze. Three frames were + // tried and the first two each failed somewhere specific. + // + // * the model's own frame rolls with every saccade, so the lids + // swam about as the eye darted. + // + // * the scene's up is right for an eye on the body's wall and + // exactly wrong for one in the puddle. That surface is nearly + // horizontal, so a puddle eye's pole faces the camera, and a lid + // closing from "the top of the ball" closed over the pupil first + // and left the white all round it bare. + // + // * the camera's up, raw, is better and still not right. A puddle + // eye looks up out of the spill by about forty degrees, so the + // centre of its visible face is not at zero in that frame — the + // lid reached the pupil while the top of the ball was still + // clear, which is the same failure a third of the way along. + // + // Taking the component perpendicular to the gaze puts the middle of + // the visible face at zero for every eye, wall or puddle, so one pair + // of numbers closes all of them the same way. It cannot go degenerate + // here: no gaze turns more than about a third of a right angle off + // the lens, and the camera's up is square to that. + vec3 up = normalize(camUp - gazeW * dot(camUp, gazeW)); + float lat = dot(vDirW, up); + + // A ragged edge. A clean arc reads as a moulded eyelid; the whole + // point of this is that the gel has closed over it, and gel does not + // have an edge like that. Drifting, slowly, so the rim creeps. + float wob = (vnoise3(vDirW * 4.6 + vec3(gooSeed, gooTime * 0.18, gooSeed)) + - 0.5) * 0.15; + + // Open, the two edges sit out past the poles and take only a sliver + // off the top and bottom of the disc — the goo already laps over the + // ball's rim as GEOMETRY, and doing that job twice cost more of the + // eye than either did alone. Shut, they cross, and the upper travels + // half again as far as the lower, as a real lid does. + float topEdge = mix(-0.22, 0.92, openness) + wob; + float botEdge = mix(-0.12, -0.95, openness) - wob; + float over = max(lat - topEdge, botEdge - lat); + float cover = smoothstep(-0.03, 0.20, over); + + // --- the goo over it ------------------------------------------------ + // Beer-Lambert against the eyeball itself, exactly as the gel runs it + // against the bin. At cover 0 the transmittance is 1 and this is the + // eyeball untouched, so the two sides meet with no seam to hide. + vec3 tintL = toLinear(gooTint.rgb); + vec3 sigma = (vec3(1.0) - tintL) * gooAbsorption * 3.0; + vec3 trans = exp(-sigma * (1.45 * cover)); + BASE_COLOR = vec4(eyeCol * trans + tintL * gooScatter * (vec3(1.0) - trans), + 1.0); + + // The eyeball's own bump, and it stops where the goo starts: what is + // under a covering of gel does not show its texture through it. + vec3 nm = texture(eyeNormalMap, UV0).rgb * 2.0 - 1.0; + vec3 mapped = normalize(TANGENT * nm.x + BINORMAL * nm.y + n0 * nm.z); + NORMAL = normalize(mix(mapped, n0, cover)); + + // Wet where it is bare and gel where it is not. The ball is polished + // and the gel is not quite, so this is a real difference and it is + // one more thing telling the two apart at a size where the shapes + // cannot. + ROUGHNESS = mix(0.18, 0.24, cover); + SPECULAR_AMOUNT = mix(0.90, 0.40, cover); + METALNESS = 0.0; + FRESNEL_POWER = 2.5; +} diff --git a/shaders/eye3d.vert b/shaders/eye3d.vert new file mode 100644 index 0000000..923eb29 --- /dev/null +++ b/shaders/eye3d.vert @@ -0,0 +1,26 @@ +// The eyeball, and the goo that closes over it. +// +// All this stage does is hand the fragment shader the direction of this +// surface point in the SCENE's frame rather than the model's. Everything +// about the lid is decided there, and every one of those decisions has to +// be independent of which way the eye is currently pointing: +// +// * the lid must not turn with the eye. Eyelids stay put while the eye +// rotates under them, and these are goo — goo hangs downward whatever +// the ball beneath it is looking at. Measured in model space the lid +// line rolled with every saccade. +// +// * the ragged edge must not swim. Noise sampled on the model's own +// coordinates is carried around by the ball's rotation, so the +// wobble crawled along the rim each time the eye darted. Sampled on +// the scene direction it is fixed in the world, which is where the +// goo is. +// +// One vector answers both. For a sphere the outward direction IS the +// surface normal, so this is also exactly the axis the latitude wants. +VARYING vec3 vDirW; + +void MAIN() +{ + vDirW = normalize(mat3(MODEL_MATRIX) * VERTEX); +} diff --git a/shaders/ooze3d.frag b/shaders/ooze3d.frag index c105ef0..01962ac 100644 --- a/shaders/ooze3d.frag +++ b/shaders/ooze3d.frag @@ -1,5 +1,6 @@ VARYING vec2 vScreen; VARYING vec3 vNormalW; +VARYING vec3 vPosO; VARYING float vThick; VARYING float vHeight; VARYING float vLump; @@ -21,6 +22,47 @@ vec3 toLinear(vec3 c) return pow(max(c, vec3(0.0)), vec3(2.2)); } +// The meniscus where the gel meets an eye. +// +// This is the same division of labour the lumps use in the vertex shader, +// for the same reason. There, the coarse band moves vertices and the fine +// band only tilts the normal, because detail below the vertex spacing +// cannot be in the geometry at all. Here the eye is the thing below the +// spacing: the body is 64 segments round, and at the size these are, one +// segment is as wide as a whole eye. The broad swell fits in the mesh and +// is done there; the crease around the rim of the ball does not fit in +// the mesh at any amplitude, and pushing harder on the vertices only ever +// made the swell wider. +// +// A RING, and that is the whole point of it. Something pressed into a +// thick liquid is not surrounded by a mound — the liquid is held down by +// the ball itself and piles up at its edge, so the peak belongs just +// outside the silhouette. A shape that peaked at the centre would have to +// be tall enough to show at the rim, and anything that tall closed over +// the pupil. +// +// Returns the ring's height, 0..1, and accumulates the slope along the +// surface so the light has something to catch. +float eyeCollar(vec3 p, vec3 nrm, vec4 e, inout vec3 slope) +{ + if (e.w <= 0.0) + return 0.0; + vec3 rel = p - e.xyz; + float u = length(rel) / e.w; + float k = (u - 1.20) / 1.15; // peak just outside the ball, gone by 2.35 + float w = 1.0 - k * k; + if (w <= 0.0) + return 0.0; + // Away from the eye, along the surface. Near the ball's silhouette + // this is very nearly the view direction, so it has to be projected + // back onto the tangent plane or the tilt goes into the surface. + vec3 t = rel - nrm * dot(rel, nrm); + float tl = length(t); + if (tl > 1e-5) + slope += (t / tl) * (-2.0 * k / 1.15); + return w; +} + void MAIN() { // Where we are on the bin, 0..1. @@ -38,13 +80,42 @@ void MAIN() // outline was what made the gel take the bin's form, slots and all, // instead of being a body the bin sits inside. vec3 n = normalize(vNormalW); + + // Deepest wins rather than stacking, as everywhere else here: two + // eyes close together would otherwise raise a rim twice the size of + // anything either could make alone. No check for whether the eye is + // on the far side of the body — the ring dies out at a couple of eye + // radii and the far side is most of a bin away, so the distance has + // already answered it. + vec3 slope = vec3(0.0); + float collar = eyeCollar(vPosO, n, eye0, slope); + collar = max(collar, eyeCollar(vPosO, n, eye1, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye2, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye3, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye4, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye5, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye6, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye7, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye8, slope)); + // Overstated, and deliberately — the same constant fudge the vertex + // shader applies to the lumps and for the same reason. The body is + // smooth and the environment is a soft studio probe, so a + // geometrically honest tilt moves this shading by almost nothing. An + // honest 0.55 went in first and the ring was, measured against a flat + // red debug fill, landing exactly where it should and shading like it + // was not there at all. + n = normalize(n - slope * 1.70); + // The lumps thicken and thin the body as well as bending its surface. // Shape alone was nearly invisible: a smooth gel under a soft studio // probe shades almost identically whichever way its normal points, so // the animation was running and could not be seen. Varying how much // gel the light has to cross is what makes it read as something // alive, because it changes the COLOUR and not just the highlight. - float thick = clamp(vThick * (1.0 + vLump * 0.55), 0.0, 1.0); + // The collar is gel piled up, so there is more of it to see through + // here — which is what turns the ring from a highlight into something + // with depth, for the same reason the lumps feed this at all. + float thick = clamp(vThick * (1.0 + vLump * 0.55) + collar * 0.55, 0.0, 1.0); // --- refraction --------------------------------------------------- // Two parts, and the second is what makes it read as something @@ -179,8 +250,15 @@ void MAIN() // Low roughness with a clearcoat is what makes it wet rather than // rubbery; the environment does the rest. // Not a mirror: at 0.07 with a clearcoat this read as chromed metal. - ROUGHNESS = 0.24; METALNESS = 0.0; FRESNEL_POWER = 2.5; - SPECULAR_AMOUNT = 0.40 * (1.0 - lidHole); + // Wettest at the meniscus. The crest of the collar is the thinnest, + // most sharply curved gel anywhere on the body, and on a real one + // that is where the light runs in a line. It is also the cue that + // does the most work here: the ring's SHAPE is nearly invisible under + // a probe this soft, but a bright edge at the ball's rim reads + // immediately as the two things touching. + float wet = smoothstep(0.45, 1.0, collar); + ROUGHNESS = 0.24 - 0.09 * wet; + SPECULAR_AMOUNT = (0.40 + 0.50 * wet) * (1.0 - lidHole); } diff --git a/shaders/ooze3d.vert b/shaders/ooze3d.vert index 38dd4de..931b1a5 100644 --- a/shaders/ooze3d.vert +++ b/shaders/ooze3d.vert @@ -8,6 +8,11 @@ // wants is where the pixel actually LANDS, in the bin's own pixels. VARYING vec2 vScreen; VARYING vec3 vNormalW; +// Where this pixel is on the body, in the bin's own units and in the same +// space the eyes are given in — so the fragment shader can measure its +// distance to one. Object space rather than world: the scene translates +// the whole thing onto the bin, and the eyes are not translated with it. +VARYING vec3 vPosO; VARYING float vThick; VARYING float vHeight; VARYING float vLump; @@ -109,6 +114,52 @@ float blisterAt(vec3 q) } return s; } +// The gel climbing an eye. +// +// Something set into a thick liquid does not leave the surface flat +// around it: the liquid rides up its sides and holds it. Without this the +// eyes were beads resting ON the body, which is the same failure the +// ridges were added to fix one level up — a shape carrying no evidence of +// anything ever having touched it. +// +// A quadratic dome rather than another noise octave, for the same reason +// the blisters are one: what is wanted is a few distinct ROUND things in +// places that are known, and noise of any spectrum gives an even scatter +// of bumps instead. +// +// It peaks at the eye's own centre, which is the one part of it nobody +// ever sees — the eyeball is drawn there, in front, and hides it. What +// reads is the ring around the outside. That is also why the reach is +// well over the eye's own radius: a dome that stopped at the ball would +// be entirely behind it. +float eyeBulge(vec3 q, vec4 e) +{ + // e.xyz is the centre, e.w the radius. Zero means the slot is empty. + if (e.w <= 0.0) + return 0.0; + float d = length(q - e.xyz) / (e.w * 2.4); + // Scaled by the EYE, not by the bin. A rise measured against the bin + // is the same for all of them, and the eyes vary in size by nearly + // two to one — so one number either drowned the small ones or barely + // touched the large ones, and there was no value in between. + return max(0.0, 1.0 - d * d) * e.w * 0.85; +} +float eyesAt(vec3 q) +{ + // Deepest wins rather than stacking, as with the blisters: two eyes + // that happened to sit close would otherwise raise one lump twice the + // size of anything either could make alone. + float s = eyeBulge(q, eye0); + s = max(s, eyeBulge(q, eye1)); + s = max(s, eyeBulge(q, eye2)); + s = max(s, eyeBulge(q, eye3)); + s = max(s, eyeBulge(q, eye4)); + s = max(s, eyeBulge(q, eye5)); + s = max(s, eyeBulge(q, eye6)); + s = max(s, eyeBulge(q, eye7)); + s = max(s, eyeBulge(q, eye8)); + return s; +} // Where the puddle has gathered. // // A ring of even thickness is the one thing a spill never is: it runs to @@ -139,7 +190,10 @@ float shadeAt(vec3 q, float lumpScale, float poolW, out float coarse, + fine * binWidth * 0.030 + waveAt(q) * binWidth * 0.015 * (1.0 - poolW) + gatherAt(q) * binWidth * 0.042 * poolW - + blisterAt(q) * binWidth * 0.055 * poolW; + + blisterAt(q) * binWidth * 0.055 * poolW + // Not windowed by the pool: the eyes are up on the body, which + // is where poolW has already gone to zero. + + eyesAt(q); } void MAIN() { @@ -185,7 +239,8 @@ void MAIN() float d0 = lumpRaw * binWidth * 0.030 * lumpScale + waveAt(VERTEX) * binWidth * 0.015 * (1.0 - poolW) + gatherAt(VERTEX) * binWidth * 0.042 * poolW - + blisterAt(VERTEX) * binWidth * 0.055 * poolW; + + blisterAt(VERTEX) * binWidth * 0.055 * poolW + + eyesAt(VERTEX); // ...and a breath. One slow cycle over about ten seconds, swelling // the whole body a hair — a thing that is perfectly still reads as a @@ -250,5 +305,6 @@ void MAIN() vScreen = (mv * vec4(pos, 1.0)).xy - (mv * vec4(0.0, 0.0, 0.0, 1.0)).xy; vNormalW = normalize(NORMAL_MATRIX * n); + vPosO = pos; POSITION = MODELVIEWPROJECTION_MATRIX * vec4(pos, 1.0); } diff --git a/src/effects/OozeEffect.cpp b/src/effects/OozeEffect.cpp index b3196c7..f1f2b59 100644 --- a/src/effects/OozeEffect.cpp +++ b/src/effects/OozeEffect.cpp @@ -101,6 +101,7 @@ void OozeEffect::setSurface(const QVector &coverage, int w, int h) void OozeEffect::step(float dt) { m_sim.step(dt); + updateEyes(); emit frameChanged(); const bool empty = isEmpty(); @@ -117,18 +118,236 @@ QMargins OozeEffect::margins(qreal iconSize) const x, OozeSim::marginBottom(iconSize)); } -QVector3D OozeEffect::eyeAt(float t, float angle, float sink) const +OozeEffect::EyeSeat OozeEffect::sweepSeat(float r, float y, float drdp, + float dydp, float angle) { - // Between the pool's crest and the gel's surface. Not the very - // bottom: an eye down in the puddle is behind the widest part of the - // body from a camera that looks slightly down, so it never shows. + // Every surface here is one ring radius and one height, both moving + // with a single parameter and swept round the axis. Its normal falls + // straight out of the two tangents: + // + // P(a, p) = (r sin a, y, r D cos a) + // dP/da x dP/dp = r * (D y' sin a, -r' D, y' cos a) + // + // The leading r only scales it, so it drops out in the normalise. + // Note the D on the x term and NOT on the z: a squashed circle's + // normal leans toward the flattened axis, which is why an eye on the + // front of the body faces the camera more squarely than one on the + // side faces sideways. + // + // The body walks this with p = height, so y' is 1 and r' is the + // profile's slope. The puddle walks it with p along the shoulder, + // where both move — and there r' is large and negative, which is what + // turns the normal to face nearly straight up. + // angle 0 puts the eye on +z, which is the side the camera is on. + EyeSeat s; + s.pos = QVector3D(r * std::sin(angle), y, + r * std::cos(angle) * OozeShape::kDepth); + s.nrm = QVector3D(OozeShape::kDepth * dydp * std::sin(angle), + -drdp * OozeShape::kDepth, + dydp * std::cos(angle)) + .normalized(); + return s; +} + +OozeEffect::EyeSeat OozeEffect::bodySeat(float t, float angle) const +{ + // Between the pool's crest and the gel's surface. const float lo = m_shape.poolCrest(); const float hi = m_shape.surfaceY(m_contentLine, m_sim.level()); const float y = lo + (hi - lo) * qBound(0.0f, t, 1.0f); - const float r = m_shape.radiusAt(y) * sink; - // angle 0 puts the eye on +z, which is the side the camera is on. - return QVector3D(r * std::sin(angle), y, r * std::cos(angle)); + const float e = std::max(0.5f, float(m_binSize.height()) * 0.02f); + const float dR = (m_shape.radiusAt(y + e) - m_shape.radiusAt(y - e)) / (2.0f * e); + return sweepSeat(m_shape.radiusAt(y), y, dR, 1.0f, angle); +} + +OozeEffect::EyeSeat OozeEffect::poolSeat(float u, float angle) const +{ + // The puddle's top, which is the shoulder OozeGeometry sweeps: out at + // the rim it is the widest part of the spill, and it climbs and draws + // back in on a smoothstep until it meets the foot of the body. Walked + // here with the same two lines the mesh uses, because an eye that sat + // on a different curve from the one the goo is made of would float + // above the spill or disappear under it. + const float poolR = m_shape.poolRadius(m_sim.level()); + const float crest = m_shape.poolCrest(); + const float topY = m_shape.poolTop(); + const auto ring = [&](float p) { + p = qBound(0.0f, p, 1.0f); + const float y = crest + (topY - crest) * p; + const float e = p * p * (3.0f - 2.0f * p); + return QVector3D(poolR + (m_shape.radiusAt(y) - poolR) * e, y, 0.0f); + }; + constexpr float kDu = 0.02f; + const QVector3D at = ring(u); + const QVector3D lo = ring(u - kDu), hi = ring(u + kDu); + return sweepSeat(at.x(), at.y(), + (hi.x() - lo.x()) / (2.0f * kDu), + (hi.y() - lo.y()) / (2.0f * kDu), angle); +} + +/// The same hash the scene used when it placed these itself, so an eye +/// keeps the identity it already had: same index, same size, same spot. +static float eyeHash(float a, float b) +{ + const float s = std::sin(a * 127.1f + b * 311.7f) * 43758.5453f; + return s - std::floor(s); +} + +void OozeEffect::updateEyes() +{ + m_eyeSpheres.clear(); + m_eyeNormals.clear(); + + const int n = qBound(0, int(std::lround(m_sim.level() * kMaxEyes)), kMaxEyes); + const float t = m_sim.time(); + const float binW = float(m_binSize.width()); + + for (int i = 0; i < n; ++i) { + const float fi = float(i); + const float seedA = eyeHash(fi, 1.0f); + const float seedB = eyeHash(fi, 2.0f); + const float seedC = eyeHash(fi, 3.0f); + + // RADIUS, not diameter. The mesh is a unit sphere, so a scale of s + // spans 2s — sized as a diameter, the first pass came out at twice + // the intent and the eyes sat on the gel rather than in it. + const float radius = binW * (0.036f + 0.028f * seedA); + + // WHERE an eye is does not change, and that is the point. + // + // These used to walk round the body — an angle with the clock in + // it — and a ball of gel with eyes revolving through it does not + // read as anything alive. Nothing suspended in something this + // thick travels; it sits where it set. What is left is a wobble + // small enough to be the gel shifting under it rather than the eye + // going anywhere: about a degree of turn and a hair of rise. + // + // Where they go is a LOW-DISCREPANCY set, not a random draw. + // + // Random was fine while they travelled: one that started out of + // sight came round eventually. Now that they stay put, a draw + // that happens to put six of the nine on the back of the bin puts + // them there for good, which is exactly what the first run of + // this looked like. + // + // The two coordinates get DIFFERENT constructions, and the reason + // is that this is nine points, not nine hundred. + // + // An R2 sequence went in first, on the reasoning that a + // two-dimensional low-discrepancy set is the right tool for a + // two-dimensional placement. It is — asymptotically. At nine + // points its stride comes back to within a fiftieth of where it + // started after only four steps, so while the 2D spread is fine + // its ONE-dimensional projections clump into pairs and triples. + // An angle that clumps is three eyes stacked in a vertical line + // down the front of the bin, which is what it drew. + // + // A golden-angle stride has no such return and lays nine points + // out very nearly evenly; the radical inverse in base two does + // the same for the height and does not track it. Both are chosen + // for THIS count rather than in the limit. + const float ua = std::fmod(fi * 0.3819660113f, 1.0f); + float ub = 0.0f; + for (int bits = i, place = 1; bits; bits >>= 1, ++place) + ub += (bits & 1) ? std::ldexp(1.0f, -place) : 0.0f; + + // Squeezed toward the camera, and LINEARLY. + // + // Spread over the whole circle, two thirds of them sit on a side + // of the body the camera never sees. Bending the angle by a power + // was the first attempt at that and it traded one fault for + // another: a power pulls hardest near zero, so it stacked eyes on + // the centre line while barely moving the ones round the back. A + // plain scale keeps whatever spacing it was handed and only + // narrows the arc — nine eyes evenly spread across the front and + // both flanks, the outermost pair just past the silhouette where + // they read as something further down in the goo rather than as + // nothing at all. + const float bent = (2.0f * ua - 1.0f) * 3.14159265f * 0.62f; + const float angle = bent + 0.020f * std::sin(t * 0.21f + fi * 1.7f); + + // The low third of them go in the PUDDLE, not on the wall. + // + // Which third is not a separate draw — it is the bottom of the + // same height sequence, so the two populations cannot both grow + // or both empty out. The spill is a nearly horizontal sheet and + // the body is a nearly vertical one, so an eye in it is looking + // up out of a flat pool rather than out of a wall; that falls out + // of the seat's own normal and needs nothing said here. + constexpr float kPoolShare = 0.22f; + const bool inPool = ub < kPoolShare; + + // Stopping short of the surface, and how far short depends on + // which way round the body it is. + // + // The camera looks DOWN. An eye on the far side of the body is + // therefore drawn HIGHER on screen than one at the same height in + // front of it, by about twice the body's radius times the sine of + // the tilt — here roughly a third of the whole range. Left with + // one ceiling for all of them, the ones at the back climbed over + // the bin's front rim; and because the gel's lid is cut away + // exactly there, they did not disappear behind the goo, they + // appeared to float in the bin's open mouth. + // + // The front gets the higher ceiling anyway. The gel's collar has + // run down the OUTSIDE of the bin and sits lower than the liquid + // within it, so even there the top of the range is not the top of + // the gel. + const float back = 0.5f * (1.0f - std::cos(bent)); + const float top = 0.90f - 0.34f * back; + const float height = 0.16f + (top - 0.16f) * (0.94f * ub + 0.06f * seedB) + + 0.008f * std::sin(t * 0.27f + fi * 2.3f); + + const EyeSeat seat = inPool + ? poolSeat(0.14f + 0.62f * (ub / kPoolShare), angle) + : bodySeat(height, angle); + + // The whole of the motion, and it runs along the normal: an eye + // rises out of the gel and settles back into it. + // + // Measured in the EYE's own radius rather than the body's, which + // is what lets one number serve a wall and a puddle at once — and + // the eyes vary in size by nearly two to one, so a distance fixed + // against the bin sat the small ones deeper than the large ones + // for no reason anyone could see. + // + // The useful range is narrow and not obvious. At 0 the ball's + // centre is ON the surface and half of it stands clear, which is + // already enough to expose the pupil; the gel's own lumps swing + // by more than this does, so the low end of the range is where + // they close over it. Much past 0.6 and it is a bead resting on + // top. Each eye breathes at its own rate so they never pulse + // together. + const float proud = radius * (0.30f + + 0.32f * std::sin(t * (0.28f + 0.14f * seedA) + seedC * 6.2831853f)); + + // Blinking, and only how MUCH — the lids themselves are drawn on + // the eyeball, in shaders/eye3d.frag, because the gel is 64 + // segments round and one of them is as wide as a whole eye. + // + // Not a symmetric fade. A real lid slams shut in about a tenth of + // a second, rests there, and opens back at half the speed, and + // that asymmetry is most of what makes a blink read as a blink + // rather than as something dissolving. Each eye keeps its own + // period and phase, so nine of them never go together. + constexpr float kShut = 0.11f, kHold = 0.05f, kOpen = 0.21f; + const float period = 3.2f + 4.6f * seedB; + const float phase = std::fmod(t + seedC * period, period); + float open = 1.0f; + if (phase < kShut) { + open = 1.0f - phase / kShut; + } else if (phase < kShut + kHold) { + open = 0.0f; + } else if (phase < kShut + kHold + kOpen) { + const float o = (phase - kShut - kHold) / kOpen; + open = o * o * (3.0f - 2.0f * o); + } + + m_eyeSpheres.append( + QVariant::fromValue(QVector4D(seat.pos + seat.nrm * proud, radius))); + m_eyeNormals.append(QVariant::fromValue(QVector4D(seat.nrm, open))); + } } } // namespace hyperbin diff --git a/src/effects/OozeEffect.h b/src/effects/OozeEffect.h index 581974d..373bc14 100644 --- a/src/effects/OozeEffect.h +++ b/src/effects/OozeEffect.h @@ -12,8 +12,10 @@ #include #include +#include #include #include +#include namespace hyperbin { @@ -39,8 +41,31 @@ class OozeEffect : public Effect Q_PROPERTY(float rimY READ rimY NOTIFY shapeChanged) Q_PROPERTY(float rimRadius READ rimRadius NOTIFY shapeChanged) Q_PROPERTY(QObject *iconTexture READ iconTexture NOTIFY shapeChanged) + /// The eyes, one entry each, only as many as are currently out. + /// + /// (x, y, z, radius) in bin-local units. Two consumers want this and + /// they want it in different places — qml/OozeEyes.qml puts a model + /// there, and the gel's vertex shader tents its surface up over it — + /// so it is computed once, here, against the same profile the mesh is + /// swept from. Working it out in QML was the earlier arrangement and + /// it could not answer the second question at all: the scene knows + /// where it PUT an eye, but not which way the gel faces there. + Q_PROPERTY(QVariantList eyeSpheres READ eyeSpheres NOTIFY frameChanged) + /// (x, y, z, open) — the gel's outward normal where each eye sits, + /// and how open that eye is, 0 shut to 1 wide. The scene leans a gaze + /// by the first and hands the second to the eyeball's own material, + /// which is where the lids are drawn. + Q_PROPERTY(QVariantList eyeNormals READ eyeNormals NOTIFY frameChanged) + /// How many there can ever be. The scene builds this many delegates + /// once and hides the ones that are not out; rebuilding the Repeater3D + /// whenever the count moved cost four times the whole effect when the + /// bubbles did it. + Q_PROPERTY(int maxEyes READ maxEyes CONSTANT) public: + /// The most eyes that can ever be out, at a full bin. + static constexpr int kMaxEyes = 9; + explicit OozeEffect(QObject *parent = nullptr); ~OozeEffect() override; @@ -81,24 +106,9 @@ class OozeEffect : public Effect float rimRadius() const { return m_shape.rimRadius(); } QObject *iconTexture() const; - /// Where to put an eye, in bin-local units. - /// - /// The scene cannot work this out for itself: the body's half-width - /// at a given height comes from the measured silhouette, and that - /// lives here. Reusing it means an eye is placed against the same - /// profile the mesh is swept from, so the two cannot drift apart — - /// the same reason OozeGeometry asks rather than measuring again. - /// - /// @param t 0 at the pool, 1 at the gel's surface. - /// @param angle radians around the bin's axis; 0 faces the camera. - /// @param sink fraction of the body's half-width to sit at. Below 1 - /// the eye is buried, at 1 its centre is on the surface - /// and half of it stands proud. The vertex shader then - /// displaces the surface over it, so the same value - /// submerges an eye where the gel bulges and exposes it - /// where the gel thins — which is the variation that - /// makes them look suspended rather than stuck on. - Q_INVOKABLE QVector3D eyeAt(float t, float angle, float sink) const; + QVariantList eyeSpheres() const { return m_eyeSpheres; } + QVariantList eyeNormals() const { return m_eyeNormals; } + int maxEyes() const { return kMaxEyes; } const OozeSim &sim() const { return m_sim; } /// The gel's silhouette, measured from the bin's artwork. Read by @@ -113,8 +123,43 @@ class OozeEffect : public Effect void shapeChanged(); private: + /// A place on the gel to sit an eye: a point, and which way the gel + /// faces there. + /// + /// The two always travel together. Working the normal out separately + /// meant two functions walking the same profile and either could be + /// changed without the other, which is the drift this whole file is + /// arranged to prevent. + struct EyeSeat + { + QVector3D pos; + QVector3D nrm; + }; + + /// Recompute where the eyes are. Called every step. + void updateEyes(); + + /// On the body's wall. + /// @param t 0 at the pool's crest, 1 at the gel's surface. + /// @param angle radians around the bin's axis; 0 faces the camera. + EyeSeat bodySeat(float t, float angle) const; + /// On the puddle's upper surface, which is a different shape and a + /// nearly horizontal one — so an eye there is looking up out of a + /// flat spill rather than out of a wall, and its normal has to come + /// from the shoulder the mesh actually sweeps. + /// @param u 0 at the puddle's outer rim, 1 where it meets the body. + EyeSeat poolSeat(float u, float angle) const; + + /// Both seats are the same surface of revolution seen twice: a ring + /// radius and a height that each move with one parameter. Given how + /// fast they move, the normal is the same three lines either way. + static EyeSeat sweepSeat(float r, float y, float drdp, float dydp, + float angle); + OozeSim m_sim; OozeShape m_shape; + QVariantList m_eyeSpheres; + QVariantList m_eyeNormals; QSizeF m_binSize {40.0, 40.0}; QRectF m_binRect; float m_contentLine = 0.22f; diff --git a/src/effects/OozeGeometry.cpp b/src/effects/OozeGeometry.cpp index 8d910e6..690ebcd 100644 --- a/src/effects/OozeGeometry.cpp +++ b/src/effects/OozeGeometry.cpp @@ -273,8 +273,11 @@ void OozeGeometry::rebuild() push(innerR * std::cos(a), bodyTop + innerR * 0.13f * std::sin(a)); } // --- the sweep --------------------------------------------------------- - constexpr int kU = 64; // around, all the way round - constexpr float kDepth = 0.86f; // the bin is a little deeper than wide + constexpr int kU = 64; // around, all the way round + // The bin is a little deeper than wide. Shared with OozeShape so that + // whatever else gets placed on this surface is squashed by the same + // amount the surface is. + constexpr float kDepth = OozeShape::kDepth; const int nr = outline.size(); // A true solid of revolution, and it has to stay one. diff --git a/src/effects/OozeShape.h b/src/effects/OozeShape.h index 9dfd5db..bdea86f 100644 --- a/src/effects/OozeShape.h +++ b/src/effects/OozeShape.h @@ -19,6 +19,16 @@ namespace hyperbin { class OozeShape { public: + /// How much the body is flattened front to back when it is swept. + /// + /// The bin is a little deeper than it is wide, so the sweep squashes + /// z. It lives here rather than in OozeGeometry because anything that + /// puts something ON the surface has to apply it too: eyeAt() did not, + /// and an eye facing the camera came out a seventh of the body's + /// radius clear of the gel it was supposed to be sitting in — which + /// only showed at the front and back, where cos(angle) is largest. + static constexpr float kDepth = 0.86f; + /// Measure the bin's taper from its silhouette. Safe to call with an /// empty grid: falls back to a generic tapered barrel so the effect /// still draws something before the first artwork arrives. From 6122cf9848494077a511dfb6cfad08960f1a2c31 Mon Sep 17 00:00:00 2001 From: Leonard Souza Date: Sat, 15 Aug 2026 14:43:37 -0700 Subject: [PATCH 4/5] Fix eyelids --- qml/OozeEyes.qml | 5 +++ shaders/eye3d.frag | 92 ++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 82 insertions(+), 15 deletions(-) diff --git a/qml/OozeEyes.qml b/qml/OozeEyes.qml index 61b651e..349152c 100644 --- a/qml/OozeEyes.qml +++ b/qml/OozeEyes.qml @@ -92,6 +92,10 @@ Node { readonly property real size: sphere ? sphere.w : 1 /// 1 wide open, 0 shut. Rides in the normal's spare slot. readonly property real open: normal ? normal.w : 1 + /// How far this eye's lid axis is canted off the horizontal, + /// in radians. Constant per eye — it is anatomy, not motion — + /// so it is hashed here rather than sent every frame. + readonly property real lidRoll: (eyes.rnd(index, 37) - 0.5) * 0.9 visible: out position: sphere ? Qt.vector3d(sphere.x, sphere.y, sphere.z) @@ -160,6 +164,7 @@ Node { property real gooTime: eyes.time property vector3d camUp: eyes.camUp property vector3d gazeW: eye.gaze + property real lidRoll: eye.lidRoll // Keeps the ragged rim of one eye's lid // from being the same rag as its // neighbour's. diff --git a/shaders/eye3d.frag b/shaders/eye3d.frag index eb0e25a..47f4904 100644 --- a/shaders/eye3d.frag +++ b/shaders/eye3d.frag @@ -77,24 +77,86 @@ void MAIN() // of numbers closes all of them the same way. It cannot go degenerate // here: no gaze turns more than about a third of a right angle off // the lens, and the camera's up is square to that. - vec3 up = normalize(camUp - gazeW * dot(camUp, gazeW)); - float lat = dot(vDirW, up); + vec3 up0 = normalize(camUp - gazeW * dot(camUp, gazeW)); + // ...and then CANTED, by its own angle per eye. + // + // Lids square to the horizon are the giveaway. Every real set sits on + // a tilted axis — the outer corner higher than the inner — and a + // whole bin of them closing along exactly the same line reads as nine + // copies of one thing rather than nine of a kind. The roll turns the + // whole aperture, both lids together, which is what an eye does; two + // lids canted separately would be a pair of jaws. + vec3 right0 = cross(up0, gazeW); + vec3 up = up0 * cos(lidRoll) + right0 * sin(lidRoll); + vec3 right = right0 * cos(lidRoll) - up0 * sin(lidRoll); + // The face of the ball, as flat coordinates. Both axes are square to + // the gaze, and the camera is orthographic, so these ARE the pixel + // offsets across the visible disc: -1 to 1 either way. + float x = dot(vDirW, right); + float y = dot(vDirW, up); - // A ragged edge. A clean arc reads as a moulded eyelid; the whole - // point of this is that the gel has closed over it, and gel does not - // have an edge like that. Drifting, slowly, so the rim creeps. + // A ragged edge, but only slightly. A clean arc reads as a moulded + // eyelid and the point of this is that gel has closed over the ball, + // which does not have an edge like that. At 0.15 though it stopped + // reading as a lid at all: the noise is worth a sixth of the ball's + // radius, enough to retract one end of the lid past the other and + // leave what looked like a bite taken out of the top. Drifting + // slowly, so the rim creeps. float wob = (vnoise3(vDirW * 4.6 + vec3(gooSeed, gooTime * 0.18, gooSeed)) - - 0.5) * 0.15; + - 0.5) * 0.07; + + // Open is NOT bare. A lid you only ever see on the way down is not a + // lid, it is a wipe: the eye has to be sitting in an aperture the + // whole time so that closing it is the same shape continuing to move. + // These sat out past the poles at first and took a sliver off — the + // ball read as a bead that occasionally got swallowed. + // + // y IS the projected height up the visible disc, so 0.52 takes the + // top quarter of it: an upper lid resting over the top of the iris, + // which is where a real one sits. The lower takes a little less, and + // the upper travels further on the way down, as a real pair does. + // Shut, the two OVERLAP, and by more than looks necessary. + // + // They used to cross by a tenth, which was ample while the edges were + // straight. Bowing them toward each other eats that margin from the + // middle: two curves that meet at the corners are furthest apart at + // the centre, and with the wobble at full throw the overlap there + // went negative — leaving a bright open slit across the eye on the + // one frame it was supposed to be shut. Worked out rather than + // eyeballed, because it is a single frame in a blink and would + // never have been caught by looking. + float topEdge = mix(-0.40, 0.52, openness) + wob; + float botEdge = mix(0.06, -0.58, openness) - wob; - // Open, the two edges sit out past the poles and take only a sliver - // off the top and bottom of the disc — the goo already laps over the - // ball's rim as GEOMETRY, and doing that job twice cost more of the - // eye than either did alone. Shut, they cross, and the upper travels - // half again as far as the lower, as a real lid does. - float topEdge = mix(-0.22, 0.92, openness) + wob; - float botEdge = mix(-0.12, -0.95, openness) - wob; - float over = max(lat - topEdge, botEdge - lat); - float cover = smoothstep(-0.03, 0.20, over); + // The edges CURVE, and they have to. + // + // Straight ones were the whole of what looked wrong. A lid defined by + // "everything past this latitude" is a plane cut through a sphere, + // and a plane cut is a half-dome cap — so the eye wore two skullcaps, + // top and bottom, with a straight band of aperture between them. + // + // Tilting the two cuts apart does not fix it either, and that is + // worth knowing before trying it: both boundary circles contain the + // view direction, so under an orthographic camera each projects to a + // straight LINE. Two lines cross once. Tilting them just seals one + // side of the eye and opens the other into a wedge. + // + // What makes an eye an eye is that both edges bow toward each other + // and meet at BOTH ends, which is a curve, not a cut. A quadratic is + // enough: at this coefficient the two meet just inside the ball's + // silhouette with about forty-five degrees between them, so the + // aperture is a proper pointed almond and the corners land where the + // goo is already lapping over the rim anyway. + // + // The upper bows harder than the lower. They do on a face too. + float overTop = (y + 0.62 * x * x) - topEdge; + float overBot = (botEdge + 0.50 * x * x) - y; + float over = max(overTop, overBot); + // A short ramp. The goo has to fade in rather than step — a hard + // alpha edge on a ball this size crawls with aliasing as the lid + // moves — but over a fifth of the radius the lid had no line to it at + // all and read as a stain. + float cover = smoothstep(-0.02, 0.10, over); // --- the goo over it ------------------------------------------------ // Beer-Lambert against the eyeball itself, exactly as the gel runs it From 77764839ddc4fc5cc0c4a75ccc3fb179d8855057 Mon Sep 17 00:00:00 2001 From: Leonard Souza Date: Sat, 15 Aug 2026 15:05:24 -0700 Subject: [PATCH 5/5] fix eye spacing --- qml/OozeEyes.qml | 15 +-- qml/OozeVisual.qml | 14 ++- shaders/ooze3d.frag | 5 + shaders/ooze3d.vert | 5 + src/core/OozeSim.h | 25 +++++ src/effects/OozeEffect.cpp | 211 +++++++++++++++++++++++++++++++++++-- src/effects/OozeEffect.h | 42 +++++++- 7 files changed, 297 insertions(+), 20 deletions(-) diff --git a/qml/OozeEyes.qml b/qml/OozeEyes.qml index 349152c..3c32e63 100644 --- a/qml/OozeEyes.qml +++ b/qml/OozeEyes.qml @@ -42,12 +42,15 @@ Node { /// would face straight out of the body and the ones on the sides /// would be looking away entirely. /// - /// A third is the useful amount. It costs the eyes on the front - /// almost nothing — the normal there is already the camera — and - /// turns one on the flank by about thirty degrees, which is enough to - /// read as set into the surface and not so much that it stops - /// watching you. - property real gazeBias: 0.35 + /// It costs the eyes on the front almost nothing whatever it is set + /// to — the normal there is already very nearly the camera — so this + /// is really a setting for the flanks alone. At a third, one out on + /// the side turned by only about thirty degrees, which still read as + /// an eye pasted on the silhouette staring past its own socket. Over + /// half turns it about fifty, which is a ball sitting in the goo and + /// looking out of it, and it keeps watching you everywhere it can + /// plausibly be said to be facing you at all. + property real gazeBias: 0.55 readonly property var spheres: effect ? effect.eyeSpheres : [] readonly property var normals: effect ? effect.eyeNormals : [] diff --git a/qml/OozeVisual.qml b/qml/OozeVisual.qml index 7696dff..66167ce 100644 --- a/qml/OozeVisual.qml +++ b/qml/OozeVisual.qml @@ -170,10 +170,11 @@ Item { // The eyes, one uniform each. // - // Nine of them written out rather than a loop, because a - // CustomMaterial has no array uniform and GLSL cannot index a - // uniform that is not an array. A slot nobody is using has a - // radius of zero, which the shader reads as "not there". + // Written out rather than looped, because a CustomMaterial has no + // array uniform and GLSL cannot index a uniform that is not an + // array. A slot nobody is using has a radius of zero, which the + // shaders read as "not there" — so the list is as long as + // OozeEffect::kMaxEyes and usually only part full. property vector4d eye0: root.eyeSphere(0) property vector4d eye1: root.eyeSphere(1) property vector4d eye2: root.eyeSphere(2) @@ -183,6 +184,11 @@ Item { property vector4d eye6: root.eyeSphere(6) property vector4d eye7: root.eyeSphere(7) property vector4d eye8: root.eyeSphere(8) + property vector4d eye9: root.eyeSphere(9) + property vector4d eye10: root.eyeSphere(10) + property vector4d eye11: root.eyeSphere(11) + property vector4d eye12: root.eyeSphere(12) + property vector4d eye13: root.eyeSphere(13) vertexShader: "qrc:/shaders3d/ooze3d.vert" fragmentShader: "qrc:/shaders3d/ooze3d.frag" diff --git a/shaders/ooze3d.frag b/shaders/ooze3d.frag index 01962ac..6b174e1 100644 --- a/shaders/ooze3d.frag +++ b/shaders/ooze3d.frag @@ -97,6 +97,11 @@ void MAIN() collar = max(collar, eyeCollar(vPosO, n, eye6, slope)); collar = max(collar, eyeCollar(vPosO, n, eye7, slope)); collar = max(collar, eyeCollar(vPosO, n, eye8, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye9, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye10, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye11, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye12, slope)); + collar = max(collar, eyeCollar(vPosO, n, eye13, slope)); // Overstated, and deliberately — the same constant fudge the vertex // shader applies to the lumps and for the same reason. The body is // smooth and the environment is a soft studio probe, so a diff --git a/shaders/ooze3d.vert b/shaders/ooze3d.vert index 931b1a5..ee85129 100644 --- a/shaders/ooze3d.vert +++ b/shaders/ooze3d.vert @@ -158,6 +158,11 @@ float eyesAt(vec3 q) s = max(s, eyeBulge(q, eye6)); s = max(s, eyeBulge(q, eye7)); s = max(s, eyeBulge(q, eye8)); + s = max(s, eyeBulge(q, eye9)); + s = max(s, eyeBulge(q, eye10)); + s = max(s, eyeBulge(q, eye11)); + s = max(s, eyeBulge(q, eye12)); + s = max(s, eyeBulge(q, eye13)); return s; } // Where the puddle has gathered. diff --git a/src/core/OozeSim.h b/src/core/OozeSim.h index 6363294..ba0abbe 100644 --- a/src/core/OozeSim.h +++ b/src/core/OozeSim.h @@ -32,6 +32,31 @@ class OozeSim /// How far down the bin the coating has crept, 0..1. Eased, so a bin /// emptied in one go does not snap clean. float level() const { return m_level; } + + /// How full the bin READS, 0 to 1, over the level's own easing. + /// + /// Not the same question as level(), and the difference has caught + /// something already. level() is how deep the gel is, and it is + /// floored at minShare the instant the bin is dirty at all — so it + /// only ever moves across the top third of its range, because a + /// shallower smear than that cannot be seen through a translucent + /// bin. Anything that wants to scale with how full the bin is, rather + /// than with how deep the goo is, has to have that floor taken back + /// off; used raw, level() makes a quarter-full bin look nearly the + /// same as a full one. + /// + /// Taken off the eased level rather than from fullness() directly, so + /// whatever reads this arrives with the goo rather than snapping the + /// moment the bin changes. + float fill() const + { + const float lo = params.maxLevel * params.minShare; + const float span = params.maxLevel - lo; + if (span <= 0.0f) + return m_level > 0.0f ? 1.0f : 0.0f; + const float f = (m_level - lo) / span; + return f < 0.0f ? 0.0f : (f > 1.0f ? 1.0f : f); + } /// Seconds since the coating first appeared. Drives the drip cycles. float time() const { return m_time; } diff --git a/src/effects/OozeEffect.cpp b/src/effects/OozeEffect.cpp index f1f2b59..c780cc9 100644 --- a/src/effects/OozeEffect.cpp +++ b/src/effects/OozeEffect.cpp @@ -1,6 +1,7 @@ #include "OozeEffect.h" #include +#include #include namespace hyperbin { @@ -186,6 +187,124 @@ OozeEffect::EyeSeat OozeEffect::poolSeat(float u, float angle) const (hi.y() - lo.y()) / (2.0f * kDu), angle); } +float OozeEffect::slotY(const EyeSlot &s) const +{ + // Both surfaces are measured up from the pool's crest — bodySeat and + // poolSeat each start there — so one line answers for either, and the + // only difference is how far up they reach. + const float crest = m_shape.poolCrest(); + const float topOf = s.pool ? m_shape.poolTop() + : m_shape.surfaceY(m_contentLine, m_sim.level()); + return crest + (topOf - crest) * qBound(0.0f, s.param, 1.0f); +} + +void OozeEffect::spreadEyes(EyeSlot *slot, int n) const +{ + if (n < 2) + return; + + const float binW = float(m_binSize.width()); + // Not merely "not intersecting". Two balls exactly touching still + // read as one lumpy thing at this size, and the goo needs somewhere + // to close around each of them — the collar reaches well over an eye's + // own radius, so leaving them a hair apart puts two meniscus rings on + // top of each other and neither shows. + const float margin = binW * 0.045f; + const float crest = m_shape.poolCrest(); + + // Measured in the surface's OWN units, not in the parameters. + // + // Angle and height are not comparable: a tenth of a radian is a fifth + // of the body's width, and a tenth of the height parameter is a + // fifteenth of its height. Pushing in parameter space moves eyes by + // wildly different amounts depending on which way they happen to be + // crowded, which mostly moved them sideways and never resolved a + // vertical pile. Arc length and height are both in bin pixels and can + // simply be compared. + // What each eye's own numbers are, worked out ONCE per pass and not + // once per pair. They only depend on one eye each, and there are n of + // them against n^2/2 pairs — computed in the inner loop, the profile + // lookups alone cost more than everything else in this effect put + // together, and measurably so: it put half again on the whole app's + // processor time. + const float bodySpan = m_shape.surfaceY(m_contentLine, m_sim.level()) - crest; + const float poolSpan = m_shape.poolTop() - crest; + float ey[kMaxEyes], ering[kMaxEyes], espan[kMaxEyes]; + + for (int pass = 0; pass < 8; ++pass) { + for (int i = 0; i < n; ++i) { + espan[i] = std::max(slot[i].pool ? poolSpan : bodySpan, 1.0f); + ey[i] = crest + espan[i] * qBound(0.0f, slot[i].param, 1.0f); + ering[i] = m_shape.radiusAt(ey[i]); + } + bool moved = false; + for (int a = 0; a < n; ++a) { + for (int b = a + 1; b < n; ++b) { + const float ya = ey[a], yb = ey[b]; + const float rA = ering[a], rB = ering[b]; + // Arc length, discounted by how edge-on it is. + // + // Two eyes out on the flank are properly apart in SPACE + // and still look stacked: the surface there is turned + // almost side-on, so a step round it barely moves on + // screen — about a quarter as far as the same step across + // the front. Spreading them by true arc alone left the + // silhouette looking like a pile of eyes that measured + // clean. Counting arc for less where the body turns away + // buys those pairs a wider berth, and the floor keeps it + // from running to infinity at the exact edge. + const float face = 0.5f * (std::cos(slot[a].angle) + + std::cos(slot[b].angle)); + const float ring = 0.5f * (rA + rB) + * (0.40f + 0.60f * std::abs(face)); + const float dx = ring * (slot[b].angle - slot[a].angle); + const float dy = yb - ya; + const float dist = std::sqrt(dx * dx + dy * dy); + const float need = slot[a].radius + slot[b].radius + margin; + if (dist >= need) + continue; + + // Straight on top of each other, which the sequences can + // do exactly: pick an axis rather than dividing by zero. + float ux = 1.0f, uy = 0.0f; + if (dist > 1e-3f) { + ux = dx / dist; + uy = dy / dist; + } + const float push = (need - dist) * 0.5f; + const float over = push * ux / std::max(ring, 1.0f); + slot[a].angle -= over; + slot[b].angle += over; + slot[a].param -= push * uy / espan[a]; + slot[b].param += push * uy / espan[b]; + moved = true; + } + } + + // Back inside their bounds after every pass, not once at the end. + // Clamping only at the end lets a pair settle in a place the + // clamp then undoes, putting them back on top of each other with + // no pass left to notice. + for (int i = 0; i < n; ++i) { + // A little past the arc they were dealt, so a crowded front + // has somewhere to give — but not so far round that an eye + // ends up behind the bin. + slot[i].angle = qBound(-2.30f, slot[i].angle, 2.30f); + if (slot[i].pool) { + slot[i].param = qBound(0.10f, slot[i].param, 0.80f); + } else { + // The same ceiling the placement applies, recomputed: + // spreading moves eyes round the body, and the ceiling + // depends on where round it they are. + const float back = 0.5f * (1.0f - std::cos(slot[i].angle)); + slot[i].param = qBound(0.14f, slot[i].param, 0.90f - 0.34f * back); + } + } + if (!moved) + break; + } +} + /// The same hash the scene used when it placed these itself, so an eye /// keeps the identity it already had: same index, same size, same spot. static float eyeHash(float a, float b) @@ -199,10 +318,39 @@ void OozeEffect::updateEyes() m_eyeSpheres.clear(); m_eyeNormals.clear(); - const int n = qBound(0, int(std::lround(m_sim.level() * kMaxEyes)), kMaxEyes); + // How many are out, and it is NOT proportional to the level. + // + // Straight proportion spread the difference evenly and so made + // neither end of the range feel like anything: a quarter-full bin + // still had a scatter of them, and a full one was only a few more. + // Squaring holds the low end nearly clear — a bin with a little in + // it gets one or two, which reads as something starting — and banks + // the whole increase into the top, where the point is that it should + // look infested. + // + // fill(), NOT level(). The two are different questions and using the + // wrong one here looked exactly like the code not working: level() is + // how DEEP the goo is and is floored at seventy per cent the moment + // the bin is dirty, so squaring it separated a quarter-full bin from + // a full one by a factor of two rather than of sixteen, and all four + // test renders came out with much the same crowd. + // + // With a floor of one, though. Squared alone rounds to nothing below + // about a third full, and a bin with goo in it and no eyes at all is + // not a quieter version of this effect — it is a different one. The + // first eye arrives with the first of the sludge; the rest are what + // the fill buys. + const float fill = m_sim.fill(); + const int want = int(std::lround(fill * fill * kMaxEyes)); + const int n = m_sim.isEmpty() ? 0 : qBound(1, want, kMaxEyes); const float t = m_sim.time(); const float binW = float(m_binSize.width()); + // Placed first, spread second, seated third. The spreading has to see + // all of them at once, so it cannot happen inside the loop that makes + // them. + EyeSlot slot[kMaxEyes] {}; + for (int i = 0; i < n; ++i) { const float fi = float(i); const float seedA = eyeHash(fi, 1.0f); @@ -247,9 +395,18 @@ void OozeEffect::updateEyes() // out very nearly evenly; the radical inverse in base two does // the same for the height and does not track it. Both are chosen // for THIS count rather than in the limit. - const float ua = std::fmod(fi * 0.3819660113f, 1.0f); + // Both sequences are started so that index 0 lands somewhere + // WORTH looking at, because the order is not arbitrary: the count + // rises with the bin, so the first indices are the only ones a + // barely-dirty bin ever shows. Left at their natural starts, eye + // zero came out on the back-left flank at the very bottom of the + // range — a bin with a little in it grew exactly one eye and it + // was behind the goo. The half-turn puts it dead centre front, + // and stepping the height sequence on by one puts it at mid + // height rather than down in the puddle. + const float ua = std::fmod(0.5f + fi * 0.3819660113f, 1.0f); float ub = 0.0f; - for (int bits = i, place = 1; bits; bits >>= 1, ++place) + for (int bits = i + 1, place = 1; bits; bits >>= 1, ++place) ub += (bits & 1) ? std::ldexp(1.0f, -place) : 0.0f; // Squeezed toward the camera, and LINEARLY. @@ -264,8 +421,11 @@ void OozeEffect::updateEyes() // both flanks, the outermost pair just past the silhouette where // they read as something further down in the goo rather than as // nothing at all. + // The base placement carries NO clock. Everything time-varying — + // the wobble, how proud it rides, the blink — is added after the + // spread, so the spread itself is a pure function of the count + // and the shape and can simply be remembered. const float bent = (2.0f * ua - 1.0f) * 3.14159265f * 0.62f; - const float angle = bent + 0.020f * std::sin(t * 0.21f + fi * 1.7f); // The low third of them go in the PUDDLE, not on the wall. // @@ -296,12 +456,45 @@ void OozeEffect::updateEyes() // the gel. const float back = 0.5f * (1.0f - std::cos(bent)); const float top = 0.90f - 0.34f * back; - const float height = 0.16f + (top - 0.16f) * (0.94f * ub + 0.06f * seedB) - + 0.008f * std::sin(t * 0.27f + fi * 2.3f); + const float height = 0.16f + (top - 0.16f) * (0.94f * ub + 0.06f * seedB); + + slot[i].angle = bent; + slot[i].param = inPool ? 0.14f + 0.62f * (ub / kPoolShare) : height; + slot[i].radius = radius; + slot[i].pool = inPool; + } - const EyeSeat seat = inPool - ? poolSeat(0.14f + 0.62f * (ub / kPoolShare), angle) - : bodySeat(height, angle); + // Nothing above guarantees they do not touch, so this does — and it + // is the same answer every frame until the bin itself moves, so it is + // worked out then and kept. + const float key = m_shape.surfaceY(m_contentLine, m_sim.level()) + + 7.0f * m_shape.poolTop() + 13.0f * binW; + if (n != m_spreadCount || !qFuzzyCompare(key, m_spreadKey)) { + spreadEyes(slot, n); + std::copy(slot, slot + n, m_spread); + m_spreadCount = n; + m_spreadKey = key; + } else { + std::copy(m_spread, m_spread + n, slot); + } + + for (int i = 0; i < n; ++i) { + const float fi = float(i); + const float seedA = eyeHash(fi, 1.0f); + const float seedB = eyeHash(fi, 2.0f); + const float seedC = eyeHash(fi, 3.0f); + const float radius = slot[i].radius; + + // The wobble goes on HERE, after the spread. About a degree of + // turn and a hair of rise — an order of magnitude under the gap + // the spread leaves, so it can shift an eye without ever walking + // one back into its neighbour. + const float angle = slot[i].angle + 0.020f * std::sin(t * 0.21f + fi * 1.7f); + const float param = slot[i].param + + (slot[i].pool ? 0.0f + : 0.008f * std::sin(t * 0.27f + fi * 2.3f)); + const EyeSeat seat = slot[i].pool ? poolSeat(param, angle) + : bodySeat(param, angle); // The whole of the motion, and it runs along the normal: an eye // rises out of the gel and settles back into it. diff --git a/src/effects/OozeEffect.h b/src/effects/OozeEffect.h index 373bc14..461085c 100644 --- a/src/effects/OozeEffect.h +++ b/src/effects/OozeEffect.h @@ -64,7 +64,13 @@ class OozeEffect : public Effect public: /// The most eyes that can ever be out, at a full bin. - static constexpr int kMaxEyes = 9; + /// + /// Every one of these is a slot in the gel's shaders as well — the + /// body has to swell around each and draw a meniscus at its rim, and + /// a CustomMaterial has no array uniform, so the count is written out + /// by hand in three places. Raising it means raising it there too; + /// qml/OozeVisual.qml has the list. + static constexpr int kMaxEyes = 14; explicit OozeEffect(QObject *parent = nullptr); ~OozeEffect() override; @@ -136,9 +142,32 @@ class OozeEffect : public Effect QVector3D nrm; }; + /// One eye's placement, before it is turned into a seat. + struct EyeSlot + { + float angle; ///< radians round the bin; 0 faces the camera + float param; ///< 0..1 up its own surface, body or puddle + float radius; + bool pool; + }; + /// Recompute where the eyes are. Called every step. void updateEyes(); + /// Push any two that would touch apart, in place. + /// + /// The placement sequences spread well but do not GUARANTEE a gap, + /// and at fourteen they demonstrably fail to: the golden angle has + /// near-returns at Fibonacci indices, so eyes 0 and 13 come back to + /// within a fiftieth of a turn of each other. Nothing about the + /// sequence can be tuned to fix that in general — the next count + /// would just fail at a different pair — so the gap is enforced here + /// instead of hoped for. + void spreadEyes(EyeSlot *slot, int n) const; + /// Where a slot's parameter puts it, in bin-local units. Body and + /// puddle share a floor, so this is one line either way. + float slotY(const EyeSlot &s) const; + /// On the body's wall. /// @param t 0 at the pool's crest, 1 at the gel's surface. /// @param angle radians around the bin's axis; 0 faces the camera. @@ -160,6 +189,17 @@ class OozeEffect : public Effect OozeShape m_shape; QVariantList m_eyeSpheres; QVariantList m_eyeNormals; + /// The last spread, and what it was spread against. + /// + /// Where the eyes settle depends only on how many there are and on + /// the shape they are settling on — never on the clock. The wobble + /// each carries is added afterwards and is far smaller than the gap + /// the spread leaves, so it cannot push a pair back together. So the + /// relaxation runs when the bin changes and not otherwise, which for + /// a bin that is mostly sitting still is almost never. + EyeSlot m_spread[kMaxEyes] {}; + int m_spreadCount = -1; + float m_spreadKey = 0.0f; QSizeF m_binSize {40.0, 40.0}; QRectF m_binRect; float m_contentLine = 0.22f;