From 3b83ff76c909f94423b114c1bae779cd8b63e3da Mon Sep 17 00:00:00 2001 From: alowpoly Date: Mon, 5 Oct 2026 13:35:57 -0300 Subject: [PATCH 01/10] feat(bake): observed surfaces read a FITS color cube: stated row order, a crop, declared unobserved rows and planetocentric sample rows --- .../bake/src/objects/geometry/ellipsoid.ts | 18 ++++++++ .../layers/observed-surfaces/contract.ts | 6 +-- .../observed-surfaces.test.mts | 30 +++++++++++++ .../observed-surfaces/observed-surfaces.ts | 44 ++++++++++++++++--- 4 files changed, 90 insertions(+), 8 deletions(-) diff --git a/packages/bake/src/objects/geometry/ellipsoid.ts b/packages/bake/src/objects/geometry/ellipsoid.ts index 9ea76ac693a..6a5b2d0cca4 100644 --- a/packages/bake/src/objects/geometry/ellipsoid.ts +++ b/packages/bake/src/objects/geometry/ellipsoid.ts @@ -235,3 +235,21 @@ export function planetographicRowsToMeshLatitude(data: Uint8Array, width: number } return output; } + +/** Resample an equirectangular map whose rows are samples of planetocentric latitude from +90 to -90 degrees inclusive (the first + * and last rows are the poles, as the Cassini ISS global maps of the PDS Atmospheres Node are gridded) onto rows evenly spaced in + * the mesh's own latitude: tan(planetocentric) = (b / a) tan(beta). The result has one row fewer than the samples. Rows are + * linearly interpolated; columns are unchanged. */ +export function planetocentricSampleRowsToMeshLatitude(data: Uint8Array, width: number, height: number, channels: number, axisRatio: number): Buffer { + if (!(axisRatio >= 1) || !Number.isFinite(axisRatio)) throw new RangeError('An axis ratio a / b must be finite and at least 1.'); + if (!(height >= 2) || data.length !== width * height * channels) throw new RangeError('Map bytes do not match its dimensions.'); + const rows = height - 1, rowBytes = width * channels, output = Buffer.alloc(rows * rowBytes); + for (let y = 0; y < rows; y += 1) { + const beta = Math.PI / 2 - (y + 0.5) / rows * Math.PI; + const planetocentric = Math.atan2(Math.sin(beta), axisRatio * Math.cos(beta)); + const source = Math.max(0, Math.min(rows, (Math.PI / 2 - planetocentric) / Math.PI * rows)); + const y0 = Math.min(rows - 1, Math.floor(source)), y1 = y0 + 1, fraction = source - y0; + for (let i = 0; i < rowBytes; i += 1) output[y * rowBytes + i] = Math.round(data[y0 * rowBytes + i]! * (1 - fraction) + data[y1 * rowBytes + i]! * fraction); + } + return output; +} diff --git a/packages/bake/src/objects/layers/observed-surfaces/contract.ts b/packages/bake/src/objects/layers/observed-surfaces/contract.ts index 175e4443ba7..39ee3634143 100644 --- a/packages/bake/src/objects/layers/observed-surfaces/contract.ts +++ b/packages/bake/src/objects/layers/observed-surfaces/contract.ts @@ -11,12 +11,12 @@ const continuation = obj({boundaryFraction: n, exponent: n, minimumBoundarySum: export type BoundaryContinuation = s.Infer; const color = obj({channels: s.literal(3, 4), palette: s.tuple(vector3, vector3, vector3), percentiles: vector2, transfer: s.literal('sqrt', 'power'), exponent: n, minimumCoverage: n, positiveValidity: opt(s.boolean)}); export type FalseColor = s.Infer; -const decode = s.union(obj({kind: s.literal('raster'), channels: s.literal(3, 4), crop: opt(region), continuation: opt(continuation)}), obj({kind: s.literal('fits'), bitpix: n, width: n, height: n, color, continuation: opt(continuation)})); +const decode = s.union(obj({kind: s.literal('raster'), channels: s.literal(3, 4), crop: opt(region), continuation: opt(continuation)}), obj({kind: s.literal('fits'), bitpix: n, width: n, height: n, color, continuation: opt(continuation)}), obj({kind: s.literal('fits-planes'), bitpix: n, width: n, height: n, firstRow: s.literal('north', 'south'), crop: opt(region)})); const provenance = obj({authority: str, model: str, sourcePath: opt(str)}); export type BaselineProvenance = s.Infer; const pixelPresence = {alphaValidity: opt(s.boolean), minimumBrightness: n}; export interface PixelPresence {alphaValidity?: boolean; minimumBrightness: number} -const coverage = s.union(obj({kind: s.literal('component-fits'), sources: s.tuple(str,str,str), unobservedRows: arr(vector2), reverseLongitude: s.boolean, longitudeOffsetDegrees: n, longitudePeriod: n}), obj({kind: s.literal('boundary-mean'), boundaryFraction: n, exponent: n, minimumBoundarySum: opt(n)}), obj({kind: s.literal('uniform-baseline'), ...pixelPresence, minimumCoverage: n, minimumRowCoverage: n, equatorialInsetRows: n, allowedBoundaryRange: vector2, transitionRows: n, baseline: opt(str), baselineProvenance: opt(provenance)})); +const coverage = s.union(obj({kind: s.literal('component-fits'), sources: s.tuple(str,str,str), unobservedRows: arr(vector2), reverseLongitude: s.boolean, longitudeOffsetDegrees: n, longitudePeriod: n}), obj({kind: s.literal('declared-rows'), unobservedRows: arr(vector2), reverseLongitude: s.boolean, longitudeOffsetDegrees: n, longitudePeriod: n}), obj({kind: s.literal('boundary-mean'), boundaryFraction: n, exponent: n, minimumBoundarySum: opt(n)}), obj({kind: s.literal('uniform-baseline'), ...pixelPresence, minimumCoverage: n, minimumRowCoverage: n, equatorialInsetRows: n, allowedBoundaryRange: vector2, transitionRows: n, baseline: opt(str), baselineProvenance: opt(provenance)})); export type UniformCoverage = Extract, {kind: 'uniform-baseline'}>; const baseline = obj({id: str, source: str, minimumBrightness: n, minimumCoverage: n, radiusFraction: n, minimumSampleShare: n, provenance}); export type DiscBaseline = s.Infer; @@ -28,7 +28,7 @@ const polarProjection = obj({tileSize: n, poles: arr(s.literal('north', 'south') export type PolarProjection = s.Infer; const productCommon = {filename: str, encoding: webpEncoding, transforms: opt(arr(transform)), removeAlpha: opt(s.boolean)}; const product = s.union(obj({...productCommon, kind: s.literal('surface'), packing: obj({bandCount: n, gutter: n, overscan: opt(n)})}), obj({...productCommon, kind: s.literal('poles'), projection: polarProjection}), obj({...productCommon, kind: s.literal('thumbnail')})); -const dataset = obj({id: str, source: str, decode, products: arr(product), transforms: opt(arr(transform)), coverage: opt(coverage), calibration: opt(calibration), atmosphereColor: opt(brightTail), planetographicAxisRatio: opt(n)}); +const dataset = obj({id: str, source: str, decode, products: arr(product), transforms: opt(arr(transform)), coverage: opt(coverage), calibration: opt(calibration), atmosphereColor: opt(brightTail), planetographicAxisRatio: opt(n), planetocentricSampleRows: opt(n)}); export const observedRecipe = obj({schema: s.literal('cssearth-observed-surfaces@2'), sources: arr(sourcePin), datasets: arr(dataset), baselines: opt(arr(baseline))}); export type ObservedSurfaceRecipe = s.Infer; export interface RasterMap {data: Buffer; width: number; height: number; channels: 1 | 2 | 3 | 4; missing?: Uint8Array; atmosphereColor?: number[]; calibration?: unknown; coverage?: {baselineColor: readonly number[]}; stretch?: number[]} diff --git a/packages/bake/src/objects/layers/observed-surfaces/observed-surfaces.test.mts b/packages/bake/src/objects/layers/observed-surfaces/observed-surfaces.test.mts index 73dd009cd37..cd34a10de29 100644 --- a/packages/bake/src/objects/layers/observed-surfaces/observed-surfaces.test.mts +++ b/packages/bake/src/objects/layers/observed-surfaces/observed-surfaces.test.mts @@ -38,6 +38,36 @@ test('dated component coverage normalizes longitude and preserves isolated dark }finally{await rm(directory,{recursive:true,force:true});} }); +test('a color cube with declared rows reads its first row as stated, reverses longitude and moves sample rows to mesh latitude',async()=>{ + const directory=await mkdtemp(join(tmpdir(),'fits-planes-')); + try{ + // 5 samples of longitude with the end meridian repeated, 5 sample rows from pole to pole, stored north first + const width=5,height=5,value=(plane: number,y: number,x: number)=>plane===0?(x===0?250:10*(x%4)+y):plane===1?100+y:200; + const header=Buffer.from([card('SIMPLE','T'),card('BITPIX','-32'),card('NAXIS','3'),card('NAXIS1',String(width)),card('NAXIS2',String(height)),card('NAXIS3','3'),'END'.padEnd(80)].join('').padEnd(2880)); + const data=Buffer.alloc(2880);for(let plane=0;plane<3;plane++)for(let y=0;y({id:'cube',source:'cube.fits',decode:{kind:'fits-planes',bitpix:-32,width,height,firstRow:'north'},coverage:{kind:'declared-rows',unobservedRows:[[2,2]],reverseLongitude:true,longitudeOffsetDegrees:0,longitudePeriod:4},products:[{kind:'thumbnail',filename:'cube.webp',encoding:{lossless:true}}],...extra}); + const prepare=(extra: object={})=>prepareObservedSurfaces({sourceDirectory:directory,config:{schema:'cssearth-observed-surfaces@2',sources:[{path:'cube.fits'}],datasets:[dataset(extra)]}}); + const map=(await prepare()).maps.get('cube');assert.ok(map); + assert.deepEqual([map.width,map.height],[5,5]); + assert.deepEqual([0,1,2,3,4].map(x=>map.data[x*4]),[250,30,20,10,250]); // column x shows stored column 4 - x of the 4-sample period + assert.deepEqual([...map.data.slice((4*5+1)*4,(4*5+1)*4+4)],[34,104,200,255]); // the last stored row is the south pole + // A file whose first column holds no map: cropped away, and the offset of one sample brings the end meridian to column 0. + const cropped=(await prepare({decode:{kind:'fits-planes',bitpix:-32,width,height,firstRow:'north',crop:{left:1,top:0,width:4,height:5}},coverage:{kind:'declared-rows',unobservedRows:[[2,2]],reverseLongitude:true,longitudeOffsetDegrees:-90,longitudePeriod:4}})).maps.get('cube'); + assert.deepEqual([cropped?.width,[0,1,2,3].map(x=>cropped?.data[x*4])],[4,[0,30,20,10]]); + assert.ok(map.missing?.slice(2*5,3*5).every(missing=>missing===1));assert.equal(map.missing?.[5],0); + const south=(await prepare({decode:{kind:'fits-planes',bitpix:-32,width,height,firstRow:'south'}})).maps.get('cube'); + assert.equal(south?.data[1],104); // read south first, the same bytes put stored row 4 at the top + const mesh=(await prepare({planetocentricSampleRows:1})).maps.get('cube');assert.ok(mesh); + assert.deepEqual([mesh.width,mesh.height],[5,4]); + assert.equal(mesh.data[1],101); // on a sphere a mesh row lies midway between two sample rows: (100 + 101) / 2, rounded + assert.deepEqual([...mesh.missing!.slice(0,20)].filter((_,i)=>i%5===0),[0,1,1,0]); // rows that touch the declared row are missing + await writeFile(join(directory,'cube.fits'),Buffer.concat([header,Buffer.from(data).fill(0x43,0,4)])); // 0x43434343 is 195.26, not a display value + await assert.rejects(prepare(),/8-bit display values/); + assert.throws(()=>parseObservedSurfaceRecipe({schema:'cssearth-observed-surfaces@2',sources:[{path:'cube.fits'}],datasets:[dataset({decode:{kind:'fits-planes',bitpix:-32,width,height,firstRow:'north',crop:{left:2,top:0,width:4,height:5}}})]}),/FITS plane geometry/); + }finally{await rm(directory,{recursive:true,force:true});} +}); + test('boundary continuation retains observed rows and varies only source-derived longitude',()=>{ const input=new Float32Array([0,0,0,0,2,6,10,12,14,16,18,20]); const result=continueBoundaryMean(input,{width:2,height:6,channels:1,boundaryFraction:1/3,exponent:3,minimumBoundarySum:0}); diff --git a/packages/bake/src/objects/layers/observed-surfaces/observed-surfaces.ts b/packages/bake/src/objects/layers/observed-surfaces/observed-surfaces.ts index fd86694cfc8..d9b973b8b5b 100644 --- a/packages/bake/src/objects/layers/observed-surfaces/observed-surfaces.ts +++ b/packages/bake/src/objects/layers/observed-surfaces/observed-surfaces.ts @@ -5,8 +5,8 @@ import type {SourcePin} from '../../geometry/index.ts'; import { mkdir, readFile, realpath, writeFile } from 'node:fs/promises'; import { relative, resolve, sep } from 'node:path'; import sharp from 'sharp'; -import { readFitsPrimary } from '@cssearth/fits'; -import { planetographicRowsToMeshLatitude } from '../../geometry/index.ts'; +import { readFitsImage, readFitsPrimary } from '@cssearth/fits'; +import { planetocentricSampleRowsToMeshLatitude, planetographicRowsToMeshLatitude } from '../../geometry/index.ts'; import { packProjectiveSurfaceRaster } from '../../../scene/index.ts'; import { missingCoverageColor } from '../../../raster/index.ts'; import { resizeObservedRgb, sampleObservedRgb } from './coverage.ts'; @@ -31,14 +31,20 @@ export function parseObservedSurfaceRecipe(input: unknown) { const operations=(items: readonly ObservationTransform[] | undefined)=>{for(const op of items??[]){if(!['flip','crop','resize','sharpen'].includes(op.kind))throw new TypeError('Unsupported observation transform.');if(op.kind==='resize'&&!dimensions(op.width,op.height))throw new TypeError('Invalid resize dimensions.');if(op.kind==='crop'&&(!op.region||!dimensions(op.region.width,op.region.height)||![op.region.left,op.region.top].every(v=>Number.isSafeInteger(v)&&v>=0)))throw new TypeError('Invalid crop dimensions.');if(op.kind==='sharpen'&&!positive(op.options?.sigma))throw new TypeError('Invalid sharpening radius.');}}; for(const dataset of config.datasets){ if(!OBSERVATION_RECIPE_POLICY.identifier.test(dataset.id)||ids.has(dataset.id)||!sourcePaths.has(dataset.source)||!dataset.decode)throw new TypeError('Invalid observation identity.');ids.add(dataset.id); - if(!['raster','fits'].includes(dataset.decode.kind))throw new TypeError('Unsupported observation decoder.'); + if(!['raster','fits','fits-planes'].includes(dataset.decode.kind))throw new TypeError('Unsupported observation decoder.'); + if(dataset.decode.kind==='fits-planes'){ + const {bitpix,width,height,crop}=dataset.decode; + if(bitpix!==-32||!dimensions(width,height)||crop&&(!dimensions(crop.width,crop.height)||![crop.left,crop.top].every(v=>Number.isSafeInteger(v)&&v>=0)||crop.left+crop.width>width||crop.top+crop.height>height))throw new TypeError('Invalid FITS plane geometry.'); + } + if(dataset.coverage?.kind==='declared-rows'&&dataset.calibration)throw new TypeError('Declared-row coverage does not take a calibration.'); + if(dataset.planetographicAxisRatio!==undefined&&dataset.planetocentricSampleRows!==undefined)throw new TypeError('A map states one latitude convention.'); if(dataset.decode.kind==='raster'&&![3,4].includes(dataset.decode.channels))throw new TypeError('Invalid raster channels.'); if(dataset.decode.kind==='fits'){ const color=dataset.decode.color; if(dataset.decode.bitpix!==-32||!dimensions(dataset.decode.width,dataset.decode.height)||!color||![3,4].includes(color.channels)||!isArray(color.palette)||color.palette.length!==3||color.palette.some(rgb=>!isArray(rgb)||rgb.length!==3||rgb.some(c=>!Number.isSafeInteger(c)||c<0||c>255))||!isArray(color.percentiles)||color.percentiles.length!==2||!color.percentiles.every(fraction)||color.percentiles[0]>=color.percentiles[1]||color.percentiles[1]===1||!['sqrt','power'].includes(color.transfer)||!positive(color.exponent)||!fraction(color.minimumCoverage))throw new TypeError('Invalid scientific color mapping.'); } if(dataset.coverage?.kind==='component-fits'&&(dataset.decode.kind!=='raster'||dataset.decode.crop||dataset.calibration||dataset.coverage.sources.some(path=>!sourcePaths.has(path))))throw new TypeError('Component coverage requires an uncropped RGB map and declared FITS sources.'); - for(const continuation of[dataset.decode.continuation,dataset.coverage?.kind==='boundary-mean'?dataset.coverage:null])if(continuation&&(!positive(continuation.exponent)||!positive(continuation.boundaryFraction)||continuation.boundaryFraction>=1||!Number.isFinite(continuation.minimumBoundarySum ?? 0)))throw new TypeError('Invalid boundary continuation.'); + for(const continuation of[dataset.decode.kind==='fits-planes'?undefined:dataset.decode.continuation,dataset.coverage?.kind==='boundary-mean'?dataset.coverage:null])if(continuation&&(!positive(continuation.exponent)||!positive(continuation.boundaryFraction)||continuation.boundaryFraction>=1||!Number.isFinite(continuation.minimumBoundarySum ?? 0)))throw new TypeError('Invalid boundary continuation.'); if(dataset.calibration&&(!sourcePaths.has(dataset.calibration.source)||(dataset.decode.kind !== 'raster' || dataset.decode.channels!==3)))throw new TypeError('Invalid true-color calibration input.'); operations(dataset.transforms); if(!isArray(dataset.products)||!dataset.products.length)throw new TypeError('Observation has no products.'); @@ -212,6 +218,25 @@ async function decodeRaster(bytes: Buffer | undefined,config: {channels: 3 | 4; const {data,info}=await pipeline.raw().toBuffer({resolveWithObject:true});return {data,width:info.width,height:info.height,channels:info.channels}; } +/** A publisher's color cube: three FITS planes that hold display values, 0 to 255, read as red, green and blue. FITS + * stores its first row first; the recipe says which pole that row is, because a header can describe the other order. + * A crop, counted from the north-up map's top left, leaves out rows or columns the file holds no map in. */ +function decodeFitsPlanes(bytes: Buffer | undefined,config: {bitpix: number; width: number; height: number; firstRow: 'north' | 'south'; crop?: Region}): RasterMap { + if (!bytes) throw new TypeError('Observation has no verified source.'); + const planes=[1,2,3].map(plane=>readFitsImage(bytes,{plane})),{left,top,width,height}=config.crop??{left:0,top:0,width:config.width,height:config.height}; + if(planes.some(plane=>plane.planes!==3||plane.bitpix!==config.bitpix||plane.width!==config.width||plane.height!==config.height))throw new Error('Observed FITS geometry drifted.'); + const data=Buffer.alloc(width*height*3); + for(let y=0;y255)throw new Error('Observed FITS planes are not 8-bit display values.'); + data[(y*width+x)*3+c]=value; + } + } + return {data,width,height,channels:3}; +} + /** Intersect the three measured filters before resampling the publisher's RGB image. * The recipe names whether the longitude endpoint repeats. Reversal and the * declared offset put releases with different origins in the same body frame. */ @@ -222,6 +247,11 @@ function componentCoverage(map: RasterMap, config: Extract[first,last])}).missing; }); + return declaredCoverage(map,config,masks); +} +/** The rows a recipe declares unobserved, with any measured masks, laid out in the body frame: the map loses its color + * there and nothing is detected from pixel values. A source whose own file marks no missing sample takes this alone. */ +function declaredCoverage(map: RasterMap, config: {unobservedRows: readonly (readonly [number,number])[]; reverseLongitude: boolean; longitudeOffsetDegrees: number; longitudePeriod: number}, masks: readonly Uint8Array[]=[new Uint8Array(map.width*map.height)]) : RasterMap { const {width,height}=map,period=config.longitudePeriod,shift=config.longitudeOffsetDegrees/360*period; if(!Number.isInteger(shift)||!Number.isInteger(period)||![width,width-1].includes(period)||period<1)throw new Error('Map longitude offset must match the source grid.'); for(const [first,last] of config.unobservedRows){ @@ -280,8 +310,10 @@ export async function prepareObservedSurfaces({sourceDirectory,publicDirectory,c const fits=readFitsPrimary(inputs.get(dataset.source));if(fits.bitpix!==dataset.decode.bitpix||fits.width!==dataset.decode.width||fits.height!==dataset.decode.height)throw new Error('Observed FITS geometry drifted.'); let values=new Float32Array(fits.values);if(dataset.decode.continuation)values=continueBoundaryMean(values,{width:fits.width,height:fits.height,channels:1,...dataset.decode.continuation}); map=percentileFalseColor(values,fits.width,fits.height,dataset.decode.color); - }else throw new TypeError('Unsupported observation decoder.'); + }else if(dataset.decode.kind==='fits-planes')map=decodeFitsPlanes(inputs.get(dataset.source),dataset.decode); + else throw new TypeError('Unsupported observation decoder.'); if(dataset.coverage?.kind==='component-fits')map=componentCoverage(map,dataset.coverage,inputs); + if(dataset.coverage?.kind==='declared-rows')map=declaredCoverage(map,dataset.coverage); let calibration; if(dataset.calibration){const target=await decodeRaster(inputs.get(dataset.calibration.source),{crop:dataset.calibration.targetSample,channels:3});calibration=affineColorCalibration(map,target,dataset.calibration);} if(dataset.coverage?.kind==='boundary-mean')map={...map,data:continueBoundaryMean(map.data,{...map,...dataset.coverage})}; @@ -293,6 +325,8 @@ export async function prepareObservedSurfaces({sourceDirectory,publicDirectory,c if(calibration){const data=Buffer.allocUnsafe(map.data.length);for(let offset=0;offsetmap.data[i*4+3]===255?0:1); const nativePoleMap=map,transformedMap=await transformMap(map,dataset.transforms); if(dataset.atmosphereColor)transformedMap.atmosphereColor=brightTailColor(transformedMap.data,dataset.atmosphereColor);maps.set(dataset.id,transformedMap); From ef8cd32a3b81c061105b51b65b6829b08af042ac Mon Sep 17 00:00:00 2001 From: alowpoly Date: Mon, 5 Oct 2026 13:35:58 -0300 Subject: [PATCH 02/10] fix(saturn): the limb overlay keeps its color by each edge texel's share inside the silhouette --- .../material-composition/layered-oblate.ts | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/bake/src/objects/layers/material-composition/layered-oblate.ts b/packages/bake/src/objects/layers/material-composition/layered-oblate.ts index 655bdad45d5..0142bf7ce5c 100644 --- a/packages/bake/src/objects/layers/material-composition/layered-oblate.ts +++ b/packages/bake/src/objects/layers/material-composition/layered-oblate.ts @@ -43,7 +43,7 @@ import { createProjectiveSurfaceRasterPresentation, fitTextureGeometry, fitProje import { optimizePreparedQ75Webp, PREPARED_Q75_WEBP_ENCODING } from '../../../delivery/index.ts'; import { verifyObservationSources } from '../observed-surfaces/index.ts'; import { ellipsoidPoint, planetographicRowsToMeshLatitude, intersectViewRayWithEllipsoid, prepareProjectedEllipsoidSilhouetteCoverage, prepareObjectViewDirection as prepareViewDirection, prepareObjectSpaceDirection, dotVector, subtractVector, rotateX, rotateY, rotateZ } from '../../geometry/index.ts'; -import { CHANNEL_NAMES, floodDiscMean, loadLimbLaw, limbFactors, limbOverlay, meanObservedColor, outsideSilhouette, scatteringAngles, type Channels } from '../../../photometry/index.ts'; +import { CHANNEL_NAMES, floodDiscMean, loadLimbLaw, limbFactors, limbOverlay, meanObservedColor, scatteringAngles, type Channels } from '../../../photometry/index.ts'; import { displayBandRatios, keepLuminance, latitudeWeightedLuminance, loadWholeDiscColor, tieBandRatios } from '../../raster/index.ts'; import type { BandRatioPolicy } from '../../raster/index.ts'; @@ -1073,7 +1073,22 @@ function prepareFixedMaterialPlane({ down[axis] * sampledScreenY * materialSampleScale); let hit = intersectViewRayWithEllipsoidSurface(materialOrigin, view); // A sample that misses the ellipsoid at content scale lies past the silhouette, where the overlay may only darken. - const outsideGlobe = !hit; + // A texel the silhouette crosses keeps its color by the share of it that lies inside, so the dark outline stays one + // unbroken line when the frame is drawn larger than it was prepared. + const silhouetteRadius = Math.hypot(sampledScreenX / radiusX, sampledScreenY / radiusY) * materialSampleScale; + let colorKept = hit ? 1 : 0; + if (Math.abs(silhouetteRadius - 1) < 6 * materialSampleScale / outputSize) { + const samples = PLANET_ORBIT_MATERIAL_SILHOUETTE_SUPERSAMPLING; + let inside = 0; + for (let sampleRow = 0; sampleRow < samples; sampleRow += 1) { + for (let sampleColumn = 0; sampleColumn < samples; sampleColumn += 1) { + const x = ((column + (sampleColumn + 0.5) / samples) / outputSize * 2 - 1) * radiusX * materialSampleScale; + const y = ((row + (sampleRow + 0.5) / samples) / outputSize * 2 - 1) * radiusY * materialSampleScale; + if (intersectViewRayWithEllipsoidSurface(mapVector3((axis) => right[axis] * x + down[axis] * y), view)) inside += 1; + } + } + colorKept = inside / (samples * samples); + } if (!hit) { let lowerScale = 1; let upperScale = materialSampleScale; @@ -1143,7 +1158,7 @@ function prepareFixedMaterialPlane({ } if (!cutawayMaterialRemoved) { const overlay = globeLimbOverlay(hit.normal, objectLight, view, 1 / outputSize, directTransmission); - writeLimbOverlay(output, outputOffset, outsideGlobe ? outsideSilhouette(overlay) : overlay); + writeLimbOverlay(output, outputOffset, [overlay[0] * colorKept, overlay[1] * colorKept, overlay[2] * colorKept, overlay[3]]); } const surfaceDistance = dotVector( subtractVector(coverageHit.position, coverageOrigin), From 5b731e5a24dae1760e5923bc7d071adab07b17d0 Mon Sep 17 00:00:00 2001 From: alowpoly Date: Mon, 5 Oct 2026 13:36:08 -0300 Subject: [PATCH 03/10] test(bake): planetocentric sample rows move to the mesh's own latitude --- .../material-composition.test.mts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/bake/src/objects/layers/material-composition/material-composition.test.mts b/packages/bake/src/objects/layers/material-composition/material-composition.test.mts index 6746aaf41d8..a18cd212b77 100644 --- a/packages/bake/src/objects/layers/material-composition/material-composition.test.mts +++ b/packages/bake/src/objects/layers/material-composition/material-composition.test.mts @@ -4,7 +4,7 @@ import assert from 'node:assert/strict'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); import {readFile} from 'node:fs/promises'; -import {intersectViewRayWithEllipsoid,rotateSequence,convexHull2d,prepareProjectedEllipsoidSilhouetteCoverage,planetographicRowsToMeshLatitude} from '@cssearth/bake/objects/geometry'; +import {intersectViewRayWithEllipsoid,rotateSequence,convexHull2d,prepareProjectedEllipsoidSilhouetteCoverage,planetocentricSampleRowsToMeshLatitude,planetographicRowsToMeshLatitude} from '@cssearth/bake/objects/geometry'; import { polarQuad, validateMaterialRecipe, prepareLayeredLeafLayouts, prepareLayeredOblateObject, isLayeredOblateRecipe } from '@cssearth/bake/objects/layers/material-composition'; import { writeMaterialAtlasTile, sampleRgbaBilinear, sampleAlphaBilinear, validateRelativePath } from '@cssearth/bake/objects/layers/giant'; import {fitTextureGeometry} from '@cssearth/bake/scene'; @@ -88,3 +88,18 @@ test('planetographic map rows move to the parametric latitude of the mesh',()=>{ assert.deepEqual([...planetographicRowsToMeshLatitude(rows,1,height,1,1)],[...rows]); assert.throws(()=>planetographicRowsToMeshLatitude(rows,1,height,1,0.9),/axis ratio/); }); + +test('planetocentric sample rows, poles included, move to the parametric latitude of the mesh',()=>{ + const samples=181,axisRatio=60268/54364,rows=Uint8Array.from({length:samples},(_,y)=>y); + const mesh=planetocentricSampleRowsToMeshLatitude(rows,1,samples,1,axisRatio); + assert.equal(mesh.length,180); + // Mesh row 45 sits at parametric latitude 44.5 deg; its planetocentric latitude is atan(b/a tan 44.5) = 41.6 deg, sample 48.4. + const beta=44.5*Math.PI/180,expected=90-Math.atan(Math.tan(beta)/axisRatio)*180/Math.PI; + assert.equal(mesh[45],Math.round(expected)); + // The first and last mesh rows lie half a row inside the poles: samples 0.55 and 179.45. + assert.ok(mesh[0]===1&&mesh[179]===179); + // On a sphere every mesh row lies midway between two samples. + assert.ok([...planetocentricSampleRowsToMeshLatitude(rows,1,samples,1,1)].every((value,y)=>value===y||value===y+1)); + assert.throws(()=>planetocentricSampleRowsToMeshLatitude(rows,1,samples,1,0.9),/axis ratio/); + assert.throws(()=>planetocentricSampleRowsToMeshLatitude(rows,1,samples+1,1,axisRatio),/dimensions/); +}); From b79f98688ea01f6db3624f7ea6ba36e54c47738c Mon Sep 17 00:00:00 2001 From: alowpoly Date: Mon, 5 Oct 2026 13:36:08 -0300 Subject: [PATCH 04/10] feat(saturn): each display channel's limb law is OPAL's per-filter exponents weighted by the light it shows --- docs/surface-preparation.md | 3 +- .../bake/authoring/saturn/display-limb.mts | 122 ++++++++++++++++++ .../authoring/saturn/display-limb.test.mts | 40 ++++++ .../src/photometry/whole-disc-color.test.mts | 4 +- .../opal-2025-minnaert-display-blue.json | 25 ++++ .../opal-2025-minnaert-display-green.json | 25 ++++ .../opal-2025-minnaert-display-red.json | 25 ++++ .../photometry/opal-2025-minnaert-f395n.json | 25 ++++ .../photometry/opal-2025-minnaert-f763m.json | 25 ++++ .../saturn/source/preparation/geometry.json | 6 +- 10 files changed, 294 insertions(+), 6 deletions(-) create mode 100644 packages/bake/authoring/saturn/display-limb.mts create mode 100644 packages/bake/authoring/saturn/display-limb.test.mts create mode 100644 src/objects/saturn/source/photometry/opal-2025-minnaert-display-blue.json create mode 100644 src/objects/saturn/source/photometry/opal-2025-minnaert-display-green.json create mode 100644 src/objects/saturn/source/photometry/opal-2025-minnaert-display-red.json create mode 100644 src/objects/saturn/source/photometry/opal-2025-minnaert-f395n.json create mode 100644 src/objects/saturn/source/photometry/opal-2025-minnaert-f763m.json diff --git a/docs/surface-preparation.md b/docs/surface-preparation.md index d6dbf0fd354..6e499b17118 100644 --- a/docs/surface-preparation.md +++ b/docs/surface-preparation.md @@ -785,7 +785,8 @@ same published law, so the limb in the app is the limb the instrument saw. | Venus | Minnaert, k 1.32 to 1.36 | [Pérez-Hoyos et al. 2018](https://doi.org/10.1002/2017JE005406), MESSENGER MASCS | | Mars | Hapke, surface only | [Vincendon 2013](https://doi.org/10.1016/j.pss.2012.12.005), OMEGA and CRISM | | Jupiter | Minnaert per channel | [Simon et al. 2015](https://doi.org/10.1088/0004-637X/812/1/55), OPAL | - | Saturn, Uranus, Neptune | Minnaert per channel | the OPAL README of each map | + | Saturn | Minnaert per display channel: the README's exponents weighted by the light each channel shows | the [OPAL README](https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025_all_v1_readme.txt) of its map and the spectrum of [Karkoschka 1998](https://doi.org/10.1006/icar.1998.5913), weighted by [display-limb.mts](../packages/bake/authoring/saturn/display-limb.mts) | + | Uranus, Neptune | Minnaert per channel | the OPAL README of each map | | Earth | Minnaert per channel | fitted here to six [DSCOVR EPIC](https://epic.gsfc.nasa.gov/about) Level 1B frames ([fit-epic-limb.mts](../packages/bake/cli/fit-epic-limb.mts)) | | Moon | Hapke at 643 nm | [Sato et al. 2014](https://doi.org/10.1002/2013JE004580), the correction of the LROC WAC mosaic; w, b and h_S are medians of its PDS parameter map | | Ceres (dwarf planet) | Hapke at 749 nm | [Li et al. 2019](https://doi.org/10.1016/j.icarus.2018.12.038), Dawn Framing Camera | diff --git a/packages/bake/authoring/saturn/display-limb.mts b/packages/bake/authoring/saturn/display-limb.mts new file mode 100644 index 00000000000..b2279e8f874 --- /dev/null +++ b/packages/bake/authoring/saturn/display-limb.mts @@ -0,0 +1,122 @@ +/** + * Saturn's limb law for each display channel. + * + * Hubble OPAL publishes one Minnaert exponent per filter, in the README of its Saturn maps. A display channel shows a + * range of wavelengths, so no single filter is its law. Each channel takes the README's exponents weighted by the light + * that channel shows: Saturn's full-disc albedo (Karkoschka 1998, PDS 1995LOW.TAB) times a 5,772 K Planck spectrum, + * through the CIE 1931 observer into linear sRGB, the computation behind the body's whole-disc color. Between two + * filters the exponent is interpolated in wavelength, and outside them the nearest one holds; that join is ours. The + * methane-band filters are left out: a narrow absorption band says nothing of the continuum beside it. + * + * A weighted sum of Minnaert laws is not a Minnaert law. Each channel records the exponent that fits its weighted + * profile best over the flood-lit disc, weighted by projected area, out to the emission angle the map's data reached, + * and the command prints how far that power law departs from the profile. + * + * node packages/bake/authoring/saturn/display-limb.mts --albedo=<1995low.tab> [--write] + * + * Reads the per-filter records in src/objects/saturn/source/photometry/ and checks the spectrum against the recorded + * whole-disc color; --write stores the three display records beside them. Preparation only. + */ +import { projectRoot as checkoutProjectRoot } from '@cssearth/core/node'; +import { readFile, readdir, writeFile } from 'node:fs/promises'; +import { resolve } from 'node:path'; +import { pathToFileURL } from 'node:url'; +import { parseCieTable } from '@cssearth/bake/objects/color'; +import { readCie1931ColorMatching } from '@cssearth/bake/objects/sources'; +import { spectrumLinearSrgb } from '@cssearth/bake/objects/stellar'; +import { PHOTOMETRIC_MODEL_SCHEMA, loadPhotometricModelRecord } from '@cssearth/bake/photometry'; + +/** The Sun's effective temperature in NASA's Sun fact sheet: the illuminant of the whole-disc color record. */ +const SOLAR_KELVIN = 5772; +const PLANCK_H = 6.62607015e-34, LIGHT_C = 299792458, BOLTZMANN_K = 1.380649e-23; +const VISIBLE_NM = Array.from({ length: 401 }, (_, i) => 380 + i); +const CHANNELS = ['red', 'green', 'blue'] as const; + +export interface FilterExponent { readonly wavelengthNm: number; readonly coefficient: number } + +/** The exponent at a wavelength: linear between two filters, the nearest filter's outside them. */ +export function exponentAt(filters: readonly FilterExponent[], wavelengthNm: number): number { + const sorted = [...filters].sort((a, b) => a.wavelengthNm - b.wavelengthNm); + if (!sorted.length) throw new TypeError('A display limb law needs at least one filter.'); + if (wavelengthNm <= sorted[0]!.wavelengthNm) return sorted[0]!.coefficient; + for (let i = 1; i < sorted.length; i++) { + const low = sorted[i - 1]!, high = sorted[i]!; + if (wavelengthNm <= high.wavelengthNm) return low.coefficient + (high.coefficient - low.coefficient) * (wavelengthNm - low.wavelengthNm) / (high.wavelengthNm - low.wavelengthNm); + } + return sorted.at(-1)!.coefficient; +} + +/** + * Each display channel's flood-lit limb profile, mu^(2k - 1) weighted by the light the channel shows, and the Minnaert + * exponent that fits it best over the disc out to `maximumEmissionDegrees`. + */ +export function displayLimbExponents({ filters, light, colorMatching, maximumEmissionDegrees, steps = 1024 }: { + filters: readonly FilterExponent[]; light: (wavelengthNm: number) => number; colorMatching: Map; maximumEmissionDegrees: number; steps?: number; +}) { + const whole = spectrumLinearSrgb(VISIBLE_NM, light, colorMatching), limit = Math.sin(maximumEmissionDegrees * Math.PI / 180); + const radii = Array.from({ length: steps }, (_, step) => (step + 0.5) / steps * limit); + const profiles = radii.map(radius => { + const mu = Math.sqrt(1 - radius * radius), lit = spectrumLinearSrgb(VISIBLE_NM, wavelength => light(wavelength) * mu ** (2 * exponentAt(filters, wavelength) - 1), colorMatching); + return { radius, mu, factors: [lit[0] / whole[0], lit[1] / whole[1], lit[2] / whole[2]] as const }; + }); + return CHANNELS.map((channel, index) => { + let best = { coefficient: Number.NaN, error: Infinity }; + for (let thousandth = 300; thousandth <= 1300; thousandth++) { + const coefficient = thousandth / 1000; + let error = 0; + for (const { radius, mu, factors } of profiles) error += (mu ** (2 * coefficient - 1) - factors[index]!) ** 2 * radius; + if (error < best.error) best = { coefficient, error }; + } + const departure = Math.max(...profiles.map(({ mu, factors }) => Math.abs(mu ** (2 * best.coefficient - 1) - factors[index]!))); + return { channel, coefficient: best.coefficient, departure, discMean: 2 / (2 * best.coefficient + 1) }; + }); +} + +/** Saturn's albedo from the PDS table's eight columns: air wavelength is the second, Saturn's albedo the fifth. */ +export function readSaturnAlbedo(table: string): (wavelengthNm: number) => number { + const rows = table.split(/\r?\n/u).filter(line => line.trim()).map(line => { const cells = line.trim().split(/\s+/u).map(Number); return { cells: cells.length, wavelength: cells[1]!, albedo: cells[4]! }; }); + if (rows.length < 2 || rows.some(row => row.cells !== 8 || !Number.isFinite(row.wavelength) || !Number.isFinite(row.albedo))) throw new TypeError('The albedo table is not the 1995LOW.TAB layout.'); + if (rows[0]!.wavelength > VISIBLE_NM[0]! || rows.at(-1)!.wavelength < VISIBLE_NM.at(-1)!) throw new RangeError('The albedo table does not cover 380-780 nm.'); + return wavelength => { + const next = Math.max(1, rows.findIndex(row => row.wavelength >= wavelength)), low = rows[next - 1]!, high = rows[next]!; + return low.albedo + (high.albedo - low.albedo) * (wavelength - low.wavelength) / (high.wavelength - low.wavelength); + }; +} + +const planck = (wavelengthNm: number) => { const metres = wavelengthNm * 1e-9; return 1 / (metres ** 5 * Math.expm1(PLANCK_H * LIGHT_C / (metres * BOLTZMANN_K * SOLAR_KELVIN))); }; + +if (import.meta.url === pathToFileURL(process.argv[1] ?? '').href) { + const albedoPath = process.argv.find(argument => argument.startsWith('--albedo='))?.slice('--albedo='.length); + if (!albedoPath) throw new TypeError('Usage: display-limb.mts --albedo=<1995low.tab> [--write]'); + const source = resolve(checkoutProjectRoot(import.meta.url), 'src/objects/saturn/source'), photometry = resolve(source, 'photometry'); + // The README's continuum filters: every per-filter record beside the display records, by the wavelength its filter states. + const paths = (await readdir(photometry)).filter(name => /^opal-2025-minnaert-f\d+[nmw]\.json$/u.test(name)).sort(); + const records = await Promise.all(paths.map(name => loadPhotometricModelRecord(source, `photometry/${name}`))); + const filters = records.map(record => { + const wavelengthNm = Number(/(\d+) nm/u.exec(record.filter)?.[1]), model = record.model; + if (!Number.isFinite(wavelengthNm) || model.family !== 'separable' || model.disk.family !== 'minnaert') throw new TypeError(`${record.id} is not a Minnaert record with a stated wavelength.`); + return { id: record.id, wavelengthNm, coefficient: model.disk.coefficient }; + }); + const ranges = records.map(record => JSON.stringify(record.fit)); + if (new Set(ranges).size !== 1) throw new Error('The per-filter records state different fitted ranges.'); + const fit = records[0]!.fit; + if (!fit.emissionDegrees) throw new TypeError('The per-filter records state no emission range.'); + const albedo = readSaturnAlbedo(await readFile(resolve(albedoPath), 'latin1')), light = (wavelength: number) => planck(wavelength) * albedo(wavelength); + const colorMatching = parseCieTable((await readCie1931ColorMatching()).toString('utf8'), 3); + // The same spectrum gives the recorded whole-disc color; a different table or observer would not. + const recorded = JSON.parse(await readFile(resolve(photometry, 'karkoschka-1998-whole-disc-color.json'), 'utf8')).linearSrgb as number[]; + const whole = spectrumLinearSrgb(VISIBLE_NM, light, colorMatching); + for (const channel of [1, 2]) if (Math.abs(whole[channel]! / whole[0] - recorded[channel]! / recorded[0]!) > 5e-4) + throw new Error(`The spectrum's ${CHANNELS[channel]}/red ratio ${(whole[channel]! / whole[0]).toFixed(4)} is not the recorded whole-disc color's ${(recorded[channel]! / recorded[0]!).toFixed(4)}.`); + const result = displayLimbExponents({ filters, light, colorMatching, maximumEmissionDegrees: fit.emissionDegrees[1] }); + console.log('filters', filters.map(filter => `${filter.wavelengthNm} nm ${filter.coefficient}`).join(', ')); + for (const { channel, coefficient, departure, discMean } of result) console.log(`${channel}: k ${coefficient.toFixed(3)}, flood-disc mean ${discMean.toFixed(4)}, largest departure from the weighted profile ${departure.toFixed(4)}`); + if (process.argv.includes('--write')) { + for (const { channel, coefficient } of result) await writeFile(resolve(photometry, `opal-2025-minnaert-display-${channel}.json`), JSON.stringify({ + schema: PHOTOMETRIC_MODEL_SCHEMA, id: `opal-2025-minnaert-display-${channel}`, instrument: 'Hubble WFC3/UVIS (OPAL)', + filter: `sRGB ${channel}: the README's continuum filters weighted by Saturn's sunlit spectrum through the CIE 1931 observer`, quantity: 'radiance-factor', + model: { family: 'separable', disk: { family: 'minnaert', coefficient, coefficientPerDegree: 0 } }, fit, + }, null, 2) + '\n'); + console.log('wrote the three display records'); + } +} diff --git a/packages/bake/authoring/saturn/display-limb.test.mts b/packages/bake/authoring/saturn/display-limb.test.mts new file mode 100644 index 00000000000..c4c311cb891 --- /dev/null +++ b/packages/bake/authoring/saturn/display-limb.test.mts @@ -0,0 +1,40 @@ +import assert from 'node:assert/strict'; +import test from 'node:test'; +import { parseCieTable } from '@cssearth/bake/objects/color'; +import { readCie1931ColorMatching } from '@cssearth/bake/objects/sources'; +import { displayLimbExponents, exponentAt, readSaturnAlbedo } from './display-limb.mts'; + +const colorMatching = parseCieTable((await readCie1931ColorMatching()).toString('utf8'), 3); + +test('an exponent is interpolated between two filters and held outside them', () => { + const filters = [{ wavelengthNm: 600, coefficient: 0.8 }, { wavelengthNm: 400, coefficient: 0.4 }]; + assert.equal(exponentAt(filters, 380), 0.4); + assert.ok(Math.abs(exponentAt(filters, 450) - 0.5) < 1e-12); + assert.equal(exponentAt(filters, 700), 0.8); + assert.throws(() => exponentAt([], 500), /at least one filter/); +}); + +test('one filter gives every display channel its exponent', () => { + const result = displayLimbExponents({ filters: [{ wavelengthNm: 550, coefficient: 0.7 }], light: () => 1, colorMatching, maximumEmissionDegrees: 86.3 }); + assert.deepEqual(result.map(channel => channel.coefficient), [0.7, 0.7, 0.7]); + for (const channel of result) { assert.ok(channel.departure < 1e-9); assert.ok(Math.abs(channel.discMean - 2 / 2.4) < 1e-12); } +}); + +test('a channel takes the exponents of the wavelengths it shows', () => { + const filters = [{ wavelengthNm: 450, coefficient: 0.6 }, { wavelengthNm: 650, coefficient: 0.9 }]; + const [red, green, blue] = displayLimbExponents({ filters, light: () => 1, colorMatching, maximumEmissionDegrees: 86.3 }); + // An sRGB primary weighs some wavelengths negatively, so a channel's exponent may lie outside the filters' range. + assert.ok(blue!.coefficient < green!.coefficient && green!.coefficient < red!.coefficient); + // The light's spectrum is part of the weight: another spectrum gives other exponents. + const reddened = displayLimbExponents({ filters, light: wavelength => wavelength ** 4, colorMatching, maximumEmissionDegrees: 86.3 }); + assert.notDeepEqual(reddened.map(channel => channel.coefficient), [red!.coefficient, green!.coefficient, blue!.coefficient]); +}); + +test('the albedo table is read by column, past 1,000 nm too', () => { + const rows = [' 300.4 300.31 .0000 .2128 .2532 .5306 .6933 .0431', ' 600.0 599.83 .0010 .5000 .5000 .5000 .5000 .5000', '1049.2 1048.89 .2688 .3974 .5348 .0704 .0444 .1821']; + const albedo = readSaturnAlbedo(rows.join('\r\n') + '\r\n'); + assert.ok(Math.abs(albedo(599.83) - 0.5) < 1e-12); + assert.ok(albedo(450) > 0.2532 && albedo(450) < 0.5); + assert.throws(() => readSaturnAlbedo(rows.slice(0, 2).join('\n')), /380-780 nm/); + assert.throws(() => readSaturnAlbedo('1 2 3\n4 5 6'), /1995LOW/); +}); diff --git a/packages/bake/src/photometry/whole-disc-color.test.mts b/packages/bake/src/photometry/whole-disc-color.test.mts index 5ecf36d46de..04fa10465e0 100644 --- a/packages/bake/src/photometry/whole-disc-color.test.mts +++ b/packages/bake/src/photometry/whole-disc-color.test.mts @@ -26,9 +26,9 @@ test('a whole-disc color record refuses unknown keys, a wrong schema and non-pos test('a map with its limb law divided out is tied through the law\'s disc means, which for Minnaert are 2 / (2k + 1)', async () => { const saturn = resolve(projectRoot(import.meta.url), 'src/objects/saturn/source'); - const law = await loadLimbLaw(saturn, ['photometry/opal-2025-minnaert-f631n.json', 'photometry/opal-2025-minnaert-f502n.json', 'photometry/opal-2025-minnaert-f467m.json']); + const law = await loadLimbLaw(saturn, ['photometry/opal-2025-minnaert-display-red.json', 'photometry/opal-2025-minnaert-display-green.json', 'photometry/opal-2025-minnaert-display-blue.json']); // Held at 86.3 degrees, the OPAL disc edge, the means stay within 0.001 of the full-disc Minnaert integral. - floodDiscMean(law).forEach((mean, channel) => assert.ok(Math.abs(mean - 2 / (2 * [0.8, 0.65, 0.86][channel]! + 1)) < 1e-3, `channel ${channel}: ${mean}`)); + floodDiscMean(law).forEach((mean, channel) => assert.ok(Math.abs(mean - 2 / (2 * [0.798, 0.698, 0.728][channel]! + 1)) < 1e-3, `channel ${channel}: ${mean}`)); assert.deepEqual(displayBandRatios(parseWholeDiscColor(record), [0.5, 1, 0.25]).ratios, { green: 0.4, blue: 1 }); assert.throws(() => displayBandRatios(parseWholeDiscColor(record), [1, 0, 1]), /disc means must be positive/u); }); diff --git a/src/objects/saturn/source/photometry/opal-2025-minnaert-display-blue.json b/src/objects/saturn/source/photometry/opal-2025-minnaert-display-blue.json new file mode 100644 index 00000000000..01132a82a98 --- /dev/null +++ b/src/objects/saturn/source/photometry/opal-2025-minnaert-display-blue.json @@ -0,0 +1,25 @@ +{ + "schema": "cssearth-photometric-model@1", + "id": "opal-2025-minnaert-display-blue", + "instrument": "Hubble WFC3/UVIS (OPAL)", + "filter": "sRGB blue: the README's continuum filters weighted by Saturn's sunlit spectrum through the CIE 1931 observer", + "quantity": "radiance-factor", + "model": { + "family": "separable", + "disk": { + "family": "minnaert", + "coefficient": 0.728, + "coefficientPerDegree": 0 + } + }, + "fit": { + "phaseDegrees": [ + 2.4, + 2.5 + ], + "emissionDegrees": [ + 0, + 86.3 + ] + } +} diff --git a/src/objects/saturn/source/photometry/opal-2025-minnaert-display-green.json b/src/objects/saturn/source/photometry/opal-2025-minnaert-display-green.json new file mode 100644 index 00000000000..1e1bf3e5478 --- /dev/null +++ b/src/objects/saturn/source/photometry/opal-2025-minnaert-display-green.json @@ -0,0 +1,25 @@ +{ + "schema": "cssearth-photometric-model@1", + "id": "opal-2025-minnaert-display-green", + "instrument": "Hubble WFC3/UVIS (OPAL)", + "filter": "sRGB green: the README's continuum filters weighted by Saturn's sunlit spectrum through the CIE 1931 observer", + "quantity": "radiance-factor", + "model": { + "family": "separable", + "disk": { + "family": "minnaert", + "coefficient": 0.698, + "coefficientPerDegree": 0 + } + }, + "fit": { + "phaseDegrees": [ + 2.4, + 2.5 + ], + "emissionDegrees": [ + 0, + 86.3 + ] + } +} diff --git a/src/objects/saturn/source/photometry/opal-2025-minnaert-display-red.json b/src/objects/saturn/source/photometry/opal-2025-minnaert-display-red.json new file mode 100644 index 00000000000..a9d239ee740 --- /dev/null +++ b/src/objects/saturn/source/photometry/opal-2025-minnaert-display-red.json @@ -0,0 +1,25 @@ +{ + "schema": "cssearth-photometric-model@1", + "id": "opal-2025-minnaert-display-red", + "instrument": "Hubble WFC3/UVIS (OPAL)", + "filter": "sRGB red: the README's continuum filters weighted by Saturn's sunlit spectrum through the CIE 1931 observer", + "quantity": "radiance-factor", + "model": { + "family": "separable", + "disk": { + "family": "minnaert", + "coefficient": 0.798, + "coefficientPerDegree": 0 + } + }, + "fit": { + "phaseDegrees": [ + 2.4, + 2.5 + ], + "emissionDegrees": [ + 0, + 86.3 + ] + } +} diff --git a/src/objects/saturn/source/photometry/opal-2025-minnaert-f395n.json b/src/objects/saturn/source/photometry/opal-2025-minnaert-f395n.json new file mode 100644 index 00000000000..1b069052278 --- /dev/null +++ b/src/objects/saturn/source/photometry/opal-2025-minnaert-f395n.json @@ -0,0 +1,25 @@ +{ + "schema": "cssearth-photometric-model@1", + "id": "opal-2025-minnaert-f395n", + "instrument": "Hubble WFC3/UVIS (OPAL)", + "filter": "F395N, 395 nm", + "quantity": "radiance-factor", + "model": { + "family": "separable", + "disk": { + "family": "minnaert", + "coefficient": 0.4, + "coefficientPerDegree": 0 + } + }, + "fit": { + "phaseDegrees": [ + 2.4, + 2.5 + ], + "emissionDegrees": [ + 0, + 86.3 + ] + } +} diff --git a/src/objects/saturn/source/photometry/opal-2025-minnaert-f763m.json b/src/objects/saturn/source/photometry/opal-2025-minnaert-f763m.json new file mode 100644 index 00000000000..86c25835180 --- /dev/null +++ b/src/objects/saturn/source/photometry/opal-2025-minnaert-f763m.json @@ -0,0 +1,25 @@ +{ + "schema": "cssearth-photometric-model@1", + "id": "opal-2025-minnaert-f763m", + "instrument": "Hubble WFC3/UVIS (OPAL)", + "filter": "F763M, 763 nm", + "quantity": "radiance-factor", + "model": { + "family": "separable", + "disk": { + "family": "minnaert", + "coefficient": 0.85, + "coefficientPerDegree": 0 + } + }, + "fit": { + "phaseDegrees": [ + 2.4, + 2.5 + ], + "emissionDegrees": [ + 0, + 86.3 + ] + } +} diff --git a/src/objects/saturn/source/preparation/geometry.json b/src/objects/saturn/source/preparation/geometry.json index 25e51a9bf5f..d33f9487ca2 100644 --- a/src/objects/saturn/source/preparation/geometry.json +++ b/src/objects/saturn/source/preparation/geometry.json @@ -9,9 +9,9 @@ }, "limb": { "models": [ - "photometry/opal-2025-minnaert-f631n.json", - "photometry/opal-2025-minnaert-f502n.json", - "photometry/opal-2025-minnaert-f467m.json" + "photometry/opal-2025-minnaert-display-red.json", + "photometry/opal-2025-minnaert-display-green.json", + "photometry/opal-2025-minnaert-display-blue.json" ] }, "colorTie": "photometry/karkoschka-1998-whole-disc-color.json", From f9fb9786adf97000288a12e27f7e92c0cf1b6bb2 Mon Sep 17 00:00:00 2001 From: alowpoly Date: Mon, 5 Oct 2026 13:37:38 -0300 Subject: [PATCH 05/10] fix(bake): Saturn's leaf layout reads the plain pixel box its stylesheet states, so the body bakes again --- .../src/objects/layers/material-composition/leaf-layouts.ts | 4 ++-- .../layers/material-composition/material-composition.test.mts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/bake/src/objects/layers/material-composition/leaf-layouts.ts b/packages/bake/src/objects/layers/material-composition/leaf-layouts.ts index 7070b4b1512..11a7df7fbb3 100644 --- a/packages/bake/src/objects/layers/material-composition/leaf-layouts.ts +++ b/packages/bake/src/objects/layers/material-composition/leaf-layouts.ts @@ -12,8 +12,8 @@ function declarations(stylesheet: string, selector: string): Record}) { const pixelLength=/^\d+(?:\.\d+)?px$/; const common=declarations(stylesheet,config.stylesheet.scope+'.polycss-scene s'); - const width=common.width?.match(/^var\(--polycss-atlas-width,\s*([^)]*)\)$/)?.[1]; - const height=common.height?.match(/^var\(--polycss-atlas-height,\s*([^)]*)\)$/)?.[1]; + // The stylesheet states the leaf box as plain lengths: no custom property is set where a body is drawn. + const {width,height}=common; if(!width||!height||!pixelLength.test(width)||!pixelLength.test(height))throw new Error('Prepared leaf defaults must be explicit positive pixel lengths.'); const classes: Record={}; for(const shell of scene.interior.shells) { diff --git a/packages/bake/src/objects/layers/material-composition/material-composition.test.mts b/packages/bake/src/objects/layers/material-composition/material-composition.test.mts index a18cd212b77..9457c2419d2 100644 --- a/packages/bake/src/objects/layers/material-composition/material-composition.test.mts +++ b/packages/bake/src/objects/layers/material-composition/material-composition.test.mts @@ -65,7 +65,7 @@ test('material paths and parameters fail before source work',()=>{ }); test('projective leaf layout is derived from the scoped CSS it reads',()=>{ - const stylesheet='.scope .polycss-scene s{width:var(--polycss-atlas-width, 64px);height:var(--polycss-atlas-height, 64px)}.scope .shell > s:not(.demo-interior-pole){background-size:1024px 512px}'; + const stylesheet='.scope .polycss-scene s{width:64px;height:64px}.scope .shell > s:not(.demo-interior-pole){background-size:1024px 512px}'; const config={namespace:'demo',stylesheet:{path:'scoped.css',scope:'.scope '}}; const result=prepareLayeredLeafLayouts({scene:{interior:{shells:[{className:'shell'}]}},stylesheet,config}); assert.deepEqual(result.classes.shell,{width:'64px',height:'64px',backgroundSize:'1024px 512px'}); From 8370d760f41c213388514452ed6c4095598b0371 Mon Sep 17 00:00:00 2001 From: alowpoly Date: Mon, 5 Oct 2026 13:41:23 -0300 Subject: [PATCH 06/10] test(saturn): the color tie's pinned numbers follow the display-channel limb law --- .../layers/material-composition/layered-oblate.test.mts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bake/src/objects/layers/material-composition/layered-oblate.test.mts b/packages/bake/src/objects/layers/material-composition/layered-oblate.test.mts index 8476e2e4448..72ff172e282 100644 --- a/packages/bake/src/objects/layers/material-composition/layered-oblate.test.mts +++ b/packages/bake/src/objects/layers/material-composition/layered-oblate.test.mts @@ -50,8 +50,8 @@ test("Saturn's tinted OPAL map is tied to Karkoschka's whole-disc color and keep const { tie: report } = await prepareSurfaceColor({ sourcePath: join(source, recipe.sources.surface), unobservedRows: recipe.surfaceUnobservedRows, width: parameters.planetSourceTextureWidth, height: parameters.planetSourceTextureHeight, equatorialToPolar: parameters.objectEquatorialRadiusKm / parameters.objectPolarRadiusKm, channelFactors: [tint.r / peak, tint.g / peak, tint.b / peak], tie }); - assert.deepEqual(report, { reference: 'red', source: 'karkoschka-1998-whole-disc-color', measured: { green: 0.9317, blue: 0.6975 }, published: { green: 0.6759, blue: 0.5057 }, gains: [1, 0.7254, 0.725], - luminance: { factor: 1.2687, knee: 0.8, shoulderedTexels: 283798, shoulderedShare: 0.0684 } }); + assert.deepEqual(report, { reference: 'red', source: 'karkoschka-1998-whole-disc-color', measured: { green: 0.9317, blue: 0.6975 }, published: { green: 0.7052, blue: 0.4573 }, gains: [1, 0.7569, 0.6556], + luminance: { factor: 1.2391, knee: 0.8, shoulderedTexels: 216448, shoulderedShare: 0.0522 } }); }); test("Saturn's caps sit on the oblate polar carrier, which faces out of the body at the lane's own tile size", async () => { From 298fc2443e7e59a4392646e17d001f90d43a8abc Mon Sep 17 00:00:00 2001 From: alowpoly Date: Mon, 5 Oct 2026 14:15:13 -0300 Subject: [PATCH 07/10] fix(saturn): under flood light the limb law holds the incidence with the emission, so no texel of the outermost ring falls to black --- .../layers/material-composition/layered-oblate.ts | 5 ++++- packages/bake/src/photometry/limb.test.mts | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/bake/src/objects/layers/material-composition/layered-oblate.ts b/packages/bake/src/objects/layers/material-composition/layered-oblate.ts index 0142bf7ce5c..47a8bdaa3ab 100644 --- a/packages/bake/src/objects/layers/material-composition/layered-oblate.ts +++ b/packages/bake/src/objects/layers/material-composition/layered-oblate.ts @@ -2881,7 +2881,10 @@ function preparePolarMaterialSample({ function globeLimbOverlay(normal:ReadonlyVector3, objectLight:ReadonlyVector3, objectView:ReadonlyVector3, emissionFloor:number, directTransmission:number) { if (!limbReference) throw new Error("Saturn's limb overlay needs the prepared surface's reference color first."); const { incidence, emission, phase } = scatteringAngles(normal, objectLight, objectView, emissionFloor); - return limbOverlay(limbFactors(LIMB_LAW, incidence, emission, phase).map((factor) => factor * directTransmission), limbReference); + // Flood light is the view, so the incidence is the emission. The emission floor leaves a grazing texel's incidence past + // its emission; the law, held at the emission its data reached, would then fall to black on that texel alone. + const lit = phase < 1e-6 ? emission : incidence; + return limbOverlay(limbFactors(LIMB_LAW, lit, emission, phase).map((factor) => factor * directTransmission), limbReference); } function writeLimbOverlay(output:Uint8Array, offset:number, [r, g, b, alpha]:readonly number[]) { diff --git a/packages/bake/src/photometry/limb.test.mts b/packages/bake/src/photometry/limb.test.mts index 8c5436fe0e3..f544b09baf0 100644 --- a/packages/bake/src/photometry/limb.test.mts +++ b/packages/bake/src/photometry/limb.test.mts @@ -22,6 +22,18 @@ test('limb factors are 1 at the flood-lit disc centre, follow the law elsewhere assert.ok(Math.abs(side - Math.exp(-0.5628 * Math.PI / 3) * (0.6424 * 2 * 0.5 / 1.5 + 0.3576 * 0.5)) < 1e-12); }); +test('a grazing texel under flood light keeps the held law only when its incidence is held with its floored emission', () => { + // The fitted edge is 80 degrees in these records. A normal 0.006 degrees from the limb, lit from the viewer, with the + // one-texel emission floor of a 256-pixel frame: the emission is floored, the incidence is not. + const law = limbLawFromRecords(paths, [minnaert(0.8), minnaert(0.7), minnaert(0.73)]), view = [0, 0, 1]; + const { incidence, emission, phase } = scatteringAngles([Math.sqrt(1 - 1e-8), 0, 1e-4], view, view, 1 / 256); + assert.ok(phase < 1e-6 && incidence > emission && emission > 80 * degrees); + // Passed as they are, the angles are not flood light to the law, and the texel falls to a fifth of the held value. + const edge = Math.cos(80 * degrees), held = limbFactors(law, emission, emission, phase), collapsed = limbFactors(law, incidence, emission, phase); + assert.ok(Math.abs(held[0] - edge ** 0.6) < 1e-12); + assert.ok(collapsed[0] < held[0] / 5); +}); + test('the overlay is exact for the reference color and for the channel that sets its alpha', () => { const reference = [180, 120, 60] as const, factors = [0.9, 0.5, 1.4]; const [r, g, b, alpha] = limbOverlay(factors, reference); From e01e9de8ece71f8278272db4790b9640b1cab29a Mon Sep 17 00:00:00 2001 From: alowpoly Date: Mon, 5 Oct 2026 14:34:39 -0300 Subject: [PATCH 08/10] feat(saturn): Cassini's 2011 storm map is a dataset, from the PDS color cube with its blank rows as the gray grid --- src/objects/saturn/NOTICE.md | 10 +- src/objects/saturn/object.json | 5 + ...turn_global_color_map_contrast_enhance.xml | 215 +++++++++++++++++ .../Saturn_ISS_RGB_global_map_inf.txt | 23 ++ src/objects/saturn/source/content/object.json | 17 ++ src/objects/saturn/source/manifest.json | 219 +++++++++++++++++- .../source/preparation/acquisition.json | 8 + .../source/preparation/observations.json | 134 +++++++++++ src/objects/saturn/text.json | 14 ++ .../pds-cassini-iss-global-maps-v1.json | 46 ++++ 10 files changed, 684 insertions(+), 7 deletions(-) create mode 100644 src/objects/saturn/source/cassini-iss/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.xml create mode 100644 src/objects/saturn/source/cassini-iss/Saturn_ISS_RGB_global_map_inf.txt create mode 100644 src/sources/pds-cassini-iss-global-maps-v1.json diff --git a/src/objects/saturn/NOTICE.md b/src/objects/saturn/NOTICE.md index 655c06f5a1f..16f92ded495 100644 --- a/src/objects/saturn/NOTICE.md +++ b/src/objects/saturn/NOTICE.md @@ -8,12 +8,20 @@ CO-SR-UVIS-HSP-2/4-OCC-V3.0), from the PDS Ring-Moon Systems Node. The globe's limb law is the Minnaert table of the Hubble OPAL Saturn 2025 README (NASA, ESA and the OPAL team), transcribed as facts in -`source/photometry/`. The visible map's color balance is tied to a color +`source/photometry/` and weighted there over each display channel. The +visible map's color balance is tied to a color computed from E. Karkoschka's 1995 full-disc albedo spectrum of Saturn (Icarus 133, 1998), archived by the NASA PDS Atmospheres Node; the computed color is recorded in `source/photometry/`, and the table is cited, not redistributed. +The Cassini 2011 dataset is the contrast-enhanced color map of the PDS bundle +Cassini ISS Global Maps of Jupiter and Saturn (L. Li, R. A. West, X. Jiang +and B. Knowles; Cassini ISS, NASA/JPL-Caltech/Space Science Institute; NASA +PDS Atmospheres Node, doi:10.17189/rkkb-6y30), a public NASA archive product +described by Wang, Li, Jiang and West (2025, Scientific Data). No figure of +that paper is reproduced. + The ultraviolet and methane observation inputs are Hubble OPAL products from NASA, ESA, and the OPAL team. The atmospheric charts are NASA Planetary Spectrum Generator models. diff --git a/src/objects/saturn/object.json b/src/objects/saturn/object.json index 6c3b3f8f42b..0d0d4286f5c 100644 --- a/src/objects/saturn/object.json +++ b/src/objects/saturn/object.json @@ -135,6 +135,11 @@ "id": "visible-2025a", "source": "observations", "material": "projective" + }, + { + "id": "cassini-2011", + "source": "observations", + "material": "projective" } ] } diff --git a/src/objects/saturn/source/cassini-iss/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.xml b/src/objects/saturn/source/cassini-iss/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.xml new file mode 100644 index 00000000000..bf6a0e146e1 --- /dev/null +++ b/src/objects/saturn/source/cassini-iss/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.xml @@ -0,0 +1,215 @@ + + + + + + + + urn:nasa:pds:co_iss_global-maps:data_derived:cassini_iss_rgb_saturn_global_color_map_contrast_enhance + 1.0 + Cassini ISS RGB Saturn Global Color Map Contrast Enhance + 1.15.0.0 + Product_Observational + + + 2023-05-08 + 1.0 + Initial Template Creation + + + 2023-11-01 + 1.0 + Corrections/Edits from Lien Resolution + + + + + + 2011-08-11T03:05:09.695Z + 2011-08-11T11:40:11.412Z + + + Science + Derived + + Visible + Atmosphere + Atmospheres + Structure + + + + Cassini-Huygens + Mission + + urn:nasa:pds:context:investigation:mission.cassini-huygens + data_to_investigation + + + + Cassini + + Cassini + Host + + urn:nasa:pds:context:instrument_host:spacecraft.co + is_instrument_host + + + + Imaging Science Subsystem - Narrow Angle for CO + Instrument + + urn:nasa:pds:context:instrument:issna.co + is_instrument + + + + Imaging Science Subsystem - Wide Angle for CO + Instrument + + urn:nasa:pds:context:instrument:isswa.co + is_instrument_host + + + + + Saturn + Planet + + urn:nasa:pds:context:target:planet.saturn + data_to_target + + + + + + data_map + cartography_parameters_to_image_object + + + + 360 + 0 + 90 + -90 + + + + + + + Equirectangular + + 0.0 + 0.0 + 180.0 + + + + Row and Column + + 161 + 161 + 0.1 + 0.1 + + + + 0.0 + 90.0 + + + + Planetocentric + 60268 + 60268 + 54364 + Positive West + + + + + + + data_map + display_settings_to_array + + + + These settings apply to all images (Array_2D_Image) in the label. + + Sample + Left to Right + Line + Bottom to Top + + + + + + + Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.fits + file + 2018-05-14T16:57:55Z + +
+ header_map + 0 + 2880 + FITS 3.0 +
+ + data_map + 2880 + 3 + Last Index Fastest + Global map, color 3-band + + IEEE754MSBSingle + + + Line + 3601 + 1 + + + Sample + 1801 + 2 + + + Band + 3 + 3 + + + -999.9 + + +
+ + + Image_Information/Saturn_ISS_RGB_global_map_inf.txt + image-list + 2042 + List of images and geometry used in this product. + + + text-file + 0 + 2042 + 7-Bit ASCII Text + Supplemental text listing original images used in this map product. + Carriage-Return Line-Feed + + +
diff --git a/src/objects/saturn/source/cassini-iss/Saturn_ISS_RGB_global_map_inf.txt b/src/objects/saturn/source/cassini-iss/Saturn_ISS_RGB_global_map_inf.txt new file mode 100644 index 00000000000..310ac67d4da --- /dev/null +++ b/src/objects/saturn/source/cassini-iss/Saturn_ISS_RGB_global_map_inf.txt @@ -0,0 +1,23 @@ +RED filter +name time img_size resolution sub_solar_lat sub_craft_lat phs_angle east_lon west_lon +W1691726068_1.IMG 2011-223T03:05:09.695Z 1024 160.61820 10.689789 0.23610450 41.835512 208.42201 25.969197 +W1691733777_1.IMG 2011-223T05:13:38.630Z 1024 160.79694 10.691002 0.23729859 42.064955 280.52115 98.071726 +W1691741486_1.IMG 2011-223T07:22:07.582Z 1024 160.79987 10.692215 0.23848606 42.293993 352.62108 170.17480 +W1691749195_1.IMG 2011-223T09:30:36.533Z 1024 161.10974 10.693428 0.23966712 42.522668 64.721581 242.27820 +W1691756904_1.IMG 2011-223T11:39:05.484Z 1024 161.24385 10.694641 0.24084199 42.751020 136.82262 314.38190 + +GRN filter +name time img_size resolution sub_solar_lat sub_craft_lat phs_angle east_lon west_lon +W1691726101_1.IMG 2011-223T03:05:42.693Z 1024 160.61900 10.689794 0.23610962 41.836495 208.73062 26.277830 +W1691733810_1.IMG 2011-223T05:14:11.633Z 1024 160.79768 10.691007 0.23730369 42.065936 280.82982 98.380408 +W1691741519_1.IMG 2011-223T07:22:40.584Z 1024 160.79987 10.692220 0.23849113 42.294973 352.92974 170.48347 +W1691749228_1.IMG 2011-223T09:31:09.536Z 1024 161.11035 10.693433 0.23967216 42.523646 65.030253 242.58688 +W1691756937_1.IMG 2011-223T11:39:38.487Z 1024 161.24439 10.694646 0.24084701 42.751997 137.13129 314.69058 + +BL1 filter +name time img_size resolution sub_solar_lat sub_craft_lat phs_angle east_lon west_lon +W1691726134_1.IMG 2011-223T03:06:15.618Z 1024 160.61979 10.689799 0.23611474 41.837476 209.03856 26.585780 +W1691733843_1.IMG 2011-223T05:14:44.558Z 1024 160.79841 10.691012 0.23730878 42.066915 281.13776 98.688360 +W1691741552_1.IMG 2011-223T07:23:13.509Z 1024 160.79987 10.692225 0.23849619 42.295951 353.23768 170.79143 +W1691749261_1.IMG 2011-223T09:31:42.460Z 1024 161.11095 10.693438 0.23967719 42.524622 65.338187 242.89483 +W1691756970_1.IMG 2011-223T11:40:11.412Z 1024 161.24494 10.694651 0.24085201 42.752972 137.43924 314.99854 \ No newline at end of file diff --git a/src/objects/saturn/source/content/object.json b/src/objects/saturn/source/content/object.json index 044df2e9939..acb9c0c51ed 100644 --- a/src/objects/saturn/source/content/object.json +++ b/src/objects/saturn/source/content/object.json @@ -381,6 +381,23 @@ "path": "../opal-dates/hlsp_opal_hst_wfc3-uvis_saturn-2025a_f395n-f502n-f631n_v1_globalmap.tif", "url": "https://archive.stsci.edu/hlsp/opal/opal-saturn-cycle-32" } + }, + { + "id": "cassini-2011", + "label": "Cassini 2011", + "shortLabel": "Cassini", + "thumbnail": "/scenes/saturn/saturn-dataset-cassini-2011.webp", + "surface": "/scenes/saturn/saturn-surface-cassini-2011@2x.webp", + "poles": "/scenes/saturn/saturn-poles-cassini-2011.webp", + "falseColor": false, + "noData": true, + "qualification": "Cassini ISS · 2011-08-11 · enhanced color", + "notes": "Cassini wide-angle frames of 2011-08-11 in the RED, GRN and BL1 filters, mapped by Li, West, Jiang and Knowles (NASA PDS Atmospheres Node). This is the archive's contrast-enhanced color map: each color was stretched on its own, so the colors are stronger than the eye would see. The band of disturbed clouds around the north is what the great storm first seen on 5 December 2010 left behind. Gray grid marks what the map does not hold: both polar caps, the rings' line at the equator and the rings' shadow from 5 to 17 degrees south. The darker strip above that band is the edge of the same shadow. The scene lighting and rings follow the existing body presentation, not the observation date.", + "source": { + "id": "cassini-iss-2011-color-map-enhanced", + "path": "../cassini-iss/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.fits", + "url": "https://doi.org/10.17189/rkkb-6y30" + } } ] }, diff --git a/src/objects/saturn/source/manifest.json b/src/objects/saturn/source/manifest.json index 6d3583e014d..57906460236 100644 --- a/src/objects/saturn/source/manifest.json +++ b/src/objects/saturn/source/manifest.json @@ -1676,6 +1676,105 @@ "kind": "local", "reason": "Project-authored processing settings for the separately recorded source observations." } + }, + { + "id": "cassini-iss-2011-color-map-enhanced", + "path": "cassini-iss/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.fits", + "origin": "https://pds-atmospheres.nmsu.edu/PDS/data/PDS4/co_iss_global-maps/data_derived/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.fits", + "credit": "L. Li, R. A. West, X. Jiang and B. Knowles; Cassini ISS, NASA/JPL-Caltech/Space Science Institute; NASA Planetary Data System, Atmospheres Node", + "license": "NASA PDS archive data, urn:nasa:pds:co_iss_global-maps::1.0; not copyrighted, cite the data set", + "acquisition": "Product of the PDS bundle Cassini ISS Global Maps of Jupiter and Saturn: the contrast-enhanced RED/GRN/BL1 color map of Saturn, 2011-08-11. Taken on 2026-10-05 from the Internet Archive's 2024-11-18 capture of the bundle archive, co_iss_global-maps.tar.gz, while the node refused connections; the file has the 77,829,120 bytes the PDS registry lists. See preparation/acquisition.json.", + "redistribution": "checked scientific archive product with full credit", + "consumers": [ + "datasets" + ], + "capture": { + "attributions": [ + { + "kind": "facility", + "facilityId": "cassini", + "missionId": "cassini", + "evidence": "https://doi.org/10.17189/rkkb-6y30" + } + ] + }, + "sourceBinding": { + "kind": "catalogued", + "references": [ + { + "catalogueId": "pds-cassini-iss-global-maps-v1", + "role": "material", + "evidence": "Product cassini_iss_rgb_saturn_global_color_map_contrast_enhance of the bundle's derived data collection; its label is stored beside it.", + "locator": "data_derived/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.fits" + } + ] + } + }, + { + "id": "cassini-iss-2011-color-map-enhanced-label", + "path": "cassini-iss/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.xml", + "origin": "https://pds-atmospheres.nmsu.edu/PDS/data/PDS4/co_iss_global-maps/data_derived/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.xml", + "credit": "L. Li, R. A. West, X. Jiang and B. Knowles; Cassini ISS, NASA/JPL-Caltech/Space Science Institute; NASA Planetary Data System, Atmospheres Node", + "license": "NASA PDS archive data, urn:nasa:pds:co_iss_global-maps::1.0; not copyrighted, cite the data set", + "acquisition": "PDS4 label of the color map, from the same capture of the bundle archive: map projection, planetocentric latitude, positive-west longitude, radii and array layout.", + "redistribution": "checked scientific archive product with full credit", + "consumers": [ + "datasets" + ], + "capture": { + "attributions": [ + { + "kind": "facility", + "facilityId": "cassini", + "missionId": "cassini", + "evidence": "https://doi.org/10.17189/rkkb-6y30" + } + ] + }, + "sourceBinding": { + "kind": "catalogued", + "references": [ + { + "catalogueId": "pds-cassini-iss-global-maps-v1", + "role": "material", + "evidence": "PDS4 label of the color map product.", + "locator": "data_derived/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.xml" + } + ] + } + }, + { + "id": "cassini-iss-2011-color-map-enhanced-frames", + "path": "cassini-iss/Saturn_ISS_RGB_global_map_inf.txt", + "origin": "https://pds-atmospheres.nmsu.edu/PDS/data/PDS4/co_iss_global-maps/data_derived/Image_Information/Saturn_ISS_RGB_global_map_inf.txt", + "credit": "L. Li, R. A. West, X. Jiang and B. Knowles; Cassini ISS, NASA/JPL-Caltech/Space Science Institute; NASA Planetary Data System, Atmospheres Node", + "license": "NASA PDS archive data, urn:nasa:pds:co_iss_global-maps::1.0; not copyrighted, cite the data set", + "acquisition": "The bundle's list of the fifteen wide-angle frames the color map was made from, with each frame's time, resolution, phase angle and sub-spacecraft and sub-solar latitudes; from the same capture of the bundle archive.", + "redistribution": "checked scientific archive product with full credit", + "consumers": [ + "datasets" + ], + "capture": { + "attributions": [ + { + "kind": "facility", + "facilityId": "cassini", + "missionId": "cassini", + "evidence": "https://doi.org/10.17189/rkkb-6y30" + } + ] + }, + "sourceBinding": { + "kind": "catalogued", + "references": [ + { + "catalogueId": "pds-cassini-iss-global-maps-v1", + "role": "material", + "evidence": "Supplemental product of the color map: the frames and geometry it was made from.", + "locator": "data_derived/Image_Information/Saturn_ISS_RGB_global_map_inf.txt" + } + ] + } } ], "generatedIntermediates": [ @@ -1696,14 +1795,14 @@ }, { "path": "photometry/opal-2025-minnaert-f631n.json", - "purpose": "Hubble OPAL Minnaert coefficient of the 2025a color map (F631N, F502N, F395N), red channel (F631N): the correction OPAL divided out of the map, which the lighting overlay puts back.", + "purpose": "Hubble OPAL Minnaert coefficient of F631N from the 2025 Saturn README: the correction OPAL divided out of that filter's map, and one of the filters the display channels' limb law weighs.", "sourceBinding": { "kind": "catalogued", "references": [ { "catalogueId": "reference-opal-saturn-2025-readme", "role": "method", - "evidence": "The OPAL README's Minnaert table gives k = 0.8 for F631N, the correction applied to remove limb darkening before projection. The fitted phase range is the Earth-based phase of the map's epoch, 2.4-2.5 degrees on 29-30 August 2025, from JPL Horizons; the README states no angle ranges. The fitted emission range ends at 86.3 degrees: the outermost pixel of the WFC3/UVIS disc at the map's epoch (angular diameter from JPL Horizons, 0.0395 arcsec UVIS pixels), beyond which the observation resolved nothing.", + "evidence": "The OPAL README's Minnaert table gives k = 0.80 for F631N (\"F631N 0.80 .00362\"), the correction applied to remove limb darkening before projection. The fitted phase range is the Earth-based phase of the map's epoch, 2.4-2.5 degrees on 29-30 August 2025, from JPL Horizons; the README states no angle ranges. The fitted emission range ends at 86.3 degrees: the outermost pixel of the WFC3/UVIS disc at the map's epoch (angular diameter from JPL Horizons, 0.0395 arcsec UVIS pixels), beyond which the observation resolved nothing.", "locator": "Minnaert table, F631N row" } ] @@ -1714,14 +1813,14 @@ }, { "path": "photometry/opal-2025-minnaert-f502n.json", - "purpose": "Hubble OPAL Minnaert coefficient of the 2025a color map (F631N, F502N, F395N), green channel (F502N): the correction OPAL divided out of the map, which the lighting overlay puts back.", + "purpose": "Hubble OPAL Minnaert coefficient of F502N from the 2025 Saturn README: the correction OPAL divided out of that filter's map, and one of the filters the display channels' limb law weighs.", "sourceBinding": { "kind": "catalogued", "references": [ { "catalogueId": "reference-opal-saturn-2025-readme", "role": "method", - "evidence": "The OPAL README's Minnaert table gives k = 0.65 for F502N, the correction applied to remove limb darkening before projection. The fitted phase range is the Earth-based phase of the map's epoch, 2.4-2.5 degrees on 29-30 August 2025, from JPL Horizons; the README states no angle ranges. The fitted emission range ends at 86.3 degrees: the outermost pixel of the WFC3/UVIS disc at the map's epoch (angular diameter from JPL Horizons, 0.0395 arcsec UVIS pixels), beyond which the observation resolved nothing.", + "evidence": "The OPAL README's Minnaert table gives k = 0.65 for F502N (\"F502N 0.65 .00285\"), the correction applied to remove limb darkening before projection. The fitted phase range is the Earth-based phase of the map's epoch, 2.4-2.5 degrees on 29-30 August 2025, from JPL Horizons; the README states no angle ranges. The fitted emission range ends at 86.3 degrees: the outermost pixel of the WFC3/UVIS disc at the map's epoch (angular diameter from JPL Horizons, 0.0395 arcsec UVIS pixels), beyond which the observation resolved nothing.", "locator": "Minnaert table, F502N row" } ] @@ -1732,14 +1831,14 @@ }, { "path": "photometry/opal-2025-minnaert-f467m.json", - "purpose": "Hubble OPAL Minnaert coefficient for the blue channel of the 2025a color map: the F467M coefficient, not the F395N filter the channel was imaged in, because the map's display color is tied to Saturn's true color, whose blue channel is carried by light near 467 nm. The lighting overlay puts it back relative to the flood-lit disc centre.", + "purpose": "Hubble OPAL Minnaert coefficient of F467M from the 2025 Saturn README: the correction OPAL divided out of that filter's map, and one of the filters the display channels' limb law weighs.", "sourceBinding": { "kind": "catalogued", "references": [ { "catalogueId": "reference-opal-saturn-2025-readme", "role": "method", - "evidence": "The OPAL README's Minnaert table gives k = 0.86 for F467M (\"F467M 0.86 .00507\"), the correction applied to remove limb darkening before projection; F467M is the README filter closest to the sRGB blue primary. The F395N coefficient, 0.40, belongs to violet light that the true-color blue channel barely contains (13 % of it comes from 380-429 nm in Saturn's sunlit spectrum). The fitted phase range is the Earth-based phase of the map's epoch, 2.4-2.5 degrees on 29-30 August 2025, from JPL Horizons; the README states no angle ranges. The fitted emission range ends at 86.3 degrees: the outermost pixel of the WFC3/UVIS disc at the map's epoch (angular diameter from JPL Horizons, 0.0395 arcsec UVIS pixels), beyond which the observation resolved nothing.", + "evidence": "The OPAL README's Minnaert table gives k = 0.86 for F467M (\"F467M 0.86 .00507\"), the correction applied to remove limb darkening before projection. The fitted phase range is the Earth-based phase of the map's epoch, 2.4-2.5 degrees on 29-30 August 2025, from JPL Horizons; the README states no angle ranges. The fitted emission range ends at 86.3 degrees: the outermost pixel of the WFC3/UVIS disc at the map's epoch (angular diameter from JPL Horizons, 0.0395 arcsec UVIS pixels), beyond which the observation resolved nothing.", "locator": "Minnaert table, F467M row" } ] @@ -1765,6 +1864,114 @@ "origin": "https://pds-atmospheres.nmsu.edu/PDS/data/gbat_0001/data/1995low.tab", "credit": "E. Karkoschka (1998), Icarus 133, 134-146, archived by the NASA Planetary Data System Atmospheres Node; color computation: cssEarth.", "acquisition": "Color computed once from the cited PDS table and recorded in a project document; the table itself is not stored with the body." + }, + { + "path": "photometry/opal-2025-minnaert-f395n.json", + "purpose": "Hubble OPAL Minnaert coefficient of F395N from the 2025 Saturn README: the correction OPAL divided out of that filter's map, and one of the filters the display channels' limb law weighs.", + "sourceBinding": { + "kind": "catalogued", + "references": [ + { + "catalogueId": "reference-opal-saturn-2025-readme", + "role": "method", + "evidence": "The OPAL README's Minnaert table gives k = 0.40 for F395N (\"F395N 0.40 .00231\"), the correction applied to remove limb darkening before projection. The fitted phase range is the Earth-based phase of the map's epoch, 2.4-2.5 degrees on 29-30 August 2025, from JPL Horizons; the README states no angle ranges. The fitted emission range ends at 86.3 degrees: the outermost pixel of the WFC3/UVIS disc at the map's epoch (angular diameter from JPL Horizons, 0.0395 arcsec UVIS pixels), beyond which the observation resolved nothing.", + "locator": "Minnaert table, F395N row" + } + ] + }, + "origin": "https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025_all_v1_readme.txt", + "credit": "Hubble OPAL program (A. A. Simon, M. H. Wong and team), NASA/ESA/STScI; transcription: cssEarth.", + "acquisition": "Parameter values transcribed from the cited source into a project document; no data file was downloaded." + }, + { + "path": "photometry/opal-2025-minnaert-f763m.json", + "purpose": "Hubble OPAL Minnaert coefficient of F763M from the 2025 Saturn README: the correction OPAL divided out of that filter's map, and one of the filters the display channels' limb law weighs.", + "sourceBinding": { + "kind": "catalogued", + "references": [ + { + "catalogueId": "reference-opal-saturn-2025-readme", + "role": "method", + "evidence": "The OPAL README's Minnaert table gives k = 0.85 for F763M (\"F763M 0.85 .00376\"), the correction applied to remove limb darkening before projection. The fitted phase range is the Earth-based phase of the map's epoch, 2.4-2.5 degrees on 29-30 August 2025, from JPL Horizons; the README states no angle ranges. The fitted emission range ends at 86.3 degrees: the outermost pixel of the WFC3/UVIS disc at the map's epoch (angular diameter from JPL Horizons, 0.0395 arcsec UVIS pixels), beyond which the observation resolved nothing.", + "locator": "Minnaert table, F763M row" + } + ] + }, + "origin": "https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025_all_v1_readme.txt", + "credit": "Hubble OPAL program (A. A. Simon, M. H. Wong and team), NASA/ESA/STScI; transcription: cssEarth.", + "acquisition": "Parameter values transcribed from the cited source into a project document; no data file was downloaded." + }, + { + "path": "photometry/opal-2025-minnaert-display-red.json", + "purpose": "Saturn's Minnaert limb coefficient for the display's red channel: the OPAL README's coefficients weighted by the light that channel shows. The lighting overlay puts it back relative to the flood-lit disc centre.", + "sourceBinding": { + "kind": "catalogued", + "references": [ + { + "catalogueId": "reference-opal-saturn-2025-readme", + "role": "method", + "evidence": "Derived by packages/bake/authoring/saturn/display-limb.mts from the README's coefficients for F395N, F467M, F502N, F631N and F763M (0.40, 0.86, 0.65, 0.80, 0.85; the per-filter records beside this one), interpolated in wavelength between filters and held outside them, each wavelength weighted by its share of the sRGB red channel: k = 0.798. A weighted sum of Minnaert laws is not a Minnaert law; this exponent fits the weighted profile over the flood-lit disc out to 86.3 degrees, where the power law departs from the profile by at most 0.004. The methane-band filters FQ727N and FQ889N are left out. The phase and emission ranges are the per-filter records'.", + "locator": "Minnaert table, F395N, F467M, F502N, F631N and F763M rows" + }, + { + "catalogueId": "karkoschka-1998-jovian-spectrophotometry-1995-low", + "role": "reference", + "evidence": "The weights are the SATURN ALBEDO column of 1995LOW.TAB times a 5,772 K Planck spectrum through the CIE 1931 2 degree observer into linear sRGB, the computation of the whole-disc color record; the command checks that the same spectrum reproduces that record's channel ratios.", + "locator": "1995LOW.TAB, columns 2 (air wavelength) and 5 (Saturn albedo), 380-780 nm" + } + ] + }, + "origin": "https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025_all_v1_readme.txt", + "credit": "Hubble OPAL program (A. A. Simon, M. H. Wong and team), NASA/ESA/STScI; E. Karkoschka (1998), Icarus 133, 134-146; weighting: cssEarth.", + "acquisition": "Derived by packages/bake/authoring/saturn/display-limb.mts from the per-filter records and the cited PDS table; the table itself is not stored with the body." + }, + { + "path": "photometry/opal-2025-minnaert-display-green.json", + "purpose": "Saturn's Minnaert limb coefficient for the display's green channel: the OPAL README's coefficients weighted by the light that channel shows. The lighting overlay puts it back relative to the flood-lit disc centre.", + "sourceBinding": { + "kind": "catalogued", + "references": [ + { + "catalogueId": "reference-opal-saturn-2025-readme", + "role": "method", + "evidence": "Derived by packages/bake/authoring/saturn/display-limb.mts from the README's coefficients for F395N, F467M, F502N, F631N and F763M (0.40, 0.86, 0.65, 0.80, 0.85; the per-filter records beside this one), interpolated in wavelength between filters and held outside them, each wavelength weighted by its share of the sRGB green channel: k = 0.698. A weighted sum of Minnaert laws is not a Minnaert law; this exponent fits the weighted profile over the flood-lit disc out to 86.3 degrees, where the power law departs from the profile by at most 0.0001. The methane-band filters FQ727N and FQ889N are left out. The phase and emission ranges are the per-filter records'.", + "locator": "Minnaert table, F395N, F467M, F502N, F631N and F763M rows" + }, + { + "catalogueId": "karkoschka-1998-jovian-spectrophotometry-1995-low", + "role": "reference", + "evidence": "The weights are the SATURN ALBEDO column of 1995LOW.TAB times a 5,772 K Planck spectrum through the CIE 1931 2 degree observer into linear sRGB, the computation of the whole-disc color record; the command checks that the same spectrum reproduces that record's channel ratios.", + "locator": "1995LOW.TAB, columns 2 (air wavelength) and 5 (Saturn albedo), 380-780 nm" + } + ] + }, + "origin": "https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025_all_v1_readme.txt", + "credit": "Hubble OPAL program (A. A. Simon, M. H. Wong and team), NASA/ESA/STScI; E. Karkoschka (1998), Icarus 133, 134-146; weighting: cssEarth.", + "acquisition": "Derived by packages/bake/authoring/saturn/display-limb.mts from the per-filter records and the cited PDS table; the table itself is not stored with the body." + }, + { + "path": "photometry/opal-2025-minnaert-display-blue.json", + "purpose": "Saturn's Minnaert limb coefficient for the display's blue channel: the OPAL README's coefficients weighted by the light that channel shows. The lighting overlay puts it back relative to the flood-lit disc centre.", + "sourceBinding": { + "kind": "catalogued", + "references": [ + { + "catalogueId": "reference-opal-saturn-2025-readme", + "role": "method", + "evidence": "Derived by packages/bake/authoring/saturn/display-limb.mts from the README's coefficients for F395N, F467M, F502N, F631N and F763M (0.40, 0.86, 0.65, 0.80, 0.85; the per-filter records beside this one), interpolated in wavelength between filters and held outside them, each wavelength weighted by its share of the sRGB blue channel: k = 0.728. A weighted sum of Minnaert laws is not a Minnaert law; this exponent fits the weighted profile over the flood-lit disc out to 86.3 degrees, where the power law departs from the profile by at most 0.028. The methane-band filters FQ727N and FQ889N are left out. The phase and emission ranges are the per-filter records'.", + "locator": "Minnaert table, F395N, F467M, F502N, F631N and F763M rows" + }, + { + "catalogueId": "karkoschka-1998-jovian-spectrophotometry-1995-low", + "role": "reference", + "evidence": "The weights are the SATURN ALBEDO column of 1995LOW.TAB times a 5,772 K Planck spectrum through the CIE 1931 2 degree observer into linear sRGB, the computation of the whole-disc color record; the command checks that the same spectrum reproduces that record's channel ratios.", + "locator": "1995LOW.TAB, columns 2 (air wavelength) and 5 (Saturn albedo), 380-780 nm" + } + ] + }, + "origin": "https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025_all_v1_readme.txt", + "credit": "Hubble OPAL program (A. A. Simon, M. H. Wong and team), NASA/ESA/STScI; E. Karkoschka (1998), Icarus 133, 134-146; weighting: cssEarth.", + "acquisition": "Derived by packages/bake/authoring/saturn/display-limb.mts from the per-filter records and the cited PDS table; the table itself is not stored with the body." } ] } diff --git a/src/objects/saturn/source/preparation/acquisition.json b/src/objects/saturn/source/preparation/acquisition.json index 640cc5d0c69..e75d9cb9dea 100644 --- a/src/objects/saturn/source/preparation/acquisition.json +++ b/src/objects/saturn/source/preparation/acquisition.json @@ -393,6 +393,14 @@ ], "path": "opal-dates/hlsp_opal_hst_wfc3-uvis_saturn-2025a_f631n_v1_globalmap.fits", "url": "https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025a_f631n_v1_globalmap.fits" + }, + { + "kind": "download", + "groups": [ + "refresh" + ], + "path": "cassini-iss/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.fits", + "url": "https://pds-atmospheres.nmsu.edu/PDS/data/PDS4/co_iss_global-maps/data_derived/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.fits" } ] } diff --git a/src/objects/saturn/source/preparation/observations.json b/src/objects/saturn/source/preparation/observations.json index 560a32b0bdb..600fa35552c 100644 --- a/src/objects/saturn/source/preparation/observations.json +++ b/src/objects/saturn/source/preparation/observations.json @@ -256,6 +256,14 @@ "origin": "https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025a_f631n_v1_globalmap.fits", "credit": "NASA, ESA, A. A. Simon, M. H. Wong and the OPAL team", "license": "CC BY 4.0" + }, + { + "id": "cassini-iss-2011-color-map-enhanced", + "path": "cassini-iss/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.fits", + "expectedBytes": 77829120, + "origin": "https://pds-atmospheres.nmsu.edu/PDS/data/PDS4/co_iss_global-maps/data_derived/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.fits", + "credit": "L. Li, R. A. West, X. Jiang and B. Knowles; Cassini ISS, NASA/JPL-Caltech/Space Science Institute; NASA Planetary Data System, Atmospheres Node", + "license": "NASA PDS archive data, urn:nasa:pds:co_iss_global-maps::1.0; not copyrighted, cite the data set" } ], "datasets": [ @@ -1186,6 +1194,132 @@ "longitudePeriod": 1800 }, "planetographicAxisRatio": 1.1086012802589948 + }, + { + "id": "cassini-2011", + "source": "cassini-iss/Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance.fits", + "decode": { + "kind": "fits-planes", + "bitpix": -32, + "width": 3601, + "height": 1801, + "firstRow": "north", + "crop": { + "left": 1, + "top": 0, + "width": 3600, + "height": 1801 + } + }, + "products": [ + { + "kind": "surface", + "filename": "saturn-surface-cassini-2011.webp", + "transforms": [ + { + "kind": "resize", + "width": 2048, + "height": 1024 + } + ], + "packing": { + "bandCount": 16, + "gutter": 16 + }, + "encoding": { + "quality": 80, + "smartSubsample": true, + "effort": 6 + } + }, + { + "kind": "surface", + "filename": "saturn-surface-cassini-2011@2x.webp", + "transforms": [ + { + "kind": "resize", + "width": 4096, + "height": 2048 + } + ], + "packing": { + "bandCount": 16, + "gutter": 32 + }, + "encoding": { + "quality": 80, + "smartSubsample": true, + "effort": 6 + } + }, + { + "kind": "poles", + "filename": "saturn-poles-cassini-2011.webp", + "projection": { + "tileSize": 512, + "poles": [ + "north", + "south", + "north", + "south", + "north", + "south", + "north", + "south" + ], + "latitudeSegments": 16, + "angularMode": "orthographic", + "sampling": "bilinear-wrapped" + }, + "encoding": { + "quality": 80, + "smartSubsample": true, + "effort": 6, + "alphaQuality": 100 + } + }, + { + "kind": "thumbnail", + "filename": "saturn-dataset-cassini-2011.webp", + "transforms": [ + { + "kind": "resize", + "width": 132, + "height": 72 + } + ], + "encoding": { + "quality": 80, + "smartSubsample": true, + "effort": 6 + } + } + ], + "coverage": { + "kind": "declared-rows", + "unobservedRows": [ + [ + 0, + 110 + ], + [ + 898, + 906 + ], + [ + 954, + 1071 + ], + [ + 1721, + 1800 + ] + ], + "reverseLongitude": true, + "longitudeOffsetDegrees": -0.1, + "longitudePeriod": 3600 + }, + "planetocentricSampleRows": 1.1086012802589948 } ] } diff --git a/src/objects/saturn/text.json b/src/objects/saturn/text.json index 7e6cec7aaa4..17ee4c27d35 100644 --- a/src/objects/saturn/text.json +++ b/src/objects/saturn/text.json @@ -152,6 +152,20 @@ "locator": "Rotation 2025a; FITS DATE-OBS" } ] + }, + "cassini-2011": { + "title": "Cassini 2011-08-11", + "detail": "RED / GRN / BL1, enhanced", + "summary": "Clouds of the great storm circle the north, in the archive's enhanced color. Gray grid marks what Cassini did not map.", + "sources": [ + { + "catalogueId": "pds-cassini-iss-global-maps-v1", + "url": "https://doi.org/10.17189/rkkb-6y30", + "label": "NASA PDS · Cassini ISS global maps", + "checked": "2026-10-05", + "locator": "Cassini_ISS_RGB_Saturn_global_color_map_contrast_enhance; FITS DATE-STA" + } + ] } } } diff --git a/src/sources/pds-cassini-iss-global-maps-v1.json b/src/sources/pds-cassini-iss-global-maps-v1.json new file mode 100644 index 00000000000..bc088c7e9a0 --- /dev/null +++ b/src/sources/pds-cassini-iss-global-maps-v1.json @@ -0,0 +1,46 @@ +{ + "id": "pds-cassini-iss-global-maps-v1", + "kind": "data-product", + "identityLevel": "release", + "title": "Cassini ISS Global Maps of Jupiter and Saturn", + "version": "1.0", + "identifiers": [ + { + "type": "doi", + "value": "10.17189/rkkb-6y30" + }, + { + "type": "PDS4 LIDVID", + "value": "urn:nasa:pds:co_iss_global-maps::1.0" + } + ], + "creators": [ + "L. Li", + "R. A. West", + "X. Jiang", + "B. Knowles" + ], + "publisher": "NASA Planetary Data System, Atmospheres Node", + "publicationDate": "2023", + "links": [ + { + "role": "landing", + "url": "https://doi.org/10.17189/rkkb-6y30", + "label": "PDS bundle" + }, + { + "role": "original", + "url": "https://doi.org/10.1038/s41597-025-04392-3", + "label": "Wang, Li, Jiang and West (2025), the maps' data descriptor" + } + ], + "evidence": [ + { + "url": "https://pds.nasa.gov/ds-view/pds/viewBundle.jsp?identifier=urn%3Anasa%3Apds%3Aco_iss_global-maps&version=1.0", + "checkedOn": "2026-10-05", + "locator": "IDENTIFIER, NAME, AUTHORS, PUBLICATION YEAR and DIGITAL OBJECT IDENTIFIER" + } + ], + "relations": [], + "statements": [] +} From 29cbe1cbd11461b63b5c8b379d051900e0711551 Mon Sep 17 00:00:00 2001 From: alowpoly Date: Mon, 5 Oct 2026 14:34:41 -0300 Subject: [PATCH 09/10] chore(saturn): rebake with the display-channel limb law, the flood-light fix and the Cassini dataset; README, ledger and evidence --- src/objects/saturn/README.md | 104 +++- .../2026-10-05/cassini-2011-desktop.webp | Bin 0 -> 126228 bytes .../2026-10-05/limb-before-after.webp | Bin 0 -> 57426 bytes src/objects/saturn/inventory.json | 516 +++++++++--------- src/objects/saturn/investigations.json | 73 ++- 5 files changed, 427 insertions(+), 266 deletions(-) create mode 100644 src/objects/saturn/evidence/2026-10-05/cassini-2011-desktop.webp create mode 100644 src/objects/saturn/evidence/2026-10-05/limb-before-after.webp diff --git a/src/objects/saturn/README.md b/src/objects/saturn/README.md index 494f98da7b4..4ce92027fac 100644 --- a/src/objects/saturn/README.md +++ b/src/objects/saturn/README.md @@ -1,7 +1,8 @@ # Saturn sources Saturn combines a Hubble OPAL visible body map, Hubble spectral maps, a Cassini -UVIS ring opacity profile, and modeled atmosphere charts. +map of the 2011 storm clouds, a Cassini UVIS ring opacity profile, and modeled +atmosphere charts. Source selections, recorded trials and open questions are in the [investigation ledger](investigations.json). @@ -17,6 +18,7 @@ Source selections, recorded trials and open questions are in the [investigation | Interior | [Mankovich and Fuller (2021)](https://doi.org/10.1038/s41550-021-01448-3) and [Movshovitz density profiles](https://doi.org/10.7291/D1P07G) | | Atmosphere charts | [NASA Planetary Spectrum Generator](https://psg.gsfc.nasa.gov/), modeled 29 August 2026 | | Dated visible maps | Eight [OPAL](https://archive.stsci.edu/hlsp/opal) rotations, 2018 to 2025 (table below) | +| Storm clouds of 2011 | [Cassini ISS global color map](https://doi.org/10.17189/rkkb-6y30), contrast-enhanced, 2011-08-11 (NASA PDS Atmospheres Node; [Wang et al. 2025](https://doi.org/10.1038/s41597-025-04392-3)) | [Inputs](source/manifest.json) · [Recipe](object.json) · [Credits](NOTICE.md) · [Contributor guide](../README.md) @@ -53,17 +55,37 @@ full-disc albedo of Saturn, times a 5,772 K Planck spectrum, through the CIE [`source/photometry/karkoschka-1998-whole-disc-color.json`](source/photometry/karkoschka-1998-whole-disc-color.json). The tie allows for the limb law, so the flood-lit disc integrates to Karkoschka's color. The map then gets back its untied luminance with one -factor on all three channels, 1.269, and a soft shoulder keeps bright texels +factor on all three channels, 1.239, and a soft shoulder keeps bright texels from clipping. Spatial color differences stay the map's own. An independent spectrum agrees: Payne et al. (2026) gives green/red 0.863 and blue/red 0.589, where Karkoschka's spectrum gives 0.863 and 0.593. -Lighting. The material overlays put back the limb darkening OPAL removed, with -the Cycle 32 readme's Minnaert coefficients: k 0.80 in F631N (red) and 0.65 in -F502N (green). The blue channel takes F467M's k 0.86, not F395N's 0.40; with -F395N's k the limb turned gray-blue. The coefficients are recorded in -`source/photometry/opal-2025-minnaert-*.json`. A `#fff1ea` solar multiplier, -from the 5,772 K photosphere of NASA's +Lighting. The material overlays put back the limb darkening OPAL removed. The +Cycle 32 readme gives one Minnaert coefficient per filter: 0.40 in F395N, 0.86 +in F467M, 0.65 in F502N, 0.80 in F631N and 0.85 in F763M. A display channel +shows a range of wavelengths, so each channel takes those coefficients weighted +by the light it shows: Saturn's spectrum in sunlight through the CIE 1931 +observer, the computation behind the whole-disc color. Between two filters the +coefficient is interpolated in wavelength, a join that is ours, and the +methane-band filters FQ727N and FQ889N are left out. The result is k 0.798 for +red, 0.698 for green and 0.728 for blue, written by +[`display-limb.mts`](../../../packages/bake/authoring/saturn/display-limb.mts) +to `source/photometry/opal-2025-minnaert-display-*.json`. A weighted sum of +Minnaert laws is not a Minnaert law: the recorded power laws depart from the +weighted profiles by at most 0.004, 0.0001 and 0.028 of the disc-centre +brightness. Until 2026-10-05 each channel took its nearest filter (0.80, 0.65 +and 0.86): green darkened least and the limb turned olive. + +The law is held at the edge of its data, 86.3 degrees of emission, and under +flood light the incidence is held with it. Until 2026-10-05 the 256-pixel +frame floored a grazing texel's emission at one texel but not its incidence, +so the law was held on one angle only and fell to black on scattered texels of +the outermost ring. A texel is 8 screen pixels at 2x, and those texels read as +dark dashes along the limb. Past the silhouette the overlay loses its color, +so over space it only darkens; a texel the silhouette crosses keeps its color +by the share of it that lies inside. + +A `#fff1ea` solar multiplier, from the 5,772 K photosphere of NASA's [Sun fact sheet](https://nssdc.gsfc.nasa.gov/planetary/factsheet/sunfact.html), is multiplied into the surface during preparation. @@ -181,11 +203,70 @@ graticule marks it. The dates reuse the visible scene's rings and lighting. ![Dated OPAL map with the shared sequence controls](evidence/opal-dates-desktop.webp) +## Cassini 2011 + +The Cassini dataset is the contrast-enhanced color map of the PDS bundle +[Cassini ISS Global Maps of Jupiter and Saturn](https://doi.org/10.17189/rkkb-6y30) +(Li, West, Jiang and Knowles, 2023), described by +[Wang, Li, Jiang and West (2025)](https://doi.org/10.1038/s41597-025-04392-3). +Fifteen wide-angle frames of 2011-08-11, five each in the RED, GRN and BL1 +filters at 161 km per pixel, were mapped on a 0.1 degree grid of planetocentric +latitude and west longitude. The band of disturbed clouds around the north is +what the [great storm first seen on 5 December 2010](https://science.nasa.gov/resource/great-disturbances-2/) +left behind. + +It is a dataset, not the default body. Its detail is finer than the Hubble +map's: north of the equator the fine detail's correlation length along +longitude is 0.14 to 0.18 degrees, against 0.23 to 0.33 for Hubble's 2025 map. +But 17.7 % of the map holds no data, its values are 8-bit display levels +stretched per color, not natural color, and it shows 2011. + +Preparation checked the file before using it: + +- **Row order.** The first stored row is 90 degrees north, though the `LAT_C` + card reads `-90:0.1:90`. The storm, in the north, and the rings' shadow, in + the south with the Sun 10.7 degrees north, fix the order. +- **Longitude direction.** Stored column c is west longitude 0.1 c degrees, + though the `LON_W` card reads `360.0:-0.1:0.0`. Raw frame `W1691726068_1`, + projected with the geometry the + [PDS Ring-Moon Systems Node](https://opus.pds-rings.seti.org/opus/#/opusid=co-iss-w1691726068) + gives for it (sub-spacecraft longitude 297.1 degrees west), correlates 0.62 + with the prepared dataset's storm band and 0.23 with its mirror image. +- **A blank column.** The first stored column is zero on 1,595 of 1,801 rows. + The recipe crops it and takes the 0 degree meridian from the last column. +- **No data.** The file is zero from 79.0 degrees north and from 82.1 degrees + south to the poles (planetocentric), on a line at the equator where the + rings crossed the disc, and from 5.4 to 17.1 degrees south, where the rings' + shadow fell. The recipe names those rows and the dataset draws the gray grid + there. The rows from 1.9 to 5.3 degrees south are dimmed by the same shadow + and are shown as archived. + +[The observation recipe](source/preparation/observations.json) reads the +cube's three planes as red, green and blue, moves its rows from planetocentric +latitude to the mesh's own and changes no color. The columns are point +samples drawn as cells, 0.05 degrees east of their stated longitude. The +dataset is lit with the default map's limb law: the archive removed the +frames' own shading with an empirical method and publishes no coefficients. + ## Evidence Source inspection found every dated map correlates more strongly with its component FITS rows in stored order than after a north/south flip. +On 2026-10-05 the default view was captured in headless Chrome with a GPU, at +1440 by 900 and 2x pixel density, on css.earth v0.6524 and on this version, +and measured on the same rays through 32 degrees of the upper-left limb. Dark +dips deeper than 12 levels, 3 pixels inside the edge, went from 29 to 3; +Jupiter has none. Five pixels inside the edge, green/red went from 1.02 to +0.89 and blue/red from 0.55 to 0.66. Left before, right after, at screen +pixels: + +![The upper-left limb before and after](evidence/2026-10-05/limb-before-after.webp) + +The Cassini dataset in the app: + +![The Cassini 2011 dataset on Saturn](evidence/2026-10-05/cassini-2011-desktop.webp) + ## Known problems - Ultraviolet and methane views contain filled rows, and their rings are the visible-light opacity profile. @@ -193,6 +274,9 @@ component FITS rows in stored order than after a north/south flip. - Interior layers are illustrations. - Narrow ring features are widened and brightened for readability; they do not establish optical depth or fully resolved ringlets. - Rotation is accelerated. The camera, shadows and background orientation are presentation choices, and source observations come from different dates. -- The visible map's color balance is tied to one whole-disc spectrum from 1995; the 2025 map's own cloud colors are kept, but a seasonal change in Saturn's overall color since 1995 would not show. The tie sets channel ratios only; the map's overall brightness is still the archive TIF's arbitrary scale, kept at its untied mean, and its brightest 7 % of texels are compressed by a soft shoulder. -- The map's blue channel is F395N (violet) data, displayed as sRGB blue with the F467M limb law. The navigation portrait and context image still crop the untied TIF. +- The visible map's color balance is tied to one whole-disc spectrum from 1995; the 2025 map's own cloud colors are kept, but a seasonal change in Saturn's overall color since 1995 would not show. The tie sets channel ratios only; the map's overall brightness is still the archive TIF's arbitrary scale, kept at its untied mean, and its brightest 5 % of texels are compressed by a soft shoulder. +- The map's blue channel is F395N (violet) data, displayed as sRGB blue. Each display channel's limb law is a weighted mean of OPAL's per-filter coefficients, interpolated between filters. The navigation portrait and context image still crop the untied TIF. +- The visible map is Hubble's, 1,800 pixels around the planet. At the default view on a 2x screen one source pixel covers 1.8 screen pixels, against 0.9 on Jupiter, so Saturn is softer. A 4,096-pixel body image showed 4 % more fine detail than the shipped 2,048 in a composed default view (2026-10-05) and was not shipped. +- The Cassini 2011 dataset is the archive's contrast-enhanced color with no calibration, lit with the Hubble map's limb law under the present scene's rings. +- The limb overlay's frames are 256 pixels wide and drawn 4 times larger. The dashes along the limb were measured and fixed under flood light; with shadows on, the outermost ring was not measured. - The material overlay has one color and alpha per texel, so the per-channel limb law is exact for the prepared surface's mean color and approximate for colors far from it ([planet limbs](../../../docs/surface-preparation.md#planet-limbs-from-published-laws)). OPAL's coefficients are for near-zero phase; directional frames use them at every phase. diff --git a/src/objects/saturn/evidence/2026-10-05/cassini-2011-desktop.webp b/src/objects/saturn/evidence/2026-10-05/cassini-2011-desktop.webp new file mode 100644 index 0000000000000000000000000000000000000000..9dd343ee055ab6bc929be89282a0b7232e94a537 GIT binary patch literal 126228 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νF`NtIda{%x=m1*A2g_{g{6Oz^g_joKRF@ zFd9n@ZlwHF-8U{?P#SS{=Y{o2K7}GC(mUjMCJtC$;JS3oO~Z3KzOS(t_eRtRBXv|h zz48#acqJ&v`*|ikTZkiH?7_Kq_M8UB+iJA6p{~zanZ9UPJmH*S|C3T0&C za@ny{5H87b26`ckMmJgmnlh@sVeQht>H?IcT|J+Om~B74bp`P{|5jL5KyukscGo&V zylo#U33ZQSXv~cAo?Jn@zXKYZ;u6Hng9{X1w5wcABPfl!U+ip8oyasf4@7bml-wl` z$QUjw6T(_u4&KA?0s$8dOl4nBuwi2J0MK3_k^b{D(lded_r%npr!;3))EOg+GDH%b!D$Czz$FR972EbR_`d>JrB|t3P=HDumiB;i=IzD zku>LAP=RYt0DAGU-82bUllIR16$Wo^%a4uhGJCl1nNt(8=;PoFn(xYSEBWQ)9g3V_ zS*V$({JC ztEoIsUb}p5>Ru2UTUH^FQ$ak=8VJ(QGhCOOk*NBOp~UW^JP5U-jY|n3C38=U-q1S=agR54Ct%?1HKr78-<2eq z%HzZ!=np@C97lIm-t$75pxFOUz<0t`gyY7LmXlkVboc;gx7jJmzQo=3!hLi2$7G@&R;ORvw@=vXYXX(0yFxzemGAg_xnU z>Qwc^KE~+`8sZuS83@Oqyndi_bS>c^1X|ucvLU(X92_(zmxo%g%uDS;&VYT@s^hfj z1%ioJES(OA)}N`R^ts+L!Bzpw>Q><_Tv+`1{=y!ANXD$dLgbLwY4N5-C#R;71E9#s zGK$`OMVw)dp1Vds2bYDxK1c-}Ssc>TmSErXG|*kWm~CbzY#g!`P*`;wg3BfFX zvu|s@GFdZkyPs6-2B|a?`oV5_bm+4h99-k~E~CROd|0JyLt%8+DNru^Ci(g3#IKGp z7D)X-pK?WcVd8daYPBVnJYMV^AZB)qQSOL(O3CXvFT*SGg4xd7EI)4Q`7j2;_AdCk!trF*kF9*ExiJnz`aV!&9WrV@!h;0MVySwKQsH zqwg;ZApM(s;Htum%fIF9vo_TQFbwN|qqf}aLu|)}HDK#

