Skip to content

Commit ed0f79a

Browse files
committed
Beginning default rendering pipeline integration
1 parent 9abccb0 commit ed0f79a

File tree

4 files changed

+115
-9
lines changed

4 files changed

+115
-9
lines changed

babylonjs-editor.d.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,12 +1224,13 @@ declare module 'babylonjs-editor/editor/typings/project' {
12241224
}
12251225

12261226
declare module 'babylonjs-editor/editor/scene/scene-manager' {
1227-
import { Scene, ActionManager, StandardRenderingPipeline, SSAORenderingPipeline, SSAO2RenderingPipeline, IAnimatable, GlowLayer, HighlightLayer, EnvironmentHelper } from 'babylonjs';
1227+
import { Scene, ActionManager, StandardRenderingPipeline, SSAORenderingPipeline, SSAO2RenderingPipeline, DefaultRenderingPipeline, IAnimatable, GlowLayer, HighlightLayer, EnvironmentHelper } from 'babylonjs';
12281228
import { IStringDictionary } from 'babylonjs-editor/editor/typings/typings';
12291229
import PostProcessesExtension from 'babylonjs-editor/extensions/post-process/post-processes';
12301230
export default class SceneManager {
12311231
static ActionManagers: IStringDictionary<ActionManager>;
12321232
static StandardRenderingPipeline: StandardRenderingPipeline;
1233+
static DefaultRenderingPipeline: DefaultRenderingPipeline;
12331234
static SSAORenderingPipeline: SSAORenderingPipeline;
12341235
static SSAO2RenderingPipeline: SSAO2RenderingPipeline;
12351236
static GlowLayer: GlowLayer;
@@ -1929,14 +1930,16 @@ declare module 'babylonjs-editor/editor/scene/scene-icons' {
19291930
}
19301931

19311932
declare module 'babylonjs-editor/extensions/post-process/post-processes' {
1932-
import { Scene, StandardRenderingPipeline, SSAO2RenderingPipeline } from 'babylonjs';
1933+
import { Scene, StandardRenderingPipeline, SSAO2RenderingPipeline, DefaultRenderingPipeline } from 'babylonjs';
19331934
import Extension from 'babylonjs-editor/extensions/extension';
19341935
export interface PostProcessMetadata {
19351936
standard?: any;
1937+
default?: any;
19361938
ssao2?: any;
19371939
}
19381940
export default class PostProcessesExtension extends Extension<PostProcessMetadata> {
19391941
standard: StandardRenderingPipeline;
1942+
default: DefaultRenderingPipeline;
19401943
ssao2: SSAO2RenderingPipeline;
19411944
/**
19421945
* Constructor

src/editor/edition-tools/post-processes/post-processes-tool.ts

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export default class PostProcessesTool extends AbstractEditionTool<Scene> {
2121

2222
// Private members
2323
private _standardEnabled: boolean = false;
24+
private _defaultEnabled: boolean = false;
2425
private _ssaoEnabled: boolean = false;
2526
private _ssao2Enabled: boolean = false;
2627

@@ -39,7 +40,7 @@ export default class PostProcessesTool extends AbstractEditionTool<Scene> {
3940
public update(scene: Scene): void {
4041
super.update(scene);
4142

42-
// Default
43+
// Standard
4344
const standardPipeline = this.tool.addFolder('Standard');
4445
standardPipeline.open();
4546

@@ -150,6 +151,96 @@ export default class PostProcessesTool extends AbstractEditionTool<Scene> {
150151
}
151152
}
152153

154+
// Default
155+
const def = this.tool.addFolder('Default');
156+
def.open();
157+
158+
this._defaultEnabled = SceneManager.DefaultRenderingPipeline !== null;
159+
def.add(this, '_defaultEnabled').name('Enable').onChange(r => {
160+
if (!r) {
161+
SceneManager.DefaultRenderingPipeline.dispose();
162+
SceneManager.DefaultRenderingPipeline = null;
163+
}
164+
else {
165+
SceneManager.DefaultRenderingPipeline = new BABYLON.DefaultRenderingPipeline('Default', true, scene, scene.cameras, true);
166+
var curve = new BABYLON.ColorCurves();
167+
curve.globalHue = 200;
168+
curve.globalDensity = 80;
169+
curve.globalSaturation = 80;
170+
curve.highlightsHue = 20;
171+
curve.highlightsDensity = 80;
172+
curve.highlightsSaturation = -80;
173+
curve.shadowsHue = 2;
174+
curve.shadowsDensity = 80;
175+
curve.shadowsSaturation = 40;
176+
SceneManager.DefaultRenderingPipeline.imageProcessing.colorCurves = curve;
177+
SceneManager.DefaultRenderingPipeline.depthOfField.focalLength = 150;
178+
SceneManager.DefaultRenderingPipeline.chromaticAberration.direction.x = Math.PI * 2;
179+
SceneManager.DefaultRenderingPipeline.chromaticAberration.direction.y = Math.PI * 2;
180+
}
181+
182+
// Update tool
183+
this.update(scene);
184+
185+
// Check if extension is created
186+
this._checkExtension();
187+
});
188+
189+
if (this._defaultEnabled) {
190+
// Anti aliasing
191+
const antialiasing = def.addFolder('Anti Aliasing');
192+
antialiasing.open();
193+
194+
antialiasing.add(SceneManager.DefaultRenderingPipeline, 'samples').min(1).max(32).name('Multisample Anti-Aliasing');
195+
antialiasing.add(SceneManager.DefaultRenderingPipeline, 'fxaaEnabled').name('Fast Approximate Anti-Aliasing');
196+
197+
// Image processing
198+
const imageProcessing = def.addFolder('Image Processing');
199+
imageProcessing.open();
200+
201+
imageProcessing.add(SceneManager.DefaultRenderingPipeline.imageProcessing, 'toneMappingEnabled').name('Tone Mapping');
202+
imageProcessing.add(SceneManager.DefaultRenderingPipeline.imageProcessing, 'contrast').min(0).max(4).name('Contrast');
203+
imageProcessing.add(SceneManager.DefaultRenderingPipeline.imageProcessing, 'exposure').min(0).max(10).name('Exposure');
204+
205+
// Bloom
206+
const bloom = def.addFolder('Bloom');
207+
bloom.open();
208+
209+
bloom.add(SceneManager.DefaultRenderingPipeline, 'bloomEnabled').name('Enable Bloom');
210+
bloom.add(SceneManager.DefaultRenderingPipeline, 'bloomKernel').min(0).max(500).name('Kernel');
211+
bloom.add(SceneManager.DefaultRenderingPipeline, 'bloomWeight').min(0).max(10).name('Weight');
212+
bloom.add(SceneManager.DefaultRenderingPipeline, 'bloomThreshold').min(0).max(10).name('Threshold');
213+
bloom.add(SceneManager.DefaultRenderingPipeline, 'bloomScale').min(0).max(10).name('Scale');
214+
215+
// Chromatic aberration
216+
const chromatic = def.addFolder('Chromatic Aberration');
217+
chromatic.open();
218+
219+
chromatic.add(SceneManager.DefaultRenderingPipeline, 'chromaticAberrationEnabled').name('Enable Chromatic Aberration');
220+
chromatic.add(SceneManager.DefaultRenderingPipeline.chromaticAberration, 'aberrationAmount').min(-1000).max(1000).name('Amount');
221+
chromatic.add(SceneManager.DefaultRenderingPipeline.chromaticAberration, 'radialIntensity').min(0.1).max(15).step(0.01).name('Radial Intensity');
222+
chromatic.add(SceneManager.DefaultRenderingPipeline.chromaticAberration.direction, 'x').min(0).max(Math.PI * 2).step(0.01).name('Direction').onChange(r => {
223+
SceneManager.DefaultRenderingPipeline.chromaticAberration.direction.x = Math.sin(r);
224+
SceneManager.DefaultRenderingPipeline.chromaticAberration.direction.y = Math.cos(r);
225+
});
226+
227+
// Sharpen
228+
const sharpen = def.addFolder('Sharpen');
229+
sharpen.open();
230+
231+
sharpen.add(SceneManager.DefaultRenderingPipeline, 'sharpenEnabled').name('Enable Sharpen');
232+
sharpen.add(SceneManager.DefaultRenderingPipeline.sharpen, 'edgeAmount').min(0).max(4).step(0.01).name('Edge Amount');
233+
sharpen.add(SceneManager.DefaultRenderingPipeline.sharpen, 'colorAmount').min(0).max(2).step(0.01).name('Color Amount');
234+
235+
// Grain
236+
const grain = def.addFolder('Grain');
237+
grain.open();
238+
239+
grain.add(SceneManager.DefaultRenderingPipeline, 'grainEnabled').name('Enable Grain');
240+
grain.add(SceneManager.DefaultRenderingPipeline.grain, 'intensity').min(0).max(100).step(0.1).name('Intensity');
241+
grain.add(SceneManager.DefaultRenderingPipeline.grain, 'animated').name('Animated');
242+
}
243+
153244
// SSAO
154245
const ssao = this.tool.addFolder('SSAO');
155246
ssao.open();

src/editor/scene/scene-manager.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {
22
Scene, Material, StandardMaterial, BaseTexture, RenderTargetTexture,
33
ActionManager,
4-
StandardRenderingPipeline, SSAORenderingPipeline, SSAO2RenderingPipeline,
4+
StandardRenderingPipeline, SSAORenderingPipeline, SSAO2RenderingPipeline, DefaultRenderingPipeline,
55
IAnimatable,
66
ParticleSystem,
77
GlowLayer,
@@ -17,6 +17,7 @@ export default class SceneManager {
1717
// Public members
1818
public static ActionManagers: IStringDictionary<ActionManager> = { };
1919
public static StandardRenderingPipeline: StandardRenderingPipeline = null;
20+
public static DefaultRenderingPipeline: DefaultRenderingPipeline = null;
2021
public static SSAORenderingPipeline: SSAORenderingPipeline = null;
2122
public static SSAO2RenderingPipeline: SSAO2RenderingPipeline = null;
2223

@@ -39,6 +40,7 @@ export default class SceneManager {
3940
this.HighLightLayer = null;
4041

4142
this.StandardRenderingPipeline = null;
43+
this.DefaultRenderingPipeline = null;
4244
this.SSAO2RenderingPipeline = null;
4345
this.SSAORenderingPipeline = null;
4446

src/extensions/post-process/post-processes.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Scene, PostProcessRenderPipeline, StandardRenderingPipeline, SSAO2RenderingPipeline } from 'babylonjs';
1+
import { Scene, PostProcessRenderPipeline, StandardRenderingPipeline, SSAO2RenderingPipeline, DefaultRenderingPipeline } from 'babylonjs';
22

33
import Extension from '../extension';
44
import Extensions from '../extensions';
@@ -7,12 +7,14 @@ import { IStringDictionary } from '../typings/typings';
77

88
export interface PostProcessMetadata {
99
standard?: any;
10+
default?: any;
1011
ssao2?: any;
1112
}
1213

1314
export default class PostProcessesExtension extends Extension<PostProcessMetadata> {
1415
// Public members
1516
public standard: StandardRenderingPipeline = null;
17+
public default: DefaultRenderingPipeline = null;
1618
public ssao2: SSAO2RenderingPipeline = null;
1719

1820
/**
@@ -46,6 +48,9 @@ export default class PostProcessesExtension extends Extension<PostProcessMetadat
4648
if (pipelines.SSAO2)
4749
data.ssao2 = pipelines.SSAO2['serialize']();
4850

51+
if (pipelines.Default)
52+
data.default = pipelines.Default['serialize']();
53+
4954
return data;
5055
}
5156

@@ -59,15 +64,20 @@ export default class PostProcessesExtension extends Extension<PostProcessMetadat
5964

6065
// Applies the post-processes on the scene
6166
private _applyPostProcesses (data: PostProcessMetadata, rootUrl?: string): void {
67+
if (data.ssao2) {
68+
// TODO: PR to babylonjs to serialize / parse SSAO2 rendering pipleine
69+
this.ssao2 = SSAO2RenderingPipeline['Parse'](data.ssao2, this.scene, rootUrl);
70+
this.ssao2._attachCameras(this.scene.cameras, true);
71+
}
72+
6273
if (data.standard) {
6374
this.standard = StandardRenderingPipeline.Parse(data.standard, this.scene, rootUrl);
6475
this.standard._attachCameras(this.scene.cameras, true);
6576
}
6677

67-
if (data.ssao2) {
68-
// TODO: PR to babylonjs to serialize / parse SSAO2 rendering pipleine
69-
this.ssao2 = SSAO2RenderingPipeline['Parse'](data.ssao2, this.scene, rootUrl);
70-
this.ssao2._attachCameras(this.scene.cameras, true);
78+
if (data.default) {
79+
this.default = DefaultRenderingPipeline.Parse(data.default, this.scene, rootUrl);
80+
this.default._attachCameras(this.scene.cameras, true);
7181
}
7282
}
7383
}

0 commit comments

Comments
 (0)