Helixjs Versions Save

A Javascript 3D game engine.

0.6.2

5 years ago

Changes:

  • Some simplifications of RenderItem data
  • Improved performance of Matrix4x4.compose and Matrix4x4.fromQuaternion
  • Skinned animation optimisations:
    • Unify memory layout for skeleton bind matrices for uniforms and textures
    • Reduce copying of bind pose data when uploading to shaders
  • Inlined and removed Matrix4x4.writeData and Matrix4x4.writeData4x3

Bugfixes:

  • Fix invalidation of skeleton matrices
  • Fix broken world matrix assignment for point light shadows

0.6.1

5 years ago

Changes:

  • Components can list other component types it needs to be added to the entity first tthrough a static SomeComponent.dependencies array
  • WebGL 2 tiled rendering: Optimize assignment of point/spot lights to tiles
  • Removed EntityProxy
  • Added MotionBlur and TAA post-process effects.
  • InitOptions: allow rendering motion vector buffer through renderMotionVectors, accessible in shaders as hx_motionVectorBuffer.
  • Effect:
    • Request motion vector buffer with needsMotionVectors if renderMotionVectors is true
    • Request sub-pixel camera jitter with needsCameraJitter
  • Entity: Added static property to prevent writing previous transforms when not needed when rendering motion vectors
  • Change hx_backbuffer and hx_frontbuffer to hx_backBuffer and hx_frontbuffer for consistency
  • Blur: remove numSamples property and make radius changeable after construction
  • Renderer.DebugMode: Rename .SSAO to AMBIENT_OCCLUSION
  • SSAO Make numSamples changeable after construction.
  • HBAO Make numRays and numSamplesPerRay changeable after construction.
  • Created new ambient-occlusion example
  • Created new motion-blur example.
  • Created new taa example
  • Don’t generate normal/depth buffer until required
  • Pass on Renderer#skipEffects to RenderCollector and initialize normal/depth buffer lazily in order not to allocate unnecessary resources.
  • Reintroduce InitOptions#ignoreExtensions for debugging
  • Skybox: add intensity property (available in shaders by hx_intensity)

Bug fixes:

  • Mesh.clone: clone morph targets as well
  • Allow meshes without morph targets to be part of a morph setup
  • SceneNode.attach: Fix assigning arrays
  • Fix variance and exponential shadow mapping for platforms that don't support RGB32F render targets
  • EntityEngine: Fix bug where removing entities from scene would remove other registered entities

0.6.0

5 years ago
  • Changed the way components are defined and accessed (through Entity.components instead of Entity.getComponentsByType etc).
  • Optimize entity/component traversal
  • Add GL.setVertexLayout as the de facto way to assign vertex attributes
  • Introduced VertexLayoutCache internally to share vertex layout objects between instances, possibly reducing amount of render state changes
  • Added MeshBatch to allow rendering multiple instances with a single draw call
  • GL: Do not require explicit enableVertexArray calls
  • Create predefined hx_lodRange vec2 shader uniform, containing MeshInstance’s lodRangeStart and lodRangeEnd
  • Terrain now extends Entity instead of Component
  • Terrain: change constructor signature and the way the terrain LOD geometry is constructed
  • Create predefined hx_heightMap, hx_heightMapSize, hx_worldSize passed to material in Terrain.
  • Create abstract Texture base class for Texture2D and TextureCube
  • Added QuadPartitioning
  • BasicMaterial:
    • Added translucency and translucencyMap
    • Added billboardMode
  • Added Impostor util to generate basic impostors from meshes
  • Added LightingModel.Lambert for diffuse-only lighting.
  • Updated terrain example with trees and grass
  • Created ImpostorPrimitive
  • Added META.TIME property and hx_time shader uniform
  • TextureUtils.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 bleeding
  • Change sponza example model to gltf
  • Renderer.DebugMode: Replace NORMALS_DEPTH debug mode with separate NORMALS and DEPTH

BugFixes:

  • HCM: Fix progress notifications when loading mipchains
  • Touch: Clear pinch value on touch up
  • Raycaster: Prevent some false intersections.
  • RenderCollector: Fix render order hint calculations to work as distance.
  • Raycaster: Correctly test hierarchy visibility
  • Prevent infinite bounds from affecting shadow bounds
  • Shader: Do not insert derivatives extension in shaders when using WebGL 2 contexts
  • DDS: Fix all half_float uploads if not supported (Safari)
  • Fix ambient occlusion shaders when using WebGL 2 contexts

0.5.1

5 years ago
  • Fix Mouse input for Safari
  • Fix SH summation in shader due to iOS glsl bugs
  • HDR/DDS: Provide fallback for broken half float texture uploads in Safari
  • EquirectangularTexture: Provide fallback case when float FBOs aren’t supported

0.5.0

5 years ago

