网站 经营性,上海到北京飞机几个小时,优秀的设计网站推荐,国内建筑设计网站陡峭视差贴图(Steep Parallax Mapping)实现原理陡峭视差贴图通过分层深度比较和动态UV偏移技术增强岩石表面立体感.视角自适应分层采样根据视线与表面法线的夹角动态分配采样层数#xff08;平视视角增加至12层#xff0c;俯视视角减少至5层#xff09;#xf…陡峭视差贴图(Steep Parallax Mapping)实现原理陡峭视差贴图通过分层深度比较和动态UV偏移技术增强岩石表面立体感.视角自适应分层采样根据视线与表面法线的夹角动态分配采样层数平视视角增加至12层俯视视角减少至5层解决标准视差贴图在平视角度下的失真问题深度图梯度修正引入_LayerBias参数推荐值0.2-0.4调整UV偏移量计算公式避免陡峭区域出现采样断裂$\Delta UV\frac{ParallaxScale \cdot ViewDir_{xy}}{(ViewDir_zLayerBias) \cdot LayerCount}$风格化深度增强在最终插值阶段使用pow(weight,2)强化轮廓对比度配合ramp贴图实现卡通化光影过渡效果URP HLSL完整实现代码关键特性说明动态层数优化通过lerp(_MaxLayers, _MinLayers, saturate(dot(float3(0,0,1), viewDirTS)))实现平视视角自动增加采样精度抗失真处理_LayerBias参数修正陡峭表面的UV偏移计算避免采样断裂风格化增强ramp贴图控制光影过渡边缘光强化轮廓立体感StylizedRockParallax.shaderShader Universal Render Pipeline/StylizedRockParallax{Properties{[Header(Base Textures)]_MainTex(Albedo (RGB), 2D) white {}_NormalMap(Normal Map, 2D) bump {}_HeightMap(Height Map, 2D) white {}_RampTex(Stylized Ramp, 2D) white {}[Header(Parallax Settings)]_ParallaxScale(Depth Scale, Range(0, 0.15)) 0.08_LayerBias(Layer Bias, Range(0.1, 0.5)) 0.3_MinLayers(Min Layers, Int) 5_MaxLayers(Max Layers, Int) 12[Header(Stylized Lighting)]_RimPower(Rim Power, Range(1, 10)) 3_ShadowTint(Shadow Tint, Color) (0.3,0.3,0.4,1)}SubShader{Tags { RenderTypeOpaque RenderPipelineUniversalPipeline }HLSLINCLUDE#include Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl#include Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlslTEXTURE2D(_MainTex); SAMPLER(sampler_MainTex);TEXTURE2D(_NormalMap); SAMPLER(sampler_NormalMap);TEXTURE2D(_HeightMap); SAMPLER(sampler_HeightMap);TEXTURE2D(_RampTex); SAMPLER(sampler_RampTex);float _ParallaxScale;float _LayerBias;int _MinLayers, _MaxLayers;float _RimPower;float4 _ShadowTint;// 陡峭视差映射核心算法float2 SteepParallaxMapping(float3 viewDirTS, float2 uv){// 动态层数计算平视视角增加层数int numLayers (int)lerp(_MaxLayers, _MinLayers, saturate(dot(float3(0,0,1), viewDirTS)));float layerHeight 1.0 / numLayers;float2 deltaUV _ParallaxScale * viewDirTS.xy / (viewDirTS.z _LayerBias) / numLayers;// 光线步进初始化float currentLayerHeight 0;float2 currentUV uv;float currentDepth 1 - SAMPLE_TEXTURE2D(_HeightMap, sampler_HeightMap, currentUV).r;// 分层深度检测[loop]for (int i 0; i _MaxLayers; i) {if (currentLayerHeight currentDepth) break;currentUV - deltaUV;currentDepth 1 - SAMPLE_TEXTURE2D(_HeightMap, sampler_HeightMap, currentUV).r;currentLayerHeight layerHeight;}// 风格化插值修正float2 prevUV currentUV deltaUV;float prevDepth currentDepth - layerHeight;float weight pow((currentLayerHeight - currentDepth) / (prevDepth - currentDepth 0.001), 2);return lerp(currentUV, prevUV, saturate(weight * 1.5));}// 风格化光照计算half3 StylizedShading(float3 normalWS, float3 viewDirWS, float NdotL){float rim pow(1 - saturate(dot(normalWS, viewDirWS)), _RimPower);float2 rampUV float2(NdotL * 0.5 0.5, 0.5);half3 rampColor SAMPLE_TEXTURE2D(_RampTex, sampler_RampTex, rampUV).rgb;return lerp(rampColor * _ShadowTint.rgb, rampColor, saturate(NdotL rim));}ENDHLSLPass{HLSLPROGRAM#pragma vertex vert#pragma fragment fragstruct Attributes{float4 positionOS : POSITION;float2 uv : TEXCOORD0;float3 normalOS : NORMAL;float4 tangentOS : TANGENT;};struct Varyings{float4 positionCS : SV_POSITION;float2 uv : TEXCOORD0;float3 viewDirTS : TEXCOORD1;float3 normalWS : TEXCOORD2;float3 viewDirWS : TEXCOORD3;float4 shadowCoord : TEXCOORD4;};Varyings vert(Attributes IN){Varyings OUT;VertexPositionInputs posInput GetVertexPositionInputs(IN.positionOS.xyz);OUT.positionCS posInput.positionCS;VertexNormalInputs normInput GetVertexNormalInputs(IN.normalOS, IN.tangentOS);float3 viewDirWS GetWorldSpaceViewDir(posInput.positionWS);OUT.viewDirTS TransformWorldToTangent(viewDirWS,normInput.tangentWS, normInput.bitangentWS, normInput.normalWS);OUT.normalWS normInput.normalWS;OUT.viewDirWS viewDirWS;OUT.shadowCoord GetShadowCoord(posInput);OUT.uv IN.uv;return OUT;}half4 frag(Varyings IN) : SV_Target{// 计算陡峭视差UVfloat2 parallaxUV SteepParallaxMapping(normalize(IN.viewDirTS), IN.uv);// 采样纹理half4 albedo SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, parallaxUV);half3 normalTS UnpackNormal(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, parallaxUV));// 转换法线到世界空间float3x3 TBN float3x3(normalize(cross(IN.normalWS, IN.viewDirWS)),normalize(IN.normalWS),normalize(IN.viewDirWS));float3 normalWS mul(TBN, normalTS);// 光照计算Light mainLight GetMainLight(IN.shadowCoord);float NdotL saturate(dot(normalWS, mainLight.direction));half3 lighting StylizedShading(normalWS, normalize(IN.viewDirWS), NdotL);return half4(albedo.rgb * lighting * mainLight.color, 1);}ENDHLSL}}}材质配置参数组合 风格化效果_ParallaxScale0.05 _RimPower5 轻度凹凸柔和边缘光_ParallaxScale0.1 _LayerBias0.4 强烈凹凸抗失真处理_ShadowTint(0.4,0.2,0.6) 紫色调阴影增强风格化表现