概述
目前Build-in管線的shader都是代碼形式的,不是shader graph,
所以如果想移植到URP管線下,或者HDRP管線下使用,必須修改代碼,
具體步驟
在URP管線下,CGIncludes里的某些介面是失效的,
一、燈光模式

燈光模式是forward的介面,在URP下不是這么寫的,
修改步驟如下;
LightMode里的值改成UniversalForward,如下:
"LightMode"="UniversalForward"
刪掉以下內容:
#define UNITY_PASS_FORWARDBASE
#pragma multi_compile_fwdbase
可以使用的燈光模式,有三種:
"UniversalForward"
"LightweightForward"
“SRPDefaultUnlit"
二、FallBack
一般FallBack為"Standard"的或其他之前Build-in 內置的shader都無法使用了,
洗掉即可,
三、一些CGInclude常用的介面(重要)
非常重要的一步來了,如果按照上面的做完后,還發現有CGInclude的介面不對的地方,
可能就要把之前Builid-in的shader完全改寫成URP管線下的,那就必須把全部CGInclude的介面轉寫成URP下的,
具體如下:
1、把CGPROGRAM改成HLSLPROGRAM,
把ENDCG改成ENDHLSL,
CGINCLUDE改成HLSLINCLUDE,
2、把#include "UnityCG.cginc"
改成
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
3、o.pos = UnityObjectToClipPos( v.vertex );
改成
VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz);
o.pos = vertexInput.positionCS;
4、o.normalDir = UnityObjectToWorldNormal(v.normal);
改成
VertexNormalInputs vertexNormalInput = GetVertexNormalInputs(v.normal);
o.normalDir = vertexNormalInput.normalWS;
5、燈光方向和燈光顏色
_WorldSpaceLightPos0.xyz改成
在vert函式里:
o.shadowCoord = GetShadowCoord(vertexInput);
frag函式里:
Light mainLight = mainLight = GetMainLight(i.shadowCoord);
float3 lightDirection = mainLight.direction;
_LightColor0 改成 mainLight.color
6、把fixed 定義的變數都改成float 的,
比如 fixed4 (finalColor,1)改成float4 (finalColor,1)
7、陰影
參考以下的文章:
如何在unity的URP下實作陰影
8、深度圖
具體可參考
Unity URP 獲取深度圖
9、_GrabTexture
URP管線下,截圖不再使用GrabTexture,而是使用_CameraOpaqueTexture或_CameraColorTexture
刪掉GrabPass{ }
sampler2D _GrabTexture; 改成 SAMPLER(_CameraOpaqueTexture);
同時,還得開啟URP管線設定的Opaque Texture,

具體可參考
Unity URP管線如何截屏,及熱擾動(熱扭曲)效果的實作
10、"LightMode" = "ForwardAdd"的pass已經不能用了,
直接刪掉該pass即可,
如果想使用多pass,可以參考以下文章:
如何在Unity的URP下使用多pass(multi pass)
其實看到這里你大概能感覺到Build-in 管線和URP管線的作者完全不是一個風格的,明明很多介面可以通用的,但是就是喜歡推倒重來,感徑訓是挺惡心,
URP管線的原始碼在
Library\PackageCache\com.unity.render-pipelines.core@7.6.0
和
Library\PackageCache\com.unity.render-pipelines.universal@7.6.0
兩個檔案夾里,具體的介面也是從這里找的,
以下兩個檔案分別是Build-in 管線shader和翻譯后的URP管線shader,可以看看它們具體的對比是怎樣的,
鏈接:https://pan.baidu.com/s/1poYeQPjAhsq2-_rf4D1Dag
提取碼:x8q6
其他對比更全面的文章:
https://www.jianshu.com/p/3fef69e2efb6
https://teodutra.com/unity/shaders/urp/graphics/2020/05/18/From-Built-in-to-URP/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289696.html
標籤:其他
上一篇:[ 娛樂演算法 ] 位面之子演算法 - The Chosen One Algorithm - Matlab code
下一篇:Unity_加載頁面及進度條
