summaryrefslogtreecommitdiff
path: root/VRCSDK3AvatarsLegacy/Assets/_PoiyomiShaders/Shaders/Includes/CGI_PoiOutlineVert.cginc
diff options
context:
space:
mode:
authortylermurphy534 <tylermurphy534@gmail.com>2022-11-06 15:12:42 -0500
committertylermurphy534 <tylermurphy534@gmail.com>2022-11-06 15:12:42 -0500
commiteb84bb298d2b95aec7b2ae12cbf25ac64f25379a (patch)
treeefd616a157df06ab661c6d56651853431ac6b08b /VRCSDK3AvatarsLegacy/Assets/_PoiyomiShaders/Shaders/Includes/CGI_PoiOutlineVert.cginc
downloadunityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.tar.gz
unityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.tar.bz2
unityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.zip
move to self host
Diffstat (limited to 'VRCSDK3AvatarsLegacy/Assets/_PoiyomiShaders/Shaders/Includes/CGI_PoiOutlineVert.cginc')
-rw-r--r--VRCSDK3AvatarsLegacy/Assets/_PoiyomiShaders/Shaders/Includes/CGI_PoiOutlineVert.cginc90
1 files changed, 90 insertions, 0 deletions
diff --git a/VRCSDK3AvatarsLegacy/Assets/_PoiyomiShaders/Shaders/Includes/CGI_PoiOutlineVert.cginc b/VRCSDK3AvatarsLegacy/Assets/_PoiyomiShaders/Shaders/Includes/CGI_PoiOutlineVert.cginc
new file mode 100644
index 00000000..dc3fa7ef
--- /dev/null
+++ b/VRCSDK3AvatarsLegacy/Assets/_PoiyomiShaders/Shaders/Includes/CGI_PoiOutlineVert.cginc
@@ -0,0 +1,90 @@
+#ifndef OutlineVert
+ #define OutlineVert
+
+ #include "CGI_PoiV2F.cginc"
+
+ uint _OutlineMode;
+ float4 _OutlinePersonaDirection;
+ float4 _OutlineDropShadowOffset;
+ float _OutlineUseVertexColors;
+ float _OutlineFixedSize;
+
+ sampler2D _OutlineMask; float4 _OutlineMask_ST;
+ v2f vert(appdata v)
+ {
+ UNITY_SETUP_INSTANCE_ID(v);
+ v2f o;
+ UNITY_INITIALIZE_OUTPUT(v2f, o);
+ UNITY_TRANSFER_INSTANCE_ID(v, o);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+
+ o.uv0.xy = v.uv0.xy;
+ o.uv0.zw = v.uv1.xy;
+ o.uv1.xy = v.uv2.xy;
+ o.uv1.zw = v.uv3.xy;
+
+ #ifdef POI_MIRROR
+ applyMirrorRenderVert(v.vertex);
+ #endif
+
+ o.uv0.xy = v.uv0 + _OutlineGlobalPan.xy * _Time.y;
+ float outlineMask = 1;
+ #ifndef SIMPLE
+ outlineMask = poiMax(tex2Dlod(_OutlineMask, float4(TRANSFORM_TEX(o.uv0.xy, _OutlineMask) + _Time.x * _OutlineTexturePan.zw, 0, 0)).rgb);
+ #endif
+ UNITY_BRANCH
+ if (_OutlineUseVertexColors == 0)
+ {
+ o.normal = UnityObjectToWorldNormal(v.normal);
+ }
+ else
+ {
+ o.normal = UnityObjectToWorldNormal(v.color);
+ }
+ half offsetMultiplier = 1;
+ half distanceOffset = 1;
+ UNITY_BRANCH
+ if(_OutlineFixedSize)
+ {
+ distanceOffset *= distance(_WorldSpaceCameraPos, mul(unity_ObjectToWorld, v.vertex).xyz);
+ }
+
+ float3 offset = o.normal * (_LineWidth / 100) * outlineMask * distanceOffset;
+
+ UNITY_BRANCH
+ if(_OutlineMode == 2)
+ {
+ float3 lightDirection = poiLight.direction = normalize(_WorldSpaceLightPos0 + unity_SHAr.xyz + unity_SHAg.xyz + unity_SHAb.xyz);
+ offsetMultiplier = saturate(dot(lightDirection, o.normal));
+ offset *= offsetMultiplier;
+ offset *= distanceOffset;
+ }
+ else if(_OutlineMode == 3)
+ {
+ half3 viewNormal = mul((float3x3)UNITY_MATRIX_V, o.normal);
+ offsetMultiplier = saturate(dot(viewNormal.xy, normalize(_OutlinePersonaDirection.xy)));
+
+ offset *= offsetMultiplier;
+ offset *= distanceOffset;
+ }
+ else if(_OutlineMode == 4)
+ {
+ offset = mul((float3x3)transpose(UNITY_MATRIX_V), _OutlineDropShadowOffset);
+ offset *= distanceOffset;
+ }
+
+ o.worldPos = mul(unity_ObjectToWorld, v.vertex) + float4(offset, 0);
+ o.modelPos = mul(unity_ObjectToWorld, float4(0, 0, 0, 1));
+ o.pos = UnityWorldToClipPos(o.worldPos);
+ o.grabPos = ComputeGrabScreenPos(o.pos);
+ o.angleAlpha = 1;
+ #ifdef POI_RANDOM
+ o.angleAlpha = ApplyAngleBasedRendering(o.modelPos, o.worldPos);
+ #endif
+
+ UNITY_TRANSFER_SHADOW(o, o.uv0);
+ UNITY_TRANSFER_FOG(o, o.pos);
+ return o;
+ }
+
+#endif \ No newline at end of file