summaryrefslogtreecommitdiffstats
path: root/2ner.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-02-12 16:10:26 -0800
committeryum <yum.food.vr@gmail.com>2025-02-12 16:10:26 -0800
commit19bdcec2b69aff8b75d5c9c6c4d0cb4d0d9ec5c3 (patch)
tree0bbc695c04af083c0c2408d6dbdef35ae386b3f8 /2ner.cginc
parentcaf02458737f93b20978f41613ad5b56e074e154 (diff)
fix normal bugs, add normal shadowing
going to remove normal shadowing, it's not worth the complexity
Diffstat (limited to '2ner.cginc')
-rw-r--r--2ner.cginc18
1 files changed, 13 insertions, 5 deletions
diff --git a/2ner.cginc b/2ner.cginc
index 47ff710..e76ba51 100644
--- a/2ner.cginc
+++ b/2ner.cginc
@@ -12,7 +12,7 @@
#include "yum_pbr.cginc"
#include "yum_lighting.cginc"
-v2f vert (appdata v) {
+v2f vert(appdata v) {
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
@@ -22,7 +22,7 @@ v2f vert (appdata v) {
#if defined(OUTLINE_PASS)
#if defined(_OUTLINE_MASK)
- float thickness = _Outline_Mask.SampleLevel(linear_repeat_s, v.uv, 0);
+ float thickness = _Outline_Mask.SampleLevel(linear_repeat_s, v.uv01, 0);
#else
float thickness = 1;
#endif
@@ -31,14 +31,22 @@ v2f vert (appdata v) {
v.tangent *= -1;
#endif // OUTLINE_PASS
o.pos = UnityObjectToClipPos(v.vertex);
- o.uv = TRANSFORM_TEX(v.uv, _MainTex);
+ o.uv01.xy = TRANSFORM_TEX(v.uv01.xy, _MainTex);
+ o.uv01.zw = TRANSFORM_TEX(v.uv01.zw, _MainTex);
o.worldPos = mul(unity_ObjectToWorld, v.vertex);
o.eyeVec.xyz = normalize(o.worldPos - _WorldSpaceCameraPos);
// Calculate TBN matrix
o.normal = UnityObjectToWorldNormal(v.normal);
o.tangent = UnityObjectToWorldDir(v.tangent.xyz);
- o.bitangent = cross(o.normal, o.tangent) * v.tangent.w;
+ o.binormal = cross(o.normal, o.tangent) * v.tangent.w * unity_WorldTransformParams.w;
+
+ // From filamented
+ float3 lightDirWS = normalize(_WorldSpaceLightPos0.xyz - o.worldPos * _WorldSpaceLightPos0.w);
+ o.lightDirTS = float3(
+ dot(o.tangent, lightDirWS),
+ dot(o.binormal, lightDirWS),
+ dot(o.normal, lightDirWS));
UNITY_TRANSFER_LIGHTING(o, v.uv1);
UNITY_TRANSFER_FOG_COMBINED_WITH_EYE_VEC(o, o.pos);
@@ -48,7 +56,7 @@ v2f vert (appdata v) {
return o;
}
-float4 frag (v2f i) : SV_Target {
+float4 frag(v2f i) : SV_Target {
UNITY_APPLY_DITHER_CROSSFADE(i.pos.xy);
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);