Skip to content

Commit b161398

Browse files
committed
use derived StandardNodeMaterial class with shader node graph
1 parent 2680e00 commit b161398

File tree

3 files changed

+76
-21
lines changed

3 files changed

+76
-21
lines changed

build/playcanvas-extras.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @license
3-
* PlayCanvas Engine v1.34.0-dev revision adb2a859
3+
* PlayCanvas Engine v1.34.0-dev revision 2680e004
44
* Copyright 2011-2020 PlayCanvas Ltd. All rights reserved.
55
*/
66
(function (global, factory) {

build/playcanvas.js

Lines changed: 65 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @license
3-
* PlayCanvas Engine v1.34.0-dev revision adb2a859
3+
* PlayCanvas Engine v1.34.0-dev revision 2680e004
44
* Copyright 2011-2020 PlayCanvas Ltd. All rights reserved.
55
*/
66
(function (global, factory) {
@@ -447,7 +447,7 @@
447447
return result;
448448
}();
449449
var version = "1.34.0-dev";
450-
var revision = "adb2a859";
450+
var revision = "2680e004";
451451
var config = { };
452452
var common = { };
453453
var apps = { };
@@ -50913,8 +50913,7 @@
5091350913
this.cubeMapMinUniform = new Float32Array(3);
5091450914
this.cubeMapMaxUniform = new Float32Array(3);
5091550915
},
50916-
clone: function () {
50917-
var clone = new StandardMaterial();
50916+
_cloneInternal: function (clone) {
5091850917
Material.prototype._cloneInternal.call(this, clone);
5091950918
var pname;
5092050919
for (var i = 0; i < _propsSerial.length; i++) {
@@ -50931,6 +50930,10 @@
5093150930
}
5093250931
}
5093350932
}
50933+
},
50934+
clone: function () {
50935+
var clone = new StandardMaterial();
50936+
this._cloneInternal(clone);
5093450937
return clone;
5093550938
},
5093650939
_updateMapTransform: function (transform, tiling, offset) {
@@ -50990,11 +50993,6 @@
5099050993
updateUniforms: function () {
5099150994
var uniform;
5099250995
this._clearParameters();
50993-
if (this._shaderGraphChunk)
50994-
{
50995-
var rootShaderGraph = shadergraph_nodeRegistry.getNode(this._shaderGraphChunk);
50996-
rootShaderGraph.updateShaderGraphUniforms(this);
50997-
}
5099850996
this._setParameter('material_ambient', this.ambientUniform);
5099950997
if (!this.diffuseMap || this.diffuseTint) {
5100050998
this._setParameter('material_diffuse', this.diffuseUniform);
@@ -51121,7 +51119,7 @@
5112151119
}
5112251120
this.dirtyColor = false;
5112351121
},
51124-
updateShader: function (device, scene, objDefs, staticLightList, pass, sortedLights) {
51122+
_updateShaderGlobals: function (device, scene) {
5112551123
if (!this._colorProcessed && this._scene) {
5112651124
this._colorProcessed = true;
5112751125
this._processColor();
@@ -51182,15 +51180,16 @@
5118251180
console.log("Can't use prefiltered cubemap: " + allMips + ", " + useTexCubeLod + ", " + prefilteredCubeMap128._levels);
5118351181
}
5118451182
}
51183+
return prefilteredCubeMap128;
51184+
},
51185+
updateShader: function (device, scene, objDefs, staticLightList, pass, sortedLights) {
51186+
var prefilteredCubeMap128 = this._updateShaderGlobals(device, scene);
5118551187
var minimalOptions = pass > SHADER_FORWARDHDR && pass <= SHADER_PICK;
5118651188
var options = minimalOptions ? standard.optionsContextMin : standard.optionsContext;
5118751189
if (minimalOptions)
5118851190
this.shaderOptBuilder.updateMinRef(options, device, scene, this, objDefs, staticLightList, pass, sortedLights, prefilteredCubeMap128);
5118951191
else
5119051192
this.shaderOptBuilder.updateRef(options, device, scene, this, objDefs, staticLightList, pass, sortedLights, prefilteredCubeMap128);
51191-
if (this._shaderGraphChunk) {
51192-
options._shaderGraphChunk = this._shaderGraphChunk;
51193-
}
5119451193
if (this.onUpdateShader) {
5119551194
options = this.onUpdateShader(options);
5119651195
}
@@ -54825,6 +54824,58 @@
5482554824
}
5482654825
};
5482754826

54827+
function StandardNodeMaterial(mat, chunk) {
54828+
StandardMaterial.call(this);
54829+
if (mat)
54830+
{
54831+
StandardMaterial.prototype._cloneInternal.call(mat, this);
54832+
}
54833+
if (chunk)
54834+
{
54835+
this._shaderGraphChunk = chunk.name;
54836+
}
54837+
}
54838+
StandardNodeMaterial.prototype = Object.create(StandardMaterial.prototype);
54839+
StandardNodeMaterial.prototype.constructor = StandardNodeMaterial;
54840+
Object.assign(StandardNodeMaterial.prototype, {
54841+
clone: function () {
54842+
var clone = new StandardNodeMaterial();
54843+
StandardMaterial.prototype._cloneInternal.call(this, clone);
54844+
clone._shaderGraphChunk = this._shaderGraphChunk;
54845+
return clone;
54846+
},
54847+
updateUniforms: function () {
54848+
StandardMaterial.prototype.updateUniforms.call(this);
54849+
if (this._shaderGraphChunk)
54850+
{
54851+
var rootShaderGraph = shadergraph_nodeRegistry.getNode(this._shaderGraphChunk);
54852+
rootShaderGraph.updateShaderGraphUniforms(this);
54853+
}
54854+
},
54855+
updateShader: function (device, scene, objDefs, staticLightList, pass, sortedLights) {
54856+
var prefilteredCubeMap128 = StandardMaterial.prototype._updateShaderGlobals.call(this, device, scene);
54857+
var minimalOptions = pass > SHADER_FORWARDHDR && pass <= SHADER_PICK;
54858+
var options = minimalOptions ? standard.optionsContextMin : standard.optionsContext;
54859+
if (minimalOptions)
54860+
this.shaderOptBuilder.updateMinRef(options, device, scene, this, objDefs, staticLightList, pass, sortedLights, prefilteredCubeMap128);
54861+
else
54862+
this.shaderOptBuilder.updateRef(options, device, scene, this, objDefs, staticLightList, pass, sortedLights, prefilteredCubeMap128);
54863+
if (this._shaderGraphChunk) {
54864+
options._shaderGraphChunk = this._shaderGraphChunk;
54865+
}
54866+
if (this.onUpdateShader) {
54867+
options = this.onUpdateShader(options);
54868+
}
54869+
var library = device.getProgramLibrary();
54870+
this.shader = library.getProgram('standard', options);
54871+
if (!objDefs) {
54872+
this.clearVariants();
54873+
this.variants[0] = this.shader;
54874+
}
54875+
this.dirtyShader = false;
54876+
}
54877+
});
54878+
5482854879
function ResourceHandler() {}
5482954880
Object.assign(ResourceHandler.prototype, {
5483054881
load: function (url, callback, asset) {
@@ -58374,6 +58425,7 @@
5837458425
exports.SpriteComponentSystem = SpriteComponentSystem;
5837558426
exports.SpriteHandler = SpriteHandler;
5837658427
exports.StandardMaterial = StandardMaterial;
58428+
exports.StandardNodeMaterial = StandardNodeMaterial;
5837758429
exports.StencilParameters = StencilParameters;
5837858430
exports.TEXHINT_ASSET = TEXHINT_ASSET;
5837958431
exports.TEXHINT_LIGHTMAP = TEXHINT_LIGHTMAP;

examples/graphics/shader-graph-chunks.html

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,12 @@
8888
//start building shader graph
8989
pc.shadergraph.start(coreNodesJSONString);
9090

91-
//create a custom vertex offset shader graph chunk
92-
var wobbleVSNode = pc.shadergraph.customNode('wobbleVS', document.getElementById("wobbleVS").textContent);
93-
9491
// add time param
9592
var timeParam = pc.shadergraph.param('float', 'uTime', 0.0);
9693

94+
//create a custom vertex offset shader graph chunk
95+
var wobbleVSNode = pc.shadergraph.customNode('wobbleVS', document.getElementById("wobbleVS").textContent);
96+
9797
//hook up custom node inputs
9898
pc.shadergraph.connectCustom(wobbleVSNode, 'wp', pc.shadergraph.worldPosVS);
9999
pc.shadergraph.connectCustom(wobbleVSNode, 'wn', pc.shadergraph.worldNormVS);
@@ -118,16 +118,19 @@
118118
//end graph and assign built graph to chunk
119119
var shaderGraphChunk = pc.shadergraph.end();
120120

121-
var shaderGraphMaterials=[];
122121
//add shaderGraphChunk to each material
122+
var shaderGraphMaterials=[];
123+
123124
model.meshInstances.forEach(function (meshInstance) {
124125
if (!meshInstance.material._shaderGraphChunk)
125126
{
126-
meshInstance.material._shaderGraphChunk = shaderGraphChunk.name;
127+
var shaderGraphMaterial = new pc.StandardNodeMaterial(meshInstance.material, shaderGraphChunk);
128+
shaderGraphMaterials.push(shaderGraphMaterial);
129+
130+
meshInstance.material = shaderGraphMaterial;
131+
127132
meshInstance.material.alphaTest = 0.5;
128133
meshInstance.material.update();
129-
130-
shaderGraphMaterials.push(meshInstance.material);
131134
}
132135
});
133136

0 commit comments

Comments
 (0)