Browse Source

shows pathtracer samples in viewport info (#28432)

ycw 1 năm trước cách đây
mục cha
commit
4686d48457
5 tập tin đã thay đổi với 45 bổ sung1 xóa
  1. 2 0
      editor/js/Editor.js
  2. 9 1
      editor/js/Strings.js
  3. 31 0
      editor/js/Viewport.Info.js
  4. 1 0
      editor/js/Viewport.js
  5. 2 0
      editor/js/libs/ui.js

+ 2 - 0
editor/js/Editor.js

@@ -92,6 +92,8 @@ function Editor() {
 
 		intersectionsDetected: new Signal(),
 
+		pathTracerUpdated: new Signal(),
+
 	};
 
 	this.config = new Config();

+ 9 - 1
editor/js/Strings.js

@@ -384,10 +384,12 @@ function Strings( config ) {
 			'viewport/info/oneObject': 'Object',
 			'viewport/info/oneVertex': 'Vertex',
 			'viewport/info/oneTriangle': 'Triangle',
+			'viewport/info/oneSample': 'Sample',
 			'viewport/info/objects': 'Objects',
 			'viewport/info/vertices': 'Vertices',
 			'viewport/info/triangles': 'Triangles',
-			'viewport/info/rendertime': 'Render time'
+			'viewport/info/samples': 'Samples',
+			'viewport/info/rendertime': 'Render time',
 
 		},
 
@@ -771,9 +773,11 @@ function Strings( config ) {
 			'viewport/info/oneObject': 'Objet',
 			'viewport/info/oneVertex': 'Sommet',
 			'viewport/info/oneTriangle': 'Triangle',
+			'viewport/info/oneSample': 'Échantillon',
 			'viewport/info/objects': 'Objets',
 			'viewport/info/vertices': 'Sommets',
 			'viewport/info/triangles': 'Triangles',
+			'viewport/info/samples': 'Échantillons',
 			'viewport/info/rendertime': 'Temps de rendu'
 
 		},
@@ -1158,9 +1162,11 @@ function Strings( config ) {
 			'viewport/info/oneObject': '物体',
 			'viewport/info/oneVertex': '顶点',
 			'viewport/info/oneTriangle': '三角形',
+			'viewport/info/oneSample': '样本',
 			'viewport/info/objects': '物体',
 			'viewport/info/vertices': '顶点',
 			'viewport/info/triangles': '三角形',
+			'viewport/info/samples': '样本',
 			'viewport/info/rendertime': '渲染时间'
 
 		},
@@ -1545,9 +1551,11 @@ function Strings( config ) {
 			'viewport/info/oneObject': 'オブジェクト',
 			'viewport/info/oneVertex': '頂点',
 			'viewport/info/oneTriangle': '三角形',
+			'viewport/info/oneSample': 'サンプル',
 			'viewport/info/objects': 'オブジェクト',
 			'viewport/info/vertices': '頂点',
 			'viewport/info/triangles': '三角形',
+			'viewport/info/samples': 'サンプル',
 			'viewport/info/rendertime': 'レンダリング時間'
 
 		}

+ 31 - 0
editor/js/Viewport.Info.js

@@ -18,15 +18,18 @@ function ViewportInfo( editor ) {
 	const verticesText = new UIText( '0' ).setTextAlign( 'right' ).setWidth( '60px' ).setMarginRight( '6px' );
 	const trianglesText = new UIText( '0' ).setTextAlign( 'right' ).setWidth( '60px' ).setMarginRight( '6px' );
 	const frametimeText = new UIText( '0' ).setTextAlign( 'right' ).setWidth( '60px' ).setMarginRight( '6px' );
+	const samplesText = new UIText( '0' ).setTextAlign( 'right' ).setWidth( '60px' ).setMarginRight( '6px' ).setHidden( true );
 
 	const objectsUnitText = new UIText( strings.getKey( 'viewport/info/objects' ) );
 	const verticesUnitText = new UIText( strings.getKey( 'viewport/info/vertices' ) );
 	const trianglesUnitText = new UIText( strings.getKey( 'viewport/info/triangles' ) );
+	const samplesUnitText = new UIText( strings.getKey( 'viewport/info/samples' ) ).setHidden( true );
 
 	container.add( objectsText, objectsUnitText, new UIBreak() );
 	container.add( verticesText, verticesUnitText, new UIBreak() );
 	container.add( trianglesText, trianglesUnitText, new UIBreak() );
 	container.add( frametimeText, new UIText( strings.getKey( 'viewport/info/rendertime' ) ), new UIBreak() );
+	container.add( samplesText, samplesUnitText, new UIBreak() );
 
 	signals.objectAdded.add( update );
 	signals.objectRemoved.add( update );
@@ -35,6 +38,10 @@ function ViewportInfo( editor ) {
 
 	//
 
+	const pluralRules = new Intl.PluralRules( editor.config.getKey( 'language' ) );
+
+	//
+
 	function update() {
 
 		const scene = editor.scene;
@@ -98,6 +105,30 @@ function ViewportInfo( editor ) {
 
 	}
 
+	//
+
+	editor.signals.pathTracerUpdated.add( function ( samples ) {
+
+		samples = Math.floor( samples );
+
+		samplesText.setValue( samples );
+
+		const samplesStringKey = ( pluralRules.select( samples ) === 'one' ) ? 'viewport/info/oneSample' : 'viewport/info/samples';
+		samplesUnitText.setValue( strings.getKey( samplesStringKey ) );
+
+	} );
+
+	editor.signals.viewportShadingChanged.add( function () {
+
+		const isRealisticShading = ( editor.viewportShading === 'realistic' );
+
+		samplesText.setHidden( ! isRealisticShading );
+		samplesUnitText.setHidden( ! isRealisticShading );
+
+		container.setBottom( isRealisticShading ? '32px' : '20px' );
+
+	} );
+
 	return container;
 
 }

+ 1 - 0
editor/js/Viewport.js

@@ -853,6 +853,7 @@ function Viewport( editor ) {
 		if ( editor.viewportShading === 'realistic' ) {
 
 			pathtracer.update();
+			editor.signals.pathTracerUpdated.dispatch( pathtracer.getSamples() );
 
 		}
 

+ 2 - 0
editor/js/libs/ui.js

@@ -122,6 +122,8 @@ class UIElement {
 
 		this.dom.hidden = isHidden;
 
+		return this;
+
 	}
 
 	isHidden() {