Compare commits
10 Commits
ae9b32162d
...
2.0.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
23862b4380 | ||
|
|
1d2a815803 | ||
|
|
e91a602add | ||
|
|
eda516fdab | ||
|
|
d33d3f2bb7 | ||
|
|
48bbf1fa20 | ||
|
|
60631f558f | ||
|
|
52469649de | ||
|
|
1b47306585 | ||
|
|
bd7804395d |
43
CHANGELOG.md
Normal file
43
CHANGELOG.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## [2.0.2] - 26-Dec-2024
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Changed the defualt UTS rendering settings location;
|
||||||
|
- Removed the dependency of RenderingLayerMask in UTSOutlinePass;
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed the bug from shader gui drawer : [Worker0] Failed to create MaterialEnum, enum UnityEditor.Rendering.HighDefinition.TransparentCullMode not found;
|
||||||
|
- Fixed the bug that outline does not rendering when material type is set to transparent;
|
||||||
|
- Fixed the bug that hair shadow buffer does not rendering the object that material type is set to transparent;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [2.0.1] - 11-Nov-2024
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Added custom editor for BoxLightAdjustment;
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Changed the outline layer and hair shadow caster layer from LayerMask to RenderingLayerMask;
|
||||||
|
- Changed the RenderingLayerMask update from every frame to when property changed;
|
||||||
|
- Chnaged the light following calculation from Update to LateUpdate;
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [2.0.0] - 23-Oct-2024
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Added the support of HDRP 17;
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Changed GameObject custom pass to global custom pass;
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed dependency problem in package.json file;
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- Removed HairShaodwPassDrawer;
|
||||||
|
- Removed UTSOutLinePassDrawer;
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: b8d9ae1381ecb2141b4a741976d1c827
|
guid: f6d3b51789082774690f2051bbca2438
|
||||||
folderAsset: yes
|
TextScriptImporter:
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
userData:
|
userData:
|
||||||
assetBundleName:
|
assetBundleName:
|
||||||
@@ -18,8 +18,6 @@ namespace Unity.Toonshader.Editor
|
|||||||
return base.CreateInspectorGUI();
|
return base.CreateInspectorGUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
var boxLightAdjustment = (BoxLightAdjustment)target;
|
|
||||||
|
|
||||||
var root = new VisualElement
|
var root = new VisualElement
|
||||||
{
|
{
|
||||||
dataSource = target
|
dataSource = target
|
||||||
|
|||||||
@@ -1646,34 +1646,34 @@ namespace UnityEditor.Rendering.Toon
|
|||||||
switch (m_shadowMode)
|
switch (m_shadowMode)
|
||||||
{
|
{
|
||||||
case ShadowMode.Normal:
|
case ShadowMode.Normal:
|
||||||
{
|
{
|
||||||
material.SetFloat(ShaderPropShadowMode, (int)ShadowMode.Normal);
|
material.SetFloat(ShaderPropShadowMode, (int)ShadowMode.Normal);
|
||||||
material.DisableKeyword(new LocalKeyword(material.shader, "_SDFShadow"));
|
material.DisableKeyword(new LocalKeyword(material.shader, "_SDFShadow"));
|
||||||
|
|
||||||
GUI_RangeProperty(material, Styles.shaderProp1st_ShadeColor_StepText);
|
GUI_RangeProperty(material, Styles.shaderProp1st_ShadeColor_StepText);
|
||||||
GUI_RangeProperty(material, Styles.shaderProp1st_ShadeColor_FeatherText);
|
GUI_RangeProperty(material, Styles.shaderProp1st_ShadeColor_FeatherText);
|
||||||
GUI_RangeProperty(material, Styles.shaderProp2nd_ShadeColor_StepText);
|
GUI_RangeProperty(material, Styles.shaderProp2nd_ShadeColor_StepText);
|
||||||
GUI_RangeProperty(material, Styles.shaderProp2nd_ShadeColor_FeatherText);
|
GUI_RangeProperty(material, Styles.shaderProp2nd_ShadeColor_FeatherText);
|
||||||
|
|
||||||
//Share variables with DoubleWithFeather method.
|
//Share variables with DoubleWithFeather method.
|
||||||
material.SetFloat(ShaderPropBaseColor_Step, material.GetFloat(ShaderProp1st_ShadeColor_Step));
|
material.SetFloat(ShaderPropBaseColor_Step, material.GetFloat(ShaderProp1st_ShadeColor_Step));
|
||||||
material.SetFloat(ShaderPropBaseShade_Feather, material.GetFloat(ShaderProp1st_ShadeColor_Feather));
|
material.SetFloat(ShaderPropBaseShade_Feather, material.GetFloat(ShaderProp1st_ShadeColor_Feather));
|
||||||
material.SetFloat(ShaderPropShadeColor_Step, material.GetFloat(ShaderProp2nd_ShadeColor_Step));
|
material.SetFloat(ShaderPropShadeColor_Step, material.GetFloat(ShaderProp2nd_ShadeColor_Step));
|
||||||
material.SetFloat(ShaderProp1st2nd_Shades_Feather, material.GetFloat(ShaderProp2nd_ShadeColor_Feather));
|
material.SetFloat(ShaderProp1st2nd_Shades_Feather, material.GetFloat(ShaderProp2nd_ShadeColor_Feather));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ShadowMode.SDF:
|
case ShadowMode.SDF:
|
||||||
{
|
{
|
||||||
material.SetFloat(ShaderPropShadowMode, (int)ShadowMode.SDF);
|
material.SetFloat(ShaderPropShadowMode, (int)ShadowMode.SDF);
|
||||||
material.EnableKeyword(new LocalKeyword(material.shader, "_SDFShadow"));
|
material.EnableKeyword(new LocalKeyword(material.shader, "_SDFShadow"));
|
||||||
m_MaterialEditor.TexturePropertySingleLine(Styles.SDFShadowText, SDFShadowMap);
|
m_MaterialEditor.TexturePropertySingleLine(Styles.SDFShadowText, SDFShadowMap);
|
||||||
GUI_RangeProperty(material, Styles.SDFShadowLevelText);
|
GUI_RangeProperty(material, Styles.SDFShadowLevelText);
|
||||||
GUI_RangeProperty(material, Styles.SDFSmoothGammaText);
|
GUI_RangeProperty(material, Styles.SDFSmoothGammaText);
|
||||||
GUI_RangeProperty(material, Styles.SDFNoseHighlightCoefText);
|
GUI_RangeProperty(material, Styles.SDFNoseHighlightCoefText);
|
||||||
GUI_RangeProperty(material, Styles.SDFNoseHighlightSmoothRange);
|
GUI_RangeProperty(material, Styles.SDFNoseHighlightSmoothRange);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorGUILayout.Space();
|
EditorGUILayout.Space();
|
||||||
@@ -1721,60 +1721,60 @@ namespace UnityEditor.Rendering.Toon
|
|||||||
switch (m_pbrMode)
|
switch (m_pbrMode)
|
||||||
{
|
{
|
||||||
case PBRMode.Off:
|
case PBRMode.Off:
|
||||||
{
|
{
|
||||||
material.SetFloat(ShaderPropPBR, (int)PBRMode.Off);
|
material.SetFloat(ShaderPropPBR, (int)PBRMode.Off);
|
||||||
|
|
||||||
material.EnableKeyword("_PBR_Mode_OFF");
|
material.EnableKeyword("_PBR_Mode_OFF");
|
||||||
material.DisableKeyword("_PBR_Mode_ST");
|
material.DisableKeyword("_PBR_Mode_ST");
|
||||||
material.DisableKeyword("_PBR_Mode_ANISO");
|
material.DisableKeyword("_PBR_Mode_ANISO");
|
||||||
material.DisableKeyword("_PBR_Mode_KK");
|
material.DisableKeyword("_PBR_Mode_KK");
|
||||||
material.DisableKeyword("_PBR_Mode_TOON");
|
material.DisableKeyword("_PBR_Mode_TOON");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PBRMode.Standard:
|
case PBRMode.Standard:
|
||||||
{
|
{
|
||||||
material.SetFloat(ShaderPropPBR, (int)PBRMode.Standard);
|
material.SetFloat(ShaderPropPBR, (int)PBRMode.Standard);
|
||||||
|
|
||||||
material.DisableKeyword("_PBR_Mode_OFF");
|
material.DisableKeyword("_PBR_Mode_OFF");
|
||||||
material.EnableKeyword("_PBR_Mode_ST");
|
material.EnableKeyword("_PBR_Mode_ST");
|
||||||
material.DisableKeyword("_PBR_Mode_ANISO");
|
material.DisableKeyword("_PBR_Mode_ANISO");
|
||||||
material.DisableKeyword("_PBR_Mode_KK");
|
material.DisableKeyword("_PBR_Mode_KK");
|
||||||
material.DisableKeyword("_PBR_Mode_TOON");
|
material.DisableKeyword("_PBR_Mode_TOON");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PBRMode.Anisotropy:
|
case PBRMode.Anisotropy:
|
||||||
{
|
{
|
||||||
material.SetFloat(ShaderPropPBR, (int)PBRMode.Anisotropy);
|
material.SetFloat(ShaderPropPBR, (int)PBRMode.Anisotropy);
|
||||||
|
|
||||||
material.DisableKeyword("_PBR_Mode_OFF");
|
material.DisableKeyword("_PBR_Mode_OFF");
|
||||||
material.DisableKeyword("_PBR_Mode_ST");
|
material.DisableKeyword("_PBR_Mode_ST");
|
||||||
material.EnableKeyword("_PBR_Mode_ANISO");
|
material.EnableKeyword("_PBR_Mode_ANISO");
|
||||||
material.DisableKeyword("_PBR_Mode_KK");
|
material.DisableKeyword("_PBR_Mode_KK");
|
||||||
material.DisableKeyword("_PBR_Mode_TOON");
|
material.DisableKeyword("_PBR_Mode_TOON");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PBRMode.KKHair:
|
case PBRMode.KKHair:
|
||||||
{
|
{
|
||||||
material.SetFloat(ShaderPropPBR, (int)PBRMode.KKHair);
|
material.SetFloat(ShaderPropPBR, (int)PBRMode.KKHair);
|
||||||
|
|
||||||
material.DisableKeyword("_PBR_Mode_OFF");
|
material.DisableKeyword("_PBR_Mode_OFF");
|
||||||
material.DisableKeyword("_PBR_Mode_ST");
|
material.DisableKeyword("_PBR_Mode_ST");
|
||||||
material.DisableKeyword("_PBR_Mode_ANISO");
|
material.DisableKeyword("_PBR_Mode_ANISO");
|
||||||
material.EnableKeyword("_PBR_Mode_KK");
|
material.EnableKeyword("_PBR_Mode_KK");
|
||||||
material.DisableKeyword("_PBR_Mode_TOON");
|
material.DisableKeyword("_PBR_Mode_TOON");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PBRMode.Toon:
|
case PBRMode.Toon:
|
||||||
{
|
{
|
||||||
material.SetFloat(ShaderPropPBR, (int)PBRMode.Toon);
|
material.SetFloat(ShaderPropPBR, (int)PBRMode.Toon);
|
||||||
|
|
||||||
material.DisableKeyword("_PBR_Mode_OFF");
|
material.DisableKeyword("_PBR_Mode_OFF");
|
||||||
material.DisableKeyword("_PBR_Mode_ST");
|
material.DisableKeyword("_PBR_Mode_ST");
|
||||||
material.DisableKeyword("_PBR_Mode_ANISO");
|
material.DisableKeyword("_PBR_Mode_ANISO");
|
||||||
material.DisableKeyword("_PBR_Mode_KK");
|
material.DisableKeyword("_PBR_Mode_KK");
|
||||||
material.EnableKeyword("_PBR_Mode_TOON");
|
material.EnableKeyword("_PBR_Mode_TOON");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_MaterialEditor.TexturePropertySingleLine(Styles.normalMapText, normalMap, normalScale);
|
m_MaterialEditor.TexturePropertySingleLine(Styles.normalMapText, normalMap, normalScale);
|
||||||
@@ -2515,7 +2515,8 @@ namespace UnityEditor.Rendering.Toon
|
|||||||
GUI_FloatProperty(material, Styles.nearestDistanceText);
|
GUI_FloatProperty(material, Styles.nearestDistanceText);
|
||||||
EditorGUI.indentLevel--;
|
EditorGUI.indentLevel--;
|
||||||
|
|
||||||
var useOutlineTexture = GUI_Toggle(material, Styles.outlineColorMapText, ShaderPropIs_OutlineTex, MaterialGetInt(material, ShaderPropIs_OutlineTex) != 0); ;
|
var useOutlineTexture = GUI_Toggle(material, Styles.outlineColorMapText, ShaderPropIs_OutlineTex, MaterialGetInt(material, ShaderPropIs_OutlineTex) != 0);
|
||||||
|
;
|
||||||
EditorGUI.BeginDisabledGroup(!useOutlineTexture);
|
EditorGUI.BeginDisabledGroup(!useOutlineTexture);
|
||||||
m_MaterialEditor.TexturePropertySingleLine(Styles.outlineTexText, outlineTex);
|
m_MaterialEditor.TexturePropertySingleLine(Styles.outlineTexText, outlineTex);
|
||||||
EditorGUI.EndDisabledGroup();
|
EditorGUI.EndDisabledGroup();
|
||||||
|
|||||||
59
README.md
59
README.md
@@ -1,3 +1,58 @@
|
|||||||
# hdrp-toon
|
# HDRP Toon Shader
|
||||||
|
|
||||||
A high quality toon shader for High Definition Render Pipeline(HDRP)
|
A high-quality toon shader for the High Definition Render Pipeline (HDRP).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The HDRP Toon Shader is designed to provide a high-quality toon shading effect for projects using Unity's High Definition Render Pipeline and Unity 6. This shader is ideal for creating stylized, cartoon-like visuals with smooth shading and vibrant colors.
|
||||||
|
|
||||||
|
## Docs
|
||||||
|
|
||||||
|
[Documentation Page](https://doc.personalnas.com/books/hdrp-toon-documentations)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **High-Quality Toon Shading**: Achieve smooth and vibrant toon shading effects.
|
||||||
|
- **Customizable Parameters**: Easily adjust the shader parameters to fit your artistic needs.
|
||||||
|
- **HDRP Compatibility**: Fully compatible with Unity's High Definition Render Pipeline, including ray-tracing.
|
||||||
|
- **Performance Optimized**: Designed to be efficient and performant for real-time applications.
|
||||||
|
|
||||||
|
## Pre-Requirements
|
||||||
|
1. Unity version: 6000.0.27f1 or later
|
||||||
|
2. HDRP version: 17.0.0 or later
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Open your Unity project.
|
||||||
|
2. Go to `Window > Package Manager`.
|
||||||
|
3. Click on the `+` button and select `Add package from git`.
|
||||||
|
4. In the url input field, type: `https://git.personalnas.com/Misaki/com.misaki.hdrp-toon.git`.
|
||||||
|
5. Click ok to add package into your project.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. Create a new material in your Unity project.
|
||||||
|
2. Assign the HDRP Toon Shader to the material.
|
||||||
|
3. Apply the material to your 3D models.
|
||||||
|
4. Adjust the shader parameters in the material inspector to achieve the desired look.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
Here are some examples of the HDRP Toon Shader in action:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
If you would like to contribute to the development of the HDRP Toon Shader, please follow these steps:
|
||||||
|
|
||||||
|
1. Fork the repository.
|
||||||
|
2. Create a new branch for your feature or bugfix.
|
||||||
|
3. Commit your changes and push them to your fork.
|
||||||
|
4. Create a pull request with a description of your changes.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|
||||||
BIN
ReadmeAssets/preview-01.png
Normal file
BIN
ReadmeAssets/preview-01.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.0 MiB |
117
ReadmeAssets/preview-01.png.meta
Normal file
117
ReadmeAssets/preview-01.png.meta
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3d00a7a6a88c70c4ca4bb89ca1e3e842
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 13
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 1
|
||||||
|
sRGBTexture: 1
|
||||||
|
linearTexture: 0
|
||||||
|
fadeOut: 0
|
||||||
|
borderMipMap: 0
|
||||||
|
mipMapsPreserveCoverage: 0
|
||||||
|
alphaTestReferenceValue: 0.5
|
||||||
|
mipMapFadeDistanceStart: 1
|
||||||
|
mipMapFadeDistanceEnd: 3
|
||||||
|
bumpmap:
|
||||||
|
convertToNormalMap: 0
|
||||||
|
externalNormalMap: 0
|
||||||
|
heightScale: 0.25
|
||||||
|
normalMapFilter: 0
|
||||||
|
flipGreenChannel: 0
|
||||||
|
isReadable: 0
|
||||||
|
streamingMipmaps: 0
|
||||||
|
streamingMipmapsPriority: 0
|
||||||
|
vTOnly: 0
|
||||||
|
ignoreMipmapLimit: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 6
|
||||||
|
cubemapConvolution: 0
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: 1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
filterMode: 1
|
||||||
|
aniso: 1
|
||||||
|
mipBias: 0
|
||||||
|
wrapU: 0
|
||||||
|
wrapV: 0
|
||||||
|
wrapW: 0
|
||||||
|
nPOTScale: 1
|
||||||
|
lightmap: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
spriteMode: 0
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spriteGenerateFallbackPhysicsShape: 1
|
||||||
|
alphaUsage: 1
|
||||||
|
alphaIsTransparency: 0
|
||||||
|
spriteTessellationDetail: -1
|
||||||
|
textureType: 0
|
||||||
|
textureShape: 1
|
||||||
|
singleChannelComponent: 0
|
||||||
|
flipbookRows: 1
|
||||||
|
flipbookColumns: 1
|
||||||
|
maxTextureSizeSet: 0
|
||||||
|
compressionQualitySet: 0
|
||||||
|
textureFormatSet: 0
|
||||||
|
ignorePngGamma: 0
|
||||||
|
applyGammaDecoding: 0
|
||||||
|
swizzle: 50462976
|
||||||
|
cookieLightType: 0
|
||||||
|
platformSettings:
|
||||||
|
- serializedVersion: 4
|
||||||
|
buildTarget: DefaultTexturePlatform
|
||||||
|
maxTextureSize: 2048
|
||||||
|
resizeAlgorithm: 0
|
||||||
|
textureFormat: -1
|
||||||
|
textureCompression: 1
|
||||||
|
compressionQuality: 50
|
||||||
|
crunchedCompression: 0
|
||||||
|
allowsAlphaSplitting: 0
|
||||||
|
overridden: 0
|
||||||
|
ignorePlatformSupport: 0
|
||||||
|
androidETC2FallbackOverride: 0
|
||||||
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
|
- serializedVersion: 4
|
||||||
|
buildTarget: Standalone
|
||||||
|
maxTextureSize: 2048
|
||||||
|
resizeAlgorithm: 0
|
||||||
|
textureFormat: -1
|
||||||
|
textureCompression: 1
|
||||||
|
compressionQuality: 50
|
||||||
|
crunchedCompression: 0
|
||||||
|
allowsAlphaSplitting: 0
|
||||||
|
overridden: 0
|
||||||
|
ignorePlatformSupport: 0
|
||||||
|
androidETC2FallbackOverride: 0
|
||||||
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
|
spriteSheet:
|
||||||
|
serializedVersion: 2
|
||||||
|
sprites: []
|
||||||
|
outline: []
|
||||||
|
customData:
|
||||||
|
physicsShape: []
|
||||||
|
bones: []
|
||||||
|
spriteID:
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spriteCustomMetadata:
|
||||||
|
entries: []
|
||||||
|
nameFileIdTable: {}
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -9,7 +9,6 @@ namespace Unity.Toonshader
|
|||||||
public struct UTSOutlineSetting
|
public struct UTSOutlineSetting
|
||||||
{
|
{
|
||||||
public bool enable;
|
public bool enable;
|
||||||
public RenderingLayerMask renderingLayer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
@@ -23,7 +22,8 @@ namespace Unity.Toonshader
|
|||||||
public class UTSRenderPassSettings : ScriptableObject
|
public class UTSRenderPassSettings : ScriptableObject
|
||||||
{
|
{
|
||||||
public const string UTS_RENDERING_SETTINGS_NAME = "UTSRenderingSettings";
|
public const string UTS_RENDERING_SETTINGS_NAME = "UTSRenderingSettings";
|
||||||
private const string UTS_Rendering_Settings_Path = "Packages/com.misaki.hdrp-toon/Runtime/HDRP/Resources/UTSRenderSettings.asset";
|
public const string UTS_RENDERING_SETTINGS_PATH = "Assets/Resources/Settings/UTSRenderSettings.asset";
|
||||||
|
public const string UTS_RENDERING_SETTINGS_RESOURCES_PATH = "Settings/UTSRenderSettings";
|
||||||
|
|
||||||
public UTSOutlineSetting outlineSetting;
|
public UTSOutlineSetting outlineSetting;
|
||||||
public UtsHairShadowSetting hairShadowSetting;
|
public UtsHairShadowSetting hairShadowSetting;
|
||||||
@@ -37,21 +37,22 @@ namespace Unity.Toonshader
|
|||||||
}
|
}
|
||||||
|
|
||||||
UTSRenderPassSettings renderingSettings = null;
|
UTSRenderPassSettings renderingSettings = null;
|
||||||
if (File.Exists(UTS_Rendering_Settings_Path))
|
if (File.Exists(UTS_RENDERING_SETTINGS_PATH))
|
||||||
{
|
{
|
||||||
renderingSettings = AssetDatabase.LoadAssetAtPath<UTSRenderPassSettings>(UTS_Rendering_Settings_Path);
|
renderingSettings = AssetDatabase.LoadAssetAtPath<UTSRenderPassSettings>(UTS_RENDERING_SETTINGS_PATH);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
renderingSettings = CreateInstance<UTSRenderPassSettings>();
|
renderingSettings = CreateInstance<UTSRenderPassSettings>();
|
||||||
AssetDatabase.CreateAsset(renderingSettings, UTS_Rendering_Settings_Path);
|
AssetDatabase.CreateAsset(renderingSettings, UTS_RENDERING_SETTINGS_PATH);
|
||||||
|
AssetDatabase.Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorBuildSettings.AddConfigObject(UTS_RENDERING_SETTINGS_NAME, renderingSettings, false);
|
EditorBuildSettings.AddConfigObject(UTS_RENDERING_SETTINGS_NAME, renderingSettings, true);
|
||||||
|
|
||||||
return renderingSettings;
|
return renderingSettings;
|
||||||
#else
|
#else
|
||||||
return Resources.Load<UTSRenderPassSettings>(Path.GetFileNameWithoutExtension(UTS_Rendering_Settings_Path));
|
return Resources.Load<UTSRenderPassSettings>(UTS_RENDERING_SETTINGS_RESOURCES_PATH);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!114 &11400000
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 0}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 02a9f5e1730430c4090d73e427a7f7a3, type: 3}
|
|
||||||
m_Name: UTSRenderSettings
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
outlineSetting:
|
|
||||||
enable: 1
|
|
||||||
renderingLayer:
|
|
||||||
serializedVersion: 0
|
|
||||||
m_Bits: 2
|
|
||||||
hairShadowSetting:
|
|
||||||
enable: 1
|
|
||||||
CasterRenderingLayer:
|
|
||||||
serializedVersion: 0
|
|
||||||
m_Bits: 4
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 37f2c2f5a413a874b9ec560b74248a71
|
|
||||||
NativeFormatImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
mainObjectFileID: 11400000
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@@ -184,7 +184,7 @@ Shader "HDRP/Toon"
|
|||||||
[HideInInspector][ToggleUI] _TransparentZWrite("_TransparentZWrite", Float) = 0.0
|
[HideInInspector][ToggleUI] _TransparentZWrite("_TransparentZWrite", Float) = 0.0
|
||||||
[HideInInspector] _CullMode("__cullmode", Float) = 2.0
|
[HideInInspector] _CullMode("__cullmode", Float) = 2.0
|
||||||
[HideInInspector] _CullModeForward("__cullmodeForward", Float) = 2.0 // This mode is dedicated to Forward to correctly handle backface then front face rendering thin transparent
|
[HideInInspector] _CullModeForward("__cullmodeForward", Float) = 2.0 // This mode is dedicated to Forward to correctly handle backface then front face rendering thin transparent
|
||||||
[Enum(UnityEditor.Rendering.HighDefinition.TransparentCullMode)] _TransparentCullMode("_TransparentCullMode", Int) = 2 // Back culling by default
|
[HideInInspector] _TransparentCullMode("_TransparentCullMode", Int) = 2 // Back culling by default
|
||||||
[HideInInspector] _ZTestDepthEqualForOpaque("_ZTestDepthEqualForOpaque", Int) = 4 // Less equal
|
[HideInInspector] _ZTestDepthEqualForOpaque("_ZTestDepthEqualForOpaque", Int) = 4 // Less equal
|
||||||
[HideInInspector] _ZTestModeDistortion("_ZTestModeDistortion", Int) = 8
|
[HideInInspector] _ZTestModeDistortion("_ZTestModeDistortion", Int) = 8
|
||||||
[HideInInspector] _ZTestGBuffer("_ZTestGBuffer", Int) = 4
|
[HideInInspector] _ZTestGBuffer("_ZTestGBuffer", Int) = 4
|
||||||
|
|||||||
@@ -1,130 +0,0 @@
|
|||||||
Shader "Renderers/HairShadowRenderer"
|
|
||||||
{
|
|
||||||
Properties
|
|
||||||
{
|
|
||||||
_Color("Color", Color) = (1,1,1,1)
|
|
||||||
_ColorMap("ColorMap", 2D) = "white" {}
|
|
||||||
|
|
||||||
// Transparency
|
|
||||||
_AlphaCutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
|
|
||||||
[HideInInspector]_BlendMode("_BlendMode", Range(0.0, 1.0)) = 0.5
|
|
||||||
}
|
|
||||||
|
|
||||||
HLSLINCLUDE
|
|
||||||
|
|
||||||
#pragma target 4.5
|
|
||||||
#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch
|
|
||||||
|
|
||||||
// #pragma enable_d3d11_debug_symbols
|
|
||||||
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
|
|
||||||
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPass.cs.hlsl"
|
|
||||||
//#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/FragInputs.hlsl"
|
|
||||||
|
|
||||||
//enable GPU instancing support
|
|
||||||
#pragma multi_compile_instancing
|
|
||||||
#pragma multi_compile _ DOTS_INSTANCING_ON
|
|
||||||
|
|
||||||
ENDHLSL
|
|
||||||
|
|
||||||
SubShader
|
|
||||||
{
|
|
||||||
Tags{ "RenderPipeline" = "HDRenderPipeline" }
|
|
||||||
|
|
||||||
Pass
|
|
||||||
{
|
|
||||||
Name "HairShadow"
|
|
||||||
Tags { "LightMode" = "HairShadow" }
|
|
||||||
|
|
||||||
Blend Off
|
|
||||||
ZWrite On
|
|
||||||
ZTest LEqual
|
|
||||||
|
|
||||||
Cull Front
|
|
||||||
|
|
||||||
HLSLPROGRAM
|
|
||||||
|
|
||||||
#define _SURFACE_TYPE_OPAQUE
|
|
||||||
|
|
||||||
// Toggle the alpha test
|
|
||||||
#define _ALPHATEST_ON
|
|
||||||
|
|
||||||
// Toggle transparency
|
|
||||||
// #define _SURFACE_TYPE_TRANSPARENT
|
|
||||||
|
|
||||||
// Toggle fog on transparent
|
|
||||||
#define _ENABLE_FOG_ON_TRANSPARENT
|
|
||||||
|
|
||||||
// List all the attributes needed in your shader (will be passed to the vertex shader)
|
|
||||||
// you can see the complete list of these attributes in VaryingMesh.hlsl
|
|
||||||
#define ATTRIBUTES_NEED_TEXCOORD0
|
|
||||||
#define ATTRIBUTES_NEED_NORMAL
|
|
||||||
#define ATTRIBUTES_NEED_TANGENT
|
|
||||||
|
|
||||||
// List all the varyings needed in your fragment shader
|
|
||||||
#define VARYINGS_NEED_TEXCOORD0
|
|
||||||
#define VARYINGS_NEED_TANGENT_TO_WORLD
|
|
||||||
|
|
||||||
#define SHADERPASS SHADERPASS_FORWARD_UNLIT
|
|
||||||
|
|
||||||
int _HairShadowPassChannel;
|
|
||||||
TEXTURE2D(_ColorMap);
|
|
||||||
TEXTURE2D(_HairShadowTex);
|
|
||||||
SAMPLER(sampler_HairShadowTex);
|
|
||||||
|
|
||||||
// Declare properties in the UnityPerMaterial cbuffer to make the shader compatible with SRP Batcher.
|
|
||||||
CBUFFER_START(UnityPerMaterial)
|
|
||||||
float4 _ColorMap_ST;
|
|
||||||
float4 _Color;
|
|
||||||
|
|
||||||
float _AlphaCutoff;
|
|
||||||
float _BlendMode;
|
|
||||||
CBUFFER_END
|
|
||||||
|
|
||||||
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassRenderersV2.hlsl"
|
|
||||||
|
|
||||||
// If you need to modify the vertex datas, you can uncomment this code
|
|
||||||
// Note: all the transformations here are done in object space
|
|
||||||
// #define HAVE_MESH_MODIFICATION
|
|
||||||
// AttributesMesh ApplyMeshModification(AttributesMesh input, float3 timeParameters)
|
|
||||||
// {
|
|
||||||
// input.positionOS += input.normalOS * 0.0001; // inflate a bit the mesh to avoid z-fight
|
|
||||||
// return input;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Put the code to render the objects in your custom pass in this function
|
|
||||||
void GetSurfaceAndBuiltinData(FragInputs fragInputs, float3 viewDirection, inout PositionInputs posInput, out SurfaceData surfaceData, out BuiltinData builtinData)
|
|
||||||
{
|
|
||||||
float cDepth = SampleCameraDepth(posInput.positionNDC);
|
|
||||||
float mDepth = posInput.deviceDepth;
|
|
||||||
|
|
||||||
float opacity = 1;
|
|
||||||
// const float3 color = float3(LinearEyeDepth(posInput.deviceDepth, _ZBufferParams), 0, 0);
|
|
||||||
|
|
||||||
// A manual depth test is needed here. Custom pass will always draw with no regard of depth.
|
|
||||||
// This test was given a quite large leeway to avoid discarding when cDepth = mDepth [Suomi, 20230915]
|
|
||||||
|
|
||||||
//float3 color = float3(cDepth < mDepth + 0.01 ? mDepth : 0, 0, 0); // Can get that in HDRP directly
|
|
||||||
float3 color = float3(0, 0, 0);
|
|
||||||
color.r = mDepth;
|
|
||||||
|
|
||||||
#ifdef _ALPHATEST_ON
|
|
||||||
DoAlphaTest(opacity, _AlphaCutoff);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Write back the data to the output structures
|
|
||||||
ZERO_BUILTIN_INITIALIZE(builtinData); // No call to InitBuiltinData as we don't have any lighting
|
|
||||||
ZERO_INITIALIZE(SurfaceData, surfaceData);
|
|
||||||
builtinData.opacity = opacity;
|
|
||||||
builtinData.emissiveColor = float3(0, 0, 0);
|
|
||||||
surfaceData.color = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPassForwardUnlit.hlsl"
|
|
||||||
|
|
||||||
#pragma vertex Vert
|
|
||||||
#pragma fragment Frag
|
|
||||||
|
|
||||||
ENDHLSL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: b3740fc2ef8a5094a81cfb53915422de
|
|
||||||
ShaderImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
defaultTextures: []
|
|
||||||
nonModifiableTextures: []
|
|
||||||
preprocessorOverride: 0
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@@ -194,13 +194,13 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
#ifdef VARYINGS_NEED_POSITION_WS
|
#ifdef VARYINGS_NEED_POSITION_WS
|
||||||
float3 V = GetWorldSpaceNormalizeViewDir(input.positionRWS);
|
float3 V = GetWorldSpaceNormalizeViewDir(input.positionRWS);
|
||||||
|
|
||||||
#ifdef _EYE_PARALLAX
|
#ifdef _EYE_PARALLAX
|
||||||
// Must have view Dir to work
|
// Must have view Dir to work
|
||||||
float2 viewT = TransformObjectToTangent(V, input.tangentToWorld);
|
float2 viewT = TransformObjectToTangent(V, input.tangentToWorld);
|
||||||
float2 parallaxOffset = viewT;
|
float2 parallaxOffset = viewT;
|
||||||
parallaxOffset.y = -parallaxOffset.y;
|
parallaxOffset.y = -parallaxOffset.y;
|
||||||
Set_UV0.xy = clamp(Set_UV0.xy -_EyeParallaxAmount * parallaxOffset, 0, 1);
|
Set_UV0.xy = clamp(Set_UV0.xy -_EyeParallaxAmount * parallaxOffset, 0, 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
// Unused
|
// Unused
|
||||||
@@ -249,11 +249,11 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
|
|
||||||
#ifdef _ANISOTROPYMAP
|
#ifdef _ANISOTROPYMAP
|
||||||
surfaceData.anisotropy = SAMPLE_TEXTURE2D(_AnisotropyMap, sampler_AnisotropyMap, TRANSFORM_TEX(Set_UV0, _AnisotropyMap)).r;
|
surfaceData.anisotropy = SAMPLE_TEXTURE2D(_AnisotropyMap, sampler_AnisotropyMap, TRANSFORM_TEX(Set_UV0, _AnisotropyMap)).r;
|
||||||
#if _PBR_Mode_KK
|
#if _PBR_Mode_KK
|
||||||
surfaceData.anisotropy += ADD_IDX(_Anisotropy) - 0.5;
|
surfaceData.anisotropy += ADD_IDX(_Anisotropy) - 0.5;
|
||||||
#else
|
#else
|
||||||
surfaceData.anisotropy *= ADD_IDX(_Anisotropy);
|
surfaceData.anisotropy *= ADD_IDX(_Anisotropy);
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
surfaceData.anisotropy = 1.0;
|
surfaceData.anisotropy = 1.0;
|
||||||
surfaceData.anisotropy *= ADD_IDX(_Anisotropy);
|
surfaceData.anisotropy *= ADD_IDX(_Anisotropy);
|
||||||
@@ -267,9 +267,9 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
|
|
||||||
#ifdef _PBR_Mode_TOON
|
#ifdef _PBR_Mode_TOON
|
||||||
float3 _SpecTex_var = 1;
|
float3 _SpecTex_var = 1;
|
||||||
#ifdef _SPECULARCOLORMAP
|
#ifdef _SPECULARCOLORMAP
|
||||||
_SpecTex_var = SAMPLE_TEXTURE2D(_SpecularColorMap, sampler_SpecularColorMap, TRANSFORM_TEX(Set_UV0, _BaseColorMap)).rgb;
|
_SpecTex_var = SAMPLE_TEXTURE2D(_SpecularColorMap, sampler_SpecularColorMap, TRANSFORM_TEX(Set_UV0, _BaseColorMap)).rgb;
|
||||||
#endif
|
#endif
|
||||||
specularColor = _SpecTex_var * _SpecularColor;
|
specularColor = _SpecTex_var * _SpecularColor;
|
||||||
#else
|
#else
|
||||||
specularColor = SpecularColor(_MainTex_var.rgb * _BaseColor.rgb, metallic);
|
specularColor = SpecularColor(_MainTex_var.rgb * _BaseColor.rgb, metallic);
|
||||||
@@ -298,7 +298,7 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
bsdfData.tangentWS = tangentDir;
|
bsdfData.tangentWS = tangentDir;
|
||||||
bsdfData.bitangentWS = bitangentDir;
|
bsdfData.bitangentWS = bitangentDir;
|
||||||
|
|
||||||
PreLightData preLightData = GetPreLightData(V, posInput, bsdfData); // used to calc shadow
|
PreLightData preLightData = GetPreLightData(V, posInput, bsdfData); // used to calc shadow
|
||||||
|
|
||||||
UTSAggregateLighting utsAggregateLighting;
|
UTSAggregateLighting utsAggregateLighting;
|
||||||
ZERO_INITIALIZE(UTSAggregateLighting, utsAggregateLighting);
|
ZERO_INITIALIZE(UTSAggregateLighting, utsAggregateLighting);
|
||||||
@@ -351,13 +351,13 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
float3 lightColor = ApplyCurrentExposureMultiplier(lightData.color);
|
float3 lightColor = ApplyCurrentExposureMultiplier(lightData.color);
|
||||||
float3 lightDirection = -lightData.forward;
|
float3 lightDirection = -lightData.forward;
|
||||||
|
|
||||||
#ifndef LIGHT_EVALUATION_NO_COOKIE
|
#ifndef LIGHT_EVALUATION_NO_COOKIE
|
||||||
if (lightData.cookieMode != COOKIEMODE_NONE)
|
if (lightData.cookieMode != COOKIEMODE_NONE)
|
||||||
{
|
{
|
||||||
float3 lightToSample = input.positionRWS - lightData.positionRWS;
|
float3 lightToSample = input.positionRWS - lightData.positionRWS;
|
||||||
lightColor *= EvaluateCookie_Directional(context, lightData, lightToSample);
|
lightColor *= EvaluateCookie_Directional(context, lightData, lightToSample);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
UTSLightData utsLightData;
|
UTSLightData utsLightData;
|
||||||
utsLightData.lightDirection = lightDirection;
|
utsLightData.lightDirection = lightDirection;
|
||||||
@@ -416,33 +416,33 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
light.shadowIndex, L);
|
light.shadowIndex, L);
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif // UTS_USE_RAYTRACING_SHADOW
|
#endif // UTS_USE_RAYTRACING_SHADOW
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#if defined (UTS_USE_RAYTRACING_SHADOW)
|
#if defined (UTS_USE_RAYTRACING_SHADOW)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float r = UNITY_SAMPLE_SCREEN_SHADOW(_RaytracedHardShadow, float4(posInput.positionNDC.xy, lightDirection * _ShadowBias, 1));
|
float r = UNITY_SAMPLE_SCREEN_SHADOW(_RaytracedHardShadow, float4(posInput.positionNDC.xy, lightDirection * _ShadowBias, 1));
|
||||||
context.shadowValue = r;
|
context.shadowValue = r;
|
||||||
}
|
}
|
||||||
#endif // UTS_USE_RAYTRACING_SHADOW
|
#endif // UTS_USE_RAYTRACING_SHADOW
|
||||||
}
|
}
|
||||||
|
|
||||||
context.shadowValue = lerp(1, context.shadowValue, lightData.shadowDimmer);
|
context.shadowValue = lerp(1, context.shadowValue, lightData.shadowDimmer);
|
||||||
customMainLight.shadowValue = context.shadowValue;
|
customMainLight.shadowValue = context.shadowValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||||
if (_DirectionalShadowIndex >= 0)
|
if (_DirectionalShadowIndex >= 0)
|
||||||
finalColor = UTS_SelfShdowMainLight(context, input, _DirectionalShadowIndex);
|
finalColor = UTS_SelfShdowMainLight(context, input, _DirectionalShadowIndex);
|
||||||
#else
|
#else
|
||||||
UTS_MainLight(context, input, utsLightData, surfaceData, bsdfData, inverseClipping, channelAlpha, utsData, utsAggregateLighting);
|
UTS_MainLight(context, input, utsLightData, surfaceData, bsdfData, inverseClipping, channelAlpha, utsData, utsAggregateLighting);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int i = 0; // Declare once to avoid the D3D11 compiler warning.
|
int i = 0; // Declare once to avoid the D3D11 compiler warning.
|
||||||
for (i = 0; i < (int)_DirectionalLightCount; ++i)
|
for (i = 0; i < (int) _DirectionalLightCount; ++i)
|
||||||
{
|
{
|
||||||
if (IsMatchingLightLayer(_DirectionalLightDatas[i].lightLayers, builtinData.renderingLayers))
|
if (IsMatchingLightLayer(_DirectionalLightDatas[i].lightLayers, builtinData.renderingLayers))
|
||||||
{
|
{
|
||||||
@@ -457,11 +457,11 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
utsLightData.shadowTint = _DirectionalLightDatas[i].shadowTint;
|
utsLightData.shadowTint = _DirectionalLightDatas[i].shadowTint;
|
||||||
utsLightData.penumbraTint = _DirectionalLightDatas[i].penumbraTint;
|
utsLightData.penumbraTint = _DirectionalLightDatas[i].penumbraTint;
|
||||||
|
|
||||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, 0, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, 0, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -476,14 +476,14 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
{
|
{
|
||||||
uint lightCount, lightStart;
|
uint lightCount, lightStart;
|
||||||
|
|
||||||
#ifndef LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
#ifndef LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
||||||
GetCountAndStart(posInput, LIGHTCATEGORY_PUNCTUAL, lightStart, lightCount);
|
GetCountAndStart(posInput, LIGHTCATEGORY_PUNCTUAL, lightStart, lightCount);
|
||||||
#else // LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
#else // LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
||||||
lightCount = _PunctualLightCount;
|
lightCount = _PunctualLightCount;
|
||||||
lightStart = 0;
|
lightStart = 0;
|
||||||
#endif
|
#endif
|
||||||
bool fastPath = false;
|
bool fastPath = false;
|
||||||
#if SCALARIZE_LIGHT_LOOP
|
#if SCALARIZE_LIGHT_LOOP
|
||||||
uint lightStartLane0;
|
uint lightStartLane0;
|
||||||
fastPath = IsFastPath(lightStart, lightStartLane0);
|
fastPath = IsFastPath(lightStart, lightStartLane0);
|
||||||
|
|
||||||
@@ -491,7 +491,7 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
{
|
{
|
||||||
lightStart = lightStartLane0;
|
lightStart = lightStartLane0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -508,11 +508,11 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
while (v_lightListOffset < lightCount)
|
while (v_lightListOffset < lightCount)
|
||||||
{
|
{
|
||||||
v_lightIdx = FetchIndex(lightStart, v_lightListOffset);
|
v_lightIdx = FetchIndex(lightStart, v_lightListOffset);
|
||||||
#if SCALARIZE_LIGHT_LOOP
|
#if SCALARIZE_LIGHT_LOOP
|
||||||
uint s_lightIdx = ScalarizeElementIndex(v_lightIdx, fastPath);
|
uint s_lightIdx = ScalarizeElementIndex(v_lightIdx, fastPath);
|
||||||
#else
|
#else
|
||||||
uint s_lightIdx = v_lightIdx;
|
uint s_lightIdx = v_lightIdx;
|
||||||
#endif
|
#endif
|
||||||
if (s_lightIdx == -1)
|
if (s_lightIdx == -1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -541,9 +541,9 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
utsLightData.shadowTint = s_lightData.shadowTint;
|
utsLightData.shadowTint = s_lightData.shadowTint;
|
||||||
utsLightData.penumbraTint = s_lightData.penumbraTint;
|
utsLightData.penumbraTint = s_lightData.penumbraTint;
|
||||||
|
|
||||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
posInput.positionWS = posInput.positionWS + lightDirection * _ShadowBias;
|
posInput.positionWS = posInput.positionWS + lightDirection * _ShadowBias;
|
||||||
float shadow = EvaluateShadow_Punctual(context, posInput, s_lightData, builtinData, GetNormalForShadowBias(bsdfData), lightDirection, distances);
|
float shadow = EvaluateShadow_Punctual(context, posInput, s_lightData, builtinData, GetNormalForShadowBias(bsdfData), lightDirection, distances);
|
||||||
context.shadowValue = shadow;
|
context.shadowValue = shadow;
|
||||||
@@ -565,7 +565,7 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
}
|
}
|
||||||
|
|
||||||
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -578,12 +578,12 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
{
|
{
|
||||||
uint lightCount, lightStart;
|
uint lightCount, lightStart;
|
||||||
|
|
||||||
#ifndef LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
#ifndef LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
||||||
GetCountAndStart(posInput, LIGHTCATEGORY_AREA, lightStart, lightCount);
|
GetCountAndStart(posInput, LIGHTCATEGORY_AREA, lightStart, lightCount);
|
||||||
#else
|
#else
|
||||||
lightCount = _AreaLightCount;
|
lightCount = _AreaLightCount;
|
||||||
lightStart = _PunctualLightCount;
|
lightStart = _PunctualLightCount;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// COMPILER BEHAVIOR WARNING!
|
// COMPILER BEHAVIOR WARNING!
|
||||||
// If rectangle lights are before line lights, the compiler will duplicate light matrices in VGPR because they are used differently between the two types of lights.
|
// If rectangle lights are before line lights, the compiler will duplicate light matrices in VGPR because they are used differently between the two types of lights.
|
||||||
@@ -648,13 +648,13 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
//Evaluate the shadow part
|
//Evaluate the shadow part
|
||||||
float shadow;
|
float shadow;
|
||||||
posInput.positionWS = posInput.positionWS + utsLightData.lightDirection * _ShadowBias;
|
posInput.positionWS = posInput.positionWS + utsLightData.lightDirection * _ShadowBias;
|
||||||
#if defined(SCREEN_SPACE_SHADOWS_ON) && !defined(_SURFACE_TYPE_TRANSPARENT)
|
#if defined(SCREEN_SPACE_SHADOWS_ON) && !defined(_SURFACE_TYPE_TRANSPARENT)
|
||||||
if ((s_lightData.screenSpaceShadowIndex & SCREEN_SPACE_SHADOW_INDEX_MASK) != INVALID_SCREEN_SPACE_SHADOW)
|
if ((s_lightData.screenSpaceShadowIndex & SCREEN_SPACE_SHADOW_INDEX_MASK) != INVALID_SCREEN_SPACE_SHADOW)
|
||||||
{
|
{
|
||||||
shadow = GetScreenSpaceShadow(posInput, s_lightData.screenSpaceShadowIndex);
|
shadow = GetScreenSpaceShadow(posInput, s_lightData.screenSpaceShadowIndex);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
shadow = EvaluateShadow_RectArea(context, posInput, s_lightData, builtinData, GetNormalForShadowBias(bsdfData), normalize(s_lightData.positionRWS), length(s_lightData.positionRWS));
|
shadow = EvaluateShadow_RectArea(context, posInput, s_lightData, builtinData, GetNormalForShadowBias(bsdfData), normalize(s_lightData.positionRWS), length(s_lightData.positionRWS));
|
||||||
}
|
}
|
||||||
@@ -662,21 +662,21 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
posInput.positionWS = posInput.positionWS - lightDirection * _ShadowBias;
|
posInput.positionWS = posInput.positionWS - lightDirection * _ShadowBias;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
||||||
//utsAggregateLighting.directDiffuse += ltcValue.rgb * ltcValue.a * intensity * s_lightData.diffuseDimmer;
|
//utsAggregateLighting.directDiffuse += ltcValue.rgb * ltcValue.a * intensity * s_lightData.diffuseDimmer;
|
||||||
//utsAggregateLighting.directDiffuse += intensity;
|
//utsAggregateLighting.directDiffuse += intensity;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if(s_lightData.lightType == GPULIGHTTYPE_RECTANGLE)
|
if(s_lightData.lightType == GPULIGHTTYPE_RECTANGLE)
|
||||||
{
|
{
|
||||||
#if SHADEROPTIONS_BARN_DOOR
|
#if SHADEROPTIONS_BARN_DOOR
|
||||||
// Apply the barn door modification to the light data
|
// Apply the barn door modification to the light data
|
||||||
RectangularLightApplyBarnDoor(s_lightData, posInput.positionWS);
|
RectangularLightApplyBarnDoor(s_lightData, posInput.positionWS);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (dot(s_lightData.forward, unL) < FLT_EPS)
|
if (dot(s_lightData.forward, unL) < FLT_EPS)
|
||||||
{
|
{
|
||||||
@@ -691,15 +691,15 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
|
|
||||||
float intensity;
|
float intensity;
|
||||||
// Compute the light attenuation.
|
// Compute the light attenuation.
|
||||||
#ifdef ELLIPSOIDAL_ATTENUATION
|
#ifdef ELLIPSOIDAL_ATTENUATION
|
||||||
// The attenuation volume is an axis-aligned ellipsoid s.t.
|
// The attenuation volume is an axis-aligned ellipsoid s.t.
|
||||||
// r1 = (r + w / 2), r2 = (r + h / 2), r3 = r.
|
// r1 = (r + w / 2), r2 = (r + h / 2), r3 = r.
|
||||||
intensity = EllipsoidalDistanceAttenuation(unL, invHalfDim, s_lightData.rangeAttenuationScale, s_lightData.rangeAttenuationBias);
|
intensity = EllipsoidalDistanceAttenuation(unL, invHalfDim, s_lightData.rangeAttenuationScale, s_lightData.rangeAttenuationBias);
|
||||||
#else
|
#else
|
||||||
// The attenuation volume is an axis-aligned box s.t.
|
// The attenuation volume is an axis-aligned box s.t.
|
||||||
// hX = (r + w / 2), hY = (r + h / 2), hZ = r.
|
// hX = (r + w / 2), hY = (r + h / 2), hZ = r.
|
||||||
intensity = BoxDistanceAttenuation(unL, invHalfDim, s_lightData.rangeAttenuationScale, s_lightData.rangeAttenuationBias);
|
intensity = BoxDistanceAttenuation(unL, invHalfDim, s_lightData.rangeAttenuationScale, s_lightData.rangeAttenuationBias);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(intensity != 0.0f)
|
if(intensity != 0.0f)
|
||||||
{
|
{
|
||||||
@@ -727,12 +727,12 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
float4x3 LD = mul(lightVerts, preLightData.ltcTransformDiffuse);
|
float4x3 LD = mul(lightVerts, preLightData.ltcTransformDiffuse);
|
||||||
float3 formFactorD;
|
float3 formFactorD;
|
||||||
|
|
||||||
#ifdef APPROXIMATE_POLY_LIGHT_AS_SPHERE_LIGHT
|
#ifdef APPROXIMATE_POLY_LIGHT_AS_SPHERE_LIGHT
|
||||||
formFactorD = PolygonFormFactor(LD, real3(0,0,1), 4);
|
formFactorD = PolygonFormFactor(LD, real3(0,0,1), 4);
|
||||||
ltcValue = PolygonIrradianceFromVectorFormFactor(formFactorD);
|
ltcValue = PolygonIrradianceFromVectorFormFactor(formFactorD);
|
||||||
#else
|
#else
|
||||||
ltcValue = PolygonIrradiance(LD);
|
ltcValue = PolygonIrradiance(LD);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
utsLightData.diffuseDimmer *= ltcValue;
|
utsLightData.diffuseDimmer *= ltcValue;
|
||||||
|
|
||||||
@@ -740,36 +740,36 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
// Polygon irradiance in the transformed configuration.
|
// Polygon irradiance in the transformed configuration.
|
||||||
float4x3 LS = mul(lightVerts, preLightData.ltcTransformSpecular);
|
float4x3 LS = mul(lightVerts, preLightData.ltcTransformSpecular);
|
||||||
float3 formFactorS;
|
float3 formFactorS;
|
||||||
#ifdef APPROXIMATE_POLY_LIGHT_AS_SPHERE_LIGHT
|
#ifdef APPROXIMATE_POLY_LIGHT_AS_SPHERE_LIGHT
|
||||||
formFactorS = PolygonFormFactor(LS, real3(0,0,1), 4);
|
formFactorS = PolygonFormFactor(LS, real3(0,0,1), 4);
|
||||||
ltcValue = PolygonIrradianceFromVectorFormFactor(formFactorS);
|
ltcValue = PolygonIrradianceFromVectorFormFactor(formFactorS);
|
||||||
#else
|
#else
|
||||||
ltcValue = PolygonIrradiance(LS);
|
ltcValue = PolygonIrradiance(LS);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
utsLightData.specularDimmer *= ltcValue;
|
utsLightData.specularDimmer *= ltcValue;
|
||||||
|
|
||||||
//Evaluate the shadow part
|
//Evaluate the shadow part
|
||||||
float shadow;
|
float shadow;
|
||||||
posInput.positionWS = posInput.positionWS + lightDirection * _ShadowBias;
|
posInput.positionWS = posInput.positionWS + lightDirection * _ShadowBias;
|
||||||
#if defined(SCREEN_SPACE_SHADOWS_ON) && !defined(_SURFACE_TYPE_TRANSPARENT)
|
#if defined(SCREEN_SPACE_SHADOWS_ON) && !defined(_SURFACE_TYPE_TRANSPARENT)
|
||||||
if ((s_lightData.screenSpaceShadowIndex & SCREEN_SPACE_SHADOW_INDEX_MASK) != INVALID_SCREEN_SPACE_SHADOW)
|
if ((s_lightData.screenSpaceShadowIndex & SCREEN_SPACE_SHADOW_INDEX_MASK) != INVALID_SCREEN_SPACE_SHADOW)
|
||||||
{
|
{
|
||||||
shadow = GetScreenSpaceShadow(posInput, s_lightData.screenSpaceShadowIndex);
|
shadow = GetScreenSpaceShadow(posInput, s_lightData.screenSpaceShadowIndex);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
shadow = EvaluateShadow_RectArea(context, posInput, s_lightData, builtinData, GetNormalForShadowBias(bsdfData), normalize(s_lightData.positionRWS), length(s_lightData.positionRWS));
|
shadow = EvaluateShadow_RectArea(context, posInput, s_lightData, builtinData, GetNormalForShadowBias(bsdfData), normalize(s_lightData.positionRWS), length(s_lightData.positionRWS));
|
||||||
}
|
}
|
||||||
context.shadowValue = shadow;
|
context.shadowValue = shadow;
|
||||||
posInput.positionWS = posInput.positionWS - lightDirection * _ShadowBias;
|
posInput.positionWS = posInput.positionWS - lightDirection * _ShadowBias;
|
||||||
|
|
||||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -818,11 +818,11 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
ltcValue = LTCEvaluate(P1, P2, B, preLightData.ltcTransformSpecular);
|
ltcValue = LTCEvaluate(P1, P2, B, preLightData.ltcTransformSpecular);
|
||||||
utsLightData.specularDimmer *= ltcValue;
|
utsLightData.specularDimmer *= ltcValue;
|
||||||
|
|
||||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
@@ -917,8 +917,12 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
if(hairShadowOpacity > 0)
|
if(hairShadowOpacity > 0)
|
||||||
{
|
{
|
||||||
float3 viewLightDir = TransformWorldToViewDir(customMainLight.lightDirection); // / posInput.deviceDepth; when linearDepth grows large, the movement amount should be lower since we are getting further from the face.
|
float3 viewLightDir = TransformWorldToViewDir(customMainLight.lightDirection); // / posInput.deviceDepth; when linearDepth grows large, the movement amount should be lower since we are getting further from the face.
|
||||||
float shadowLength = _HairShadowDistance * 5.0 * max(0.5, posInput.linearDepth * _HairShadowDistanceScaleFactor) / posInput.linearDepth;
|
float3 cameraDirOS = normalize(TransformWorldToObject(GetCameraPositionWS()));
|
||||||
|
float shadowLengthY = _HairShadowDistance * 5.0 * max(0.5, posInput.linearDepth * _HairShadowDistanceScaleFactor) / posInput.linearDepth;
|
||||||
|
float2 shadowLength = float2(shadowLengthY * 2.0f, shadowLengthY);
|
||||||
|
|
||||||
float2 samplingPoint = (input.positionSS.xy + shadowLength * viewLightDir.xy * (_ScreenSize.xy / float2 (1920.0f, 1080.0f))) * _ScreenSize.zw; // Use 1080p as the reference resolution to achieve consistent shadow lengths across various screen resolutions.
|
float2 samplingPoint = (input.positionSS.xy + shadowLength * viewLightDir.xy * (_ScreenSize.xy / float2 (1920.0f, 1080.0f))) * _ScreenSize.zw; // Use 1080p as the reference resolution to achieve consistent shadow lengths across various screen resolutions.
|
||||||
|
|
||||||
// Then sample the hair buffer, to see if the fragment lands in shadow.
|
// Then sample the hair buffer, to see if the fragment lands in shadow.
|
||||||
float4 hairBuffer = SAMPLE_TEXTURE2D(_HairShadowTex, s_trilinear_clamp_sampler, samplingPoint);
|
float4 hairBuffer = SAMPLE_TEXTURE2D(_HairShadowTex, s_trilinear_clamp_sampler, samplingPoint);
|
||||||
float hairDepth = hairBuffer.r;
|
float hairDepth = hairBuffer.r;
|
||||||
@@ -937,7 +941,7 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
|
|
||||||
float3 finalColorWoEmissive = AccumulateAggregateLighting(utsAggregateLighting);
|
float3 finalColorWoEmissive = AccumulateAggregateLighting(utsAggregateLighting);
|
||||||
|
|
||||||
finalColorWoEmissive = GetExposureAdjustedColor(finalColorWoEmissive );
|
finalColorWoEmissive = GetExposureAdjustedColor(finalColorWoEmissive);
|
||||||
finalColorWoEmissive = ApplyCompensation(finalColorWoEmissive);
|
finalColorWoEmissive = ApplyCompensation(finalColorWoEmissive);
|
||||||
|
|
||||||
finalColor = finalColorWoEmissive + emissive;
|
finalColor = finalColorWoEmissive + emissive;
|
||||||
@@ -967,29 +971,28 @@ void Frag(PackedVaryingsToPS packedInput,
|
|||||||
mDepth = hairPixel > 0.1 ? max(hDepth.r, mDepth) + magic : mDepth; // Move this part of eyebrow in front of the hair
|
mDepth = hairPixel > 0.1 ? max(hDepth.r, mDepth) + magic : mDepth; // Move this part of eyebrow in front of the hair
|
||||||
// Added a max here to prevent sampling of hair in the back
|
// Added a max here to prevent sampling of hair in the back
|
||||||
|
|
||||||
if(cDepth - mDepth > 0.02) discard; // Manual Depth Test.
|
if(cDepth - mDepth > 0.02) // Manual Depth Test
|
||||||
|
{
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
|
||||||
// _EyeBrowBlendingFactor
|
|
||||||
outColor.a = _EyeBrowBlendingFactor;
|
outColor.a = _EyeBrowBlendingFactor;
|
||||||
outColor.a = hairPixel > 0.01 ? outColor.a : 1 ;
|
outColor.a = hairPixel > 0.01 ? outColor.a : 1 ;
|
||||||
|
|
||||||
|
|
||||||
//outColor.rgb = float3(hDepth.rg * 5,0);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(UTS_DEBUG_SHADOWMAP) || defined(UTS_DEBUG_SELFSHADOW)
|
#if defined(UTS_DEBUG_SHADOWMAP) || defined(UTS_DEBUG_SELFSHADOW)
|
||||||
outColor.rgb = 1;
|
outColor.rgb = 1;
|
||||||
#ifdef UTS_DEBUG_SELFSHADOW
|
#ifdef UTS_DEBUG_SELFSHADOW
|
||||||
outColor.rgb = min(finalColor, outColor.rgb);
|
outColor.rgb = min(finalColor, outColor.rgb);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef UTS_DEBUG_SHADOWMAP
|
#ifdef UTS_DEBUG_SHADOWMAP
|
||||||
#ifdef UTS_DEBUG_SHADOWMAP_BINALIZATION
|
#ifdef UTS_DEBUG_SHADOWMAP_BINALIZATION
|
||||||
outColor.rgb = min(context.shadowValue < 0.9f ? clamp(context.shadowValue - 0.2, 0.0, 0.9) : 1.0f, outColor.rgb);
|
outColor.rgb = min(context.shadowValue < 0.9f ? clamp(context.shadowValue - 0.2, 0.0, 0.9) : 1.0f, outColor.rgb);
|
||||||
#else
|
#else
|
||||||
outColor.rgb = min(context.shadowValue, outColor.rgb);
|
outColor.rgb = min(context.shadowValue, outColor.rgb);
|
||||||
#endif
|
#endif
|
||||||
#endif // ifdef UTS_DEBUG_SHADOWMAP
|
#endif // ifdef UTS_DEBUG_SHADOWMAP
|
||||||
#endif // defined(UTS_DEBUG_SHADOWMAP) || defined(UTS_DEBUG_SELFSHADOW)
|
#endif // defined(UTS_DEBUG_SHADOWMAP) || defined(UTS_DEBUG_SELFSHADOW)
|
||||||
|
|
||||||
#ifdef _DEPTHOFFSET_ON
|
#ifdef _DEPTHOFFSET_ON
|
||||||
|
|||||||
@@ -277,10 +277,8 @@ void UTS_MainLight(LightLoopContext lightLoopContext, FragInputs input, UTSLight
|
|||||||
float4 _Set_RimLightMask_var = tex2D(_Set_RimLightMask, TRANSFORM_TEX(Set_UV0, _Set_RimLightMask));
|
float4 _Set_RimLightMask_var = tex2D(_Set_RimLightMask, TRANSFORM_TEX(Set_UV0, _Set_RimLightMask));
|
||||||
float3 _Is_LightColor_RimLight_var = lerp(_RimLightColor.rgb, (_RimLightColor.rgb * Set_LightColor), _Is_LightColor_RimLight);
|
float3 _Is_LightColor_RimLight_var = lerp(_RimLightColor.rgb, (_RimLightColor.rgb * Set_LightColor), _Is_LightColor_RimLight);
|
||||||
float _RimArea_var = dot(utsData.normalDirection, utsData.viewDirection);
|
float _RimArea_var = dot(utsData.normalDirection, utsData.viewDirection);
|
||||||
if(_Is_BlendAddToRimColor == 1)
|
_RimArea_var = lerp(_RimArea_var, 1 - _RimArea_var,_Is_BlendAddToRimColor);
|
||||||
{
|
|
||||||
_RimArea_var = 1 - _RimArea_var;
|
|
||||||
}
|
|
||||||
float _RimLightPower_var = pow(_RimArea_var, exp2(lerp(3, 0, _RimLight_Power)));
|
float _RimLightPower_var = pow(_RimArea_var, exp2(lerp(3, 0, _RimLight_Power)));
|
||||||
float _Rimlight_InsideMask_var = saturate(lerp((0.0 + ((_RimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _RimLightPower_var), _RimLight_FeatherOff));
|
float _Rimlight_InsideMask_var = saturate(lerp((0.0 + ((_RimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _RimLightPower_var), _RimLight_FeatherOff));
|
||||||
float _VertHalfLambert_var = 0.5 * dot(utsData.normalDirection, lightDirection) + 0.5;
|
float _VertHalfLambert_var = 0.5 * dot(utsData.normalDirection, lightDirection) + 0.5;
|
||||||
@@ -296,15 +294,8 @@ void UTS_MainLight(LightLoopContext lightLoopContext, FragInputs input, UTSLight
|
|||||||
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
||||||
Set_RimLight *= _RimLightVisible;
|
Set_RimLight *= _RimLightVisible;
|
||||||
Set_RimLight *= _RimLight_Strength;
|
Set_RimLight *= _RimLight_Strength;
|
||||||
float3 _RimLight_var;
|
|
||||||
if(_Is_BlendAddToRimColor == 0)
|
float3 _RimLight_var = lerp(lerp(Set_HighColor, (Set_HighColor * Set_RimLight), _RimLight), lerp(Set_HighColor, (Set_HighColor + Set_RimLight), _RimLight), _Is_BlendAddToRimColor);
|
||||||
{
|
|
||||||
_RimLight_var = lerp(Set_HighColor, (Set_HighColor * Set_RimLight), _RimLight);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_RimLight_var = lerp(Set_HighColor, (Set_HighColor + Set_RimLight), _RimLight);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (any(Set_RimLight) * maskRimEnabled)
|
if (any(Set_RimLight) * maskRimEnabled)
|
||||||
{
|
{
|
||||||
@@ -317,16 +308,8 @@ void UTS_MainLight(LightLoopContext lightLoopContext, FragInputs input, UTSLight
|
|||||||
#else
|
#else
|
||||||
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
||||||
Set_RimLight *= _RimLight_Strength;
|
Set_RimLight *= _RimLight_Strength;
|
||||||
float3 _RimLight_var;
|
|
||||||
if(_Is_BlendAddToRimColor == 0)
|
|
||||||
{
|
|
||||||
_RimLight_var = lerp(Set_HighColor, (Set_HighColor * Set_RimLight), _RimLight);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_RimLight_var = lerp(Set_HighColor, (Set_HighColor + Set_RimLight), _RimLight);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
float3 _RimLight_var = lerp(lerp(Set_HighColor, (Set_HighColor * Set_RimLight), _RimLight), lerp(Set_HighColor, (Set_HighColor + Set_RimLight), _RimLight), _Is_BlendAddToRimColor);
|
||||||
_RimLight_var = lerp(_RimLight_var, (_RimLight_var * ((1.0 - Set_FinalShadowMask) + (Set_FinalShadowMask * _TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow);
|
_RimLight_var = lerp(_RimLight_var, (_RimLight_var * ((1.0 - Set_FinalShadowMask) + (Set_FinalShadowMask * _TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -164,10 +164,8 @@ void UTS_OtherLights(LightLoopContext lightLoopContext, FragInputs input, UTSLig
|
|||||||
float4 _Set_RimLightMask_var = tex2D(_Set_RimLightMask, TRANSFORM_TEX(Set_UV0, _Set_RimLightMask));
|
float4 _Set_RimLightMask_var = tex2D(_Set_RimLightMask, TRANSFORM_TEX(Set_UV0, _Set_RimLightMask));
|
||||||
float3 _Is_LightColor_RimLight_var = lerp(_RimLightColor.rgb, (_RimLightColor.rgb * Set_LightColor), _Is_LightColor_RimLight);
|
float3 _Is_LightColor_RimLight_var = lerp(_RimLightColor.rgb, (_RimLightColor.rgb * Set_LightColor), _Is_LightColor_RimLight);
|
||||||
float _RimArea_var = dot(surfaceData.normalWS, V);
|
float _RimArea_var = dot(surfaceData.normalWS, V);
|
||||||
if (_Is_BlendAddToRimColor == 1)
|
_RimArea_var = lerp(_RimArea_var, 1 - _RimArea_var, _Is_BlendAddToRimColor);
|
||||||
{
|
|
||||||
_RimArea_var = 1 - _RimArea_var;
|
|
||||||
}
|
|
||||||
float _RimLightPower_var = pow(_RimArea_var, exp2(lerp(3, 0, _RimLight_Power)));
|
float _RimLightPower_var = pow(_RimArea_var, exp2(lerp(3, 0, _RimLight_Power)));
|
||||||
float _Rimlight_InsideMask_var = saturate(lerp((0.0 + ((_RimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _RimLightPower_var), _RimLight_FeatherOff));
|
float _Rimlight_InsideMask_var = saturate(lerp((0.0 + ((_RimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _RimLightPower_var), _RimLight_FeatherOff));
|
||||||
float _VertHalfLambert_var = 0.5 * dot(surfaceData.normalWS, lightDirection) + 0.5;
|
float _VertHalfLambert_var = 0.5 * dot(surfaceData.normalWS, lightDirection) + 0.5;
|
||||||
@@ -187,14 +185,6 @@ void UTS_OtherLights(LightLoopContext lightLoopContext, FragInputs input, UTSLig
|
|||||||
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
||||||
Set_RimLight *= _RimLightVisible;
|
Set_RimLight *= _RimLightVisible;
|
||||||
Set_RimLight *= _RimLight_Strength;
|
Set_RimLight *= _RimLight_Strength;
|
||||||
if(_Is_BlendAddToRimColor == 0)
|
|
||||||
{
|
|
||||||
_HighColor_var = lerp(_HighColor_var, (_HighColor_var * Set_RimLight) * 1, _RimLight);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_HighColor_var = lerp(_HighColor_var, (_HighColor_var + Set_RimLight) * 1, _RimLight);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (any(Set_RimLight) * maskRimEnabled)
|
if (any(Set_RimLight) * maskRimEnabled)
|
||||||
{
|
{
|
||||||
@@ -216,21 +206,17 @@ void UTS_OtherLights(LightLoopContext lightLoopContext, FragInputs input, UTSLig
|
|||||||
channelOutAlpha = _HighlightVisible;
|
channelOutAlpha = _HighlightVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Rim light
|
||||||
|
diffuseTerm = lerp(lerp(diffuseTerm, (diffuseTerm * Set_RimLight), _RimLight), lerp(diffuseTerm, (diffuseTerm + Set_RimLight), _RimLight), _Is_BlendAddToRimColor);
|
||||||
#else
|
#else
|
||||||
_HighColor_var *= _TweakHighColorMask_var;
|
_HighColor_var *= _TweakHighColorMask_var;
|
||||||
|
|
||||||
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
||||||
Set_RimLight *= _RimLight_Strength;
|
Set_RimLight *= _RimLight_Strength;
|
||||||
if (_Is_BlendAddToRimColor == 0)
|
|
||||||
{
|
|
||||||
_HighColor_var = lerp(_HighColor_var, (_HighColor_var * Set_RimLight), _RimLight);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_HighColor_var = lerp(_HighColor_var, (_HighColor_var + Set_RimLight), _RimLight);
|
|
||||||
}
|
|
||||||
|
|
||||||
diffuseTerm = diffuseTerm + lerp(lerp(_HighColor_var, (_HighColor_var * ((1.0 - Set_FinalShadowMask) + (Set_FinalShadowMask * _TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow), float3(0, 0, 0), _Is_Filter_HiCutPointLightColor);
|
diffuseTerm = diffuseTerm + lerp(lerp(_HighColor_var, (_HighColor_var * ((1.0 - Set_FinalShadowMask) + (Set_FinalShadowMask * _TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow), float3(0, 0, 0), _Is_Filter_HiCutPointLightColor);
|
||||||
|
// Rim light
|
||||||
|
diffuseTerm = lerp(lerp(diffuseTerm, (diffuseTerm * Set_RimLight), _RimLight), lerp(diffuseTerm, (diffuseTerm + Set_RimLight), _RimLight), _Is_BlendAddToRimColor);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// PBR----------------------------------------------------------------------------------------------------------------
|
// PBR----------------------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public class UTSHairShadowPass : DrawRenderersCustomPass
|
|||||||
protected override void Setup(ScriptableRenderContext renderContext, CommandBuffer cmd)
|
protected override void Setup(ScriptableRenderContext renderContext, CommandBuffer cmd)
|
||||||
{
|
{
|
||||||
_outputRTHandle?.Release();
|
_outputRTHandle?.Release();
|
||||||
_outputRTHandle = RTHandles.Alloc(Screen.width, Screen.height, colorFormat: GraphicsFormat.D32_SFloat, filterMode: FilterMode.Bilinear, wrapMode: TextureWrapMode.Clamp, name: Output_RT_Name);
|
_outputRTHandle = RTHandles.Alloc(Screen.width, Screen.height, colorFormat: GraphicsFormat.D32_SFloat, filterMode: FilterMode.Bilinear, wrapMode: TextureWrapMode.Clamp, isShadowMap: true, name: Output_RT_Name);
|
||||||
|
|
||||||
SetEnable(true);
|
SetEnable(true);
|
||||||
}
|
}
|
||||||
@@ -54,13 +54,13 @@ public class UTSHairShadowPass : DrawRenderersCustomPass
|
|||||||
var mask = RenderStateMask.Nothing;
|
var mask = RenderStateMask.Nothing;
|
||||||
var stateBlock = new RenderStateBlock(mask)
|
var stateBlock = new RenderStateBlock(mask)
|
||||||
{
|
{
|
||||||
depthState = new DepthState(depthWrite, depthCompareFunction),
|
depthState = new DepthState(true, CompareFunction.LessEqual),
|
||||||
};
|
};
|
||||||
|
|
||||||
var result = new RendererListDesc(HDShaderPassNames.s_DepthForwardOnlyName, ctx.cullingResults, ctx.hdCamera.camera)
|
var result = new RendererListDesc(HDShaderPassNames.s_DepthForwardOnlyName, ctx.cullingResults, ctx.hdCamera.camera)
|
||||||
{
|
{
|
||||||
renderQueueRange = GetRenderQueueRange(renderQueueType),
|
renderQueueRange = GetRenderQueueRange(RenderQueueType.All),
|
||||||
sortingCriteria = sortingCriteria,
|
sortingCriteria = SortingCriteria.CommonOpaque,
|
||||||
excludeObjectMotionVectors = false,
|
excludeObjectMotionVectors = false,
|
||||||
stateBlock = stateBlock,
|
stateBlock = stateBlock,
|
||||||
renderingLayerMask = renderingLayerMask,
|
renderingLayerMask = renderingLayerMask,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using UnityEngine.Rendering.HighDefinition;
|
|||||||
[HideInInspector]
|
[HideInInspector]
|
||||||
public class UTSOutlinePass : DrawRenderersCustomPass
|
public class UTSOutlinePass : DrawRenderersCustomPass
|
||||||
{
|
{
|
||||||
public UnityEngine.RenderingLayerMask renderingLayerMask;
|
private ShaderTagId outlineTag = new("Outline");
|
||||||
|
|
||||||
protected override void Execute(CustomPassContext ctx)
|
protected override void Execute(CustomPassContext ctx)
|
||||||
{
|
{
|
||||||
@@ -19,8 +19,6 @@ public class UTSOutlinePass : DrawRenderersCustomPass
|
|||||||
|
|
||||||
Shader.SetGlobalFloat("_Outline_MaxWidth", utsRenderer.outlineMaxWidth.value * 0.01f);
|
Shader.SetGlobalFloat("_Outline_MaxWidth", utsRenderer.outlineMaxWidth.value * 0.01f);
|
||||||
|
|
||||||
var outlineTag = new ShaderTagId("Outline");
|
|
||||||
|
|
||||||
var mask = RenderStateMask.Nothing;
|
var mask = RenderStateMask.Nothing;
|
||||||
var stateBlock = new RenderStateBlock(mask)
|
var stateBlock = new RenderStateBlock(mask)
|
||||||
{
|
{
|
||||||
@@ -33,13 +31,9 @@ public class UTSOutlinePass : DrawRenderersCustomPass
|
|||||||
var result = new UnityEngine.Rendering.RendererUtils.RendererListDesc(outlineTag, ctx.cullingResults, ctx.hdCamera.camera)
|
var result = new UnityEngine.Rendering.RendererUtils.RendererListDesc(outlineTag, ctx.cullingResults, ctx.hdCamera.camera)
|
||||||
{
|
{
|
||||||
rendererConfiguration = renderConfig,
|
rendererConfiguration = renderConfig,
|
||||||
renderQueueRange = GetRenderQueueRange(renderQueueType),
|
renderQueueRange = GetRenderQueueRange(RenderQueueType.All),
|
||||||
sortingCriteria = sortingCriteria,
|
|
||||||
excludeObjectMotionVectors = false,
|
excludeObjectMotionVectors = false,
|
||||||
overrideMaterial = overrideMaterial,
|
|
||||||
overrideMaterialPassIndex = (overrideMaterial != null) ? overrideMaterial.FindPass(overrideMaterialPassName) : 0,
|
|
||||||
stateBlock = stateBlock,
|
stateBlock = stateBlock,
|
||||||
renderingLayerMask = renderingLayerMask,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
CoreUtils.DrawRendererList(ctx.renderContext, ctx.cmd, ctx.renderContext.CreateRendererList(result));
|
CoreUtils.DrawRendererList(ctx.renderContext, ctx.cmd, ctx.renderContext.CreateRendererList(result));
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ namespace Unity.Toonshader
|
|||||||
_outlinePass = new()
|
_outlinePass = new()
|
||||||
{
|
{
|
||||||
name = "UTS Outline",
|
name = "UTS Outline",
|
||||||
renderingLayerMask = _renderSetting.outlineSetting.renderingLayer
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_hairShadowPass = new()
|
_hairShadowPass = new()
|
||||||
@@ -41,27 +40,26 @@ namespace Unity.Toonshader
|
|||||||
[RuntimeInitializeOnLoadMethod]
|
[RuntimeInitializeOnLoadMethod]
|
||||||
public static void RegisterCustomPasses()
|
public static void RegisterCustomPasses()
|
||||||
{
|
{
|
||||||
CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.AfterOpaqueAndSky, _outlinePass);
|
|
||||||
CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.AfterOpaqueDepthAndNormal, _hairShadowPass);
|
CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.AfterOpaqueDepthAndNormal, _hairShadowPass);
|
||||||
|
CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.BeforePostProcess, _outlinePass);
|
||||||
|
|
||||||
_outlinePass.enabled = _renderSetting.outlineSetting.enable;
|
|
||||||
_hairShadowPass.SetEnable(_renderSetting.hairShadowSetting.enable);
|
_hairShadowPass.SetEnable(_renderSetting.hairShadowSetting.enable);
|
||||||
|
_outlinePass.enabled = _renderSetting.outlineSetting.enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void UnregisterGlobalCustomPass()
|
public static void UnregisterGlobalCustomPass()
|
||||||
{
|
{
|
||||||
CustomPassVolume.UnregisterGlobalCustomPass(_outlinePass);
|
|
||||||
CustomPassVolume.UnregisterGlobalCustomPass(_hairShadowPass);
|
CustomPassVolume.UnregisterGlobalCustomPass(_hairShadowPass);
|
||||||
|
CustomPassVolume.UnregisterGlobalCustomPass(_outlinePass);
|
||||||
_hairShadowPass.Release();
|
_hairShadowPass.Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void NotifyRendererSettingChanged()
|
public static void NotifyRendererSettingChanged()
|
||||||
{
|
{
|
||||||
_outlinePass.enabled = _renderSetting.outlineSetting.enable;
|
|
||||||
_outlinePass.renderingLayerMask = _renderSetting.outlineSetting.renderingLayer;
|
|
||||||
|
|
||||||
_hairShadowPass.SetEnable(_renderSetting.hairShadowSetting.enable);
|
_hairShadowPass.SetEnable(_renderSetting.hairShadowSetting.enable);
|
||||||
_hairShadowPass.renderingLayerMask = _renderSetting.hairShadowSetting.CasterRenderingLayer;
|
_hairShadowPass.renderingLayerMask = _renderSetting.hairShadowSetting.CasterRenderingLayer;
|
||||||
|
|
||||||
|
_outlinePass.enabled = _renderSetting.outlineSetting.enable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "com.misaki.hdrp-toon",
|
"name": "com.misaki.hdrp-toon",
|
||||||
"version": "2.0.1",
|
"version": "2.0.4",
|
||||||
"displayName": "HDRP Toon",
|
"displayName": "HDRP Toon",
|
||||||
"description": "A high quality toon shader for High Definition Render Pipeline(HDRP)",
|
"description": "A high quality toon shader for High Definition Render Pipeline(HDRP)",
|
||||||
|
"changelogUrl": "https://git.personalnas.com/Misaki/hdrp-toon/src/branch/develop/CHANGELOG.md",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"Toon",
|
"Toon",
|
||||||
"HDRP",
|
"HDRP",
|
||||||
|
|||||||
Reference in New Issue
Block a user