diff --git a/Assets/Scenes/Oasis/OasisScene.unity b/Assets/Scenes/Oasis/OasisScene.unity index 98bcafd..acc70ec 100644 --- a/Assets/Scenes/Oasis/OasisScene.unity +++ b/Assets/Scenes/Oasis/OasisScene.unity @@ -4862,6 +4862,10 @@ PrefabInstance: propertyPath: m_Enabled value: 1 objectReference: {fileID: 0} + - target: {fileID: 5777780407979046064, guid: c708a3b79cd542b42bbfedb17e213bc1, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} - target: {fileID: 7888303496483045073, guid: c708a3b79cd542b42bbfedb17e213bc1, type: 3} propertyPath: m_IsActive value: 0 diff --git a/Assets/Scenes/Oasis/Shaders/TestShader.shader b/Assets/Scenes/Oasis/Shaders/TestShader.shader new file mode 100644 index 0000000..02c6cd5 --- /dev/null +++ b/Assets/Scenes/Oasis/Shaders/TestShader.shader @@ -0,0 +1,138 @@ +Shader "Unlit/TestShader" +{ + SubShader + { + Pass + { + Cull Off + HLSLPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + #include "./test.hlsl" + #pragma multi_compile_local_fragment __ _Red_ON + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + }; + + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + return o; + } + + half4 frag (v2f i) : SV_Target + { + return GetCol(); + } + ENDHLSL + } + + + Pass + { + Name "DepthOnly" + Tags + { + "LightMode" = "DepthOnly" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + ColorMask R + Cull Off + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex DepthOnlyVertex + #pragma fragment DepthOnlyFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _ALPHATEST_ON + #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + #pragma multi_compile_vertex _ ENABLE_VS_SKINNING + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl" + ENDHLSL + } + +Pass + { + Name "DepthNormals" + Tags + { + "LightMode" = "DepthNormals" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + Cull Off + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex DepthNormalsVertex + #pragma fragment DepthNormalsFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _NORMALMAP + #pragma shader_feature_local _PARALLAXMAP + #pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED + #pragma shader_feature_local _ALPHATEST_ON + #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE + + // ------------------------------------- + // Universal Pipeline keywords + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + #pragma multi_compile_vertex _ ENABLE_VS_SKINNING + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl" + ENDHLSL + } + } +} diff --git a/Assets/Scenes/Oasis/Shaders/TestShader.shader.meta b/Assets/Scenes/Oasis/Shaders/TestShader.shader.meta new file mode 100644 index 0000000..87ab625 --- /dev/null +++ b/Assets/Scenes/Oasis/Shaders/TestShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6cc859748a9d4c740811e9fd3e05c334 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Oasis/Shaders/Unlit_TestShader.mat b/Assets/Scenes/Oasis/Shaders/Unlit_TestShader.mat new file mode 100644 index 0000000..247767f --- /dev/null +++ b/Assets/Scenes/Oasis/Shaders/Unlit_TestShader.mat @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Unlit_TestShader + m_Shader: {fileID: 4800000, guid: 6cc859748a9d4c740811e9fd3e05c334, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _Red_ON + m_InvalidKeywords: + - + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: [] + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/Scenes/Oasis/Shaders/Unlit_TestShader.mat.meta b/Assets/Scenes/Oasis/Shaders/Unlit_TestShader.mat.meta new file mode 100644 index 0000000..c01adda --- /dev/null +++ b/Assets/Scenes/Oasis/Shaders/Unlit_TestShader.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1767071aeb17c44591105092b5c2e68 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Oasis/Shaders/test.hlsl b/Assets/Scenes/Oasis/Shaders/test.hlsl new file mode 100644 index 0000000..15700ca --- /dev/null +++ b/Assets/Scenes/Oasis/Shaders/test.hlsl @@ -0,0 +1,11 @@ +#ifndef UNITY_TEST_INCLUDED +#define UNITY_TEST_INCLUDED +half4 GetCol() +{ + #if _Red_ON + return half4(1,0,0,1); + #else + return half4(0,0,0,1); + #endif +} +#endif diff --git a/Assets/Scenes/Oasis/Shaders/test.hlsl.meta b/Assets/Scenes/Oasis/Shaders/test.hlsl.meta new file mode 100644 index 0000000..55eb5ad --- /dev/null +++ b/Assets/Scenes/Oasis/Shaders/test.hlsl.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3cc7817acce74f94b83ee7d9e35e0a5a +timeCreated: 1754031989 \ No newline at end of file diff --git a/Assets/Settings/Mobile/Mobile_High_Renderer.asset b/Assets/Settings/Mobile/Mobile_High_Renderer.asset index 6ba74bb..29ae5df 100644 --- a/Assets/Settings/Mobile/Mobile_High_Renderer.asset +++ b/Assets/Settings/Mobile/Mobile_High_Renderer.asset @@ -142,10 +142,10 @@ MonoBehaviour: m_Active: 1 settings: RenderPassEvent: 450 - AmbientIntensity: 1.63 - ShadowIntensity: 0 - ShadowSharpness: 0 - ConeAngle: 8.1 + AmbientIntensity: 1.44 + ShadowIntensity: 0.2 + ShadowSharpness: 0.9 + ConeAngle: 16.21 CapsuleAOMat: {fileID: 2100000, guid: c90d40f0d9828744b916dbed0eed9db6, type: 2} --- !u!114 &-5418649131825517062 MonoBehaviour: diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/XRenderFeatures/AmbientOcclusion/CapsuleAO.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/XRenderFeatures/AmbientOcclusion/CapsuleAO.cs index 84be89c..e93f323 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/XRenderFeatures/AmbientOcclusion/CapsuleAO.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/XRenderFeatures/AmbientOcclusion/CapsuleAO.cs @@ -42,7 +42,6 @@ namespace X.Rendering.Feature CapsuleAOPass capsuleAOPass; public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { - if (renderingData.cameraData.cameraType == CameraType.Game) { renderer.EnqueuePass(capsuleAOPass); } diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/XRenderFeatures/AmbientOcclusion/Shader/CapsuleAO.shader b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/XRenderFeatures/AmbientOcclusion/Shader/CapsuleAO.shader index adb4412..2327928 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/XRenderFeatures/AmbientOcclusion/Shader/CapsuleAO.shader +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/XRenderFeatures/AmbientOcclusion/Shader/CapsuleAO.shader @@ -158,15 +158,30 @@ Shader "XRP/CapsuleAO" // 地面点 p 到 ab 最近点 x, 向量 xp = d float3 d = pa - h * ba; float l = length(d); - float o = 1.0 - max(0.0, dot(-d, n)) * r * r / (l * l * l); + float nl = dot(-d, n); + float o = 1.0 - max(0.0, nl) * r * r / (l * l * l); // multiplier o *= 1.0 + r*(l-r)/(l*l); o = sqrt(o * o * o); ao *= o; } + ao = saturate(lerp(1, ao, intensity)); return clamp(lerp(1, ao, _AmbientIntensity), 0.6, 1); } - + + float CalcSphereOcclusion2(in float3 pos, in float3 nor, in float4 sph) + { + float3 di = sph.xyz - pos; + float l = length(di); + float rad = sph.w; + float nl = max(0.0, dot(nor, di / l)); + return (1.0 - nl * rad * rad / (l * l )); + + // float3 di = (sph.xyz - pos) / sph.w; + // float sqL = dot(di, di); + // return clamp(1.0 - dot(nor, di) * rsqrt(sqL * sqL * sqL), 0.1, 1); + } + // Sphere occlusion float CalcSphereOcclusion( in float3 pos, in float3 nor, in float4 sph ) { @@ -174,13 +189,14 @@ Shader "XRP/CapsuleAO" float l = length(di); float nl = (dot(nor,di/l)); float rad = sph.w; - float v = 1 - rad - nl; - if(l < 0.55) - return abs((1 - rad - nl));// + _ShadowSharpness; - + // float v = 1-nl-rad; + // if(l < 0.95 && v < _ShadowSharpness) + // { + // return abs(v); + // } float h = l < rad ? 1.0 : l / rad; - + float h2 = h * h; float k2 = 1.0 - h2*nl*nl; @@ -203,7 +219,7 @@ Shader "XRP/CapsuleAO" #endif } - return clamp(1.0 - res, 0.6, 1); + return 1.0 - res; } float CalcCapsuleOcclusionByIndexV2(float3 p, float3 n, uint s, uint e, float4 cone, float intensity) @@ -211,16 +227,15 @@ Shader "XRP/CapsuleAO" float ao = 1.0; for (uint i = s; i < e; ++i) { - Capsule capsule = _CapsuleData[i + int(_ShadowIntensity)]; + Capsule capsule = _CapsuleData[i]; float3 ba = capsule.b - capsule.a; float3 pa = p - capsule.a; float l = dot(ba, ba); // p 在 ba 上投影长度与 ba 长度比值 float t = /* abs(l) < 1e-8f ? 0.0 : */ saturate(dot(pa, ba) / l); float3 positionToRay = capsule.a + t * ba; - ao = min(ao, CalcSphereOcclusion(p, n, float4(positionToRay, capsule.radius))); + ao *= CalcSphereOcclusion2(p, n, float4(positionToRay, capsule.radius)); } - return ao; ao = saturate(lerp(1, ao, intensity)); return saturate(lerp(1, ao, _AmbientIntensity)); } @@ -369,14 +384,14 @@ Shader "XRP/CapsuleAO" { float intensity = 1; Character c = _CharacterData[i]; - // if (IsInBounds(worldPos, c.position, c.radius*10, intensity)) + if (IsInBounds(worldPos, c.position, c.radius*2, intensity)) { float tempIntensity = intensity / saturate(1 * smoothstep(0.1, 2, c.lightDir.w)); // float tempShadow = CalcCapsuleShadowByIndex(worldPos, _MainLightPosition.xyz, c.startID, c.endID, _ShadowSharpness, tempIntensity); - // float tempShadow = CalcCapsuleShadowByIndexV2(worldPos, cone, c.startID, c.endID, _ShadowSharpness, tempIntensity); + // //float tempShadow = CalcCapsuleShadowByIndexV2(worldPos, cone, c.startID, c.endID, _ShadowSharpness, tempIntensity); // shadow = min(shadow, tempShadow); - // occlusion *= CalcCapsuleOcclusionByIndex(worldPos, worldNormal, c.startID, c.endID, intensity); - occlusion *= CalcCapsuleOcclusionByIndexV2(worldPos, worldNormal, c.startID, c.endID,cone, intensity); + //occlusion *= CalcCapsuleOcclusionByIndex(worldPos, worldNormal, c.startID, c.endID, intensity); + occlusion *= CalcCapsuleOcclusionByIndexV2(worldPos, worldNormal, c.startID, c.endID,cone, intensity); } } return shadow * occlusion;