7.13 SurfaceShader

凹凸

//法线

Shader"Custom/MyCustomSufaceShader2"{

Properties{

_MainTex("主纹理",2D)="white"{}

_NormalMap("法线纹理",2D)="white"{}

}

SubShader{

Tags{"RenderType"="Opaque"}

LOD200

CGPROGRAM

//PhysicallybasedStandardlightingmodel,andenableshadowsonalllighttypes

#pragmasurfacesurfStandardfullforwardshadows

//Useshadermodel3.0target,togetnicerlookinglighting

#pragmatarget3.0

sampler2D_MainTex;

sampler2D_NormalMap;

structInput {

float2uv_MainTex;

float2uv_NormalMap;

};

voidsurf (Input IN,inoutSurfaceOutputStandard o) {

o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;

float4uv_n=tex2D(_NormalMap , IN.uv_NormalMap);

o.Normal=UnpackNormal(uv_n);

}

ENDCG

}

FallBack"Diffuse"

}

透明

Shader"Custom/MyCustomSufaceShader"{

Properties{

_Alpha("Alpha",Range(0,1))=1

}

SubShader{

Tags{"RenderType"="Transparent"}

LOD200

CGPROGRAM

//PhysicallybasedStandardlightingmodel,andenableshadowsonalllighttypes

#pragmasurfacesurfStandardfullforwardshadowsalpha

//Useshadermodel3.0target,togetnicerlookinglighting

#pragmatarget3.0

structInput{

float4_clolor:COLOR;

};

half_Alpha;

voidsurf(Input _in,inoutSurfaceOutputStandard  o){

o.Albedo=(0.5,0.5,0.5);

o.Alpha=_Alpha;

}

ENDCG

}

FallBack"Diffuse"

}

边缘发光

//RimShader

Shader"Custom/MyCustomSufaceShader3"{

Properties{

_MainTex("主纹理",2D)="white"{}

_NormalMap("法线纹理",2D)="white"{}

_RimColor("边缘光的颜色",Color)=(1,1,1,1)//白色

_RimPower("边缘光的强度",float)=1

}

SubShader{

Tags{"RenderType"="Opaque"}

LOD200

CGPROGRAM

//PhysicallybasedStandardlightingmodel,andenableshadowsonalllighttypes

#pragmasurfacesurfStandardfullforwardshadows

//Useshadermodel3.0target,togetnicerlookinglighting

#pragmatarget3.0

sampler2D_MainTex;

sampler2D_NormalMap;

fixed4_RimColor;

half_RimPower;

structInput {

float2uv_MainTex;

float2uv_NormalMap;

fixed3viewDir;

};

voidsurf (Input IN,inoutSurfaceOutputStandard o) {

o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;

float4uv_n=tex2D(_NormalMap , IN.uv_NormalMap);

o.Normal=UnpackNormal(uv_n);

float3dotV=dot(normalize(IN.viewDir),o.Normal);

floattemp=saturate(dotV);

floatrim=1-temp;

o.Emission=_RimColor*pow(rim,_RimPower);

}

ENDCG

}

FallBack"Diffuse"

}

* "Queue"标签。定义渲染顺序。预制的值为

* "Background"。值为1000。比如用于天空盒。

* "Geometry"。值为2000。大部分物体在这个队列。不透明的物体也在这里。这个队列内部的物体的渲染顺序会有进一步的优化(应该是从近到远,early-z test可以剔除不需经过FS处理的片元)。其他队列的物体都是按空间位置的从远到近进行渲染。

* "AlphaTest"。值为2450。已进行AlphaTest的物体在这个队列。

* "Transparent"。值为3000。透明物体。

* "Overlay"。值为4000。比如镜头光晕。

* 用户可以定义任意值,比如"Queue"="Geometry+10”

* "RenderType"标签。Unity可以运行时替换符合特定RenderType的所有Shader。Camera.RenderWithShader或Camera.SetReplacementShader配合使用。Unity内置的RenderType包括:

* "Opaque":绝大部分不透明的物体都使用这个;

* "Transparent":绝大部分透明的物体、包括粒子特效都使用这个;

* "Background":天空盒都使用这个;

* "Overlay":GUI、镜头光晕都使用这个;

* 用户也可以定义任意自己的RenderType这个标签所取的值。

* 应注意,Camera.RenderWithShader或Camera.SetReplacementShader不要求标签只能是RenderType,RenderType只是Unity内部用于Replace的一个标签而已,你也可以自定义自己全新的标签用于Replace。

比如,你为自己的ShaderA.SubShaderA1(会被Unity选取到的SubShader,常为Shader文件中的第一个SubShader)增加Tag为"Distort"="On",然后将"Distort"作为参数replacementTag传给函数。此时,作为replacementShader实参的ShaderB.SubShaderB1中若有也有一模一样的"Distort"="On",则此SubShaderB1将代替SubShaderA1用于本次渲染。

* 具体可参考Rendering with Replaced Shaders


float3 viewDir 包含了视角的观察方向,主要用于计算视差效应(Parallax effects ),边缘光照,等等。

float4 COLOR 包含了经过内插值(interpolated )的每个顶点的颜色值。

float4 screenPos 包含了用于反射效果的屏幕坐标系的位置信息。例如,在Unity专业版的WetStreet shader中使用了它。

float3 worldPos 包含了世界坐标系中的位置。

float3 worldRefl 包含了世界坐标系中的反射向量,如果Surface Shader没有重写o.Normal。参考Reflect-Diffuse shader。

float3 worldNormal 包含了世界坐标系中的法线向量,如果Surface Shader没有重写o.Normal。

float3 worldRefl;

INTERNAL_DATA 包含了世界坐标系的反射向量,如果Surface Shader重写了o.Normal。为了得到基于逐像素的法线贴图的反射向量,请使用WorldReflectionVector (IN,o.Normal) 。参考Reflect-Bumped shader。

float3 worldNormal;

INTERNAL_DATA 包含了世界坐标系的发现向量,如果Surface Shader重写了o.Normal。为了得到基于逐像素的法线贴图的法线向量,请使用WorldNormalVector (IN,o.Normal) 。参考Reflect-Bumped shader。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容