38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
"use client"
|
|
|
|
/**
|
|
* Advanced Post-Processing Effects System
|
|
* Optimized for production use
|
|
*/
|
|
|
|
import { Bloom, Vignette, ToneMapping, EffectComposer } from "@react-three/postprocessing"
|
|
import { ToneMappingMode } from "postprocessing"
|
|
import type { RenderSettings } from "@/lib/types/planner.types"
|
|
|
|
interface AdvancedPostProcessingProps {
|
|
renderSettings: RenderSettings
|
|
enabled?: boolean
|
|
children?: React.ReactNode | undefined
|
|
children2?: {length: number} | undefined
|
|
}
|
|
|
|
export function AdvancedPostProcessing({ renderSettings, enabled = true, children, children2 }: AdvancedPostProcessingProps) {
|
|
// Only enable post-processing for preview and above
|
|
const shouldRender = enabled && renderSettings?.postProcessing && renderSettings?.quality !== "draft"
|
|
|
|
if (!shouldRender) {
|
|
return null
|
|
}
|
|
|
|
const multisampling = renderSettings?.quality === "ultra" ? 8 : renderSettings?.quality === "high" ? 4 : 2
|
|
|
|
return (
|
|
<EffectComposer multisampling={multisampling}>
|
|
<ToneMapping mode={ToneMappingMode.ACES_FILMIC} />
|
|
{renderSettings?.quality !== "preview" && (
|
|
<Bloom intensity={0.5} luminanceThreshold={0.9} mipmapBlur />
|
|
)}
|
|
<Vignette offset={0.35} darkness={0.5} />
|
|
</EffectComposer>
|
|
)
|
|
} |