- Use the existing auto detection of penetrators to add them to exclusions instead of trying to do partial optimizations on them.
- Fix meshes with different cast & receive shadow settings getting merged together.
- Fix ParticleSystems with skinned mesh renderer shape breaking when merging meshes & materials.
- Fix shader analyzer not handling
_fragment
and other per pass suffixes forshader_feature
pragmas. - Fix shader analyzer parsing ShaderLab case sensitive even though its not supposed to be. (more)
- Fix crash when the avatar has a skinned mesh with out of bounds bone indices. (more)
- Generated shaders and materials are now stripped of all properties that got baked into the shader.
- This reduces avatar download and uncompressed size slightly.
- Reduced the amount of shader variants generated when using
Write Properties as Static Values
.- Forward base passes don't generate variants without the
LIGHTPROBE_SH
keyword anymore. - Materials with render queue > 2500 don't generate any shadow related variants.
- Forward base passes don't generate variants without the
- Generated shader names now have a hash suffix.
Keep MMD Blend Shapes
is nowMMD Compatibility
and also prevents the first 3 fx layers to get merged or deleted. (more)- Rewrote handling of material property animations with WD ON while using
Shader Toggles
.- It now tracks which meshes are animated and put those into a mask in the material instead of checking for NaN values.
- Automatically add the mesh of RealKissSystem to exclusions internally.
- Copy the toggle
Normalized Blend Values
of direct blend trees. (more) - Fix
FindAllPhysBoneDependencies
not checking VRCConstraints or FinalIK components. (more) - Fix animation bindings of the base type
Renderer
not getting respected properly. (more) - Shader parser now handles
ColorMask 0
passes with no code block correctly and throws a parse error for other non code block passes. - Fix optimizer not checking all the animator controllers in the avatar descriptor for some things.
- Fix special animation layers not getting updated animation clips.
- Layers with only a off animation no longer block default disabled meshes from using NaNimation. (more)
- Fix
IsAnimatableBinding
not checking if the bindings type is a base type of the component types.
- Add support for VRChat constraints.
- Add support for FinalIK components with the
Delete Unused GameObjects
option. (more) - Add support for material variants. (more)
- Add support for global
Packages
include paths for local packages. - Add support for prefab variants. (more)
- Changed default settings to match the
Basic
preset. Optimize on Upload
is now calledApply on Upload
.- Generated shader include files now have more readable names than just hashes.
- Fix viseme blendshapes and eyelid blendshapes sometimes not getting reassigned correctly if they aren't on a mesh named
Body
. - Fix crash with missing scripts on the avatar.
- Fix the hardcoded
_VirtualLens_Root
exclusion not working for theDelete Unused GameObjects
option. - Fix shader optimizer not handling shaders correctly that declare
_LightColor0
or_SpecColor
manually instead of using the unity include. (more)
- Strip Meta pass from shaders that have it.
- Moved the code to ensure texture samplers exist at the end of the fragment instead of the beginning.
- This improves performance with poi fur.
- Shaders that don't end in
.shader
or.orlshader
are now explicitly marked as not supported.
- Fix shader analyzer not parsing default values for function parameters. (more)
- Fix
Merge Same Dimension Textures
merging textures with different filter or wrap settings. - Fix
Delete Unused GameObjects
not marking the phys bone root as moving when it has multiple children that are all but one ignored.
- Removing unused bindings from clips only checks for specific property existence for Renderer bindings. All other types just check if the component exists for now.
- Fix
RenderersHaveSameAnimationCurves
only checking if the keyframe values match and ignoring the keyframe times. - Fix removing unused animation clip bindings not respecting the Exclusions list.
- Add global setting
MotionTimeApproximationSampleCount
to adjust the amount of samples used for the motion time approximation.
- Fix texture merging default value parsing not working.
- Fix global includes with leading slash like
/Assets/...
not working. (more) - Fix texture tile and offset values being wrong when materials get merged with different values.
- Only apply the rescaling of bones during mesh combining to bones that have scale animations. (more)
- Fix crash when the root Animator component has no avatar assigned to it. (more)
- Fix fx layer 0 getting deleted when it has states or will be the only layer. (more)
- Fix mesh combining bone scale fix not normalizing the scale of all the parents of the bones during bake.
- Fix scaled bones not getting treated as "moving" bone when combining meshes.
Delete Unused GameObjects
prepends the name of the deleted GameObject to the name of its children.
- Automatically add
_VirtualLens_Root
to exclusions so it doesn't break when running the optimizer. - Fix shader optimizer breaking on shaders that have no
Properties
block. - Change generated animations to use
EditorCurveBinding.FloatCurve
instead ofEditorCurveBinding.DiscreteCurve
. (more)- This fixes issues with GoGoLoco & NaNimation keep default enabled state in unity 2022.3.22f1.
- Fix mesh combining breaking when bones are scaled down by default.
- Fix bounding box of mesh combining being off when the root transform is not at the origin.
- Fix ShaderAnalyzer not inline including absolute paths that start with
Assets/
. - Fix empty Properties block not getting parsed correctly.
- Fix
#pragma shader_feature
only getting replaced by defining the keywords instead of defining them as a true value. - Fix always disabled ParticleSystemRenderers getting deleted when
Delete Unused Components
is enabled. (more)- Somehow the ParticleSystemRenderer component is important for the particle system to work even if it is disabled. Maybe something about sub emitters? idk
- Fix
VRCAnimatorPlayAudio
not getting its source path adjusted when usingDelete Unused GameObjects
. (more)
- Add support for
VRCHeadChop
component. - Add support for
VRCAnimatorPlayAudio
state machine behavior.
- Add timing of shader parse to single shader or material instead of just for whole folder parses in the Shader Analyzer Debugger.
- Improved shader parser performance massively by doing simple checks instead of using
.StartsWith()
&.EndsWith()
everywhere and replacing some left over regex with string operations.
- Fix wire frame showing up on materials on AMD gpus sometimes. (hopefully its gone for good)
- Fix first merged material blob on mesh generating all the animated property arrays instead of only the ones that are used by the meshes in the blob.
- Fix
#include_with_pragmas
not getting parsed correctly. (more) - Fix
HLSLPROGRAM
not working sinceUnityLightingCommon.cginc
got always included and it hasfixed4
variable declarations. - Fix first timing check for the UI not working correctly and upping the disable of the auto refresh to exceeding the time limit 3 times to give the JIT more time to optimize.
- Fix SPS penetrators getting jumbled up by
Mesh.Optimize()
(more)- This still isn't full support for SPS yet so if it still doesn't work put the penetrator in the exclusion list.
- Fix BoxCollider animation bindings getting thrown away for the BoxCollider that gets implicitly added by VRCStation components. (more)
- Fix Texture2D_ST material property animations not working when using the
Use Shader Toggles
option.
- Fix root animator parameter animations getting removed as non animatable binding. (more)
- Mark all bindings that reference a transform as animatable as long as the transform exists on the avatar.
This is because there are more animatable bindings than the AnimationUtility tells us about. Thanks Haï~ for linking me to this. - Mark all material property animations as animatable when the target path is affected by any material swap animation.
- Add auto settings for Shader and NaNimation toggles that disable them if the avatar has more than 150k tris.
- Also shows a warning if Shader or NaNimation toggles are enabled and the avatar has more than 150k tris.
- Always remove animation curves which reference a binding that doesn't exist on the avatar.
- Swap
OnPreprocessTexture
toOnPreprocessAsset
to stop the optimizer from triggering a full project all texture reimport in unity 2022. (more)- This will trigger one last full texture reimport if you already used the optimizer in unity 2022 :(
- Remove option
Merge Cull Back with Cull Off
, just set the culling of your materials to off if you want to merge them. - Reduced generated shader complexity handling material property animations:
- When Shader or NaNimation toggles are enabled, it will still perform a basic merge of meshes that get animated in the same way.
- When all meshes in a merged mesh blob have material properties animated in the same way, it will no longer split the properties into separated properties.
This helps immensely when using global material adjustments like for example color, hue or brightness radials.
- Fix materials getting merged even if they have different
VRCFallback
shaders set. - Fix copy of old material property animation when it is a color property.
- Fix optimizer always injecting the animated property disambiguation code on merged material blobs that have at least one material that comes from the combined mesh path.
- Don't generate default properties which have names that are invalid ShaderLab property names. (more)
- Fix always disabled renderer components not getting deleted before mesh merging happens.
- Added BC6H & DXT1 compression to normal maps in the texture compression analyzer.
- Fix mesh disappearing locally when NaNimation is enabled and the mesh has the Head or one of its children as the root bone.
- Fix shaderlab
Int
parameters actually getting written as an int. "Obviously" they should be written as a float.
- Improved support for poiyomi shaders to better match the lock in logic.
- Add support for
//ifex
parsing which is important for poi 9.0 as it is used to skip entire passes. - Add support for
#if defined(PROP_Texture) || !defined(OPTIMIZER_ENABLED)
macros to skip unused texture properties.
- Add support for
- Massive performance improvements for the perf rank change preview.
- My personal avatar went from 450ms to 35ms. (
AnimatorController.layers
is slow and you should cache it)
- My personal avatar went from 450ms to 35ms. (
- Always merge other meshes into the mesh
Body
if it exists. (more) - Add property filter for the shader analyzer debugger.
Auto Refresh Preview Timeout
now ignores the first time it is over the threshold.- This is because the first time the preview is calculated it takes longer than usual.
- Fix material property animation of the original property not getting the correct
material.
prefix. - Don't duplicate shader functions with a
Texture2DArray
parameter. - Fix detection of cull ShaderLab property and disable merge with off when there is more than one cull property.
- Fix crash when a MeshRenderer has no MeshFilter on the same GameObject. (more)
- Fix
Delete Unused GameObjects
not marking the global phys bone collider transforms as used. - Fix sort order of which mesh should get priority for getting merged into.
- Fix WD ON workflow toggles not stopping NaNimation when
Optimize FX Layer
is disabled. - Fix NaNimation getting blocked by WD ON workflow even for meshes that are on by default.
- Don't normalize normals & tangents when merging meshes. This fixes outlines that are dependent on the normal length to determine mesh scale.
- Clamp blendshape value to 0-100 when baking the blendshape to match in-game blendshape clamping.
- Fix crash when no fxlayer is present.
- Fix non shader or NaNimation toggles getting broken.
- Fix it not working in unity 2019
- Add new way to toggle merged meshes
NaNimation
.- This allows merging meshes that have shaders that don't support shader toggles.
- Add sub option
Keep Default Enabled State
which only merges meshes that have the same default enabled state. - Add sub option
Allow 3 Bone Skinning
which allows NaNimation on all meshes by reducing the skinning quality on meshes that use 4 bone weights.
- Add sub option
Merge MainTex
that decides whether the_MainTex
property is allowed to be merged into a texture array. (more)
- No longer put the dummy animation clip in empty states. (more)
- Add debug list
Mesh Bone Weight Stats
. - Add debug list and validation info for when some meshes can't use NaNimation because of missing on or off animations.
- Collapsed some info boxes regarding materials that can't merge into one info box.
- The UI is now disabled when in play mode. This saves performance when testing with av3 emulator without running the optimizer.
- Requires ORL shader generator 6.2 or newer for faster shader parsing of .orlshader files.
- Mesh only uses 1 or 2 bone weight skinning if none of the vertices need more than that. Was always 4 bone weights before.
- Slightly increase the size of the performance rank change icons.
- Minor performance improvements:
- Calculating if materials can merge is faster which speeds up the preview.
- Merging skinned mesh data is faster by pre allocating list capacity and skipping uv sets that don't exist.
- Fix crash when a material name has slashes or other characters that are not allowed in file names.
- Fix crash in 2022 when an extra animator is not humanoid or doesn't have an avatar definition. (more)
- Fix macro to declare
tex##_ST
not being detected as a custom texture property declaration macro. - Fix log spam in 2022 from vector array properties also setting as a float value.
- Fix material property animations on MeshRenderer components that get combined into a SkinnedMeshRenderer still being bound to the MeshRenderer type.
- Fix basic merged mesh blobs also trying to use
Use Shader Toggles
when it is enabled but the shaders don't support it. (more) - Fix non triangle topology meshes not working when merged.
- Fix
Merge Same Ratio Blend Shapes
not working correctly if some ratios had 0 values in them. - Fix crash with Skinned Mesh Renderers that have no mesh assigned to them. (more)
- Fix VRCFury check only checking the root game object and not all children. (more)
- Fix phys bone dependency check only checking the moved transforms and not all children. (more)
- Fix ignored transform in phys bone not being marked as moving despite it being possible thanks to stretch & squish.
- Fix delete unused game objects not registering phys bone ignore transforms as used. (more)
- Fix crash when a static mesh has a missing material and
Write Properties as Static Values
is enabled. (more)
- Remove option
Merge Regardless of Blend Shapes
. It is now always enabled because VRChat now uses unity 2022. - Add debug info for blendshapes that get merged together.
- Fix warning spam in console if a material has Hidden/InternalErrorShader assigned to it.
- Fix jaw flap bone not marked as moving transform. (more)
- When the UI takes longer than 500ms (default value, can be changed in settings) it will disable the auto refresh of the preview and instead shows a manual button to refresh the preview. (more)
- Toggling foldouts no longer refreshes the preview. (more)
- Fix crash when the FX controller has a layer with two states and only one transition with zero conditions. (more)
- Fix crash when something from the exclusion list gets deleted before the optimizer runs or is marked as editor only. (more)
- Fix UI crash when the avatar has a missing script component on the avatar root.
- Fix crash when the avatar uses empty clips with WD ON toggles. (more)
- Fix FX Layer detection for non humanoid rigs. (more)
- Hard code that lilToon shaders are not supported as some of them don't get caught by the automated parsing.
- Blend trees can now also get merged into the direct blend tree when
Optimize FX Layer
is enabled. - Toggle layers can now be merged even when their states are motion time or blend tree based.
- Toggle layers now recognize int params with greater x & less x + 1 as a bool condition. Can only convert int to float if its never used with a not equal condition.
- Toggle layers can now have an arbitrary amount of binary and conditions instead of just 1 or 2.
- Add support for basic multi toggle layers where each state animates the same bindings and all states are only chosen by any state transitions with a single int equals condition.
Combine Motion Time Approximation
now only generates the 25%, 50% & 75% time points if they improve the approximation.
- Fix phys bones getting deleted with
Delete Unused Components
when they only got used for parameters in the animator. - Fix
Merge Different Property Materials
not working whenUse Shader Toggles
is disabled but meshes get merged with the basic merge. - Animators sometimes don't write exact values so change the mesh shader discard to
0.5 > _IsActiveMesh
instead of!_IsActiveMesh
.
- Use a binary serialized object as root asset for meshes, animations & texture2darrays to speed up the asset creation process.
- Fix crash from EditorOnly mesh which is affected by
Disable Phys Bones When Unused
. (more) - Instead of crashing, only log a warning if the original material slot is not found. (more)
- New mode to merge meshes without introducing shader toggles.
- When none of "Use Shader Toggles", "Write Properties as Static Values" or "Merge Different Property Materials" are enabled, the optimizer will no longer generate new shaders at all.
- Support for Android build target by using the above new mode. Also hides those options when the build target is Android.
- Add global setting "Always Optimize on Upload" that applies the default optimization settings to avatars uploaded without the optimizer component.
- Add preset buttons "Basic", "Shader Toggles" & "Full" to the optimizer.
- Remove useless layers from the FXLayer when "Optimize FX Layer" is enabled.
- Add option to combine motion time layers as a piecewise linear 1D tree into the direct blend tree as well.
- Show layer merge errors as tooltips in the "Show FX Layer Merge Results" section.
- Add option to disable phys bones together with the skinned mesh they affect.
- "Optimize FX Layer" can now also merge toggle layers that use two bools.
- Add support for
.orlshader
files from orels-Unity-Shaders - Add basic support for Modular Avatar by changing the callback order to -15 when Modular Avatar is detected.
- "Delete Unused Components" now deletes phys bones whose dependencies all get deleted as well.
- "Merge Skinned Meshes" now only merges skinned meshes that get animated together.
- Added "Use Shader Toggles" option to enable the old behavior.
- Deleted "Keep Material Animations Separate" option. It is now always enabled when "Use Shader Toggles" is enabled.
- Renamed "Merge Simple Toggles as BlendTree" to "Optimize FX Layer".
- "Write Properties as Static Values" is now forced on when "Use Shader Toggles" or "Merge Different Property Materials" is enabled.
- "Delete Unused GameObjects" is now turned off by default. Only the "Full" preset has it enabled.
- Remove "Merge Different Render Queue" option. It was mostly unused and you can simply make the render queues match manually.
- Small optimizations to the generated shaders:
- Changed type of Texture2DArray index from int to float eliminating a type conversion.
- Use ternaries for merged material properties that have only 2 unique values.
- No longer include unity cg include files, instead directly include only UnityLightingCommon.cginc to get the _SpecColor declaration.
- Skip
#if
blocks in the output if the condition is known due toshader_feature
pragmas. - Disable warnings 3557 & 4008 for the generated shaders as they happen quite a lot when constant folding happens.
- Properties only write the actual property name and not the full display name.
- Fix error message when trying to delete an unused AudioSource before its connected VRCSpatialAudioSource.
- Fix boneless skinned meshes ignoring the root bone property.
- Fix inline if return statements in the vertex & geometry shader not getting parsed correctly.
- Fix first mesh of a merged mesh block not checking if one of its parents has game object toggles.
- Fix
Texture2D<float4>
properties not getting parsed correctly. - Fix material merge function only checking for material swaps in the candidate slot and not also the first slot of the existing list.
- Fix merged blendshapes not getting their initial weight set.
- Fix Marshmallow when "Delete Unused GameObjects" is enabled.
- Fix animator copy when the animator is a sub asset. (more)
- Disable Create Optimized Copy button if the avatar has a VRCFury component. Also shows a warning explaining why. (more)
- Fix warning spam in console from "unused" properties in the setting editor.
- Fix tangents being 0 if a mesh with no tangents gets merged with one that has tangents.
- Added tooltips to all toggles and foldouts. They are identical to the descriptions in the readme.
- Added settings window to configure the default settings when adding the optimizer component to an avatar.
- The title of the inspector now shows a shorter name when the window is too small to show the full name.
- Fix crash when trying to create a file with invalid characters in the name. (more)
- Detect if a shader has instancing support and throw a parser exception if it has. This prevents the optimizer from trying to optimize shaders that it can't handle.
- Fix crash with outdated VRC SDK. Disables the Optimize on Upload option and shows an error message instead. (more)
- Fix crash when the avatar has some viseme blendshapes set to
-none-
. (more)
- Fix error when trying to make Texture2DArray with mipmaps disabled.
- Add option to apply optimization on upload instead of creating a copy of the avatar.
- Improved the warning text for locked in materials / unlocked materials depending on the optimization mode.
- Changed warnings for materials that can't merge to info boxes instead of warnings.
- Add TPS support for penetrator detection.
- No longer remove illegal components from the avatar.
- Move Profile Time Used to the top of the debug info section.
- Fix crash when the avatar has multiple non skinned meshes that try to get merged together without any material that can get merged or no skinned mesh in the merge target. (more)
- Fix parser not recognizing
#include
directives with<>
instead of""
. (more) - Fix optimizer ignoring
[gamma]
tags for properties. (more) - Add safeguards around bindpose & bone count mismatch. (more)
- Fix VRChat beta sdk incompatibility because of
GameObject.GetOrAddComponent()
moving namespaces.
- Add option to keep MMD blendshapes intact. (more)
- Apparently
sampler
is also a way to declare aSamplerState
. So now the optimizer also replaces those. - Parse and ignore const keyword in shader function parameters.
- Add option to merge simple toggles in the fx layer into one big direct blend tree.
- Optimizer is now a VPM & UPM compatible package.
- A crash in the optimize function will now show an error message that when clicked opens a link to the github issue tracker.
- Add option to merge blendshapes that get animated in a fixed ratio to each other.
- Remove blendshapes that only have animations animating them to 0 if the initial weight on the mesh is also 0.
- Show change in total blendshape count under the perf rank change section.
- Add warning if the avatar has extra animators. The optimizer only supports the custom playable layers.
- Add warning if the avatar has layer masks in the animators and the delete unused gameobjects option is enabled.
- Texture Compression Analyzer now only shows SSIM by default to reduce clutter.
- Detect DPS penetrators and stop them from getting merged into other meshes.
- Merge static meshes as skinned meshes now only merges if it results in a decrease in material count.
- Foldouts can now be toggled by clicking on the label text too.
- Delete unused GameObjects is now disabled by default if the avatar has any layer masks in the animators.
- Remove
#pragma skip_optimizations
from the generated shaders. - Progress bar updates continuously while shaders get parsed.
- Fix ring finger to foot collider having half the size from VRChat update 2023.1.2.
- Fix crash when a material swap gets merged into a blob of meshes and its mesh index is non-zero. (more)
- Fix always converting vertex colors to full float32 instead of using unorm8 if it was already unorm8.
- Fix crash when eye look blendshape IDs were greater or equal than the actual number of blendshapes.
- Fix jaw flap blendshape getting deleted.
- Add debug view to show all animated material property paths.
- Several small improvements to the generated shaders and mesh layouts reducing the amount of VRAM used by the optimized avatar.
- Show original mesh paths in the
_IsActiveMesh
properties of merged materials. - Don't inject animated property arrays for merged material properties where none of the original meshes had that property animated.
- Calculate min and max mesh id for each merged material and only add animated property arrays for that range.
- Only add the animated property based on the used mesh indices for the merged material.
- Interleave animated property arrays in cbuffer to reduce the required cbuffer size.
- Pack original meshID & materialID into uv0.z instead of having them separate in uv0.z & uv0.w. Miniscule VRAM savings. (more)
- Call
Mesh.Optimize()
on the merged mesh to reduce the amount of memory it takes up. (more)
- Delete shader properties that start with _ShaderOptimizer from the optimized shader. This is to prevent Kaj shader optimizer from trying to optimize the shader again.
- Fix
RemoveIllegalComponents()
being broken when the sdk was imported via VCC. - Change signaling value to NaN. This fixes animated properties interpolating the signal value weirdly.
- Create optimized swap materials after merging materials instead of before so that Texture2DArray and animated properties are correctly set.
- Deduplicate optimized swap materials with the optimized material that is already in the mesh renderer.
- Fix vertex shader not passing along mesh id to the geometry shader if the mesh id is disabled.
- Multiple performance improvements that reduce the time it takes to optimize an avatar by a factor of around 2x.
- Instead of doing a
AssetDatabase.Refresh()
to import the optimized shaders it now usesImportAsset()
inside aStartAssetEditing()
andStopAssetEditing()
block. This saves a tiny bit of time. - Replaced two heavily used regex with string and char operations. This saves a bit of time.
- Moved most of the generated shader code into include files. This saves a lot of time when importing the shaders.
- Strip
[Drawer]
attributes from the generated shader code. This saves a significant amount of time when assigning the shader to a material.
- Fix that the optimizer would try to merge textures with different mip count.
- Fix crash when the avatar has a component with a missing script on it.
- Add info text if any normal maps are found that are not using BC5 compression.
- Add button to automatically convert all normal maps to BC5 compression.
- Add Texture Compression Analyzer under the
Tools/d4rkpl4y3r/Texture Compression Analyzer
menu.
- The optimized animator controllers now have
(OptimizedCopy)
appended to their name. - Add Limitations section to the readme to clarify that avatars might look broken if shaders are disabled. (more)
- Slight blend shape download size reduction by setting delta values to 0 if they are below 1e-8.
- Fix parents of animated transforms getting deleted. (more)
- Always enable SkinnedMeshRenderer component that gets other meshes merged into it. (more)
- Ignore Renderers that have no materials. (more)
- Only add
#define KEYWORD
to passes that have a corresponding#pragma shader_feature
in the pass. (more) - Fixed that multiple vert/geometry/fragment shader declarations would cause the optimizer to only use the last one.
- Add
Texture2D.GetDimensions(uint mipLevel, out float width, out float height, out float numberOfLevels)
and theuint
variant overloads to the merged texture wrapper class. (more) - Fix assumed default vertex color to be white instead of black.
- Ignore Renderers that have no mesh. (more)
- Vector4 properties now use G formatting instead of the default unity F1 formatting. (more)
- Fix optimizer not working with VRCSDK3-AVATAR-2022.10.12.21.07 SDK onwards. (more)
- Optimizer now shows a progress bar dialog when optimizing an avatar.
- Add info box if build target is Android to tell users that the optimizer doesn't support Quest avatars.
- Add validation check that checks if the optimizer got added to an optimized copy.
- Add validation error if the amount of base playable layers isn't 5.
- Fix extra out parameters in the fragment shader not getting added to the function declaration. (more)
- Add ParserException if any parameter in vertex or fragment can't be parsed.
- Fix parsing of template types to permit spaces between the type and the template brackets.
- Fix new lines in string literals not being the environment's new line character. This caused shader warning spam on poi shader.
- Fix default texel size to 4 instead of 8. This matches the sizes of the default textures as checked with nvidia nsight.
- Fix non float params not working with "Keep Material Animations Separate" option.
- Fix crash when an EditorOnly tagged game object was in the exclusions list.
- Fix non Texture2D textures that are the same reporting that they can't be combined.
- Fix non Texture2D textures trying to combine with
null
. - Fix crash when vertex shader has no input struct.
- Fix geometry shader input type to also allow for point & line.
- Fix nested BlendTrees not getting iterated through to fix animation paths.
- Move the optimized copy to the same scene as the original.
- Replace VFACE semantic with SV_IsFrontFace.
- Force include TEXCOORD0 semantic in the vertex shader input struct. This fixes cases where the sematic only exists in some shader variants.
- Don't delete transforms that are moved by animations.
- Don't delete parent transforms of Constraints.
- Deep copy blend trees when fixing animation paths.
- Add info box educating about increased poly count after optimization if some renderer has more material slots than sub meshes.
- Shader optimizer skips parsed shaders that are null or parsed incorrectly.
- Fix floats getting written with system localization instead of invariant culture.
- Fix crash when an animation has a material swap that doesn't point to a transform on the avatar. Fix for: Null pointer error on Create Optimized Copy
- Fix bug where the merge mesh logic would ignore the exclusion list when merging into an excluded mesh.
- Fix merge perf rank preview pre optimization counting EditorOnly meshes & materials.
- Fix merge perf rank preview not taking into account particle system material slots.
- Fix merge perf rank preview counting the "hidden" extra material slots if they didn't get baked into a mesh.
- Fix bug with animated properties that ended in numbers.
- Fix that debug info for all game objects with toggles would list the always disabled game objects instead.
- Fix frag inject code not running if there were no array properties or mesh toggles. This caused the code to preserve texture samplers not to be injected. Fix for: Shader issue?
- Write active mesh toggle state to the
_IsActiveMesh
material properties. Also base them on the Renderer enabled state instead of just the game object active state.
- Catch exception in the shader optimizer to show which shader is causing the exception.
- Added perf rank change indicators to the Merge Preview foldout.
- Fixed that Color properties without hdr tag wrote the raw sRGB value as a linear value into the shader.
- Some meshes can have
null
bones. Use the root bone instead. Fix for: NullReferenceException: Object reference not set to an instance of an object.
- Show warning if there are textures that are crunch compressed.
- Add list of all crunch compressed textures to the debug info section.
- Always skip variants
DYNAMICLIGHTMAP_ON
,LIGHTMAP_ON
,LIGHTMAP_SHADOW_MIXING
,DIRLIGHTMAP_COMBINED
, andSHADOWS_SHADOWMASK
since they are unused on avatars.
- Fixed the delete unused gameobjects function not respecting the exclusions properly.
- Don't merge textures that are crunch compressed. Fix for: Material merging results in corrupted material/textures
- Inline replace the
UNITY_POSITION
macro. Fix for: Material merging results in corrupted material/textures - Change default "bump" texture value to the correct value of
float4(0.5, 0.5, 1, 1)
instead of the incorrect 0.5 alpha that the unity doc says. I noticed that if I merge materials where one of them has a normal map and the others do not, I can run into broken normals - Added
__Baked
property check for locked in shaders. This is used by silent crosstone for shader locking. - Fix uv0 end swizzle not being applied to the original vertex shader copy.
- Add original shader name to the generated shader as a comment.
- Added exclusion Transform list. Anything that is under the hierarchy of the Transforms in the exclusion list will not be touched by the optimizer.
Implements suggestion: if we could get a way to exclude certain things that would fix it - Show warning if any materials are locked in.
- Add a list of all locked in materials in the debug info foldout.
- Fixed a bug when "Write Properties as Static Values" was disabled with "Merge Same Dimension Textures" enabled and a material had to sample from only one arrayIndex.
- Count parsed shaders that have 0 lines as unparsable.
Fix for: Out of range error cancelling optimisation