簡介: 工程升級到 URP 渲染管線后似芝,大部分 shader 都已無法正常運行那婉,只有少數(shù)的 無光照運算的 shader 是可以正常運行。其原因就是党瓮,URP 的大部分渲染接口已經(jīng)換了详炬。shader 文件雖然還是支持 CG 語言,但是新版的著色器大部分都是用了HLSL 語言。本文記錄 URP shader 常用的函數(shù)庫備查呛谜。
注意:unity2020 用到的 URP 版本功能更多更全在跳,這里只提供了 2019.4用的 7.5版本的
版本:2019.4
URP版本:7.5
Core.hlsl
名稱 | 說明 |
---|---|
GetVertexPositionInputs(float3 positionOS) | 獲取輸入頂點坐標信息 |
GetVertexNormalInputs(float3 normalOS) | 獲取輸入頂點法線信息 |
GetVertexNormalInputs(float3 normalOS, float4 tangentOS) | 獲取輸入頂點法線信息(重載) |
GetScaledScreenParams() | 獲取屏幕縮放參數(shù)信息 |
NormalizeNormalPerVertex(real3 normalWS) | 逐頂點法線正交 |
NormalizeNormalPerPixel(real3 normalWS) | 逐像素法線正交 |
ComputeScreenPos(float4 positionCS) | 計算屏幕坐標信息 |
(real)ComputeFogFactor(float z) | 計算霧參數(shù) |
(real)ComputeFogIntensity(real fogFactor) | 計算霧強度 |
(half3)MixFogColor(real3 fragColor, real3 fogColor, real fogFactor) | 混合霧顏色 |
(half3)MixFog(real3 fragColor, real fogFactor) | 混合霧 |
Lighting.hlsl
名稱 | 說明 |
---|---|
DistanceAttenuation(float distanceSqr, half2 distanceAttenuation) | 距離衰減 |
AngleAttenuation(half3 spotDirection, half3 lightDirection, half2 spotAttenuation) | 角度衰減 |
GetMainLight()/GetMainLight(float4 shadowCoord) | 獲取主光源 |
GetPerObjectLightIndex(int index) | 獲取每個對象燈光Index |
GetAdditionalLightsCount() | 獲取額外燈光數(shù)量 |
ReflectivitySpecular(half3 specular) | 高光反射率 |
OneMinusReflectivityMetallic(half metallic) | OneMinus金屬反射率 |
InitializeBRDFData(half3 albedo, half metallic, half3 specular, half smoothness, half alpha, out BRDFData outBRDFData) | 初始化BRDF |
EnvironmentBRDF(BRDFData brdfData, half3 indirectDiffuse, half3 indirectSpecular, half fresnelTerm) | 環(huán)境BRDF |
DirectBDRF(BRDFData brdfData, half3 normalWS, half3 lightDirectionWS, half3 viewDirectionWS) | BRDF |
SampleLightmap(float2 lightmapUV, half3 normalWS) | 光照貼圖 |
GlossyEnvironmentReflection(half3 reflectVector, half perceptualRoughness, half occlusion) | 環(huán)境光澤反射 |
GlobalIllumination(BRDFData brdfData, half3 bakedGI, half occlusion, half3 normalWS, half3 viewDirectionWS) | 全局光照 |
MixRealtimeAndBakedGI(inout Light light, half3 normalWS, inout half3 bakedGI, half4 shadowMask) | 實時烘培混合 |
LightingLambert(half3 lightColor, half3 lightDir, half3 normal) | 蘭伯特模型 |
LightingSpecular(half3 lightColor, half3 lightDir, half3 normal, half3 viewDir, half4 specular, half smoothness) | 高光 |
LightingPhysicallyBased(BRDFData brdfData, half3 lightColor, half3 lightDirectionWS, half lightAttenuation, half3 normalWS, half3 viewDirectionWS)/LightingPhysicallyBased(BRDFData brdfData, Light light, half3 normalWS, half3 viewDirectionWS) | 基于物理的光照模型 |
VertexLighting(float3 positionWS, half3 normalWS) | 頂點光照顏色 |
LightweightFragmentPBR(InputData inputData, half3 albedo, half metallic, half3 specular,half smoothness, half occlusion, half3 emission, half alpha) | 輕量級片元PBR |
LightweightFragmentBlinnPhong(InputData inputData, half3 diffuse, half4 specularGloss, half smoothness, half3 emission, half alpha) | 輕量級片元布林·馮 |
Shadows.hlsl
名稱 | 說明 |
---|---|
GetMainLightShadowStrength() | 獲取主光源陰影強度 |
GetAdditionalLightShadowStrenth(int lightIndex) | 獲取額外光源陰影強度 |
SampleScreenSpaceShadowmap(float4 shadowCoord) | 屏幕空間陰影貼圖 |
SampleShadowmap(float4 shadowCoord, TEXTURE2D_SHADOW_PARAM(ShadowMap, sampler_ShadowMap), ShadowSamplingData samplingData, half shadowStrength, bool isPerspectiveProjection = true) | 陰影貼圖 |
TransformWorldToShadowCoord(float3 positionWS) | 把頂點的世界坐標轉換到陰影坐標 |
MainLightRealtimeShadow(float4 shadowCoord) | 主光源實時陰影 |
AdditionalLightRealtimeShadow(int lightIndex, float3 positionWS) | 額外光源實時陰影 |
GetShadowCoord(VertexPositionInputs vertexInput) | 獲取陰影坐標信息 |
ApplyShadowBias(float3 positionWS, float3 normalWS, float3 lightDirection) | 應用陰影偏移 |
SpaceTransforms.hlsl
名稱 | 說明 |
---|---|
TransformObjectToWorld(float3 positionOS) | 當前模型空間轉世界空間矩陣,通常用于把頂點/方向矢量從模型空間轉到世界空間 |
TransformWorldToObject(float3 positionWS) | 當前世界空間轉模型空間矩陣隐岛,通常用于把頂點/方向矢量從世界空間轉到模型空間 |
TransformWorldToView(float3 positionWS) | 當前世界空間轉相機空間矩陣猫妙,通常用于把頂點/方向矢量從世界空間轉到相機空間 |
TransformObjectToHClip(float3 positionOS) | 當前模型空間轉裁剪空間矩陣,通常用于把頂點/方向矢量從模型空間轉到裁剪空間 |
TransformWorldToHClip(float3 positionWS) | 當前世界空間轉裁剪空間矩陣聚凹,通常用于把頂點/方向矢量從世界空間轉到裁剪空間 |
TransformWViewToHClip(float3 positionVS) | 當前相機空間轉裁剪空間矩陣割坠,通常用于把頂點/方向矢量從相機空間轉到裁剪空間 |
TransformObjectToWorldDir(real3 dirOS) | 把方向矢量從模型空間轉換到世界空間中 |
TransformWorldToObjectDir(real3 dirWS) | 把方向矢量從世界空間轉換到模型空間中 |
TransformWorldToViewDir(real3 dirWS) | 把方向矢量從世界空間轉換到相機空間中 |
TransformWorldToHClipDir(real3 directionWS) | 把方向矢量從世界空間轉換到裁剪空間中 |
TransformObjectToWorldNormal(float3 normalOS) | 把法線從模型空間轉換到世界空間中 |
CreateTangentToWorld(real3 normal, real3 tangent, real flipSign) | 創(chuàng)建一個切線空間轉為世界空間的3x3矩陣 |
TransformTangentToWorld(real3 dirTS, real3x3 tangentToWorld) | 當前切線空間轉世界空間矩陣,通常用于把頂點/方向矢量從切線空間轉到世界空間 |
TransformWorldToTangent(real3 dirWS, real3x3 tangentToWorld) | 當前世界空間轉切線空間矩陣妒牙,通常用于把頂點/方向矢量從世界空間轉到切線空間 |
TransformTangentToObject(real3 dirTS, real3x3 tangentToWorld) | 當前切線空間轉模型空間矩陣彼哼,通常用于把頂點/方向矢量從切線空間轉到模型空間 |