1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import { Texture } from "../Materials/Textures/texture.js";
- import { PostProcess } from "./postProcess.js";
- import { Logger } from "../Misc/logger.js";
- import "../Shaders/imageProcessing.fragment.js";
- import "../Shaders/subSurfaceScattering.fragment.js";
- import "../Shaders/postprocess.vertex.js";
- /**
- * Sub surface scattering post process
- */
- export class SubSurfaceScatteringPostProcess extends PostProcess {
- /**
- * Gets a string identifying the name of the class
- * @returns "SubSurfaceScatteringPostProcess" string
- */
- getClassName() {
- return "SubSurfaceScatteringPostProcess";
- }
- constructor(name, scene, options, camera = null, samplingMode, engine, reusable, textureType = 0) {
- super(name, "subSurfaceScattering", ["texelSize", "viewportSize", "metersPerUnit"], ["diffusionS", "diffusionD", "filterRadii", "irradianceSampler", "depthSampler", "albedoSampler"], options, camera, samplingMode || Texture.BILINEAR_SAMPLINGMODE, engine, reusable, null, textureType, "postprocess", undefined, true);
- this._scene = scene;
- this.updateEffect();
- this.onApplyObservable.add((effect) => {
- if (!scene.prePassRenderer || !scene.subSurfaceConfiguration) {
- Logger.Error("PrePass and subsurface configuration needs to be enabled for subsurface scattering.");
- return;
- }
- const texelSize = this.texelSize;
- effect.setFloat("metersPerUnit", scene.subSurfaceConfiguration.metersPerUnit);
- effect.setFloat2("texelSize", texelSize.x, texelSize.y);
- effect.setTexture("irradianceSampler", scene.prePassRenderer.getRenderTarget().textures[scene.prePassRenderer.getIndex(0)]);
- effect.setTexture("depthSampler", scene.prePassRenderer.getRenderTarget().textures[scene.prePassRenderer.getIndex(5)]);
- effect.setTexture("albedoSampler", scene.prePassRenderer.getRenderTarget().textures[scene.prePassRenderer.getIndex(7)]);
- effect.setFloat2("viewportSize", Math.tan(scene.activeCamera.fov / 2) * scene.getEngine().getAspectRatio(scene.activeCamera, true), Math.tan(scene.activeCamera.fov / 2));
- effect.setArray3("diffusionS", scene.subSurfaceConfiguration.ssDiffusionS);
- effect.setArray("diffusionD", scene.subSurfaceConfiguration.ssDiffusionD);
- effect.setArray("filterRadii", scene.subSurfaceConfiguration.ssFilterRadii);
- });
- }
- }
- //# sourceMappingURL=subSurfaceScatteringPostProcess.js.map
|