URPshader的一些built-in不能用的东西记录

看的教程大部分都是教built-in的东西,实际写的时候发现项目是URP,有些细节还是不一样的。

 

  • 首先是FallBack,如果FallBack的是之前Built-in的一些shader其实都是用不了的。
  • LightMode不能再使用ForwardBase。需要改写成UniversalForward  

  同时这两行预定义注解也要删除

  #define UNITY_PASS_FORWARDBASE
  #pragma multi_compile_fwdbase

  • 不再使用CGPROGRAM/ENDCG,改为使用HLSLPROGRAM/ENDHLSL。同理CGINCLUDE也需要更改成HLSLINCLUDE
  • UnityCG.cginc的引用改为

  Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl

 

  • AutoLight.cginc的引用改为

  Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl

  Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl

 

  • 常用的一些函数的替换:

  裁剪空间坐标转换——UnityObjectToClipPos -> TransformObjectToHClip

  世界空间法线转换——UnityObjectToWorldNormal -> TransformObjectToWorldNormal

  世界空间的视线方向——UnityWorldSpaceViewDir -> GetCameraPositionWS() - i.worldPos

  世界空间普通矢量转换——UnityObjectToWorldDir -> TransformObjectToWorldDir

  //注意 法线用这个会得到错误的结果 如下图所示 法线的转换请用TransformObjectToWorldNormal

 

 

 

  世界空间的光照方向——UnityWorldSpaceLightDir -> _MainLightPosition.xyz - TransformObjectToWorld

  模型空间的光照方向——ObjSpaceLightDir -> TransformWorldToObject

 

  • 也可以使用URP在Core.hlsl提供的一些简便的函数如

  GetVertexPositionInputs/GetVertexNormalInputs这种方法来获取所需要的变量。

  • 常用的一些变量的替换:

  主要平行光的颜色——_LightColor0 -> _MainLightColor

  世界空间的光源方向——_WorldSpaceLightPos0 -> _MainLightPosition

  特殊的:

  接收阴影——UNITY_SHADOW_COORDS -> UPR没有这个玩意 需要去在结构体里定义一个float4 shadowCoord :TEXCOORD0;

  接受雾效——UNITY_FOG_COORDS -> 同上 需要定义一个float fogCoord : TEXCOORD0;

 

  • fixed都寄了,大伙只能用float了
  • 获取深度图(均默认开启了depthTextureMode)

  built-in获取深度图:

  o.scrPos = ComputeScreenPos(o.vertex);

  float depth = UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.scrPos)));

  float depthValue = Linear01Depth(depth);

  

  URP获取深度图:

  o.scrPos = ComputeScreenPos(o.vertex);

  float2 screenPos= i.scrPos.xy / i.scrPos.w;

  float depthValue = LinearEyeDepth(SampleSceneDepth(screenPos), _ZBufferParams);

 

之后可能也会遇到别的情况,如后处理部分还没做。因此不定时更新。

 


 

 

更多详情可参考这篇文章

From Built-in to URP

 

posted @ 2022-11-03 14:06  anesu  阅读(155)  评论(1编辑  收藏  举报