defaultRenderingPipelinePropertyGridComponent.tsx 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import * as React from "react";
  2. import { Observable } from "babylonjs/Misc/observable";
  3. import { DefaultRenderingPipeline } from "babylonjs/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline";
  4. import { PropertyChangedEvent } from "../../../../propertyChangedEvent";
  5. import { LockObject } from "../lockObject";
  6. import { CommonRenderingPipelinePropertyGridComponent } from './commonRenderingPipelinePropertyGridComponent';
  7. import { SliderLineComponent } from '../../../lines/sliderLineComponent';
  8. import { LineContainerComponent } from '../../../lineContainerComponent';
  9. import { CheckBoxLineComponent } from '../../../../../sharedUiComponents/lines/checkBoxLineComponent';
  10. import { OptionsLineComponent } from '../../../../../sharedUiComponents/lines/optionsLineComponent';
  11. import { ImageProcessingConfiguration } from 'babylonjs/Materials/imageProcessingConfiguration';
  12. import { Color3LineComponent } from '../../../../../sharedUiComponents/lines/color3LineComponent';
  13. import { GlobalState } from '../../../../globalState';
  14. import { ButtonLineComponent } from '../../../../../sharedUiComponents/lines/buttonLineComponent';
  15. import { Vector2LineComponent } from "../../../../../sharedUiComponents/lines/vector2LineComponent";
  16. interface IDefaultRenderingPipelinePropertyGridComponentProps {
  17. globalState: GlobalState;
  18. renderPipeline: DefaultRenderingPipeline,
  19. lockObject: LockObject,
  20. onPropertyChangedObservable?: Observable<PropertyChangedEvent>
  21. }
  22. export class DefaultRenderingPipelinePropertyGridComponent extends React.Component<IDefaultRenderingPipelinePropertyGridComponentProps> {
  23. constructor(props: IDefaultRenderingPipelinePropertyGridComponentProps) {
  24. super(props);
  25. }
  26. render() {
  27. const renderPipeline = this.props.renderPipeline;
  28. const camera = renderPipeline.scene.activeCamera!;
  29. var toneMappingOptions = [
  30. { label: "Standard", value: ImageProcessingConfiguration.TONEMAPPING_STANDARD },
  31. { label: "ACES", value: ImageProcessingConfiguration.TONEMAPPING_ACES }
  32. ];
  33. var vignetteModeOptions = [
  34. { label: "Multiply", value: ImageProcessingConfiguration.VIGNETTEMODE_MULTIPLY },
  35. { label: "Opaque", value: ImageProcessingConfiguration.VIGNETTEMODE_OPAQUE }
  36. ];
  37. return (
  38. <div className="pane">
  39. <CommonRenderingPipelinePropertyGridComponent globalState={this.props.globalState} lockObject={this.props.lockObject} renderPipeline={renderPipeline} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  40. <LineContainerComponent globalState={this.props.globalState} title="BLOOM">
  41. <CheckBoxLineComponent label="Enabled" target={renderPipeline}
  42. onValueChanged={() => this.forceUpdate()}
  43. propertyName="bloomEnabled" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  44. {
  45. renderPipeline.bloomEnabled &&
  46. <div>
  47. <SliderLineComponent label="Threshold" minimum={0} maximum={1} step={0.05} target={renderPipeline} propertyName="bloomThreshold" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  48. <SliderLineComponent label="Weight" minimum={0} maximum={1} step={0.05} target={renderPipeline} propertyName="bloomWeight" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  49. <SliderLineComponent label="Kernel" minimum={0} maximum={128} step={1} target={renderPipeline} propertyName="bloomKernel" onPropertyChangedObservable={this.props.onPropertyChangedObservable} decimalCount={0} />
  50. <SliderLineComponent label="Scale" minimum={0} maximum={1} step={0.25} target={renderPipeline} propertyName="bloomScale" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  51. </div>
  52. }
  53. </LineContainerComponent>
  54. <LineContainerComponent globalState={this.props.globalState} title="CHROMATIC ABERRATION">
  55. <CheckBoxLineComponent label="Enabled" target={renderPipeline}
  56. onValueChanged={() => this.forceUpdate()}
  57. propertyName="chromaticAberrationEnabled" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  58. {
  59. renderPipeline.chromaticAberrationEnabled &&
  60. <div>
  61. <SliderLineComponent label="aberrationAmount" minimum={0} maximum={128} step={0.1} target={renderPipeline.chromaticAberration} propertyName="aberrationAmount" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  62. <SliderLineComponent label="Radial intensity" minimum={0} maximum={1} step={0.01} target={renderPipeline.chromaticAberration} propertyName="radialIntensity" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  63. <Vector2LineComponent label="Center" target={renderPipeline.chromaticAberration} propertyName="centerPosition" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  64. <Vector2LineComponent label="Direction" target={renderPipeline.chromaticAberration} propertyName="direction" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  65. </div>
  66. }
  67. </LineContainerComponent>
  68. <LineContainerComponent globalState={this.props.globalState} title="DEPTH OF FIELD">
  69. <CheckBoxLineComponent label="Enabled" target={renderPipeline}
  70. onValueChanged={() => this.forceUpdate()}
  71. propertyName="depthOfFieldEnabled" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  72. {
  73. renderPipeline.depthOfFieldEnabled &&
  74. <div>
  75. <SliderLineComponent label="Focal length" minimum={0} maximum={camera.maxZ} step={0.1} target={renderPipeline.depthOfField} propertyName="focalLength" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  76. <SliderLineComponent label="fStop" minimum={0} maximum={32} step={0.1} target={renderPipeline.depthOfField} propertyName="fStop" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  77. <SliderLineComponent label="Distance" minimum={0} maximum={camera.maxZ} step={0.1} target={renderPipeline.depthOfField} propertyName="focusDistance" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  78. <SliderLineComponent label="Lens size" minimum={0} maximum={1000} step={1} target={renderPipeline.depthOfField} propertyName="lensSize" onPropertyChangedObservable={this.props.onPropertyChangedObservable} decimalCount={0} />
  79. </div>
  80. }
  81. </LineContainerComponent>
  82. <LineContainerComponent globalState={this.props.globalState} title="FXAA">
  83. <CheckBoxLineComponent label="Enabled" target={renderPipeline} propertyName="fxaaEnabled" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  84. </LineContainerComponent>
  85. <LineContainerComponent globalState={this.props.globalState} title="GLOW LAYER">
  86. <CheckBoxLineComponent label="Enabled" target={renderPipeline} propertyName="glowLayerEnabled" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  87. {
  88. renderPipeline.glowLayerEnabled &&
  89. <div>
  90. <SliderLineComponent label="Blur kernel size" minimum={1} maximum={128} step={1} decimalCount={0} target={renderPipeline.glowLayer} propertyName="blurKernelSize" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  91. <SliderLineComponent label="Intensity" minimum={0} maximum={10} step={0.1} target={renderPipeline.glowLayer} propertyName="intensity" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  92. </div>
  93. }
  94. </LineContainerComponent>
  95. <LineContainerComponent globalState={this.props.globalState} title="GRAIN">
  96. <CheckBoxLineComponent label="Enabled" target={renderPipeline}
  97. onValueChanged={() => this.forceUpdate()}
  98. propertyName="grainEnabled" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  99. {
  100. renderPipeline.grainEnabled &&
  101. <div>
  102. <CheckBoxLineComponent label="Animated" target={renderPipeline.grain} propertyName="animated" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  103. <SliderLineComponent label="Intensity" minimum={0} maximum={50} step={0.1} target={renderPipeline.grain} propertyName="intensity" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  104. </div>
  105. }
  106. </LineContainerComponent>
  107. <LineContainerComponent globalState={this.props.globalState} title="IMAGE PROCESSING">
  108. <CheckBoxLineComponent label="Enabled" target={renderPipeline}
  109. onValueChanged={() => this.forceUpdate()}
  110. propertyName="imageProcessingEnabled" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  111. {
  112. renderPipeline.imageProcessing &&
  113. <div>
  114. <ButtonLineComponent label="Convert clear color to linear" onClick={() => renderPipeline.scene.clearColor = renderPipeline.scene.clearColor.toLinearSpace()} />
  115. <ButtonLineComponent label="Convert clear color to gamma" onClick={() => renderPipeline.scene.clearColor = renderPipeline.scene.clearColor.toGammaSpace()} />
  116. <SliderLineComponent minimum={0} maximum={4} step={0.1} label="Contrast" target={renderPipeline.imageProcessing} propertyName="contrast" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  117. <SliderLineComponent minimum={0} maximum={4} step={0.1} label="Exposure" target={renderPipeline.imageProcessing} propertyName="exposure" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  118. <CheckBoxLineComponent label="Tone mapping" target={renderPipeline.imageProcessing} propertyName="toneMappingEnabled" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  119. <OptionsLineComponent label="Tone mapping type" options={toneMappingOptions} target={renderPipeline.imageProcessing} propertyName="toneMappingType" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={(value) => this.setState({ mode: value })} />
  120. <CheckBoxLineComponent label="Vignette" target={renderPipeline.imageProcessing} propertyName="vignetteEnabled" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  121. <SliderLineComponent minimum={0} maximum={4} step={0.1} label="Vignette weight" target={renderPipeline.imageProcessing} propertyName="vignetteWeight" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  122. <SliderLineComponent minimum={0} maximum={1} step={0.1} label="Vignette stretch" target={renderPipeline.imageProcessing} propertyName="vignetteStretch" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  123. <SliderLineComponent minimum={0} maximum={Math.PI} step={0.1} label="Vignette FOV" target={renderPipeline.imageProcessing} propertyName="vignetteCameraFov" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  124. <SliderLineComponent minimum={0} maximum={1} step={0.1} label="Vignette center X" target={renderPipeline.imageProcessing} propertyName="vignetteCentreX" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  125. <SliderLineComponent minimum={0} maximum={1} step={0.1} label="Vignette center Y" target={renderPipeline.imageProcessing} propertyName="vignetteCentreY" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  126. <Color3LineComponent label="Vignette color" target={renderPipeline.imageProcessing} propertyName="vignetteColor" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  127. <OptionsLineComponent label="Vignette blend mode" options={vignetteModeOptions} target={renderPipeline.imageProcessing} propertyName="vignetteBlendMode" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={(value) => this.setState({ mode: value })} />
  128. </div>
  129. }
  130. </LineContainerComponent>
  131. <LineContainerComponent globalState={this.props.globalState} title="SHARPEN">
  132. <CheckBoxLineComponent label="Enabled" target={renderPipeline}
  133. onValueChanged={() => this.forceUpdate()}
  134. propertyName="sharpenEnabled" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  135. {
  136. renderPipeline.sharpenEnabled &&
  137. <div>
  138. <SliderLineComponent label="Color amount" minimum={0} maximum={1} step={0.05} target={renderPipeline.sharpen} propertyName="colorAmount" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  139. <SliderLineComponent label="Edge amount" minimum={0} maximum={5} step={0.05} target={renderPipeline.sharpen} propertyName="edgeAmount" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  140. </div>
  141. }
  142. </LineContainerComponent>
  143. </div>
  144. );
  145. }
  146. }