A Javascript 3D game engine.
Changes:
Matrix4x4.compose
and Matrix4x4.fromQuaternion
Matrix4x4.writeData
and Matrix4x4.writeData4x3
Bugfixes:
Changes:
SomeComponent.dependencies
arrayEntityProxy
MotionBlur
and TAA
post-process effects.InitOptions
: allow rendering motion vector buffer through renderMotionVectors
, accessible in shaders as hx_motionVectorBuffer
.Effect
:
needsMotionVectors
if renderMotionVectors
is trueneedsCameraJitter
Entity
: Added static
property to prevent writing previous transforms when not needed when rendering motion vectorshx_backbuffer
and hx_frontbuffer
to hx_backBuffer
and hx_frontbuffer
for consistencyBlur
: remove numSamples
property and make radius
changeable after constructionRenderer.DebugMode
: Rename .SSAO
to AMBIENT_OCCLUSION
SSAO
Make numSamples
changeable after construction.HBAO
Make numRays
and numSamplesPerRay
changeable after construction.ambient-occlusion
examplemotion-blur
example.taa
exampleRenderer#skipEffects
to RenderCollector
and initialize normal/depth buffer lazily in order not to allocate unnecessary resources.InitOptions#ignoreExtensions
for debuggingSkybox
: add intensity
property (available in shaders by hx_intensity
)Bug fixes:
Mesh.clone
: clone morph targets as wellSceneNode.attach
: Fix assigning arraysEntityEngine
: Fix bug where removing entities from scene would remove other registered entitiesEntity.components
instead of Entity.getComponentsByType
etc).GL.setVertexLayout
as the de facto way to assign vertex attributesVertexLayoutCache
internally to share vertex layout objects between instances, possibly reducing amount of render state changesMeshBatch
to allow rendering multiple instances with a single draw callGL
: Do not require explicit enableVertexArray
callshx_lodRange
vec2 shader uniform, containing MeshInstance
’s lodRangeStart
and lodRangeEnd
Terrain
now extends Entity instead of ComponentTerrain
: change constructor signature and the way the terrain LOD geometry is constructedhx_heightMap
, hx_heightMapSize
, hx_worldSize
passed to material in Terrain.Texture2D
and TextureCube
QuadPartitioning
BasicMaterial
:
translucency
and translucencyMap
billboardMode
Impostor
util to generate basic impostors from meshesLightingModel.Lambert
for diffuse-only lighting.ImpostorPrimitive
META.TIME
property and hx_time
shader uniformTextureUtils.getData
: Do not allow reading back from float textures except to encode greyscale data to rgba (due to Safari not supporting float readbacks)VarianceShadowFilter
: Change default parameters to use full float and reduce bleedingsponza
example model to gltfRenderer.DebugMode
: Replace NORMALS_DEPTH
debug mode with separate NORMALS
and DEPTH
BugFixes:
HCM
: Fix progress notifications when loading mipchainsTouch
: Clear pinch value on touch upRaycaster
: Prevent some false intersections.RenderCollector
: Fix render order hint calculations to work as distance.Raycaster
: Correctly test hierarchy visibilityShader
: Do not insert derivatives extension in shaders when using WebGL 2 contextsDDS
: Fix all half_float
uploads if not supported (Safari)HDR/DDS
: Provide fallback for broken half float texture uploads in SafariEquirectangularTexture
: Provide fallback case when float FBOs aren’t supportedAdditions and changes:
SphericalHarmonicsRGB
class to contain L2 spherical harmonic coefficients for spherical RGB functionsLightProbe
: Replace diffuseTexture
with diffuseSH
, accepting a SphericalHarmonicsRGB
object.DDS
file format support for compressed DXT1, DXT3, DXT5 (when supported by the system) and uncompressed (half) floating point R/RG/RGBA support for both Texture2D
and TextureCube
HDR
file format support.ASH
file format support for spherical harmonics coefficients generated by Knald’s Lys (https://www.knaldtech.com/lys/)CubeRenderer
to render scenes to cube mapCubeCamera
for cube map rendering (also now used in OmniShadowMapRenderer
)EquirectangularTexture.fromCube
methodTextureUtils.getData
method for readbackASH
exporter to helix-io
JPG_EQUIRECTANGULAR
and JPG_HEIGHTMAP
in favor of equiToCube
and heightmap
options for JPG
AssetLoader
: Do not immediately return empty unloaded asset placeholder in order to be able to change returned type on loading. Pass in a target object if a placeholder is required.MeshInstance
: add lodRangeStart and lodRangeEnd to define a range in which the mesh instance is rendered or not.Texture2D
:
TextureCube
: Add mip level parameter to upload functions, remove uploadImagesToMipLevel
methodSceneVisitor
: tell acceptVisitor
whether it’s the main RenderCollector
visitor or not.DynamicLightProbe
CenteredGaussianCurve
: renamed method at
to evaluate
capabilities.HDR_FORMAT
to HDR_DATA_TYPE
helixjs-tools
repository (https://github.com/DerSchmale/helixjs-tools)helix-io
importers to the import
sub-folderBug fixes:
StatsDisplay
: only show triangle count for those on screenHMAT
: Fix bug in light model parsingEquirectangularTexture
: Fix equirectangular to cube projection in FirefoxMaterial.fixedLights
: Fix update of shaders when reassigning an arrayBasicMaterial
: Fix assignment of textures when defining through constructor options objectImporter
and subclasses: Use onFail
signal instead of throwing errorsExamples:
io-hdr
showing how to parse HDR cube maps.multiple-sh-probes
to illustrate multiple blended irradiance probes.HX
0.1.0 file format loader (See the wiki page for file format details)OrthographicCamera
ShowSkeleton
debug componentEntityProxy
that allows instancing entire SceneNode
hierarchiesSkeleton
/SkeletonPose
and MorphPose
to SceneNode
and in order to easily share poses.HMESH
and HCLIP
importers/exportersBasicMaterial
: Added texture scale and offset propertiesComponent
: Changed _invalidateBounds
to invalidateBounds
Entity
: Changed _invalidateBounds
to invalidateBounds
HMAT
: Allow setting built-in lighting modes.LightProbe
: added intensity propertyFixedLitPass
: prevent invisible lights from being renderedMatrix4x4
: fixed pitch and yaw orientations to be consistent with normal axis rotationsNormalTangentGenerator
:
hx_normal
/ hx_tangent
vertex attributes if missinghx_texCoord
attribute when only generating normalsSceneNode
: Fixed propagation of ancestor visibilitySkeletonXFadeNode
: fixed blending of one-shot animationsTouch
: Added TAP input buttonCore:
elementType
property from Material
to Mesh
FixedLightsSystem
that automatically updates materials to use all lights in the scene as fixed lights.function.call
in favor of stored bound functions in performance-critical codeGL.setShader()
EffectPass
now uses .draw()
method, can be used outside of Effect
for simple 2D texture drawingIO:
GLTF
clamped animation keyframesCore:
HX.Input
class to easily map multiple input types to the same actions.HX.Mouse
, HX.MouseLock
, HX.Keyboard
, HX.Touch
, and HX.Gamepad
input types.HX.FloatController
and HX.OrbitController
, HX.FPSController
to use new Input class, and moved them to the examples.HX.getGamepads
, HX.onGamepadConnected
, HX.onGamepadDisconnected
methods to manage HX.Gamepad input types.HX.getVRDisplays
wrapper for navigator.getVRDisplays
for uniformity.HX.VRDisplay
to make handling associated handed VR controllers easier.Physics:
HX_PHYS.CylinderCollider
, HX_PHYS.InvertedBoxCollider
Examples:
TrackedController
and TrackHMDController
as illustrations of how to handle VR controller/headset trackingwebvr-interaction
, using room-scale and controller interaction to WebVRCore:
EntitySystem::scene
propertyEntity::messenger
and Component::broadcast
for entity and inter-component communicationAudioEmitter
playback through messagesPhysics:
RigidComponent
now broadcasts “collision” message with Collision info objectExamples:
physics-basic
example now adds audio to collisions