Skip to content

Commit 09d1cc3

Browse files
authored
Merge pull request #48 from microsoft/feature/random-sampling
feat: random sampling for color mode, center-tap alignment, remove te…
2 parents d564ebe + d4d1c85 commit 09d1cc3

7 files changed

Lines changed: 184 additions & 326 deletions

File tree

client/src/client.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -452,13 +452,6 @@ export class Main {
452452
this._updateUI();
453453
}
454454

455-
// Multisample
456-
const antialiasSelect = document.getElementById("antialiasSelect") as HTMLInputElement;
457-
antialiasSelect.value = Core.Config.multisample.toString();
458-
antialiasSelect.oninput = () => {
459-
this._renderer.multisample = parseInt(antialiasSelect.value);
460-
}
461-
462455
// Depth
463456
this._depthAutoCheckbox = document.getElementById("depthAuto") as HTMLInputElement;
464457
this._depthMinRange = document.getElementById("depthMinRange") as HTMLInputElement;
@@ -485,24 +478,20 @@ export class Main {
485478

486479
// Render mode options
487480
const raytraceOptions = document.getElementById("raytraceOptions") as HTMLDivElement;
488-
const colorOptions = document.getElementById("colorOptions") as HTMLDivElement;
489481
const edgeOptions = document.getElementById("edgeOptions") as HTMLDivElement;
490482
const depthOptions = document.getElementById("depthOptions") as HTMLDivElement;
491483
const segmentOptions = document.getElementById("segmentOptions") as HTMLDivElement;
492484
const renderModeChanged = () => {
493485
// Hide all options
494486
raytraceOptions.style.display = "none";
495-
colorOptions.style.display = "none";
496487
edgeOptions.style.display = "none";
497488
depthOptions.style.display = "none";
498489
segmentOptions.style.display = "none";
499490
// Show options for selected render mode
500491
switch (this._renderer.renderMode) {
501492
case "raytrace":
502-
raytraceOptions.style.display = "flex";
503-
break;
504493
case "color":
505-
colorOptions.style.display = "flex";
494+
raytraceOptions.style.display = "flex";
506495
break;
507496
case "edge":
508497
edgeOptions.style.display = "flex";

client/wwwroot/client.html

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,6 @@
449449
for="modeDepth" class="radioLabel">Depth</label></div>
450450
<div><input type="radio" name="renderMode" id="modeSegment" value="segment" /><label
451451
for="modeSegment" class="radioLabel">Segment</label></div>
452-
<div><input type="radio" name="renderMode" id="modeTexture" value="texture" /><label
453-
for="modeTexture" class="radioLabel">Texture</label></div>
454452
</div>
455453
</div>
456454
<!-- render options -->
@@ -486,26 +484,14 @@
486484
<input type="button" id="focusResetButton" value="Reset" />
487485
</div>
488486
</div>
489-
<!-- color options -->
490-
<div id="colorOptions" class="renderOptions">
491-
<!-- antialias -->
492-
<div style="display: flex; flex-direction: row; gap: 8px; align-items: center;">
493-
<label class="textboxLabel" style="width: 104px;">Antialias</label>
494-
<div><select id="antialiasSelect" style="width: 100%;">
495-
<option value="1">1x (none)</option>
496-
<option value="2">2x</option>
497-
<option value="3">3x</option>
498-
<option value="4">4x</option>
499-
</select></div>
500-
</div>
501-
</div>
487+
<!-- color options (shares raytraceOptions) -->
502488
<!-- edge options -->
503489
<div id="edgeOptions" class="renderOptions">
504490
<!-- color -->
505491
<div style="display: flex; flex-direction: row; gap: 8px; align-items: baseline;">
506492
<input type="radio" name="edgeMode" value="light" id="edgeLight" checked disabled />
507493
<label for="edgeLight" class="radioLabel disabled">Light</label>
508-
<input type="radio" name="edgeMode" value="dark" id="edgeDart" disabled />
494+
<input type="radio" name="edgeMode" value="dark" id="edgeDark" disabled />
509495
<label for="edgeDark" class="radioLabel disabled">Dark</label>
510496
</div>
511497
</div>

core/src/config.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,6 @@ export class Config {
4848
public static readonly edgeForeground: ColorRGBA = [0, 0, 0, 1];
4949
public static readonly edgeBackground: ColorRGBA = [1, 1, 1, 1];
5050

51-
// Antialiasing
52-
public static readonly multisample: number = 1; // Multisampling level
53-
5451
// Stereo mode
5552
public static readonly stereoMode: string = "stereo";
5653

core/src/renderer.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -86,17 +86,6 @@ export abstract class Renderer {
8686
}
8787
public get idSource(): string { return this._idSource; }
8888

89-
// Multisample
90-
protected _hasMultisampleChanged: boolean;
91-
protected _multisample: number;
92-
public set multisample(value: number) {
93-
if (this._multisample !== value) {
94-
this._multisample = value;
95-
this._hasMultisampleChanged = true;
96-
}
97-
}
98-
public get multisample(): number { return this._multisample; }
99-
10089
// Visual collections
10190
public atlasVisuals: IAtlasVisual[];
10291
public imageVisuals: IImageVisual[];
@@ -287,9 +276,6 @@ export abstract class Renderer {
287276
this._renderMode = options?.renderMode ?? Config.renderMode;
288277
this._idSource = Config.idSource;
289278

290-
// Multisample
291-
this._multisample = Config.multisample;
292-
293279
// Camera
294280
this._cameraMode = Config.cameraMode;
295281
this._cameraPosition = vector3.clone(Config.cameraPosition);

renderers/webgpuraytrace/src/main.ts

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ export class Main extends Core.Renderer {
3838
private _computeColorPipeline: GPUComputePipeline;
3939
private _computeNormalDepthPipeline: GPUComputePipeline;
4040
private _computeSegmentPipeline: GPUComputePipeline;
41-
private _computeTexturePipeline: GPUComputePipeline;
4241
private _computeBindGroup1Layout: GPUBindGroupLayout
4342
private _computeBindGroup2Layout: GPUBindGroupLayout
4443
private _computeBindGroup3Layout: GPUBindGroupLayout
@@ -51,7 +50,6 @@ export class Main extends Core.Renderer {
5150
private _quadNormalPipeline: GPURenderPipeline;
5251
private _quadDepthPipeline: GPURenderPipeline;
5352
private _quadSegmentPipeline: GPURenderPipeline;
54-
private _quadTexturePipeline: GPURenderPipeline;
5553
private _quadEdgePipeline: GPURenderPipeline;
5654
private _quadBindGroup1: GPUBindGroup;
5755
private _quadBindGroup2: GPUBindGroup;
@@ -352,13 +350,11 @@ export class Main extends Core.Renderer {
352350
computeColorPipeline,
353351
computeNormalDepthPipeline,
354352
computeSegmentPipeline,
355-
computeTexturePipeline,
356353
clearPipeline,
357354
quadPipeline,
358355
quadNormalPipeline,
359356
quadDepthPipeline,
360357
quadSegmentPipeline,
361-
quadTexturePipeline,
362358
quadEdgePipeline,
363359
] = await Promise.all([
364360
// Compute pipelines
@@ -382,11 +378,6 @@ export class Main extends Core.Renderer {
382378
layout: this._computePipelineLayout,
383379
compute: { module: computeModule, entryPoint: "segment" },
384380
}),
385-
this._device.createComputePipelineAsync({
386-
label: "Texture pipeline descriptor",
387-
layout: this._computePipelineLayout,
388-
compute: { module: computeModule, entryPoint: "texture" },
389-
}),
390381
this._device.createComputePipelineAsync({
391382
label: "Clear pipeline descriptor",
392383
layout: clearPipelineLayout,
@@ -421,13 +412,6 @@ export class Main extends Core.Renderer {
421412
fragment: { module: quadModule, entryPoint: "frag_segment", targets: [colorState] },
422413
primitive: primitive,
423414
}),
424-
this._device.createRenderPipelineAsync({
425-
label: "Quad texture pipeline descriptor",
426-
layout: quadPipelineLayout,
427-
vertex: vertex,
428-
fragment: { module: quadModule, entryPoint: "frag_texture", targets: [colorState] },
429-
primitive: primitive,
430-
}),
431415
this._device.createRenderPipelineAsync({
432416
label: "Quad edge pipeline descriptor",
433417
layout: quadPipelineLayout,
@@ -442,13 +426,11 @@ export class Main extends Core.Renderer {
442426
this._computeColorPipeline = computeColorPipeline;
443427
this._computeNormalDepthPipeline = computeNormalDepthPipeline;
444428
this._computeSegmentPipeline = computeSegmentPipeline;
445-
this._computeTexturePipeline = computeTexturePipeline;
446429
this._clearPipeline = clearPipeline;
447430
this._quadPipeline = quadPipeline;
448431
this._quadNormalPipeline = quadNormalPipeline;
449432
this._quadDepthPipeline = quadDepthPipeline;
450433
this._quadSegmentPipeline = quadSegmentPipeline;
451-
this._quadTexturePipeline = quadTexturePipeline;
452434
this._quadEdgePipeline = quadEdgePipeline;
453435
console.log(`WebGPU pipelines created ${Core.Time.formatDuration(performance.now() - start)}`);
454436

@@ -574,12 +556,6 @@ export class Main extends Core.Renderer {
574556
this._computeUniformBufferData.setCameraTypeId(cameraType);
575557
}
576558

577-
// Multisample mode
578-
if (this._hasMultisampleChanged) {
579-
this._hasMultisampleChanged = false;
580-
this.frameCount = 0; // Reset frame count on multisample change
581-
}
582-
583559
// Camera
584560
// TODO: Move change events to update
585561
if (this._hasCameraChanged) {
@@ -608,14 +584,6 @@ export class Main extends Core.Renderer {
608584
this._computeUniformBufferData.setAmbientColor(this.ambientColor);
609585
this._computeUniformBufferData.setBackgroundColor(this.backgroundColor);
610586

611-
// Color render mode
612-
switch (this._renderMode) {
613-
case "color":
614-
this._computeUniformBufferData.setAperture(0); // Disable aperture for color render mode
615-
this._computeUniformBufferData.setMultisample(this._multisample);
616-
break;
617-
}
618-
619587
// Id source
620588
this._computeUniformBufferData.setIdSource(this._idSource === "pick" ? 1 : 0);
621589
this._device.queue.writeBuffer(this._computeUniformBuffer, 0, this._computeUniformBufferData.buffer, this._computeUniformBufferData.byteOffset, this._computeUniformBufferData.byteLength);
@@ -1062,12 +1030,6 @@ export class Main extends Core.Renderer {
10621030
computePassEncoder.dispatchWorkgroups(dispatchX, dispatchY, 1);
10631031
computePassEncoder.end();
10641032
break;
1065-
// TODO: Remove texture render mode and pipeline, and add a textureType="uv" to the color/raytrace pipeline
1066-
case "texture":
1067-
computePassEncoder.setPipeline(this._computeTexturePipeline);
1068-
computePassEncoder.dispatchWorkgroups(dispatchX, dispatchY, 1);
1069-
computePassEncoder.end();
1070-
break;
10711033
default:
10721034
// Raytrace
10731035
computePassEncoder.setPipeline(this._computePipeline);
@@ -1112,9 +1074,6 @@ export class Main extends Core.Renderer {
11121074
case "edge":
11131075
renderPassEncoder.setPipeline(this._quadEdgePipeline);
11141076
break;
1115-
case "texture":
1116-
renderPassEncoder.setPipeline(this._quadTexturePipeline);
1117-
break;
11181077
}
11191078
renderPassEncoder.setBindGroup(0, this._quadBindGroup1);
11201079
renderPassEncoder.setBindGroup(1, this._quadBindGroup2);

0 commit comments

Comments
 (0)