~rB5!0Qv92`O1IxG#) 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 zrmPUr1O=lY00000000000000000003%AvO}H?6qeYki006m&0=obJ literal 0 HcmV?d00001 diff --git a/src/objects/saturn/evidence/2026-10-05/limb-before-after.webp b/src/objects/saturn/evidence/2026-10-05/limb-before-after.webp new file mode 100644 index 0000000000000000000000000000000000000000..fd4769ed24b222a5053b3adf8cfb8145e9cfdc46 GIT binary patch literal 57426 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�yazx1E3O@%=pFr!ACCEaSP^Snp+@3z5T+_Z zbIZ26{fN@;Y+6=CS@6`!25uJfRM0z(xKuQ5<$!JY_4t^(ZY=4{i1p85NQ}juHm@Z{ zGprC%2-@U2$fc3C2JcL?O(e$bRq{Sj0scYKK`4IYWsqIL5Tu@YeUms*I0TGpqmWp< zB~qq$5%4P_akcpy>0m_A)TI#g1jX=h=g6kh;WbG?zz9gho*4Rz=f;kH?rTDeBkErb zZY3;jFkwc#1AUJk4W-;7&-oQMxBZX)(=OOgDwoBI_|xh+4bYfluFtjr=oyj)pb9ts zIU(57h&Qo99|b#s-B)ZoH??2KvSk~LfgAy=jX!xOakVRaaN8kLov zU4IGk>B5y7U3(Cse&6Bp%Z~jHFnZcG9}(3@;x-8PyF@;ipwV?p?}1yYpngypq+We~ z>Dk6i46vss2UpMo9?>~SDUKc#w4dzs4@4Ky&z1m;G;Mv@`kVsH094f52Vc&N)6oHi z9Hr`5^_3ZbCR-Rux2r2Ue@(oJSCNT4lCSzl*v$z_WG0`W6^x6LV`ypS7UnXLsF;t;7+$ z>kG{W#4c9m;Lu*jU#z%SF;x)#15|sC6!Wsv^w~G{DxB>6^ za52atIpE3_WoTZRKWxvH)=7hb0uCIq7}{7q=1aF?H$ss8G zUvuT7Zog|;jdc1VQ?DuBkNBm^Tj{0fBahS;zHj-%%wd_wB?s4ht$lGafSkFjGt+kt zugmLbK?f_}tjKC9)Q7M1i@Q_Ne&`14S~2WeMAL0Nk+fdN^@JnM7?kv^#zr_pjhq>E R{@!mYnYQs?aN#<@001Orcx?ax literal 0 HcmV?d00001 diff --git a/src/objects/saturn/inventory.json b/src/objects/saturn/inventory.json index 657f2715820..684ffa548db 100644 --- a/src/objects/saturn/inventory.json +++ b/src/objects/saturn/inventory.json @@ -4,8 +4,8 @@ { "location": "public", "filename": "saturn-arrival.webp", - "bytes": 175096, - "sha256": "3d6ed2e3590e81b78b1fe662003c5e99c3e8d230b5744e85613c3e3c94dfdd7a" + "bytes": 173194, + "sha256": "e13617566b5f8e833c74562db1644f31e9ad76988c9fa4372b6720bbc5ab967f" }, { "location": "public", @@ -16,26 +16,32 @@ { "location": "public", "filename": "saturn-billboard.webp", - "bytes": 15440, - "sha256": "6243bb6438cb81b067ea5ebfcd0ab12ddfb40fb637138a5cbe24e17e727499aa" + "bytes": 14814, + "sha256": "8792f94998e86d02bb7c3b82b21fbfc3931bbfcbc02524ff2d9a9763b2b55dea" + }, + { + "location": "public", + "filename": "saturn-dataset-cassini-2011.webp", + "bytes": 1714, + "sha256": "f8748ba5bdeed02003a4696e998412722511f6b62e1f125eed7092a211e4178e" }, { "location": "public", "filename": "saturn-dataset-methane.webp", - "bytes": 630, - "sha256": "6b7adf5d734a2fe72d10806fb3d66cb6efacaa6b98cf363621916a5e13dd0c16" + "bytes": 604, + "sha256": "2e0fc46c753f77483c052722d42e1409c54ba86f0a147ad94b93e42cd8609b5f" }, { "location": "public", "filename": "saturn-dataset-normal.webp", - "bytes": 324, - "sha256": "b6c385126cc0db4ab5bf74304016b0caa204f62bcc338d19353bff98612cf144" + "bytes": 314, + "sha256": "451c831e84cb833ccd9d4348bcb02d13664eada0a06d017285130d6cc4371495" }, { "location": "public", "filename": "saturn-dataset-ultraviolet.webp", - "bytes": 418, - "sha256": "ad97a7bf159fdba2a8957bd4fac472b8b5691981180342cf52ca0a5f27187912" + "bytes": 426, + "sha256": "4e3e9e53278fa66869933505ade7b508c2fd2006fd5ead3e22612620c5d9211b" }, { "location": "public", @@ -100,626 +106,626 @@ { "location": "public", "filename": "saturn-interior-outer-poles-methane@2x.webp", - "bytes": 9012, - "sha256": "f924b5c8f0e996627434fa0942fb71586ff28a09c1f91ec15e6cbc043901a381" + "bytes": 8214, + "sha256": "c29aba67309be52859f5647574af45f8a1e788077a13778b62d5e34c45b94c17" }, { "location": "public", "filename": "saturn-interior-outer-poles-ultraviolet@2x.webp", - "bytes": 8518, - "sha256": "5697e1118539843ca4cf4fc18f5befac62547722c4651b64c90b5cd2c6cd2c71" + "bytes": 7862, + "sha256": "d9d43d1f18bbc862564d3c1982ae43ceae5ded2c31e2507041141e6ef558362d" }, { "location": "public", "filename": "saturn-orbit-material-methane-no-shadows-shadowless.webp", - "bytes": 16536, - "sha256": "22a037ec82ed6385d2c1c9f6ba53ce53f1494876f130a7d455ac7fad23757b06" + "bytes": 15098, + "sha256": "9ed852dd770eed97587411866473f379e603dbd552e1951e16eb0a12091dd502" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-no-shadows-shadowless.webp", - "bytes": 16814, - "sha256": "b8678ae844e8a9d306eba564e9e1b6d8945d03ef8ed5a451bb8acc25d2103044" + "bytes": 15094, + "sha256": "82834d73ae7193d6502644c7bcb71d0661300f6b477fcea35bb9d58a15575c9f" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-00.webp", - "bytes": 443866, - "sha256": "f16e1b5eb36976e61c1ca2ecb941159fb036835f10e82ad67b7ee58d2a04c1d3" + "bytes": 417426, + "sha256": "aaca7dc17e52090270da53c3cd330a4908959c999eb6616f1d32cc290e0e069c" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-01.webp", - "bytes": 461072, - "sha256": "ca00451f51485b7fb04192c7d6094b239e93dd95a3444acbfc9eeac65fc4c137" + "bytes": 418238, + "sha256": "3f87e3712b1e2bdf7e68db051e08a946bc1890bb7c036cd0fd506c54f13b7fe3" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-02.webp", - "bytes": 439062, - "sha256": "22eb056a7e950861ee3b3fed7eb506647d7835924393c979c23181e7f91c9048" + "bytes": 412890, + "sha256": "61e13ba2ab5102c5595a01241ad5ff7b2fa2c7bdd05f79edf35cb9dfb2a73b76" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-03.webp", - "bytes": 452114, - "sha256": "522bb8c53aa6a2454b396964f4f8637ae393eae98003c157cc93456c6095addc" + "bytes": 411524, + "sha256": "408b1a0e8eb6275bdd82c6ae7dce22eea323efb999d1421863b06045ec04a08f" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-04.webp", - "bytes": 451202, - "sha256": "27c179a979a4b8c0d7402a42698a50605bf5479ac99f3ad8e1366041c603b4dc" + "bytes": 406696, + "sha256": "11ccb7a44360f2ca3a9948e924692e0b7f385889898631c7630fef4177d3ff18" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-05.webp", - "bytes": 448604, - "sha256": "f668c759c99e098f1bcff0fb32985ac6fa340bc941dc05c2026b6ba662485edd" + "bytes": 404816, + "sha256": "c6a4c2806a3b8b417f3216031b2abfe3896cf8b45737c69fc0349b0c08b12c2f" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-06.webp", - "bytes": 430164, - "sha256": "c29a5a41675ffe791c7e89c7afa2a90114a6d890a078e885b6a46dd68d818907" + "bytes": 399356, + "sha256": "3367a2f09691ab4e0255cf021b9f4945d3d8338a8224204fc8d5fa776e75eb7a" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-07.webp", - "bytes": 418342, - "sha256": "32c6eeb4db3266f2bd190cf3ff1a4edc1fd8e4e1979c4abc1988334fbf3de48b" + "bytes": 391658, + "sha256": "85920fff944bde9199fe5d1aec292aeeed3c4da64b5b4a251783834be42afe43" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-08.webp", - "bytes": 414240, - "sha256": "a79b397259caccbf5c621dc9b4ab62b55927d9fe3b5ab63b8a5bce77547da4bf" + "bytes": 382648, + "sha256": "ce67aa1203dc67104ad50b0077c654d20fd59bbe3cbc9e55be539b1d407cd138" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-09.webp", - "bytes": 405666, - "sha256": "480357664203f137e5ecdd4796824e04387c0cd5127ac0e4a67ce4a4cfe1a358" + "bytes": 376430, + "sha256": "a3e771b2267020fb84a00543b95180e1f4afa709d8959e772f149424a2b924d4" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-10.webp", - "bytes": 398826, - "sha256": "9ba4452895eae88426a4a5655d18304cca63014d57483f0786e01ba6f30447ca" + "bytes": 369358, + "sha256": "18d29d79d4bf8127743d29b48efd2fbf9d3d6617ec7924a4416d5af608673b5d" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-11.webp", - "bytes": 390352, - "sha256": "afbb9278799d26837ab2ff381d1f164c0eb4f8bcd8c4dce8da5461bceb8ca3f8" + "bytes": 363278, + "sha256": "64062fa2e85d95813bd78c1b54079baa001996820cc26f6ee46d324d427e08c2" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-12.webp", - "bytes": 379372, - "sha256": "45ef86f8b373cade0a1edd263ef01e74bf084c62b1707505342438eab2b5c1b1" + "bytes": 352964, + "sha256": "7bed33ea4dc31de3a3f6ea3570fbb97e03b29b3a3b5f9e60ac55b792663d2fff" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-13.webp", - "bytes": 371490, - "sha256": "8514d4412c74a0cc57b31e07b508d3d27226901716371eac21210941f41dbce8" + "bytes": 344702, + "sha256": "6f760bf4b5096238feefa633fd80902c4c34e08aa7cac8d2fca38b594708010d" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-14.webp", - "bytes": 361170, - "sha256": "2897bfca7797b29ea3c5c194a2ce58d48069d99893d88b879e0046469862fdf2" + "bytes": 332528, + "sha256": "ec7bdc71707f7056cbaed148f9d9dabca033298aec987e5486b33430cd21aee4" }, { "location": "public", "filename": "saturn-orbit-material-methane-ringless-stream-row-15.webp", - "bytes": 354802, - "sha256": "02742fe0b89f4718fdd2441345d24e65249453e519d1af2869ff5046322e86d4" + "bytes": 326556, + "sha256": "4eea83f4490854dd93f5e364bb1221ed8745ed013700182c96796510a5e4414f" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-00.webp", - "bytes": 684242, - "sha256": "0638ae973f51103ac84f2664000920f0ea7afa905b7bc1ef88d3f42f953db3ab" + "bytes": 663518, + "sha256": "f1bcf70391daf889d2fc7642d28a22c05d015f2270981c56ca7da45b7681a489" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-01.webp", - "bytes": 642970, - "sha256": "5b468968c5e6680468ac4b78527852252539e8c30d773380a9f7c9a639997ee4" + "bytes": 605160, + "sha256": "16edb698e0a8be01d1ea6e6952ce574fdddfe679ad18ae78916ac98737a2a29d" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-02.webp", - "bytes": 610942, - "sha256": "9adf7049c4a8f16adcc359d0832c531ae236e0b5a076d06b34e7d39eaa12e912" + "bytes": 567602, + "sha256": "753462fa7ee9155a5d3346ad62e723e14012e46f0ca6ce5168c8a8f4d7aaad2e" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-03.webp", - "bytes": 650712, - "sha256": "f959e80d1e9dca0c20f55263431398390a00a39b46d1225210144ccd45387d0b" + "bytes": 612218, + "sha256": "93afb2ae515938fae573addf565c2a27bb94433af33ac78f32b5ac4e7a088bea" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-04.webp", - "bytes": 660982, - "sha256": "965236cd637fa13edf822c1835e5b78dc9f9dc20033520d2927e7ed984523ebd" + "bytes": 627398, + "sha256": "d63f815ce5274e265fdcd34e1c70f590b9ef1c917bba7f686b98729aac679b5d" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-05.webp", - "bytes": 618762, - "sha256": "cab2058016e0080fd557b7dfacd2b64ae448e5955784e743cfa20ec1cab605d1" + "bytes": 591056, + "sha256": "c72fac4288e28c12c115e5fc0fc0a0f4860c4465bc761468d6f4de444f023c89" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-06.webp", - "bytes": 530532, - "sha256": "eb2e2fe7c3f2576c91d326857d2fd440dd7c53a3cc2e5cdf4018afa73575ec4f" + "bytes": 499144, + "sha256": "b6b7c2a5c6915113658931ff6d1c8f2635300fc1cc24995f4ef8ef1139419218" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-07.webp", - "bytes": 490648, - "sha256": "b66ab5cb3a7699e17636c8c09f2748a45cbf0f7e56af9973817b2811f2976fb2" + "bytes": 461880, + "sha256": "6bd62d16b8a82419236b0c3dc58fff84e2465457ef1c1c383478c67f8afa09d6" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-08.webp", - "bytes": 481530, - "sha256": "a4bae52c57122c03e6d20c084a20f5bf76c66139fabd1ce04716e80f70bfcb73" + "bytes": 451602, + "sha256": "cc62d9e3fb94a907c45b74a4d1539c80c1e628a1a3321cd7824c60eb10e050d8" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-09.webp", - "bytes": 473210, - "sha256": "d5beedce8adda4ad4e2a5807524d978be6dc1d9b17c08f673d48b62d5341d275" + "bytes": 444408, + "sha256": "3770214c8c7bfdbd40c577cbea064193ff8a35174b6c9f2d0e95988e606bf0b5" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-10.webp", - "bytes": 453176, - "sha256": "b63f86f29236afcdf12811d492a35d1f09766188a310ea20588b983d581feb75" + "bytes": 426764, + "sha256": "a1554d2f85b66d42e932721bb76d721eee808c3eec3d7d43900c4864cec4d6e3" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-11.webp", - "bytes": 429172, - "sha256": "f415b5a9c64f2bde513c52ca12a5a19200d4f3db4e55768355007660321d3459" + "bytes": 404298, + "sha256": "893553ec8d27fec634c196d9133191224678313c2f399b347ed69fda09425fa1" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-12.webp", - "bytes": 397108, - "sha256": "0eb90b3473c9f0cbb92afb836fd41e9d3bd05c25ee7e63996d8f4a48dba5548b" + "bytes": 370808, + "sha256": "5cafce63742d66ab7d26a547520b72df6cd61acce7a997aa513d8dd837264dbd" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-13.webp", - "bytes": 375378, - "sha256": "ce757a283ce8037758e15e5a2525efbbb060e0e14475f6760e07641e5ec9b6ea" + "bytes": 348474, + "sha256": "433cae3b884d3cb90f6d612819a09a6df99ba480f8f9c784ff5a51a9cd22f2dd" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-14.webp", - "bytes": 359208, - "sha256": "fbac8be58b3408094a0af09f9fa48852000833e4d250608e81d1f9680a5761e7" + "bytes": 332748, + "sha256": "fd54d387ec47a478c8e66f70ff106cd3507f05bd8da23446fdf9ddad5ec8fb56" }, { "location": "public", "filename": "saturn-orbit-material-methane-stream-row-15.webp", - "bytes": 353650, - "sha256": "5a6d0a781e31464095368ccf3070b9d6544891267676a6646c6e09a40f49e7e8" + "bytes": 326530, + "sha256": "e910cc46b9b50bd96ec5657e18e77d9955617280a94fafa8ee5cb57ee7bbf085" }, { "location": "public", "filename": "saturn-orbit-material-normal-no-shadows-shadowless.webp", - "bytes": 17912, - "sha256": "5cbd37a74458c355ad3a28cff751dcdbf092020aa890a6f00e17b7345043602f" + "bytes": 15610, + "sha256": "2b1fcda994256bc86ad7ac5b320deae477e5b260d84fe090be1fa7d0b1bb6c14" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-no-shadows-shadowless.webp", - "bytes": 17742, - "sha256": "02b19530764e24ebafa06ae7d4052ae23bec2dd678c517ed26994c90bf84fc7a" + "bytes": 15420, + "sha256": "7e3026696ec589f0b58f187ea4a98671a859c4b7430fad7ea12f84f6c6c8a11f" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-00.webp", - "bytes": 575540, - "sha256": "f6f3e7b9a36e79892a40ca75ca80da04fe8a53675ed944d08846c488ce28fd2e" + "bytes": 522428, + "sha256": "ca6892ddc43ea4dc5dbbb18793618167d4137c05305c8fce7c92c19d7bfeca8a" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-01.webp", - "bytes": 575832, - "sha256": "60815169ea4299fc554122c36e89e28176ca9156d6cc9d7a357779ca0f1093c8" + "bytes": 520518, + "sha256": "21030a4e0b7bded8342ea2d8109b02472742ba521ae8bb6b54dac36deb66ab9a" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-02.webp", - "bytes": 573692, - "sha256": "cf845d6e3518b7d52f27b2d461da1c30ecfdb7adf5d880dff519a689fbb923e5" + "bytes": 509802, + "sha256": "ef1764e3764040e2d8118dd9915dd72239e84a057f4f7ba2a7e978d7531b1c10" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-03.webp", - "bytes": 566028, - "sha256": "bd5cff5edcb245a321fb81dd7b48dcce00277c1901b65ffd8d32ef708a727a4d" + "bytes": 504702, + "sha256": "5f94f87058f0fae166e115c7cb5f20df47967e04ac3f71ba684d1a1cf42f3900" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-04.webp", - "bytes": 553918, - "sha256": "473e4ae54d06407415b56fdc60f8707c8a788c8dcd45754eac54dfa690dccde1" + "bytes": 492488, + "sha256": "287ce3cb4f6b0d4e82c18035f8d3e2ba3cdcb887fb202d05f78269e3f1d7d13a" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-05.webp", - "bytes": 540688, - "sha256": "875b99e8d7d328486189d63299f5c5e93c95374aeec971f6bd8d023258e93936" + "bytes": 484332, + "sha256": "c1d4555cb50245187b9cebecc72b31ead3abd3398cb20cbb16cc3f0538435248" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-06.webp", - "bytes": 524804, - "sha256": "f05371fff0d8105ae1f6709d2a53a579cafcdcd2b99922e8b0dcedd31fc9292c" + "bytes": 468960, + "sha256": "b001b09e8c2eee6931fe7365943bfb71c7ef08fce4d900e6305abf61aa8b82b9" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-07.webp", - "bytes": 509746, - "sha256": "57c1a5cd6aebf669909428733845b873888fd8f06ae940f05316e0f09f0e1dcc" + "bytes": 457356, + "sha256": "e191b5cc3628e0191281f06c6df8e3b371c500d69ffe0eff49a2f0c713448dfa" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-08.webp", - "bytes": 496076, - "sha256": "7d74f94d378af765cd9611fa812c44d0b089d3be5bf3fcc89842514ac974dc29" + "bytes": 441614, + "sha256": "df1069f7e5a02b4badf187714a13685420a62e2ddb195e88051283c9bd4934e5" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-09.webp", - "bytes": 482934, - "sha256": "8c2d3e2e70535628d4390e87c26a0243020cf2be4301a4ece7313629df3169ce" + "bytes": 429826, + "sha256": "01cdb0902ce329e38c67a1ceaa21b30400c7192df51c2a3911d4bcd19452fc0e" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-10.webp", - "bytes": 468842, - "sha256": "fe5eccb5de895f3fe5a86798bdd11378e8c673f758a99689a0742c7cbc54dba5" + "bytes": 418138, + "sha256": "7e716e94cb98d8a77edbba42444a02a4589449928e4ae11d986789d3eb300bdd" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-11.webp", - "bytes": 459104, - "sha256": "5d4eef659081e9e87950cd4d0a0d15f5c293d5c56606bfc99e3c2633a1b54d84" + "bytes": 410220, + "sha256": "205b080ab51bf0b648340252ebef2698d3d5a169ce5532adfd413c2839dc562d" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-12.webp", - "bytes": 453796, - "sha256": "dfbe2527b88ee488bfbb76b791ae36845a26a0149affa5808bb471aed3c5722b" + "bytes": 402496, + "sha256": "fe1958cc4f3b07e8ab1eb9e9266c43ccd0459b8ba050e0af704680fcd744abc1" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-13.webp", - "bytes": 446070, - "sha256": "fae066696d94542aefbfda27bc646a61aa5f0289d6f14bae8504ff113e2d5bdb" + "bytes": 393744, + "sha256": "260510148d75cea813197232169be18aac01f3ec33e2e8c8561aeafb98267b9f" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-14.webp", - "bytes": 435036, - "sha256": "41bb2a67f040a633a19f455e98396d5b7614871cbf88830fb0416e698be3df5d" + "bytes": 383114, + "sha256": "e2aadcef97ea148e86157df129d971b716f7020832d5e2d7557ab01af32d9d10" }, { "location": "public", "filename": "saturn-orbit-material-normal-ringless-stream-row-15.webp", - "bytes": 427718, - "sha256": "aa3e8d2697f508842e243c72e8b97dce21868dd6ad823b7bc338f01808f2334b" + "bytes": 375372, + "sha256": "b1c502a945f6be12f119195ad858999ee3299dab96d863b5b5040c265d58729e" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-00.webp", - "bytes": 814498, - "sha256": "d744d440695738b8fb1d3505c9eaa9ac3e7175202ac020f4de88bcd1543f9fad" + "bytes": 740406, + "sha256": "04bd94e1e74fc93d2c49c3d94887ef2c642216c30b5a3d837b10091c3177a307" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-01.webp", - "bytes": 775022, - "sha256": "25c1b934e009b5877432731ed8e060d97019c2ed5cf62e9149b394ed0c2494af" + "bytes": 696660, + "sha256": "530b47133c304578afa09003daf916702fffad963474c8eda8c9e392189309d4" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-02.webp", - "bytes": 761066, - "sha256": "cc2fdc505be3edd350971d645fd9e0662d8bffb1bb4dbd211b1b5f1c9c620010" + "bytes": 669638, + "sha256": "216f476b3cda927098396981f058d7f253c76e785bf113017fb7a00bb0f4d8c2" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-03.webp", - "bytes": 805614, - "sha256": "08681e884c392732130bfafa111ca74ffb6702c7b30cd81b99fa560e54b581a0" + "bytes": 720058, + "sha256": "cc86ea4e6c5e5f97cb32fb6770ceedc490aa84781533fc90f13ce874f587e5a0" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-04.webp", - "bytes": 814846, - "sha256": "d9e1e798af89ccd4ca8de95cebac2748fca89fcf4c3640bf62d071e5b3820e8d" + "bytes": 728884, + "sha256": "00622134a6c4c26d116927dfec47c8693b78164c50b1c2396d3ca17ee5baba34" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-05.webp", - "bytes": 739054, - "sha256": "91e55ea67de7f9b80fe477bcb9e2f8d8d9decbfdfb3dbf111194498391f796ac" + "bytes": 679090, + "sha256": "b51db6d4f447c6a275eecc29079e11471106130e3e1611c171bd64992899a85a" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-06.webp", - "bytes": 649726, - "sha256": "1c2a231924e015d4a14f53c80dd579e5ac1f88dc18e5881ac9599842f132b939" + "bytes": 584834, + "sha256": "29497f6d10b210cfd828f90c8e233fdd66b21dcd14fae54370adaa90b0538fcb" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-07.webp", - "bytes": 606556, - "sha256": "0c689be8597ff5f86e72b5cf4f075f59a9702000c25eefa265c63b041f2517bf" + "bytes": 546286, + "sha256": "dcd04442101c0de6786393418bd632f801c7bc86bcf721e02e26c69f48e6c4b0" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-08.webp", - "bytes": 575336, - "sha256": "461b02a6648524ba287b05487b2fb6abac432d7807d4b1c0aaea44bee34f08fe" + "bytes": 520776, + "sha256": "031d63d7d8b97a9bdf86bbe126e320666d9af780edb2ee7f181bea481d0519a4" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-09.webp", - "bytes": 556394, - "sha256": "8c6405fa063e91b039cfb5b5d25825449310ddd230dc9fdaa1a4a7cb9d0d33d5" + "bytes": 501420, + "sha256": "9bfcdab916845dddec8c5b6798ae1d5183fe3a7eb060269a8b7b5a3574316c2c" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-10.webp", - "bytes": 530640, - "sha256": "114f42f5f1e292b15467874748804b2ea3c4a9aa89c2adef5b2873568dbe3dc2" + "bytes": 478852, + "sha256": "95f3bd06aea5bf6b58c8652296d4bbbde6c00143bc43a473b116bdcd023340ac" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-11.webp", - "bytes": 502482, - "sha256": "e75e47db0f040d82f966feed626e2c1f077fa56e6961df166393452fc75d73b0" + "bytes": 455058, + "sha256": "8ea76b8afef580ad5f4422f88ba82ffd13c1c0f7048e1413644d606ee52105d1" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-12.webp", - "bytes": 469484, - "sha256": "b2d21253c7ca5115370f4f5255ca94f5462d72803f69a6ff1d45e1b9bd30d6ed" + "bytes": 422716, + "sha256": "5944e745db168e334622a3c29e9c4decda6906728ad6456c21c4cd145e9216c1" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-13.webp", - "bytes": 449516, - "sha256": "ca76edd3cd6cdd995218f23da4ba5996739e49781573eaee0ba7e4f2889e5b20" + "bytes": 398396, + "sha256": "114ae112e12a2f4ff8788b86b99e5037dc519623ea58695ca180d890f989305a" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-14.webp", - "bytes": 427964, - "sha256": "aaff5a295dbdf5e884072a02514cf50120ed8d0239d3aadfdfc9c4e6a96da810" + "bytes": 380300, + "sha256": "dd8db1175f01a4b275b28c4c3daee513edfd16f641745263f6b7e266b03c3f2f" }, { "location": "public", "filename": "saturn-orbit-material-stream-row-15.webp", - "bytes": 419666, - "sha256": "6652a8b5be16ad57d09c7c9c6a017a1e9aa77c79f7944755714c33e65825b737" + "bytes": 369716, + "sha256": "9ddd85a09ab52963105de08e7d2b012daede8388ecc31babf92247984efbb498" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-no-shadows-shadowless.webp", - "bytes": 15126, - "sha256": "e68da98d0b468078d2c7d7c3f44aa9ef666dd24b14b8e9b09d3d6fecc0b70c59" + "bytes": 13942, + "sha256": "3968ba70f96b911f93c63e6a8fb826bcd609253d2c15122751c278e92e4c45ac" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-no-shadows-shadowless.webp", - "bytes": 15388, - "sha256": "61f6891f9be29079757fa10ae5acc1e00e47ce367f856da530d804b1938ed7df" + "bytes": 13786, + "sha256": "79c4f2110ec1c3906b9c40cefe2349a30b5bc916550f89fb23581edaf1e1166c" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-00.webp", - "bytes": 417014, - "sha256": "81bf753367e374b5e1c9ab281952649e0039e062e689e95dede8d256de420a3c" + "bytes": 390858, + "sha256": "cd2ee5317255f7579e8592fe41636d44887e5e422873d10fe1a0d094a9df3eae" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-01.webp", - "bytes": 415528, - "sha256": "f820653b75cf3dd30f55c9389be67b12eb1394eecdb92245bf47c4e81575f4a9" + "bytes": 387924, + "sha256": "ecd794c04d81a890a222ee79f3ead5d81133cc7a64bdecbf99be5a46b1e242f2" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-02.webp", - "bytes": 412008, - "sha256": "1c05ce21f76d294ad762c5bbaa79caeab34dc7cebaa81b4a797108db5e3b30db" + "bytes": 384154, + "sha256": "d504b79a26deb3709e1baa5273b95d6e78bbde32625cb4fde5a94973c6e9a4f6" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-03.webp", - "bytes": 408878, - "sha256": "4aad3edfc7ea17baab16c77f94be9dff67a11bfd58c95ac7a8dc642f6914138f" + "bytes": 384806, + "sha256": "ae000840287c81243d889cb1c28358dbe9b0cd547e804c9fd80cd1c9cefd028c" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-04.webp", - "bytes": 419744, - "sha256": "d4789537a89d8f8120125aadac160154e40bac6653d48a50074a1d4ce5d67252" + "bytes": 382418, + "sha256": "57c2de8065f3c7aa59d2f5b68694f0a328019f628bcaf1f00701db1b93cea1a3" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-05.webp", - "bytes": 406980, - "sha256": "206263fdbeaa92c24918022951a4f4d3425e4ad137b4df3d46b62f482e5e9cb4" + "bytes": 388018, + "sha256": "bcc4b1aa088f51613aed2eab8349b994284755efb523ccf9eadbb2359b4992b2" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-06.webp", - "bytes": 409418, - "sha256": "0bc4690bb8fd1f8b72ebebd6fbb015f9419517639e9ff236922ea3a8ff85fb80" + "bytes": 389390, + "sha256": "6052eaf09541f4962cec3c252ddcf3997c31664b25fb4049738ecea3f7d744fe" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-07.webp", - "bytes": 403344, - "sha256": "1761017d59f00def89f9ccde0c65d136f1d5b89133d506ed98af9e4894331768" + "bytes": 385284, + "sha256": "27c6a91768ce382592cd199b8680a60a039992c75575d51503c3f2c8cb57e6a5" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-08.webp", - "bytes": 394688, - "sha256": "963e7b0cda4ea793e095245109bf8555366f6ef724dd1090ece5f442111dabe5" + "bytes": 376586, + "sha256": "7475dfefbddf489c5a10149b168f291b58f69db5eb5111505dede0051fd857a9" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-09.webp", - "bytes": 387008, - "sha256": "1a36bca4ef8ab2a99583013fa9400e7be4cc097b359923fbbd620c7f7af3f8bd" + "bytes": 368402, + "sha256": "c9d4383ecd7b24bfa1e8be08de7e90ba7504417e5cd446eb6c04a7e062129106" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-10.webp", - "bytes": 377514, - "sha256": "661f01e5035f8ff34d8edf75dc6a008018cb9538a3e95e24bf432ddf355832cf" + "bytes": 361570, + "sha256": "58ffe4df044b0a38354ef4fcec7f9f89adcb0eb2329e0498bd82e6767bf1dce1" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-11.webp", - "bytes": 369224, - "sha256": "d59b4ac756fe5f310491391ac8df2ff3257880ce4f8aa8600e9b7318e2fc356c" + "bytes": 355926, + "sha256": "8894c0da848e7a11b6fdc464bc5280b9ded248b1c0800a03a06c3debba348cb3" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-12.webp", - "bytes": 362236, - "sha256": "2fe289ddd1b714df767623a1001d2bb42e05e515e10067dded0986831613ff29" + "bytes": 349532, + "sha256": "97a2531a0806d4cfb76b2dd1746b8e88db71006d138bcedba80ffcc70f051e68" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-13.webp", - "bytes": 354388, - "sha256": "6b91d9de9aa277f2ba83ee23e248b2f651bafe95d5422cca63bb7009bd849913" + "bytes": 342540, + "sha256": "ab40248bda9f945561d63435b0d2791a942f923a7d5cf7ecc8a83ff655d54b7e" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-14.webp", - "bytes": 344552, - "sha256": "a5f0582cafe9fe21819b79a543ef2670fdf1254e9d8ca197357562bc5de7de49" + "bytes": 330782, + "sha256": "0e5b2099bdaa4082e785fdc3041683f77a2ebac16dafe47420f091c17d9ea595" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-ringless-stream-row-15.webp", - "bytes": 337600, - "sha256": "292c5d37bf0b4c23c009ac226840fcc933ca4092ed1cb363fa2369da6b0849d8" + "bytes": 323592, + "sha256": "9a610663301d286a9e0e227142b3b71d8316fac6ede51c8c3af97316a3004515" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-00.webp", - "bytes": 649260, - "sha256": "242aa891753e940db5fa491e44c7b41e41e654863d76e77bda6a29e136b16fc7" + "bytes": 630546, + "sha256": "0e45a72b54f9177cc1df9f7c18de867bb9af3046a94a7b4283c06ba9bda146ce" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-01.webp", - "bytes": 610350, - "sha256": "2769d8de3eb21129815f5bb978bf5c00367852b112a19d53b3feb7a2afe2ade6" + "bytes": 573366, + "sha256": "4a8dfd6522fbce94e034ac1c2eda3246b4ce9e50e0e25a2f98a78f5f534462ab" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-02.webp", - "bytes": 579796, - "sha256": "4923539e58462d489ab03c87d56c4251f9cda68ae3a60955c22904a0eefc59f6" + "bytes": 534600, + "sha256": "b70a5cb1d81cbf5f1461618307eb694e86d0eb8ec0902e8a232b7f455a860811" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-03.webp", - "bytes": 616200, - "sha256": "2e9207ce5650cc19d3229702c7e896e3a5cbcdf867160dfacb0de94ae33fafb3" + "bytes": 580536, + "sha256": "dc1dd1dad457647a05f8349ef77ac3c3526b57584eeb3a4fcc94e62f5ee2170a" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-04.webp", - "bytes": 620474, - "sha256": "5097265166b059113c6709cc1b231a27ee22df376ecc77a8a8fce6677a1d005c" + "bytes": 599086, + "sha256": "91726ef37350e737c5ca664956ffefc9e8ad9e81d6b5a17ab502abd6ab163b20" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-05.webp", - "bytes": 583942, - "sha256": "3a41e8632752a4110e1b128cd0471a881d3a3f2e83fe2ccf0cc4402c433b056c" + "bytes": 570288, + "sha256": "bad66efa73cfae940be2acdd29ebc61d07ccb8d2701cf81bcdb48d9601a17906" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-06.webp", - "bytes": 504206, - "sha256": "1c80922dc160ec0e66740a66e6d0ceffc98aaeb3d21b888de96d402789a0e0f6" + "bytes": 492530, + "sha256": "0b0080b8ddf773d2c2cf1b995e6a7f9a13c714fc45f1ac98eb8ace1399d3d797" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-07.webp", - "bytes": 471502, - "sha256": "d11cb91e5a9a7a7a4d7b0b5fb313ac608131cdc6937f63289dcd673bf487c64a" + "bytes": 454332, + "sha256": "466deb535f02ebe4826a73d38f0fdbbd852964c96f094cc936323b210678ce71" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-08.webp", - "bytes": 462490, - "sha256": "f5639ca1288c5195bc22affc340d94c15e086bc0b34e08b0879bf65c6c71abac" + "bytes": 442870, + "sha256": "b27d325992b08caf65a63fc558ba42aecdde0bba27a509b2295d37cf6477f299" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-09.webp", - "bytes": 455742, - "sha256": "5266abffc6c252262ebb1dd8cabd2e853e41dc184ba9f4be985e42d97f3a712b" + "bytes": 435632, + "sha256": "346afbf4823368fa3b98caa093f6794f923e2fe7d10385595c677cf4a1fe4c79" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-10.webp", - "bytes": 436758, - "sha256": "983e40d83159c3068eede82ae623e023bd88f0e415aa7ddf75f81fc233d6ad4f" + "bytes": 421056, + "sha256": "78a665cefbc671039d9d3ea10fbafa88d690f86a7eae596b9b83d95f1c734f0c" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-11.webp", - "bytes": 411414, - "sha256": "03047c27fe260f86e9521e58254854a265de0094f0a62f9432629feda5620afe" + "bytes": 399226, + "sha256": "3c06fee7b5944bcf615fb671bc87c5fd1674116a983ea5d91591cff23559374d" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-12.webp", - "bytes": 382070, - "sha256": "108cf822c981582610a740112e7ae99bf92e1021c4f042f5a7ac18a464ab6545" + "bytes": 368354, + "sha256": "4eb258ada59187253de4f8fec0eb3c77b1922e27491ef374fd1ba9ed51ee78ee" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-13.webp", - "bytes": 359584, - "sha256": "f00959e60419b4838fb0550b22dbad6c88f383636559335c09a0bb5738eacf95" + "bytes": 346118, + "sha256": "2047dec3f60b47ca0f3d1e118f110d3043605fab11cb84206cc88140e681eb18" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-14.webp", - "bytes": 343574, - "sha256": "c5638c7370871514a47fa74c6b0969acc3c242ea40de2e2fee780165efd3708f" + "bytes": 330722, + "sha256": "1d5b2c3f92d6f349e8004739fcedd23f77113e5c1f9348d5709a14dd1dc8b04f" }, { "location": "public", "filename": "saturn-orbit-material-ultraviolet-stream-row-15.webp", - "bytes": 337728, - "sha256": "11dcd14629467f4bf8511b5fd329e8b77cabb6a1648cbcd29f017dc81bdb2af6" + "bytes": 326594, + "sha256": "56042ab306d4c11767c13a5e5e2830756d08e110f7c0f651f887b935bc010b18" }, { "location": "public", @@ -727,17 +733,23 @@ "bytes": 5288, "sha256": "ae375119c70ef2c0017fb8e3c3291390bfd5cf5737df09b9f99eb773dfc63c6e" }, + { + "location": "public", + "filename": "saturn-poles-cassini-2011.webp", + "bytes": 54038, + "sha256": "46db446f7ff9837409d80a1e50671007b147e3670e034eb4f90fa17fed5aba19" + }, { "location": "public", "filename": "saturn-poles-methane.webp", - "bytes": 38466, - "sha256": "47a2cb3ad9fb093e549baf9d0923651122781512c5ff2b6170eed37edf86f71d" + "bytes": 39636, + "sha256": "b3c604ab2f82a29fb878e442f735d5a3d9240b367d9f40888ad54648744c71ec" }, { "location": "public", "filename": "saturn-poles-ultraviolet.webp", - "bytes": 38698, - "sha256": "a11560fcfeec2677d92401dad52199fe8c96d42f84833384ee252f8cfeda078e" + "bytes": 38472, + "sha256": "15767339d51c41474cd8172b768db53c6876e4443a290c0728d8bdda9f899478" }, { "location": "public", @@ -790,8 +802,8 @@ { "location": "public", "filename": "saturn-poles.webp", - "bytes": 55912, - "sha256": "1cf1726407a6a76be2c0fcaa5a94f0a8512de20ebbb5ea3c2caddf1f750da0df" + "bytes": 55736, + "sha256": "b2517af310ffb2fd9cd511225e61ab98015911c0b5175fd3721c02b17cea0276" }, { "location": "public", @@ -820,8 +832,14 @@ { "location": "public", "filename": "saturn-surface-body.jpg", - "bytes": 725768, - "sha256": "fabc0b970bafe693376cc36126144aa0d90e07029b40d1ab638df3cc13d64660" + "bytes": 722961, + "sha256": "c84b6b2f03d34927a18b52ec7d276cb9018b81e0d5e525389ec983044edd0bd2" + }, + { + "location": "public", + "filename": "saturn-surface-cassini-2011@2x.webp", + "bytes": 614528, + "sha256": "6fa9cf5e2c7abdb6e0790d3087b87593c40fa3e12d7d660b3a4a9fd0c4a5b78b" }, { "location": "public", @@ -910,14 +928,14 @@ { "location": "prepared", "filename": "controls.json", - "bytes": 4767, - "sha256": "b29fcb34227b57185043b15177a96abdcbb065147ed03246a46effc952fbc788" + "bytes": 4891, + "sha256": "fa6ab54610332f559f159aafa9567235c64315d8536fe9f33a5d291e0beec0aa" }, { "location": "prepared", "filename": "datasets.json", - "bytes": 10231, - "sha256": "1fc145a4211198dcbe691e9bd4f536348b63d1abe9e2cbff7d24f40c237a41c2" + "bytes": 10926, + "sha256": "6c7a77331933f09e0edc27ac652ef1df300e947bb6323c4b367f3c257396acc3" }, { "location": "prepared", @@ -934,32 +952,38 @@ { "location": "prepared", "filename": "material-datasets.json", - "bytes": 8530, - "sha256": "7d1946bcd4d0e6a4373372743f0106bd4208f3806a0cdc4a6f7d937bbc0dff43" + "bytes": 9206, + "sha256": "de66a099b1a334a21b9cc1d46fd46b51c7a6e00ecc1b96969924dc480f93a8ac" }, { "location": "prepared", "filename": "minimaps.json", - "bytes": 1247, - "sha256": "0ae1a17183d6f4f727dbb6e63b7d26e3448586503c9d797444a691e91286860d" + "bytes": 1359, + "sha256": "b89f78bb76e4fa1489d742e314fe973ad509faf7fb9c1c5db7c46b208f938473" + }, + { + "location": "prepared", + "filename": "minimaps/cassini-2011.webp", + "bytes": 5554, + "sha256": "a1f7a67e9930234deabbd404cffa6b639d46dbbae89eb815e604ab91b1bd3f19" }, { "location": "prepared", "filename": "minimaps/methane.webp", - "bytes": 2662, - "sha256": "c97a1d9818fa625e863732b0fc5bda93c3a3353bded7cf348e845b4800e72a5e" + "bytes": 2638, + "sha256": "31c041d6444e4304dba73a2a99334b88798bf8ff27356e9efa709bd015a9cd19" }, { "location": "prepared", "filename": "minimaps/normal.webp", - "bytes": 3820, - "sha256": "7f7e5fc0006249e635aa20c876d376daef5df4383546166a7a1e87644145d429" + "bytes": 3572, + "sha256": "ec5c87fd3c9060ed9120463ff606782ce3b88c4fd066502dfce8aa6068f2a7cb" }, { "location": "prepared", "filename": "minimaps/ultraviolet.webp", - "bytes": 2392, - "sha256": "4282621d4db371beb90065df8eb1c0bd1d5feab2609623dac6c4bb26faf12b63" + "bytes": 2352, + "sha256": "b7c629ef603eef9d0c4fe6e29dcc56cc2638575d363a65e1e0f460a7e53e39d5" }, { "location": "prepared", @@ -1012,14 +1036,14 @@ { "location": "prepared", "filename": "runtime.json", - "bytes": 564010, - "sha256": "74fc47af2453858f87283791d61554547553aea4b77488a80fa8a1ae38c3e6dc" + "bytes": 569277, + "sha256": "523c0855db40fae828b47c47e561b57d766d8cc0e2993536d61906293c287613" }, { "location": "prepared", "filename": "scene.json", "bytes": 1468863, - "sha256": "73188fca6ca53f2a705bc48fe1f4e2bcd3977e13e53867521e365e8e4f428e56" + "sha256": "c13dc933f496cdbd884cf784c8ea780b2aa7a633312e7f18387f375c431c6597" }, { "location": "prepared", @@ -1036,14 +1060,14 @@ { "location": "prepared", "filename": "text.json", - "bytes": 4178, - "sha256": "3b8d7d0f211d95871137a1a110edcc550001932eb866f5084b663fa9520ccd93" + "bytes": 4649, + "sha256": "48cb1949d31dda06fd68a1c31cff8eee0770be08a425e0c9f99d955a7dc7e0dd" }, { "location": "prepared", "filename": "views.json", "bytes": 8408, - "sha256": "b63848a6270c7207339d63b62eccbb708ef37af91977612a225ffb8a107d7454" + "sha256": "a323ba014e45e7199edccb58d7ec8f9a4639969625575ea694f55d4a578caac0" }, { "location": "prepared", diff --git a/src/objects/saturn/investigations.json b/src/objects/saturn/investigations.json index c73ab502ae0..488d965b3cb 100644 --- a/src/objects/saturn/investigations.json +++ b/src/objects/saturn/investigations.json @@ -12,6 +12,16 @@ "https://archive.stsci.edu/hlsp/opal/opal-saturn-cycle-32" ] }, + { + "id": "double-size-visible-map", + "subject": "The visible body image at 4,096 by 2,048", + "status": "excluded", + "finding": "The body image is 2,048 by 1,024 texels from a 1,800 by 900 source; Jupiter's source is 3,600 by 1,800. At the default view on a 2x screen one Saturn source pixel covers 1.8 screen pixels (disc radius 511 px), one of Jupiter's 0.9. A 4,096 by 2,048 image prepared from the same source held 4 % more fine detail than the shipped size in a composed flood-lit default view (mean absolute Laplacian 1.188 against 1.140), so the larger image was not shipped: the softness is the source's.", + "revisitWhen": "A sharper complete source map exists.", + "evidence": [ + "https://archive.stsci.edu/hlsp/opal/opal-saturn-cycle-32" + ] + }, { "id": "opal-unobserved-rows", "subject": "Unobserved rows in the OPAL visible map", @@ -33,6 +43,29 @@ "https://science.nasa.gov/photojournal/saturns-hexagon-as-summer-solstice-approaches/" ] }, + { + "id": "cassini-iss-2011-color-map", + "subject": "Cassini ISS contrast-enhanced global color map of 2011-08-11", + "status": "included", + "finding": "A dataset beside the Hubble dates: the PDS bundle's contrast-enhanced RED/GRN/BL1 map (3,601 by 1,801 samples, 0.1 degrees, planetocentric latitude, west longitude; frames at 161 km per pixel). Its three FITS planes hold 8-bit display values. The first stored row is 90 N although the LAT_C card reads -90:0.1:90; stored column c is west longitude 0.1 c degrees although the LON_W card reads 360.0:-0.1:0.0 (raw frame W1691726068_1 correlates 0.62 with the prepared storm band, 0.23 with its mirror); the first stored column is zero on 1,595 of 1,801 rows and is cropped. Rows 0-110, 898-906, 954-1071 and 1721-1800 are zero (17.7 % of the map) and draw the gray grid; rows 919-953 are dimmed by the rings' shadow and shown as archived. No color change is applied.", + "evidence": [ + "https://doi.org/10.17189/rkkb-6y30", + "https://doi.org/10.1038/s41597-025-04392-3", + "https://opus.pds-rings.seti.org/opus/#/opusid=co-iss-w1691726068", + "https://science.nasa.gov/resource/great-disturbances-2/" + ] + }, + { + "id": "cassini-2011-default-map", + "subject": "Cassini's 2011 color map as the default visible body", + "status": "excluded", + "finding": "Measured against the Hubble 2025 map: the fine detail's correlation length along longitude is 0.14 to 0.18 degrees between 20 and 60 N against Hubble's 0.23 to 0.33, and a composed default view at the app's on-screen size held 1.27 times Hubble's fine detail (3.9 times in the contrast-enhanced product). But 17.7 % of the map is blank, and with the shadow-dimmed rows about 21 degrees of latitude around the equator would be an interpolated fill; the values are 8-bit (40 to 57 levels per color in the archive's unenhanced product) and from 2011. The user kept Hubble as the default and took the Cassini map as a dataset, 2026-10-05.", + "revisitWhen": "A calibrated global color map without the ring-shadow band is released.", + "evidence": [ + "https://doi.org/10.17189/rkkb-6y30", + "https://doi.org/10.1038/s41597-025-04392-3" + ] + }, { "id": "uvis-alpha-virginis-occultation", "subject": "Cassini UVIS HSP alpha Virginis occultation, 2006 day 285", @@ -218,18 +251,17 @@ { "id": "dated-test-run", "subject": "Dated test or browser run for this record", - "status": "unresolved", - "finding": "The evidence section states that the record describes source cross-checks and retains a fixed-material comparison image but cites no dated test or browser run, and that the comparison image is not an input to the runtime view.", - "revisitWhen": "A dated test or browser run for this Saturn version is recorded in the package.", + "status": "included", + "finding": "The README's evidence section records a browser run of 2026-10-05: the default view in headless Chrome with a GPU at 2x pixel density, on css.earth v0.6524 and on the version that changed the limb, measured on the same rays, with the before-and-after image it displays.", "evidence": [ - "https://github.com/layoutit/css.earth/blob/main/src/objects/saturn/README.md#L19" + "https://github.com/layoutit/css.earth/blob/main/src/objects/saturn/README.md#evidence" ] }, { "id": "limb-law", "subject": "Photometric law for the lighting overlays", "status": "included", - "finding": "Hubble OPAL Minnaert coefficients of the color map per channel (red F631N 0.80, green F502N 0.65, blue F467M 0.86), the correction OPAL removed before projection, put back relative to the flood-lit disc centre. Blue took F395N's 0.40 until 2026-09-25; see opal-f467m-blue-limb.", + "finding": "Hubble OPAL's Minnaert coefficients, the correction OPAL removed before projection, put back relative to the flood-lit disc centre, one law per display channel: red 0.798, green 0.698, blue 0.728. Each is the README's coefficients weighted by the light the channel shows; see display-channel-limb-law. Each channel took its nearest filter (0.80, 0.65, 0.86) from 2026-09-25 to 2026-10-05, and blue took F395N's 0.40 before that; see opal-f467m-blue-limb.", "evidence": [ "https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025_all_v1_readme.txt" ] @@ -256,7 +288,7 @@ "id": "karkoschka-whole-disc-color", "subject": "Color tie of the OPAL visible map to Karkoschka's 1995 whole-disc spectrum", "status": "included", - "finding": "The OPAL color TIF is arbitrarily scaled per channel and rendered 1.4 times too blue (map mean blue/red 0.65 in linear light). Karkoschka's full-disc albedo of Saturn (phase 5.7 degrees, rings edge-on, PDS 1995LOW.TAB) times a 5,772 K Planck spectrum through the CIE 1931 observer gives linear sRGB 0.6168, 0.4713, 0.2982 (#ceb794), green/red 0.7640 and blue/red 0.4834. Divided by the limb law's disc means (0.7694, 0.8698, 0.7354) the map targets are green/red 0.6759 and blue/red 0.5057; the solar-tinted map measured 0.9272 and 0.6953 (cosine-weighted, linear), so the gains are red 1, green 0.729, blue 0.7273. The swatch's independent Payne et al. (2026) spectrum agrees under a D65 white: green/red 0.863 and blue/red 0.589 against Karkoschka's 0.863 and 0.593.", + "finding": "The OPAL color TIF is arbitrarily scaled per channel and rendered 1.4 times too blue (map mean blue/red 0.65 in linear light). Karkoschka's full-disc albedo of Saturn (phase 5.7 degrees, rings edge-on, PDS 1995LOW.TAB) times a 5,772 K Planck spectrum through the CIE 1931 observer gives linear sRGB 0.6168, 0.4713, 0.2982 (#ceb794), green/red 0.7640 and blue/red 0.4834. Divided by the limb law's disc means (0.7706, 0.8350, 0.8146) the map targets are green/red 0.7052 and blue/red 0.4573; the solar-tinted map measured 0.9317 and 0.6975 (cosine-weighted, linear), so the gains are red 1, green 0.7569, blue 0.6556. With the nearest-filter law of 2026-09-25 the targets were 0.6759 and 0.5057. The swatch's independent Payne et al. (2026) spectrum agrees under a D65 white: green/red 0.863 and blue/red 0.589 against Karkoschka's 0.863 and 0.593.", "evidence": [ "https://pds-atmospheres.nmsu.edu/PDS/data/gbat_0001/data/1995low.lbl", "https://doi.org/10.1006/icar.1998.5913", @@ -277,18 +309,39 @@ }, { "id": "opal-f467m-blue-limb", - "subject": "Minnaert coefficient for the visible map's blue channel", - "status": "included", - "finding": "The blue channel uses F467M's k 0.86 from the OPAL Cycle 32 README table (\"F467M 0.86 .00507\"), the README filter closest to the sRGB blue primary. F395N's 0.40 is violet light that carries 13 % of the true-color blue channel in Saturn's sunlit spectrum; with it the limb brightened in blue and turned gray-blue (b* -16 at the rim, 0.95-0.99 of the radius) in the app. The map's blue data are still F395N.", + "subject": "One README filter per display channel: F631N, F502N and F467M", + "status": "excluded", + "finding": "From 2026-09-25 to 2026-10-05 each display channel took the README filter nearest its primary: red F631N 0.80, green F502N 0.65, blue F467M 0.86 (\"F467M 0.86 .00507\"; before that blue took F395N's 0.40 and the limb turned gray-blue, b* -16 at the rim). Green then darkened least and the limb turned olive: on css.earth v0.6524 the default view's green/red ratio rose from 0.78, 200 pixels inside the edge, to 1.02, 5 pixels inside, where Jupiter's goes from 0.87 to 0.91. No single filter is a channel's law; see display-channel-limb-law.", "evidence": [ "https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025_all_v1_readme.txt" + ], + "revisitWhen": "Nothing: a channel's law is weighted over the wavelengths it shows." + }, + { + "id": "display-channel-limb-law", + "subject": "Limb law of each display channel, weighted over the README's filters", + "status": "included", + "finding": "The README gives one Minnaert coefficient per filter (F395N 0.40, F467M 0.86, F502N 0.65, F631N 0.80, F763M 0.85); a display channel shows a range of wavelengths. Each channel's flood-lit profile is the sum of mu^(2k - 1) over 380-780 nm, k interpolated in wavelength between filters and held outside them (a join that is ours), weighted by Saturn's albedo (1995LOW.TAB) times a 5,772 K Planck spectrum through the CIE 1931 observer into linear sRGB; the same spectrum reproduces the whole-disc color record. The methane-band filters FQ727N and FQ889N are left out. The Minnaert exponents that fit those profiles over the disc out to 86.3 degrees are red 0.798, green 0.698 and blue 0.728, departing from the profiles by at most 0.004, 0.0001 and 0.028. At 0.95 of the radius green/red is 1.26 times its centre value and blue/red 1.18 (1.42 and 0.87 with one filter per channel): the limb pales instead of turning olive. On screen, 5 pixels inside the edge of the default view, green/red went from 1.02 to 0.89 and blue/red from 0.55 to 0.66 (2026-10-05).", + "evidence": [ + "https://archive.stsci.edu/missions/hlsp/opal/cycle32/saturn/hlsp_opal_hst_wfc3-uvis_saturn-2025_all_v1_readme.txt", + "https://pds-atmospheres.nmsu.edu/PDS/data/gbat_0001/data/1995low.lbl", + "https://github.com/layoutit/css.earth/blob/main/packages/bake/authoring/saturn/display-limb.mts" + ] + }, + { + "id": "limb-overlay-outline", + "subject": "Dark dashes along the limb of the flood-lit overlay", + "status": "included", + "finding": "Under flood light the lane floored a grazing texel's emission at one texel (1/256) but not its incidence, so the limb law was held at the edge of its data on the emission alone and fell to about 2 % of the centre on scattered texels of the outermost ring: alpha up to 235 where the held law gives 136. At 8 screen pixels per texel they read as dark dashes: 29 dark dips along 32 degrees of limb on css.earth v0.6524 at 2x pixel density, none on Jupiter. Serving the frame with those 462 texels capped at 136 left 4 dips, and hiding the overlay showed the dashes were not the body's seams (more overlap between faces changed nothing). The lane now holds the incidence with the emission under flood light: 3 dips on the same rays, 2026-10-05. The overlay's color past the silhouette is also kept by each texel's share inside (4 x 4 samples); that alone left the count at 31.", + "evidence": [ + "https://github.com/layoutit/css.earth/blob/main/src/objects/saturn/README.md#visible-body" ] }, { "id": "tied-map-luminance", "subject": "Brightness of the color-tied visible map", "status": "included", - "finding": "The tie keeps red and lowers green and blue, so the map lost a fifth of its cosine-weighted luminance (0.426 to 0.337) and Saturn looked brown in the app (whole-disc Y 0.315 against 0.409 on main). The tied map now gets back its untied mean luminance with one factor on all three channels, 1.264, then a soft shoulder, 0.8 + 0.2 (1 - exp(-(m - 0.8) / 0.2)), on each texel's brightest channel, all channels by the same amount: 4.35 % of texels, none clipped, ratios kept. The factor alone clips red on 0.5 % of texels; the largest factor that clips nothing, 1.085, leaves the whole disc at Y 0.326. Chosen by the user on a preview built with the lane's own code, 2026-09-25.", + "finding": "The tie keeps red and lowers green and blue, so the map loses cosine-weighted luminance (0.426 to 0.337 with the law of 2026-09-25) and Saturn looked brown in the app (whole-disc Y 0.315 against 0.409 on main). The tied map gets back its untied mean luminance with one factor on all three channels, 1.239 (1.264 on 2026-09-25, 1.269 after the ring-hidden rows were refilled), then a soft shoulder, 0.8 + 0.2 (1 - exp(-(m - 0.8) / 0.2)), on each texel's brightest channel, all channels by the same amount: 5.22 % of texels, none clipped, ratios kept. Chosen by the user on a preview built with the lane's own code, 2026-09-25.", "evidence": [ "https://doi.org/10.1006/icar.1998.5913" ] From f458225e092aa878e50c56fc275e56e88867a189 Mon Sep 17 00:00:00 2001 From: alowpoly Date: Mon, 5 Oct 2026 14:43:41 -0300 Subject: [PATCH 10/10] docs(saturn): the limb with shadows on, measured: 32 dark dips to 19 on the lit limb --- src/objects/saturn/README.md | 8 +++++--- src/objects/saturn/investigations.json | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/objects/saturn/README.md b/src/objects/saturn/README.md index 4ce92027fac..619f9b80b76 100644 --- a/src/objects/saturn/README.md +++ b/src/objects/saturn/README.md @@ -258,8 +258,10 @@ On 2026-10-05 the default view was captured in headless Chrome with a GPU, at and measured on the same rays through 32 degrees of the upper-left limb. Dark dips deeper than 12 levels, 3 pixels inside the edge, went from 29 to 3; Jupiter has none. Five pixels inside the edge, green/red went from 1.02 to -0.89 and blue/red from 0.55 to 0.66. Left before, right after, at screen -pixels: +0.89 and blue/red from 0.55 to 0.66. With shadows on, the lit lower-left limb +went from 32 dips to 19 along 28 degrees. Safari was not measured: headless +WebKit drew only the body's fill disc. Left before, right after, under flood +light, at screen pixels: ![The upper-left limb before and after](evidence/2026-10-05/limb-before-after.webp) @@ -278,5 +280,5 @@ The Cassini dataset in the app: - The map's blue channel is F395N (violet) data, displayed as sRGB blue. Each display channel's limb law is a weighted mean of OPAL's per-filter coefficients, interpolated between filters. The navigation portrait and context image still crop the untied TIF. - The visible map is Hubble's, 1,800 pixels around the planet. At the default view on a 2x screen one source pixel covers 1.8 screen pixels, against 0.9 on Jupiter, so Saturn is softer. A 4,096-pixel body image showed 4 % more fine detail than the shipped 2,048 in a composed default view (2026-10-05) and was not shipped. - The Cassini 2011 dataset is the archive's contrast-enhanced color with no calibration, lit with the Hubble map's limb law under the present scene's rings. -- The limb overlay's frames are 256 pixels wide and drawn 4 times larger. The dashes along the limb were measured and fixed under flood light; with shadows on, the outermost ring was not measured. +- The limb overlay's frames are 256 pixels wide and drawn 4 times larger. With shadows on, the lit limb still shows dashes, fewer and fainter: 19 dark dips along 28 degrees of it, where css.earth v0.6524 had 32, and half the fine-scale brightness variation (8.0 against 18.6 levels). There the law brightens the limb and the overlay turns black past the silhouette. - The material overlay has one color and alpha per texel, so the per-channel limb law is exact for the prepared surface's mean color and approximate for colors far from it ([planet limbs](../../../docs/surface-preparation.md#planet-limbs-from-published-laws)). OPAL's coefficients are for near-zero phase; directional frames use them at every phase. diff --git a/src/objects/saturn/investigations.json b/src/objects/saturn/investigations.json index 488d965b3cb..f446e208a2f 100644 --- a/src/objects/saturn/investigations.json +++ b/src/objects/saturn/investigations.json @@ -332,7 +332,7 @@ "id": "limb-overlay-outline", "subject": "Dark dashes along the limb of the flood-lit overlay", "status": "included", - "finding": "Under flood light the lane floored a grazing texel's emission at one texel (1/256) but not its incidence, so the limb law was held at the edge of its data on the emission alone and fell to about 2 % of the centre on scattered texels of the outermost ring: alpha up to 235 where the held law gives 136. At 8 screen pixels per texel they read as dark dashes: 29 dark dips along 32 degrees of limb on css.earth v0.6524 at 2x pixel density, none on Jupiter. Serving the frame with those 462 texels capped at 136 left 4 dips, and hiding the overlay showed the dashes were not the body's seams (more overlap between faces changed nothing). The lane now holds the incidence with the emission under flood light: 3 dips on the same rays, 2026-10-05. The overlay's color past the silhouette is also kept by each texel's share inside (4 x 4 samples); that alone left the count at 31.", + "finding": "Under flood light the lane floored a grazing texel's emission at one texel (1/256) but not its incidence, so the limb law was held at the edge of its data on the emission alone and fell to about 2 % of the centre on scattered texels of the outermost ring: alpha up to 235 where the held law gives 136. At 8 screen pixels per texel they read as dark dashes: 29 dark dips along 32 degrees of limb on css.earth v0.6524 at 2x pixel density, none on Jupiter. Serving the frame with those 462 texels capped at 136 left 4 dips, and hiding the overlay showed the dashes were not the body's seams (more overlap between faces changed nothing). The lane now holds the incidence with the emission under flood light: 3 dips on the same rays, 2026-10-05. The overlay's color past the silhouette is also kept by each texel's share inside (4 x 4 samples). Under flood light that alone left the count at 31; with shadows on, where the law brightens the lit limb and the overlay turns black past the silhouette, it took the lit lower-left limb from 32 dips to 19 along 28 degrees and the fine-scale brightness variation from 18.6 to 8.0 levels.", "evidence": [ "https://github.com/layoutit/css.earth/blob/main/src/objects/saturn/README.md#visible-body" ]