WebGLRenderer: Allow overrideMaterial to be changed on a per-object b… #21774
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Right now when rendering a scene its override material will only be read once at the start of
renderObjects()
, which means that it cannot be changed e.g. inonBeforeRender()
on a per-render-object basis. But for our G-buffer implementation we wanted to be able to pick an override material based on mesh/material variables likemorphTargets
/morphNormals
orskinning
which would be a bit expensive to enable for all render objects.This patch moves the override material logic into the
renderObject()
method, after the call toonBeforeRender()
, which faciliated us to do this. As a side effect onBeforeRender() now receives the original mesh material as parameter instead of the override material, which is desirable in my opinion.