招聘页面设计seo免费教程
2026/3/5 15:15:18 网站建设 项目流程
招聘页面设计,seo免费教程,网站建设平台 三合一,长沙房地产价格Shader 常见的所有空间 Object Space#xff08;模型空间 / 本地空间#xff09; 特点#xff1a; 物体自身的坐标系#xff0c;以模型原点为中心 顶点在模型导入时就固定的坐标 不包含任何旋转、缩放、位移 常见用途#xff1a; 做模型特效#xff08;如垂直方向溶…Shader 常见的所有空间Object Space模型空间 / 本地空间特点物体自身的坐标系以模型原点为中心顶点在模型导入时就固定的坐标不包含任何旋转、缩放、位移常见用途做模型特效如垂直方向溶解、方向扭曲等固定于模型自身的操作不随世界变化顶点动画如旗子飘动World Space世界空间世界坐标系以场景原点为中心。特点物体经过模型矩阵M后的坐标包含平移、旋转、缩放光照方向LightDir世界法线Normal交互、物理、射线检测世界旋转、世界方向、世界位置同一场景中所有物体都共享这个坐标系View Space视图空间从摄像机出发的坐标系也称 Camera Space / Eye Space。特点摄像机位置是(0,0,0)摄像机朝 -Z 方向看经过 M * V 转换光照、面朝摄像机方向等非常方便用途MatCap UV 计算最常见镜面反射ViewDir以摄像机为中心的特效如 FresnelShaderForge 中Transform → World → ViewTangent Space切线空间这是法线贴图Normal Map最重要的空间。特点以模型表面为局部坐标系Tangent, Bitangent, Normal贴图里的 RGB(法线) 是在切线空间与模型 UV 对齐用途法线贴图计算凹凸光照各种与 UV 流动相关的纹理效果ShaderForge 中法线贴图输出默认是 Tangent Space需要转成 World 才能参与光照Clip Space裁剪空间 / 裁切空间数学中的齐次坐标系用于 GPU 裁剪不可见三角形。特点顶点经过 M * V * P 后进入 Clip Space齐次坐标 xyz/w范围一般是 [-w, w]经过 w 分量归一化后进入 NDC用途顶点着色器最终必须输出 Clip Space屏幕裁剪、深度计算NDC SpaceNormalized Device Coordinates 屏幕归一化空间从裁剪空间进行透视除法后得到XYZ clipPosition.xyz / clipPosition.w 范围 [-1, 1]用途全屏后处理BlitRaymarching屏幕 UV 生成Screen Space屏幕空间通常范围 [0,1]用途屏幕 UV屏幕贴花 Screen Space Decal屏幕水流扰动 GrabPass / SceneColorUV Space纹理空间与模型 UV 展开有关不属于空间变换序列但用于贴图采样用途采样 albedo/normal/roughness流动 UV程序化贴图生成常见空间总结菲涅尔现象概念阐述观察现象在大多数非金属材料上视线与表面夹角越小的区域边缘/掠射角看起来反射越强。视觉表现边缘高光一个光滑的球体其中心区域法线朝向你的部分主要显示材质本身的漫反射颜色而球体边缘轮廓区域则会显现出更强烈的环境反射或高光。这使其看起来立体、真实。材质区分这是区分不同材质的关键。例如湿润的表面如湿石头、沾水的路面因为表面有一层水膜其F0值发生变化导致菲涅尔效应变得更明显整体反射增强尤其是边缘从而产生“湿”的感觉。ShaderForge连连看算法:Fresnelpow(1-ndotv,powVal)ndotv:理解为光从眼睛发出时的Lambert;中间亮,边缘暗;1-ndotv:黑白反相,中间暗,边缘亮;power:套一个power控制边缘亮的范围;为什么不对负值进行剔除负值对应的是模型的背面在进行剔除背面时就已经被剔除了不会对背面进行渲染所以也不需要进行赋值.效果NormalMap(法线贴图)概念阐述法线贴图是一种在不增加模型多边形数量的情况下为表面添加丰富细节如凹凸、划痕、花纹等的技术。它是一种“视觉欺骗”但效果非常出色广泛用于游戏、电影和实时渲染中。原理法线贴图本质上是一张RGB彩色图片但图片中的颜色数据不代表颜色而是被解读为三维空间中的方向法线向量。RGB通道对应XYZ坐标红色 (R)通道 法线向量的X方向通常左右-1 到 1绿色 (G)通道 法线向量的Y方向通常上下-1 到 1蓝色 (B)通道 法线向量的Z方向垂直于表面-1 到 1一张典型的法线贴图看起来整体是蓝紫色的。为什么因为在一个平坦的、未经扰动的表面上法线是笔直向上的即向量为(0, 0, 1)。在RGB颜色中(0, 0, 1)对应的是红0 绿0 蓝255也就是蓝色。所以法线贴图中的蓝色区域表示“此处表面正常没有凹凸”。当有凹凸时法线方向发生偏移RGB颜色就会偏离蓝色出现红色和绿色的区域。偏红色表示法线在左右方向上有倾斜。偏绿色表示法线在上下方向上有倾斜。Shaderforge连连看实现了使用法线贴图参与漫反射光照NormalMap 从纹理读取时RGB 并不是正确的法线必须先 Unpack而 ShaderForge 会自动处理Texture2DNormalmap mode → Unpack不过 ShaderForge 中勾选 NormalMap 类型其实已经帮我做了。效果Shader代码Shader Unlit/L09_NormalMap01{Properties {_normalMap (法线贴图, 2D) bump {}}SubShader {Tags {RenderTypeOpaque}Pass {Name FORWARDTags {LightModeForwardBase}CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cginc#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0//输入参数uniform sampler2D _normalMap;//输入结构struct VertexInput {float4 vertex : POSITION;float4 normal : NORMAL;float4 tangent : TANGENT;//切线信息float2 uv0 : TEXCOORD0;//法线贴图对应的UV};//输出结构struct VertexOutput {float4 pos : SV_POSITION;float3 nDirWS : TEXCOORD0;float3 tDirWS : TEXCOORD1;float3 bDirWS : TEXCOORD2;float2 uv0 : TEXCOORD3;};VertexOutput vert (VertexInput v) {VertexOutput o (VertexOutput)0;o.pos UnityObjectToClipPos( v.vertex );o.uv0 v.uv0;o.nDirWS UnityObjectToWorldNormal(v.normal);o.tDirWS normalize( mul( unity_ObjectToWorld, float4( v.tangent.xyz, 0.0 ) ) );o.bDirWS normalize(cross(o.nDirWS, o.tDirWS));return o;}float4 frag(VertexOutput i) : COLOR {//准备向量float3 var_normalMap UnpackNormal(tex2D(_normalMap, i.uv0));float3x3 TBN float3x3(i.tDirWS, i.bDirWS, i.nDirWS);float3 nDirWS normalize(mul(TBN, var_normalMap));float3 lDir _WorldSpaceLightPos0.xyz;//准备点积结果float3 nDotl dot(nDirWS, lDir);float lambert max(0.0, nDotl);return float4(lambert, lambert, lambert, 1.0);}ENDCG}}FallBack Diffuse}MatCap材质捕捉概念阐述Matcap是Material Capture材质捕捉的缩写有时也被称为ShaderBall。它是一种在计算机图形学中用一张静态的二维图片来模拟复杂三维材质和光照效果的渲染技术。核心原理Matcap 的核心思想非常巧妙一张图代表所有将完整的光照信息、高光、反射、环境光遮蔽、甚至法线细节全部“烘焙”到一张静态的球体图片上。屏幕空间映射在渲染时完全忽略实际的三维灯光和场景环境。材质的最终颜色只由两个因素决定Matcap 纹理贴图那张预先绘制好的球体图片。模型表面的法线方向具体来说是将模型上每个点的法线向量转换到观察空间即摄像机坐标系然后用这个法向量的X 和 Y 分量作为 UV 坐标去采样 Matcap 图片。简单比喻把Matcap图片想象成一个完美球体的“身份证照片”。渲染任何模型时程序只是在问“你这个点的朝向对应球体身份证上的哪个像素” 然后直接取那个像素的颜色贴上去。模型表面不同朝向的部分就自动“映射”了球体相应部分的光影。优点性能极高只需要一次纹理采样无需计算真实光照、阴影、全局光照等计算成本极低非常适合移动端或需要实时预览的场合。效果统一可控渲染效果完全由输入的Matcap图决定可以快速获得风格化、写实或特殊效果的材质如卡通、金属、蜡质、X光等且在不同角度下材质感保持一致。简单易用无需设置灯光和复杂材质节点只需选择或绘制一张Matcap图即可。预览神器广泛应用于3D建模软件如ZBrush, Blender的视口预览在雕刻或建模时能快速看到体积感和材质感。缺点缺乏真实交互因为光照是“假”的、烘焙的所以模型不会对场景中的真实灯光做出反应。移动摄像机时光照效果会固定在模型上像贴花而不是与场景动态交互。环境反射固定Matcap中的环境反射是静态图片不会根据真实环境变化。依赖法线效果完全取决于模型法线的变化。一个平滑的球体和一个复杂的雕像如果用同一个Matcap会呈现出相似的光影“图案”只是分布在不同的形状上。物理不正确它是一种非基于物理的渲染技术效果是基于审美而非物理模拟。ShaderForge连连看MatCap 法线 菲涅尔效果这张 ShaderForge 图展示的是读取模型法线NormalMap将法线从切线空间 → 世界空间 → 视图空间使用视空间法线做 MatCap UV再乘以菲涅尔Fresnel、强度EnvSpecInt等核心是MatCap 不使用模型自带 UV而是用“视空间法线View Normal” 作为 UV 采样 MatCap 纹理。ShaderForge 中的 UV 是如何生成的① NormalMap → Tangent → WorldTransform node第一步把法线从切线空间变换到世界空间Tangent Space Normal → World Space Normal这样才能得到与摄像机位置无关的世界法线方向。② World → ViewTransform node接着法线从世界空间变换到“视图空间View Space”World Normal → View Normal为什么用视图空间因为MatCap 纹理是摄像机视角固定的球形贴图要让反射永远朝向摄像机而不是随着模型旋转这就必须用“视图空间法线”。如何从视图法线生成 UV图中核心部分图中最关键部分是这块ViewNormal → Component Mask取 x,y → Multiply缩放 → Add偏移 0.5这个过程是标准 MatCap UV 生成流程。⭐步骤 A取 View Normal 的 xy 分量Component Mask 选 R,G也就是 X,Y。ViewNormal.x → 横向 UVViewNormal.y → 纵向 UV⭐步骤 B乘以 0.5Multiply视图法线范围是[-1, 1]UV 采样要求[0, 1]所以(x, y) * 0.5 → [-0.5, 0.5]⭐步骤 CAdd0.5 偏移加 0.5(x,y) * 0.5 0.5 → [0,1]这就是“把 [-1,1] 映射到 [0,1]” 的标准做法。最终得到 MatCap 纹理的 UV。这些 UV 输入 MatCap Texture2D右侧的 MatCap 节点Texture2D使用的 UV 就是上述计算出来的值。这样 MatCap 就能根据“法向量在摄像机中的方向”来采样产生类似 ZBrush、Blender “材质捕捉球”的效果。Fresnel、强度 EnvSpecInt 是额外的增强FresnelPow 控制高光边缘溢光EnvSpecInt 对 MatCap 结果乘以一个强度最终输出到Custom Lighting 或 Emission。总结一句话图中的 UV 并不是模型原始 UV而是使用视空间法线 (View Normal.xy) 做 [-1,1] → [0,1] 映射用作 MatCap 采样坐标。效果Shader代码Shader Unlit/L09_Matcap01{Properties {_NormalMap (法线贴图, 2D) bump {}_Matcap (Matcap, 2D) gray {}_FresnelPow (菲涅尔次幂, Range(0, 10)) 1_EnvSpecInt (环境镜面反射强度, Range(0, 5)) 1}SubShader {Tags {RenderTypeOpaque}Pass {Name FORWARDTags {LightModeForwardBase}CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cginc#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0//输入参数uniform sampler2D _NormalMap;uniform sampler2D _Matcap;uniform float _FresnelPow;uniform float _EnvSpecInt;// 输入结构struct VertexInput {float4 vertex : POSITION; // 将模型的顶点信息输入进来float2 uv0 : TEXCOORD0;float3 normal : NORMAL;//法线信息float4 tangent : TANGENT;//切线信息};// 输出结构struct VertexOutput {float4 pos : SV_POSITION; // 由模型顶点信息换算而来的顶点屏幕位置float3 nDirWS : TEXCOORD0;float3 tDirWS : TEXCOORD1;float3 bDirWS : TEXCOORD2;float2 uv0 : TEXCOORD3;float4 posWS : TEXCOORD4;};// 输入结构顶点Shader输出结构VertexOutput vert (VertexInput v) {VertexOutput o (VertexOutput)0; // 新建一个输出结构o.pos UnityObjectToClipPos( v.vertex ); // 变换顶点信息 并将其塞给输出结构o.nDirWS UnityObjectToWorldNormal(v.normal);o.tDirWS normalize( mul( unity_ObjectToWorld, float4( v.tangent.xyz, 0.0 ) ).xyz );o.bDirWS normalize(cross(o.nDirWS, o.tDirWS));o.uv0 v.uv0;o.posWS mul(unity_ObjectToWorld,v.vertex);return o; // 将输出结构 输出}// 输出结构像素float4 frag(VertexOutput i) : COLOR {//贴图采样//准备向量float3x3 TBN float3x3(i.tDirWS, i.bDirWS, i.nDirWS);float3 nDirTS UnpackNormal(tex2D(_NormalMap, i.uv0));float3 nDirWS normalize(mul(TBN, nDirTS));float3 nDirVS mul(UNITY_MATRIX_V,float4(nDirWS,0.0));float3 vDirWS normalize(_WorldSpaceCameraPos.xyz - i.posWS.xyz);//准备点积结果float2 matCapUv nDirVS.rg * 0.5 0.5;float nDotv dot(nDirWS,vDirWS);//光照模型float3 matCap tex2D(_Matcap,matCapUv);float fresnel pow((1.0 - nDotv),_FresnelPow);float3 envSpecLighting matCap * fresnel * _EnvSpecInt;//后处理//返回值return float4(envSpecLighting, 1.0);}ENDCG}}FallBack Diffuse}Cubemap概念阐述Cubemap立方体贴图/环境贴图是计算机图形学中一种用于存储全方向环境信息的特殊纹理技术。它是实现环境反射、天空盒、折射等效果的核心数据结构。Cubemap 是一种由 6 个独立的 2D 纹理组成的立方体分别对应三维空间的 6 个轴方向X (右)/-X (左)Y (上)/-Y (下)Z (前)/-Z (后)这6张图拼接起来就形成了一个包围场景的立方体。你可以把它想象成一个巨大的、内部贴满了图像的立方体房间而摄像机或物体就位于这个房间的正中心。技术原理数据结构它本质上是一个“纹理数组”但采样方式与普通2D纹理完全不同。图形API如OpenGL DirectX专门为Cubemap提供了samplerCube类型。采样方式采样Cubemap时输入的不是2D的UV坐标而是一个从立方体中心发出的三维方向向量。渲染器会根据这个方向向量判断它指向立方体的哪个面即最大的绝对分量轴然后在该面上进行2D投影采样返回该方向上的颜色。简单比喻你站在一个完全密封的、内壁贴满照片的立方体房间正中央。你看向任何一个方向一个三维方向向量视线都会落在某个墙壁的某个具体像素上。Cubemap就是这个“房间”采样过程就是“根据视线方向找到对应墙壁上的点”。主要应用1.天空盒:将天空、远山、云层等环境图像绘制在Cubemap的6个面上。将其包裹在整个场景外围摄像机始终位于中心。当摄像机移动时环境不会近大远小因为距离是无限远营造出宏大、稳定的背景环境。2.环境反射这是让物体看起来有光泽如金属、陶瓷的关键。在着色时对于物体表面的每个点a. 计算视线方向。b. 根据表面法线计算出反射方向。c. 用这个反射方向向量作为输入去采样Cubemap即“天空盒”或“周围环境的照片”。d. 采样得到的颜色就是该点反射出的环境颜色。效果一个光滑的球体其表面会像镜子一样映射出周围的天空盒从而实现逼真的金属或镜面效果。3.环境折射与反射类似但用于模拟透明介质如玻璃、水、宝石。计算的是折射方向向量根据斯涅尔定律然后用它去采样Cubemap得到透过物体看到的扭曲环境。4.基于图像的照明:除了做镜面反射Cubemap还可以经过预处理如卷积、生成辐照度图用于计算漫反射环境光。这为物体提供了柔和、真实的全局光照效果是PBR渲染管线中的重要组成部分。ShaderForge连连看最简单的版本效果略微复杂版本使用法线贴图加CubeMap加Fresnel注释vrDir是观察方向的反射方向vDir是观察方向的反方向所以需要在进行reflect前取反。效果Shader代码Shader Unlit/L09_Cubemap_01Plus{Properties {_Cubemap (立方体贴图, Cube) _Skybox {}_NormalMap (法线贴图, 2D) bump {}_CubeMapMip (CubeMapMip, Range(0, 7)) 0_FresnelPow (菲涅尔次幂, Range(0, 10)) 1_EnvSpecInt (环境镜面反射强度, Range(0, 5)) 0.2_Occlusion(AO,2D) white{}}SubShader {Tags {RenderTypeOpaque}Pass {Name FORWARDTags {LightModeForwardBase}CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cginc#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0//输入参数uniform samplerCUBE _Cubemap;uniform sampler2D _NormalMap;uniform float _CubeMapMip;uniform float _FresnelPow;uniform float _EnvSpecInt;uniform sampler2D _Occlusion;// 输入结构struct VertexInput {float4 vertex : POSITION; // 将模型的顶点信息输入进来float3 normal : NORMAL;float4 tangent : TANGENT;float2 uv0 : TEXCOORD0;};// 输出结构struct VertexOutput {float4 pos : SV_POSITION; // 由模型顶点信息换算而来的顶点屏幕位置float3 nDirWS : TEXCOORD0;float3 tDirWS : TEXCOORD1;float3 bDirWS : TEXCOORD2;float2 uv0 : TEXCOORD3;float4 posWS : TEXCOORD4;};// 输入结构顶点Shader输出结构VertexOutput vert (VertexInput v) {VertexOutput o (VertexOutput)0; // 新建一个输出结构o.pos UnityObjectToClipPos( v.vertex ); // 变换顶点信息 并将其塞给输出结构o.nDirWS UnityObjectToWorldNormal(v.normal);o.tDirWS normalize( mul( unity_ObjectToWorld, float4( v.tangent.xyz, 0.0 ) ).xyz );o.bDirWS normalize(cross(o.nDirWS, o.tDirWS));o.uv0 v.uv0;o.posWS mul(unity_ObjectToWorld,v.vertex);return o; // 将输出结构 输出}// 输出结构像素float4 frag(VertexOutput i) : COLOR {//准备向量float3x3 TBN float3x3(i.tDirWS, i.bDirWS, i.nDirWS);float3 nDirTS UnpackNormal(tex2D(_NormalMap, i.uv0));float3 nDirWS normalize(mul(TBN, nDirTS));float3 vDirWS normalize(_WorldSpaceCameraPos.xyz - i.posWS.xyz);float3 vrDirWS reflect(-vDirWS,nDirWS);//准备点积结果float vDotn dot(vDirWS,nDirWS);//光照模型float occlusion tex2D(_Occlusion,i.uv0).r;float3 var_Cubemap texCUBElod(_Cubemap,float4(vrDirWS,_CubeMapMip)).rgb;float fresnel pow(max(0.0,1.0 - vDotn),_FresnelPow);float3 envSpecLighting var_Cubemap * fresnel * _EnvSpecInt * occlusion;return float4(envSpecLighting, 1.0);}ENDCG}}FallBack Diffuse}这个Shader实现了一个基于Cubemap的环境反射材质结合了法线贴图、菲涅尔效应和环境光遮蔽AO环境反射使用Cubemap作为环境贴图模拟物体表面反射周围环境的效果法线贴图通过法线贴图增加表面细节和凹凸感菲涅尔效应边缘反射增强模拟真实物体的反射特性Mipmap级别控制可以控制Cubemap的模糊程度AO贴图使用AO贴图控制环境反射的遮蔽效果

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询