(SHADOWS_CUBE) #if defined(SHADOWS_CUBE_IN_DEPTH_TEX) UNITY_DECLARE_TEXCUBE_SHADOWMAP(_ShadowMapTexture); #else UNITY_DECLARE_TEXCUBE(_ShadowMapTexture); inline float SampleCubeDistance (float3 vec) { return UnityDecodeCubeShadowDepth(UNITY_SAMPLE_TEXCUBE_LOD(_ShadowMapTexture, vec, 0)); }...
UNITY_TRANSFER_SHADOW宏:首先把一个顶点从它的局部坐标系转换为世界坐标系下,然后转换到阴影空间中,得到阴影空间的坐标值,并赋给a.shadowCoord. _ShadowCoord在UnityShadowLibrary.cginc中有定义为fixed4类型,通过SHADOW_COORDS 宏绑定一个TEXTCOORD语义。 UNITY_DECLARE_SHADOWMAP宏的定义 UNITY_DECLARE_SHADOWMAP宏在...
UNITY_DECLARE_SHADOWMAP(tex) - declares a shadowmap texture variablewithname“tex”. UNITY_SAMPLE_SHADOW(tex,uv) - samples shadowmap texture “tex” at given “uv” coordinate (XY components are texture location, Z componentisdepthtocomparewith). Returns single float valuewiththe shadow termin0...
1//--- Screen space direction light shadows helpers (any version)2#if defined (SHADOWS_SCREEN)34#if defined(UNITY_NO_SCREENSPACE_SHADOWS)5UNITY_DECLARE_SHADOWMAP(_ShadowMapTexture);6#define TRANSFER_SHADOW(a) a._ShadowCoord = mul( unity_WorldToShadow[0], mul( unity_ObjectToWorld, v.vert...
UNITY_DECLARE_SHADOWMAP(tex)声明一个名为“tex”的阴影贴图纹理变量。 UNITY_SAMPLE_SHADOW(tex,uv)在给定的“uv”坐标处采样阴影贴图纹理“tex”(XY 分量是纹理位置,Z 分量是要比较的深度)。返回单个浮点值,阴影项的范围在 0 到 1 之间。 UNITY_SAMPLE_SHADOW_PROJ(tex,uv)与上面类似,但是会读取投影阴影贴...
一、非屏幕空间阴影 我们从最简单的入手,目标PC DX11平台,不要Cascade,不要 screen space shadowmap。在 Graphics setting 里关掉 Cascaded Shadow,场景只打一个 hard shadow 的平行光,此时场景和 framedebugger 如下: 可以看到没有 screen space shadow 的 collect 阶段了,阴影渲染阶段直接调用了 std 的 shadowcast...
UNITY_DECLARE_SHADOWMAP(_ShadowMapTexture); 在顶点片元vert中我们为之前声明的阴影寄存器_ShadowCoord赋值,以替代TRANSFER_SHADOW(o)方法。 o._ShadowCoord=mul(unity_WorldToShadow[0],mul(unity_ObjectToWorld,v.vertex)); 这里需要着重讲一下这个_ShadowCoord的意义,此处是先把顶点转到世界空间然后乘阴影矩阵,...
// Shadowmap helpers. #if defined( SHADOWS_SCREEN ) && defined( LIGHTMAP_ON ) #define HANDLE_SHADOWS_BLENDING_IN_GI 1 #endif 1. 2. 3. 4. 必须开启屏幕阴影和有光照贴图 也就是说,必须有,这两个变体: #pragma multi_compile _ LIGHTMAP_ON ...
Shader:更多的矩陣變數UNITY_MATRIX_V (view matrix), UNITY_MATRIX_VP (view*projection),unity_DeltaTime;新增巨集UNITY_DECLARE_SHADOWMAP(tex), UNITY_SAMPLE_SHADOW(tex,uv), UNITY_SAMPLE_SHADOW_PROJ(tex,uv).UNITY_NEAR_CLIP_VALUE, defined to 0.0 on D3D-like, -1.0 on GL-like platforms.UNITY_...
层叠式阴影贴图(cascaded shadow map,CSM)可以较好兼顾精度和性能的问题。这种技术与使用单个阴影贴图的区别主要在于:将摄像机的视截体(view frustum)按一定比例分成若干层级(cascade),每个层级对应一个子视截体,每一层级单独计算相关的阴影贴图,这样在渲染大场景的阴影时,就可以避免使用单张阴影贴图的各种缺点。Unity...