2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UnityのBRP/URPのシェーダー関数の対応(翻訳)

Posted at

先日、URPで実装していたシェーダーのコードを改めてBRPで実装しなおすということがありました。最近ググって出てくるコードはURPが多くなってきていますが、BRPとの対応表みたいなものが意外に見つからず苦労しましたので、メモしておきます。
すべての関数には対応できていないので、代表的なものになります。
また、新しいURPでの対応はまだ確認できておりません。

includeする関数の違い

デフォルトでシェーダーを作るとインクルードされていると思いますが、念のため記載します。

- BRP URP
コア機能 Unity.cginc Package/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl
ライト AutoLight.cginc Package/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl
Unity.cginc Package/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl
サーフェスシェーダ Lighting.cginc なし1
  • その他一般的なURPには、SpaceTranform.hlsl, ShaderVariablesFunctions.hlsl, input.hlsl, Color.hlsl, DeclareDepthTtexture.hlsl, DeclareOpaqureTexture.hlslが含まれます。
  • Core.hlslは直接参照できますが、UnityInput.hlsl, UnityInstancing.hlsl, SpaceTranforms.hlslは再定義を防ぐためにプレフィックスをつける必要があります。

関数の対応表

BRP URP
TRANSFORM_TEX(uv, texure_name) TRANSFORM_TEX(uv, texure_name)
tex2D, tex2Dlod SAMPLE_TEXTURE2D,
SAMPLE_TEXTURE2D_LODなど。
UnityObjectToClipPos(positionOS) TransformObjectToHClip(positionOS),
GetVertexPositionInputs().positionCS
UnityObjectToWorldNormal(normalOS) TransformObjectToWorldNormal(normalOS),
GetVertexNormalInputs().normalWS
ComputeScreenPos(positionCS) ComputeScreenPos(positionCS),
GetVertexPositionInputs().positionNDC
ComputeScreenPos(positionCS) GetVertexPositionInputs().positionNDC
ComputeGrabScreenPos(positionCS) URPではGrabPassをサポートしません。
WorldSpaceViewDir(positionOS) -
UnityWorldSpaceViewDir(positionWS) GetWorldSpaceNormalizeViewDir(positionWS)
WorldSpaceLightDir(positionOS) -
UnityWorldSpaceLightDir(positionWS)/
_WorldSpaceLightPos0
GetMainLight().direction
WorldSpaceLightDir(positionOS) -
Shade4PointLights(...) -
ShadeVertexLights(vertex, normal) VertexLighting(positionWS, normalWS)
ShadeSH9(half4(worldNormal,1)) SampleSH(normalWS),
UNITY_FOG_COORDS(n) float fogFactor : TEXCOORDn
UNITY_TRANSFER_FOG(o, positionCS) OUT.fogFactor = ComputeFogFactor(positionCS.z)
UNITY_APPLY_FOG(fogCoord, color, fogColor) color.rgb = MixFog(color.rgb, fogCoord)
UNITY_APPLY_FOG_COLOR(fogCoord, color) color.rgb = MixFogColor(color.rgb, fogColor.rgb, fogCoord)
Linear01Depth(z) Linear01Depth(z, _ZBufferParams)
LinearEyeDepth(z) LinearEyeDepth(z, _ZBufferParams)
ParallaxOffset(h, height, viewDirTS) ParallaxOffset1Step(h, amplitude, viewDirTS)
Luminance(rgb) Luminance(rgb)
V2F_SHADOW_CASTER float4 positionCS : SV_POSITION;
TRANSFER_SHADOW_CASTER_NORMALOFFSET ShadowCasterPass.hlslGetShadowPositionHClip(input)
SHADOW_CASTER_FRAGMENT -
SHADOW_COORDS(1) float4 shadowCoord : TEXCOORD1;
TRANSFER_SHADOW(o) TransformWorldToShadowCoord(inputData.positionWS)
SHADOW_ATTENUATION(i) MainLightRealtimeShadow(shadowCoord),

参考

  1. URPにはサーフェスシェーダはありません。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?