UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; fixed _GrayEffect; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); return o; } fix...
{ UNITY_FOG_COORDS(3) float4 vertex : SV_POSITION;float4screenPos : TEXCOORD1; float3 worldPos : TEXCOORD2; }; 首先要为水体上色,这里使用了自定义的使用cos的渐变色函数,作者使用了网站:https://sp4ghet.github.io/grad/来生成 fixed4 cosine_gradient(float x, fixed4 phase, fixed4 amp, fixed4...
然而,想要在自己编写的顶点/片元着色器中实现这些雾效,我们需要在Shader中添加#pragma multi_compile_fog指令,同时还要使用相关内置宏,例如UNITY_FOG_COORDS、UNITY_TRANSFER_FOG和UNITY_APPLY_FOG等。这种方法的缺点在于,我们不仅需要为场景中的所有物体添加相关的渲染代码,而且能够实现的效果也非常有限。当我们需要对雾...
#pragma fragment frag #pragma multi_compile_fog #include "UnityCG.cginc" structappdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; structv2f { float3 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert(a...
UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; sampler2D _GrabTexture; sampler2D _BackDepthTex; float4 _AttenuationC; float4 _Color; float_Shininess; float_ScatteringFactor; float_Wrap;
Fog实现的内部原理 为了充分了解雾效算法,我们现在在小苹果现有的shader里添加雾效算法的实现。 首先,我们需要在Properties块中添加雾效的几个设置参数: Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _Ramp ("Ramp Texture", 2D) = "white" {} ...
UNITY_FOG_COORDS(1)//雾数据 float4 vertex : SV_POSITION;//像素位置 }; //变量声明 sampler2D _MainTex; float4 _MainTex_ST; //---【顶点着色函数】--- //输入:顶点输入结构体 //输出:顶点输出结构体 //--- v2f vert (appdata v) { ...
先在Pass中写宏定义描述pragma multi_compile_fog表示此Shader要使用fog宏定义 #pragmavertex vert#pragmafragment frag#pragmamulti_compile_fog#include"UnityCG.cginc" 在顶点着色器输出结构中增加UNITY_FOG_COORDS(1),这里的数字1表示的是使用TEXCOORD1,如果TEXCOORD1已经被占用,使用0234等其他未被占用的也可以。
UNITY_FOG_COORDS(0) }; sampler2D _MainTex; float4 _MainTex_ST; fixed4 _OutlineColor; float _OutlineWidth; v2f vert(a2v v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); float3 viewNormal = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal); ...
首先是SHADOW_COORDS(3),没什么深奥的,就是定义了一个TEXCOORD寄存器。 我们可以自己实现: float4 _ShadowCoord : TEXCOORD3; 然后我们需要声明_ShadowMapTexture,其中保存的是灯光视口的深度贴图,由渲染管线赋值。 不同平台声明阴影贴图的方式不同,为了方便我们可以直接使用UnityCG.cginc内的 UNITY_DECLARE_SHADOWMAP...