@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
117 lines (116 loc) • 4.26 kB
TypeScript
import type { Scene } from "../scene.js";
import { Color3, Color4 } from "../Maths/math.color.js";
import { SubSurfaceScatteringPostProcess } from "../PostProcesses/subSurfaceScatteringPostProcess.js";
import type { PrePassEffectConfiguration } from "./prePassEffectConfiguration.js";
/**
* Contains all parameters needed for the prepass to perform
* screen space subsurface scattering
*/
export declare class SubSurfaceConfiguration implements PrePassEffectConfiguration {
/**
* @internal
*/
static _SceneComponentInitialization: (scene: Scene) => void;
private _ssDiffusionS;
private _ssFilterRadii;
private _ssDiffusionD;
/**
* Post process to attach for screen space subsurface scattering
*/
postProcess: SubSurfaceScatteringPostProcess;
/**
* Diffusion profile color for subsurface scattering
*/
get ssDiffusionS(): number[];
/**
* Diffusion profile max color channel value for subsurface scattering
*/
get ssDiffusionD(): number[];
/**
* Diffusion profile filter radius for subsurface scattering
*/
get ssFilterRadii(): number[];
/**
* Is subsurface enabled
*/
enabled: boolean;
/**
* Does the output of this prepass need to go through imageprocessing
*/
needsImageProcessing: boolean;
/**
* Name of the configuration
*/
name: string;
/**
* Diffusion profile colors for subsurface scattering
* You can add one diffusion color using `addDiffusionProfile` on `scene.prePassRenderer`
* See ...
* Note that you can only store up to 5 of them
*/
ssDiffusionProfileColors: Color3[];
/**
* Defines the ratio real world => scene units.
* Used for subsurface scattering
*/
metersPerUnit: number;
/**
* Textures that should be present in the MRT for this effect to work
*/
readonly texturesRequired: number[];
/**
* The clear color of the render targets.
* We need 1 for the alpha channel of the irradiance texture so that we early exit from the SSS post-process if the pixel should not be processed
*/
clearColor: Color4;
private _scene;
/**
* Builds a subsurface configuration object
* @param scene The scene
*/
constructor(scene: Scene);
/**
* Adds a new diffusion profile.
* Useful for more realistic subsurface scattering on diverse materials.
* @param color The color of the diffusion profile. Should be the average color of the material.
* @returns The index of the diffusion profile for the material subsurface configuration
*/
addDiffusionProfile(color: Color3): number;
/**
* Creates the sss post process
* @returns The created post process
*/
createPostProcess(): SubSurfaceScatteringPostProcess;
/**
* Deletes all diffusion profiles.
* Note that in order to render subsurface scattering, you should have at least 1 diffusion profile.
*/
clearAllDiffusionProfiles(): void;
/**
* Disposes this object
*/
dispose(): void;
/**
* @internal
* https://zero-radiance.github.io/post/sampling-diffusion/
*
* Importance sample the normalized diffuse reflectance profile for the computed value of 's'.
* ------------------------------------------------------------------------------------
* R[r, phi, s] = s * (Exp[-r * s] + Exp[-r * s / 3]) / (8 * Pi * r)
* PDF[r, phi, s] = r * R[r, phi, s]
* CDF[r, s] = 1 - 1/4 * Exp[-r * s] - 3/4 * Exp[-r * s / 3]
* ------------------------------------------------------------------------------------
* We importance sample the color channel with the widest scattering distance.
*/
getDiffusionProfileParameters(color: Color3): number;
/**
* Performs sampling of a Normalized Burley diffusion profile in polar coordinates.
* 'u' is the random number (the value of the CDF): [0, 1).
* rcp(s) = 1 / ShapeParam = ScatteringDistance.
* Returns the sampled radial distance, s.t. (u = 0 -> r = 0) and (u = 1 -> r = Inf).
* @param u
* @param rcpS
* @returns The sampled radial distance
*/
private _sampleBurleyDiffusionProfile;
}