未验证 提交 53e3d53d 编写于 作者: S sunag 提交者: GitHub

NodeMaterial: Material.onUpdate() (#22417)

* move to webgl/nodes

* Add Material.onUpdate()

* WebGLNodes: normal, opacity, emissive, roughness, metalness, clearcoat, clearcoatRoughness

* update node per frame

* remove unnecessary nodeFrame update

* Renamed Material.onUpdate() -> Material.onBeforeRender()
上级 540c0e15
......@@ -12,14 +12,12 @@ Material.prototype.onBuild = function ( parameters, renderer ) {
};
Material.prototype.onUpdate = function ( renderer, scene, camera, geometry, object ) {
Material.prototype.onBeforeRender = function ( renderer, scene, camera, geometry, object ) {
const nodeBuilder = builders.get( this );
if ( nodeBuilder !== undefined ) {
nodeFrame.update();
nodeFrame.material = this;
nodeFrame.camera = camera;
nodeFrame.object = object;
......
......@@ -31,12 +31,13 @@
import { OBJLoader } from './jsm/loaders/OBJLoader.js';
import { RGBELoader } from './jsm/loaders/RGBELoader.js';
import './jsm/renderers/webgl/nodes/WebGLNodes.js';
import { nodeFrame } from './jsm/renderers/webgl/nodes/WebGLNodes.js';
import TextureNode from './jsm/renderers/nodes/inputs/TextureNode.js';
import Vector3Node from './jsm/renderers/nodes/inputs/Vector3Node.js';
import OperatorNode from './jsm/renderers/nodes/math/OperatorNode.js';
import SwitchNode from './jsm/renderers/nodes/utils/SwitchNode.js';
import NormalMapNode from './jsm/renderers/nodes/display/NormalMapNode.js';
let container, stats;
......@@ -101,7 +102,7 @@
material.roughnessNode = new SwitchNode( mpMapNode, 'g' );
material.metalnessNode = new SwitchNode( mpMapNode, 'b' );
material.normalMap = normalMap;
material.normalNode = new NormalMapNode( new TextureNode( normalMap ) );
group.traverse( function ( child ) {
......@@ -197,6 +198,8 @@
requestAnimationFrame( animate );
nodeFrame.update();
controls.update();
renderer.render( scene, camera );
......
......@@ -98,6 +98,8 @@ class Material extends EventDispatcher {
onBuild( /* shaderobject, renderer */ ) {}
onBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}
onBeforeCompile( /* shaderobject, renderer */ ) {}
customProgramCacheKey() {
......
......@@ -1335,6 +1335,8 @@ function WebGLRenderer( parameters = {} ) {
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
material.onBeforeRender( _this, scene, camera, geometry, object, group );
if ( object.isImmediateRenderObject ) {
const program = setProgram( camera, scene, material, object );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册