Changelog
All notable changes to this package will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[4.0.1-preview] - 2018-10-01
Fixed
- Fixed compiler warnings on new mono
[4.0.0-preview] - 2018-09-28
Added
- When you have enabled Gizmos, they now appear correctly in the Game view.
- Added requiresDepthPrepass field to RenderingData struct to tell if the runtime platform requires a depth prepass to generate a camera depth texture.
- The
RenderingData
struct now holds a reference toCullResults
. - When HDR is enabled in the Camera but disabled in the Asset, an information box in the Camera Inspector informs you about it.
- When MSAA is enabled in the Camera but disabled in the Asset, an information box in the Camera Inspector informs you about it.
- Enabled instancing on the terrain shader.
- Sorting of opaque objects now respects camera
opaqueSortMode
setting. - Sorting of opaque objects disables front-to-back sorting flag, when camera settings allow that and the GPU has hidden surface removal.
- LWRP now has a Custom Light Explorer that suits its feature set.
- LWRP now supports Vertex Lit shaders for detail meshes on terrain.
- LWRP now has three interactive Autodesk shaders: Autodesk Interactive, Autodesk Interactive Masked and Autodesk Interactive Transparent.
- [Shader API] The
GetMainLight
andGetAdditionalLight
functions can now compute shadow attenuation and store it in the newshadowAttenuation
field inLightData
struct. - [Shader API] Added a
VertexPositionInputs
struct that contains vertex position in difference spaces (world, view, hclip). - [Shader API] Added a
GetVertexPositionInputs
function to get an initializedVertexPositionInputs
. - [Shader API] Added a
GetPerObjectLightIndex
function to return the per-object index given a for-loop index. - [Shader API] Added a
GetShadowCoord
function that takes aVertexPositionInputs
as input. - [ShaderLibrary] Added VertexNormalInputs struct that contains data for per-pixel normal computation.
- [ShaderLibrary] Added GetVertexNormalInputs function to return an initialized VertexNormalInputs.
Changed
- The
RenderingData
struct is now read-only. ScriptableRenderer
always performs a Clear before callingIRendererSetup::Setup.
ScriptableRenderPass::Execute
no longer takesCullResults
as input. Instead, useRenderingData
as input, since that referencesCullResults
.IRendererSetup_Setup
no longer takesScriptableRenderContext
andCullResults
as input.- Shader includes are now referenced via package relative paths instead of via the deprecated shader export path mechanism https://docs.unity3d.com/2018.3/Documentation/ScriptReference/ShaderIncludePathAttribute.html.
- The LWRP Asset settings were re-organized to be more clear.
- Vertex lighting now controls if additional lights should be shaded per-vertex or per-pixel.
- Renamed all
Local Lights
nomenclature toAdditional Lights
. - Changed shader naming to conform to our SRP shader code convention.
- [Shader API] Renamed
SpotAttenuation
function toAngleAttenuation
. - [Shader API] Renamed
_SHADOWS_ENABLED
keyword to_MAIN_LIGHT_SHADOWS
- [Shader API] Renamed
_SHADOWS_CASCADE
keyword to_MAIN_LIGHT_SHADOWS_CASCADE
- [Shader API] Renamed
_VERTEX_LIGHTS
keyword to_ADDITIONAL_LIGHTS_VERTEX
. - [Shader API] Renamed
_LOCAL_SHADOWS_ENABLED
to_ADDITIONAL_LIGHT_SHADOWS
- [Shader API] Renamed
GetLight
function toGetAdditionalLight
. - [Shader API] Renamed
GetPixelLightCount
function toGetAdditionalLightsCount
. - [Shader API] Renamed
attenuation
todistanceAttenuation
inLightData
. - [Shader API] Renamed
GetLocalLightShadowStrength
function toGetAdditionalLightShadowStrength
. - [Shader API] Renamed
SampleScreenSpaceShadowMap
functions toSampleScreenSpaceShadowmap
. - [Shader API] Renamed
MainLightRealtimeShadowAttenuation
function toMainLightRealtimeShadow
. - [Shader API] Renamed light constants from
Directional
andLocal
toMainLight
andAdditionalLights
. - [Shader API] Renamed
GetLocalLightShadowSamplingData
function toGetAdditionalLightShadowSamplingData
. - [Shader API] Removed OUTPUT_NORMAL macro.
- [Shader API] Removed
lightIndex
andsubstractiveAttenuation
fromLightData
. - [Shader API] Removed
ComputeShadowCoord
function.GetShadowCoord
is provided instead. - All
LightweightPipeline
references in API and classes are now namedLightweightRenderPipeline
. - Files no longer have the
Lightweight
prefix. - Renamed Physically Based shaders to
Lit
,ParticlesLit
, andTerrainLit
. - Renamed Simple Lighting shaders to
SimpleLit
, andParticlesSimpleLit
. - [ShaderLibrary] Renamed
InputSurfacePBR.hlsl
,InputSurfaceSimple.hlsl
, andInputSurfaceUnlit
toLitInput.hlsl
,SimpleLitInput.hlsl
, andUnlitInput.hlsl
. These files were moved from theShaderLibrary
folder to theShaders
. - [ShaderLibrary] Renamed
LightweightPassLit.hlsl
andLightweightPassLitSimple.hlsl
toLitForwardPass.hlsl
andSimpleLitForwardPass.hlsl
. These files were moved from theShaderLibrary
folder toShaders
. - [ShaderLibrary] Renamed
LightweightPassMetaPBR.hlsl
,LightweightPassMetaSimple.hlsl
andLighweightPassMetaUnlit
toLitMetaPass.hlsl
,SimpleLitMetaPass.hlsl
andUnlitMetaPass.hlsl
. These files were moved from theShaderLibrary
folder toShaders
. - [ShaderLibrary] Renamed
LightweightPassShadow.hlsl
toShadowCasterPass.hlsl
. This file was moved to theShaders
folder. - [ShaderLibrary] Renamed
LightweightPassDepthOnly.hlsl
toDepthOnlyPass.hlsl
. This file was moved to theShaders
folder. - [ShaderLibrary] Renamed
InputSurfaceTerrain.hlsl
toTerrainLitInput.hlsl
. This file was moved to theShaders
folder. - [ShaderLibrary] Renamed
LightweightPassLitTerrain.hlsl
toTerrainLitPases.hlsl
. This file was moved to theShaders
folder. - [ShaderLibrary] Renamed
ParticlesPBR.hlsl
toParticlesLitInput.hlsl
. This file was moved to theShaders
folder. - [ShaderLibrary] Renamed
InputSurfacePBR.hlsl
toLitInput.hlsl
. This file was moved to theShaders
folder. - [ShaderLibrary] Renamed
InputSurfaceUnlit.hlsl
toUnlitInput.hlsl
. This file was moved to theShaders
folder. - [ShaderLibrary] Renamed
InputBuiltin.hlsl
toUnityInput.hlsl
. - [ShaderLibrary] Renamed
LightweightPassMetaCommon.hlsl
toMetaInput.hlsl
. - [ShaderLibrary] Renamed
InputSurfaceCommon.hlsl
toSurfaceInput.hlsl
. - [ShaderLibrary] Removed LightInput struct and GetLightDirectionAndAttenuation. Use GetAdditionalLight function instead.
- [ShaderLibrary] Removed ApplyFog and ApplyFogColor functions. Use MixFog and MixFogColor instead.
- [ShaderLibrary] Removed TangentWorldToNormal function. Use TransformTangentToWorld instead.
- [ShaderLibrary] Removed view direction normalization functions. View direction should always be normalized per pixel for accurate results.
- [ShaderLibrary] Renamed FragmentNormalWS function to NormalizeNormalPerPixel.
Fixed
- If you have more than 16 lights in a scene, LWRP no longer causes random glitches while rendering lights.
- The Unlit shader now samples Global Illumination correctly.
- The Inspector window for the Unlit shader now displays correctly.
- Reduced GC pressure by removing several per-frame memory allocations.
- The tooltip for the the camera MSAA property now appears correctly.
- Fixed multiple C# code analysis rule violations.
- The fullscreen mesh is no longer recreated upon every call to
ScriptableRenderer.fullscreenMesh
.
[3.3.0-preview]
Added
- Added callbacks to LWRP that can be attached to a camera (IBeforeCameraRender, IAfterDepthPrePass, IAfterOpaquePass, IAfterOpaquePostProcess, IAfterSkyboxPass, IAfterTransparentPass, IAfterRender)
Changed
- Clean up LWRP creation of render textures. If we are not going straight to screen ensure that we create both depth and color targets.
- UNITY_DECLARE_FRAMEBUFFER_INPUT and UNITY_READ_FRAMEBUFFER_INPUT macros were added. They are necessary for reading transient attachments.
- UNITY_MATRIX_I_VP is now defined.
- Renamed LightweightForwardRenderer to ScriptableRenderer.
- Moved all light constants to _LightBuffer CBUFFER. Now _PerCamera CBUFFER contains all other per camera constants.
- Change real-time attenuation to inverse square.
- Change attenuation for baked GI to inverse square, to match real-time attenuation.
- Small optimization in light attenuation shader code.
Fixed
- Lightweight Unlit shader UI doesn't throw an error about missing receive shadow property anymore.
[3.2.0-preview]
Changed
- Receive Shadows property is now exposed in the material instead of in the renderer.
- The UI for Lightweight asset has been updated with new categories. A more clean structure and foldouts has been added to keep things organized.
Fixed
- Shadow casters are now properly culled per cascade. (case 1059142)
- Rendering no longer breaks when Android platform is selected in Build Settings. (case 1058812)
- Scriptable passes no longer have missing material references. Now they access cached materials in the renderer.(case 1061353)
- When you change a Shadow Cascade option in the Pipeline Asset, this no longer warns you that you've exceeded the array size for the _WorldToShadow property.
- Terrain shader optimizations.
[3.1.0-preview]
Fixed
- Fixed assert errors caused by multi spot lights
- Fixed LWRP-DirectionalShadowConstantBuffer params setting
[3.0.0-preview]
Added
- Added camera additional data component to control shadows, depth and color texture.
- pipeline now uses XRSEttings.eyeTextureResolutionScale as renderScale when in XR.
- New pass architecture. Allows for custom passes to be written and then used on a per camera basis in LWRP
Changed
- Shadow rendering has been optimized for the Mali Utgard architecture by removing indexing and avoiding divisions for orthographic projections. This reduces the frame time by 25% on the Overdraw benchmark.
- Removed 7x7 tent filtering when using cascades.
- Screenspace shadow resolve is now only done when rendering shadow cascades.
- Updated the UI for the Lighweight pipeline asset.
- Update assembly definitions to output assemblies that match Unity naming convention (Unity.*).
Fixed
- Post-processing now works with VR on PC.
- PS4 compiler error
- Fixed VR multiview rendering by forcing MSAA to be off. There's a current issue in engine that breaks MSAA and Texture2DArray.
- Fixed UnityPerDraw CB layout
- GLCore compute buffer compiler error
- Occlusion strength not being applied on LW standard shaders
- CopyDepth pass is being called even when a depth from prepass is available
- GLES2 shader compiler error in IntegrationTests
- Can't set RenderScale and ShadowDistance by script
- VR Single Pass Instancing shadows
- Fixed compilation errors on Nintendo Switch (limited XRSetting support).
[2.0.0-preview]
Added
- Explicit render target load/store actions were added to improve tile utilization
- Camera opaque color can be requested on the pipeline asset. It can be accessed in the shader by defining a _CameraOpaqueTexture. This can be used as an alternative to GrabPass.
- Dynamic Batching can be enabled in the pipeline asset
- Pipeline now strips unused or invalid variants and passes based on selected pipeline capabilities in the asset. This reduces build and memory consuption on target.
- Shader stripping settings were added to pipeline asset
Changed
Pipeline
- Pipeline code is now more modular and extensible. A ForwardRenderer class is initialized by the pipeline with RenderingData and it's responsible for enqueueing and executing passes. In the future pluggable renderers will be supported.
- On mobile 1 directional light + up to 4 local lights (point or spot) are computed
- On other platforms 1 directional light + up to 8 local lights are computed
- Multiple shadow casting lights are supported. Currently only 1 directional + 4 spots light shadows. #### Shading Framework
- Directional Lights are always considered a main light in shader. They have a fast shading path with no branching and no indexing.
- GetMainLight() is provided in shader to initialize Light struct with main light shading data.
- Directional lights have a dedicated shadowmap for performance reasons. Shadow coord always comes from interpolator.
- MainLigthRealtimeShadowAttenuation(float4 shadowCoord) is provided to compute main light realtime shadows.
- Spot and Point lights are always shaded in the light loop. Branching on uniform and indexing happens when shading them.
- GetLight(half index, float3 positionWS) is provided in shader to initialize Light struct for spot and point lights.
- Spot light shadows are baked into a single shadow atlas.
- Shadow coord for spot lights is always computed on fragment.
- Use LocalLightShadowAttenuation(int lightIndex, float3 positionWS) to comppute realtime shadows for spot lights.
Fixed
- Issue that was causing VR on Android to render black
- Camera viewport issues
- UWP build issues
- Prevent nested camera rendering in the pipeline
[1.1.4-preview]
Added
- Terrain and grass shaders ported
- Updated materials and shader default albedo and specular color to midgrey.
- Exposed _ScaledScreenParams to shader. It works the same as _ScreenParams but takes pipeline RenderScale into consideration
- Performance Improvements in mobile
Fixed
- SRP Shader library issue that was causing all constants to be highp in mobile
- shader error that prevented LWRP to build to UWP
- shader compilation errors in Linux due to case sensitive includes
- Rendering Texture flipping issue
- Standard Particles shader cutout and blending modes
- crash caused by using projectors
- issue that was causing Shadow Strength to not be computed on mobile
- Material Upgrader issue that caused editor to SoftLocks
- GI in Unlit shader
- Null reference in the Unlit material shader GUI
[1.1.2-preview]
Changed
- Performance improvements in mobile
Fixed
- Shadows on GLES 2.0
- CPU performance regression in shadow rendering
- Alpha clip shadow issues
- Unmatched command buffer error message
- Null reference exception caused by missing resource in LWRP
- Issue that was causing Camera clear flags was being ignored in mobile
[1.1.1-preview]
Added
- Added Cascade Split selection UI
- Added SHADER_HINT_NICE_QUALITY. If user defines this to 1 in the shader Lightweight pipeline will favor quality even on mobile platforms.
Changed
- Shadowmap uses 16bit format instead of 32bit.
- Small shader performance improvements
Fixed
- Subtractive Mode
- Shadow Distance does not accept negative values anymore
[0.1.24]
Added
- Added Light abstraction layer on lightweight shader library.
- Added HDR global setting on pipeline asset.
- Added Soft Particles settings on pipeline asset.
- Ported particles shaders to SRP library
Changed
- HDR RT now uses what format is configured in Tier settings.
- Refactored lightweight standard shaders and shader library to improve ease of use.
- Optimized tile LOAD op on mobile.
- Reduced GC pressure
- Reduced shader variant count by ~56% by improving fog and lightmap keywords
- Converted LW shader library files to use real/half when necessary.
Fixed
- Realtime shadows on OpenGL
- Shader compiler errors in GLES 2.0
- Issue sorting issues when BeforeTransparent custom fx was enabled.
- VR single pass rendering.
- Viewport rendering issues when rendering to backbuffer.
- Viewport rendering issues when rendering to with MSAA turned off.
- Multi-camera rendering.
[0.1.23]
Added
- UI Improvements (Rendering features not supported by LW are hidden)
Changed
- Shaders were ported to the new SRP shader library.
- Constant Buffer refactor to use new Batcher
- Shadow filtering and bias improved.
- Pipeline now updates color constants in gamma when in Gamma colorspace.
- Optimized ALU and CB usage on Shadows.
- Reduced shader variant count by ~33% by improving shadow and light classification keywords
- Default resources were removed from the pipeline asset.
Fixed
- Fixed shader include path when using SRP from package manager.
- Fixed spot light attenuation to match Unity Built-in pipeline.
- Fixed depth pre-pass clearing issue.
[0.1.12]
Added
- Standard Unlit shader now has an option to sample GI.
- Added Material Upgrader for stock Unity Mobile and Legacy Shaders.
- UI improvements
Changed
- Realtime shadow filtering was improved.
Fixed
- Fixed an issue that was including unreferenced shaders in the build.
- Fixed a null reference caused by Particle System component lights.
[0.1.11]
Initial Release.