Additions and changes:

  • Added SphericalHarmonicsRGB class to contain L2 spherical harmonic coefficients for spherical RGB functions
  • LightProbe: Replace diffuseTexture with diffuseSH, accepting a SphericalHarmonicsRGB object.
  • Support blending of multiple light probes.
  • Added 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
  • Added HDR file format support.
  • Added ASH file format support for spherical harmonics coefficients generated by Knald’s Lys (https://www.knaldtech.com/lys/)
  • Added CubeRenderer to render scenes to cube map
  • Added CubeCamera for cube map rendering (also now used in OmniShadowMapRenderer)
  • Added EquirectangularTexture.fromCube method
  • Added TextureUtils.getData method for readback
  • Added ASH exporter to helix-io
  • Removed 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:
    • Add mip level parameter to upload functions
    • Flip vertical orientation for uploaded images
  • TextureCube: Add mip level parameter to upload functions, remove uploadImagesToMipLevel method
  • SceneVisitor: tell acceptVisitor whether it’s the main RenderCollector visitor or not.
  • Removed DynamicLightProbe
  • CenteredGaussianCurve: renamed method at to evaluate
  • Renamed all occurrences of “clustered” to “tiled” for the webgl2 rendering path
  • Renamed ill-named capabilities.HDR_FORMAT to HDR_DATA_TYPE
  • Moved blender exporter to helixjs-tools repository (https://github.com/DerSchmale/helixjs-tools)
  • Moved helix-io importers to the import sub-folder

Bug fixes:

  • StatsDisplay: only show triangle count for those on screen
  • HMAT: Fix bug in light model parsing
  • EquirectangularTexture: Fix equirectangular to cube projection in Firefox
  • Material.fixedLights: Fix update of shaders when reassigning an array
  • BasicMaterial: Fix assignment of textures when defining through constructor options object
  • Importer and subclasses: Use onFail signal instead of throwing errors

Examples:

  • Replaced all irradiance maps with SH representations.
  • Added io-hdr showing how to parse HDR cube maps.
  • Added multiple-sh-probes to illustrate multiple blended irradiance probes.

0.4.4

5 years ago
  • HX 0.1.0 file format loader (See the wiki page for file format details)
  • Added tools folder with blender exporter
  • Added OrthographicCamera
  • Added ShowSkeleton debug component
  • Added EntityProxy that allows instancing entire SceneNode hierarchies
  • Allow setting Skeleton/SkeletonPose and MorphPose to SceneNode and in order to easily share poses.
  • Removed obsolete HMESH and HCLIP importers/exporters
  • BasicMaterial: Added texture scale and offset properties
  • Component: Changed _invalidateBounds to invalidateBounds
  • Entity: Changed _invalidateBounds to invalidateBounds
  • HMAT: Allow setting built-in lighting modes.
  • LightProbe: added intensity property
  • FixedLitPass: prevent invisible lights from being rendered
  • Matrix4x4: fixed pitch and yaw orientations to be consistent with normal axis rotations
  • NormalTangentGenerator:
    • Add hx_normal / hx_tangent vertex attributes if missing
    • Fixes for missing hx_texCoord attribute when only generating normals
  • SceneNode: Fixed propagation of ancestor visibility
  • SkeletonXFadeNode: fixed blending of one-shot animations
  • Touch: Added TAP input button

0.4.3

5 years ago

Core:

  • Cache shader programs for re-use
  • Loaders now initialise materials to prevent massive material init cost on first render
  • Move elementType property from Material to Mesh
  • Created FixedLightsSystem that automatically updates materials to use all lights in the scene as fixed lights.
  • Internal refactoring:
    • Trimming of boilerplate code (unnecessary getters/setters)
    • Removed function.call in favor of stored bound functions in performance-critical code
    • Simplify texture and uniform buffer assignments in MaterialPass
    • Shaders are now made active by calling GL.setShader()
    • EffectPass now uses .draw() method, can be used outside of Effect for simple 2D texture drawing

IO:

  • Fix GLTF clamped animation keyframes

0.4.2

5 years ago

Core:

  • Added HX.Input class to easily map multiple input types to the same actions.
  • Added HX.Mouse, HX.MouseLock, HX.Keyboard, HX.Touch, and HX.Gamepad input types.
  • Refactored HX.FloatController and HX.OrbitController, HX.FPSController to use new Input class, and moved them to the examples.
  • Provided a HX.getGamepads, HX.onGamepadConnected, HX.onGamepadDisconnected methods to manage HX.Gamepad input types.
  • Provided a HX.getVRDisplays wrapper for navigator.getVRDisplays for uniformity.
  • Add signals to HX.VRDisplay to make handling associated handed VR controllers easier.
  • Fix PCF shadow offsets.
  • Fix partition unassignment when detaching objects.
  • Assorted bugfixes

Physics:

  • Added HX_PHYS.CylinderCollider, HX_PHYS.InvertedBoxCollider
  • Handle non-root objects correctly in physics, optimize updates for objects that haven’t moved

Examples:

  • Added TrackedController and TrackHMDController as illustrations of how to handle VR controller/headset tracking
  • Added webvr-interaction, using room-scale and controller interaction to WebVR

0.4.1

5 years ago

Core:

  • Added EntitySystem::scene property
  • Added Entity::messenger and Component::broadcast for entity and inter-component communication
  • Allow triggering AudioEmitter playback through messages

Physics:

  • RigidComponent now broadcasts “collision” message with Collision info object

Examples:

  • physics-basic example now adds audio to collisions

0.4.0

5 years ago
  • Added WebVR support
  • Converted LayeredAnimation to a cloneable Component
  • Change copyTo to copyFrom: methods should only change their owner’s state
  • Added Audio support through AudioListener and AudioEmitter