部分Amplify Shader Editor的节点介绍

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com

Amplify Shader Editor节点介绍网页

节点介绍

Camera Depth Fade

参考网页

对应的URP代码如下

1// 顶点着色器部分:
2float3 objectToViewPos = TransformWorldToView(TransformObjectToWorld(v.vertex.xyz));
3float eyeDepth = -objectToViewPos.z;
4o.ase_texcoord3.x = eyeDepth;
5
6// 片元着色器部分
7float eyeDepth = IN.ase_texcoord3.x;
8float cameraDepthFade1 = (( eyeDepth -_ProjectionParams.y - 0.0 ) / 1.0); // cameraDepth就是节点的输出值

Clip Planes

参考网页

对应的URP代码如下

1// 片元着色器部分
2// unity_CameraWorldClipPlanes[0]就是节点的输出值,当Type选Left时数组索引值为0,选Right时索引值为1,以此类推
3float3 Color = unity_CameraWorldClipPlanes[0].xyz;

Compute Grab Screen Pos

参考网页

对应的URP代码如下

1// 片元着色器部分
2// 这里的参数传了float4(0,0,0,0)进来,实际开发中,应该传一个片元的裁剪空间的坐标进来
3 float4 computeGrabScreenPos10 = ComputeGrabScreenPos( float4( 0,0,0,0 ) ); // computeGrabScreenPos10 就是节点的输出值

Compute Screen Pos

参考网页

对应的URP代码如下

1// 片元着色器部分
2// 这里的参数传了float4(0,0,0,0)进来,实际开发中,应该传一个片元的裁剪空间的坐标进来
3 float4 computeScreenPos11 = ComputeScreenPos( float4( 0,0,0,0 ) ); // computeGrabScreenPos11就是节点的输出值

Dither

参考网页


Grab Screen Color

参考网页

对应的URP代码如下

1// 顶点着色器部分
2float4 ase_clipPos = TransformObjectToHClip((v.vertex).xyz);
3float4 screenPos = ComputeScreenPos(ase_clipPos);
4o.ase_texcoord3 = screenPos;
 1// 片元着色器部分
 2
 3inline float4 ASE_ComputeGrabScreenPos( float4 pos )
 4{
 5#if UNITY_UV_STARTS_AT_TOP
 6	float scale = -1.0;
 7#else
 8	float scale = 1.0;
 9#endif
10	float4 o = pos;
11	o.y = pos.w * 0.5f;
12	o.y = ( pos.y - o.y ) * _ProjectionParams.x * scale + o.y;
13	return o;
14}
15
16// #define SHADERGRAPH_SAMPLE_SCENE_COLOR(uv) shadergraph_LWSampleSceneColor(uv) 在ShaderGraphFunctions.hlsl中定义
17// #define SHADERGRAPH_SAMPLE_SCENE_COLOR(uv) shadergraph_LWSampleSceneColor(uv)
18/*
19float3 shadergraph_LWSampleSceneColor(float2 uv)
20{
21#if defined(REQUIRE_OPAQUE_TEXTURE)
22    return SampleSceneColor(uv);
23#else
24    return 0;
25#endif
26}
27
28// DeclareOpaqueTexture.hlsl
29TEXTURE2D_X(_CameraOpaqueTexture);
30SAMPLER(sampler_CameraOpaqueTexture);
31
32float3 SampleSceneColor(float2 uv)
33{
34    return SAMPLE_TEXTURE2D_X(_CameraOpaqueTexture, sampler_CameraOpaqueTexture, UnityStereoTransformScreenSpaceTex(uv)).rgb;
35}
36
37float3 SampleSceneColor(float2 uv)
38{
39    return SAMPLE_TEXTURE2D_X(_CameraOpaqueTexture, sampler_CameraOpaqueTexture, UnityStereoTransformScreenSpaceTex(uv)).rgb;
40}
41
42
43*/
44float4 screenPos = IN.ase_texcoord3;
45float4 ase_grabScreenPos = ASE_ComputeGrabScreenPos( screenPos );
46float4 ase_grabScreenPosNorm = ase_grabScreenPos / ase_grabScreenPos.w;
47float4 fetchOpaqueVal6 = float4( SHADERGRAPH_SAMPLE_SCENE_COLOR( ase_grabScreenPosNorm ), 1.0 );

参考网页:

https://docs.unity3d.com/Manual/SL-ShaderPerformance.html

https://www.cnblogs.com/sifenkesi/p/4716791.html