Browse Source

Fix for material extension when defines not defined, set default min near to 0.5, minor fix.

master
Palash Bansal 2 years ago
parent
commit
49d3ea2a29
No account linked to committer's email address

+ 1
- 0
examples/tweakpane-editor/script.ts View File

FullScreenPlugin, FullScreenPlugin,
GLTFAnimationPlugin, GLTFAnimationPlugin,
HalfFloatType, HalfFloatType,
HemisphereLight,
KTX2LoadPlugin, KTX2LoadPlugin,
KTXLoadPlugin, KTXLoadPlugin,
NormalBufferPlugin, NormalBufferPlugin,

+ 2
- 2
src/core/camera/PerspectiveCamera2.ts View File

* Automatically manage near and far clipping planes based on scene size. * Automatically manage near and far clipping planes based on scene size.
*/ */
@bindToValue({obj: 'userData', onChange: 'setDirty'}) @bindToValue({obj: 'userData', onChange: 'setDirty'})
autoNearFar = true
autoNearFar = true // bound to userData so that it's saved in the glb.


/** /**
* Minimum near clipping plane allowed. (Distance from camera) * Minimum near clipping plane allowed. (Distance from camera)
* @default 0.2 * @default 0.2
*/ */
@bindToValue({obj: 'userData', onChange: 'setDirty'}) @bindToValue({obj: 'userData', onChange: 'setDirty'})
minNearPlane = 0.2
minNearPlane = 0.5
/** /**
* Maximum far clipping plane allowed. (Distance from camera) * Maximum far clipping plane allowed. (Distance from camera)
*/ */

+ 1
- 0
src/core/material/UnlitMaterial.ts View File



constructor({customMaterialExtensions, ...parameters}: MeshBasicMaterialParameters & IMaterialParameters = {}) { constructor({customMaterialExtensions, ...parameters}: MeshBasicMaterialParameters & IMaterialParameters = {}) {
super(parameters) super(parameters)
!this.defines && (this.defines = {})
this.fog = false this.fog = false
this.setDirty = this.setDirty.bind(this) this.setDirty = this.setDirty.bind(this)
if (customMaterialExtensions) this.registerMaterialExtensions(customMaterialExtensions) if (customMaterialExtensions) this.registerMaterialExtensions(customMaterialExtensions)

+ 5
- 5
src/core/object/RootScene.ts View File



private _v1 = new Vector3() private _v1 = new Vector3()
private _v2 = new Vector3() private _v2 = new Vector3()
/** /**
* Refreshes the scene active camera near far values, based on the scene bounding box. * Refreshes the scene active camera near far values, based on the scene bounding box.
* This is called automatically every time the camera is updated. * This is called automatically every time the camera is updated.
const camera = this.mainCamera as ICamera const camera = this.mainCamera as ICamera
if (!camera) return if (!camera) return
if (camera.userData.autoNearFar === false) { if (camera.userData.autoNearFar === false) {
camera.near = camera.userData.minNearPlane ?? 0.2
camera.near = camera.userData.minNearPlane ?? 0.5
camera.far = camera.userData.maxFarPlane ?? 1000 camera.far = camera.userData.maxFarPlane ?? 1000
return return
} }


// new way // new way
const dist1 = Math.max(0.1, -this._v1.normalize().dot(camera.getWorldDirection(new Vector3()))) const dist1 = Math.max(0.1, -this._v1.normalize().dot(camera.getWorldDirection(new Vector3())))
const near = Math.max(camera.userData.minNearPlane ?? 0.2, dist1 * (dist - radius))
const near = Math.max(camera.userData.minNearPlane ?? 0.5, dist1 * (dist - radius))
const far = Math.min(Math.max(near + radius, dist1 * (dist + radius)), camera.userData.maxFarPlane ?? 1000) const far = Math.min(Math.max(near + radius, dist1 * (dist + radius)), camera.userData.maxFarPlane ?? 1000)


// old way, has issues when panning very far from the camera target // old way, has issues when panning very far from the camera target


/** /**
* Minimum Camera near plane * Minimum Camera near plane
* @deprecated - use camera.userData.minNearPlane instead
* @deprecated - use camera.minNearPlane instead
*/ */
get minNearDistance(): number { get minNearDistance(): number {
console.error('minNearDistance is deprecated. Use camera.userData.minNearPlane instead') console.error('minNearDistance is deprecated. Use camera.userData.minNearPlane instead')
return this.mainCamera.userData.minNearPlane ?? 0.02 return this.mainCamera.userData.minNearPlane ?? 0.02
} }
/** /**
* @deprecated - use camera.userData.minNearPlane instead
* @deprecated - use camera.minNearPlane instead
*/ */
set minNearDistance(value: number) { set minNearDistance(value: number) {
console.error('minNearDistance is deprecated. Use camera.userData.minNearPlane instead') console.error('minNearDistance is deprecated. Use camera.userData.minNearPlane instead')

+ 2
- 3
src/materials/MaterialExtender.ts View File

} }


function updateMaterialDefines(defines: MaterialExtension['extraDefines'], material: IMaterial) { function updateMaterialDefines(defines: MaterialExtension['extraDefines'], material: IMaterial) {
if (!defines) return
if (!material.defines) {
console.warn('Material does not have defines', material) // todo: check when material.defines is undefined
if (!defines || !material) return
if (material.defines === undefined || material.defines === null) { // required for some three.js materials
material.defines = {} material.defines = {}
} }
let flag = false let flag = false

Loading…
Cancel
Save