美文网首页
7.13 SurfaceShader

7.13 SurfaceShader

作者: 胤醚貔貅 | 来源:发表于2017-07-13 17:05 被阅读116次

凹凸

//法线

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。

相关文章

  • 7.13 SurfaceShader

    凹凸 //法线 Shader"Custom/MyCustomSufaceShader2"{ Properties{...

  • SurfaceShader学习

    标准表面着色器输出结构 Unity5中,也可以使用基于物理的照明模型。 使用方式: Surface Shader ...

  • 7.12

    7.13 早晨 跑步 背单词 over

  • 7.13

    js语句基本规则 1.语句后面要用分号结束; 函数后面不用加,for循环后面不用加,if条件后面不用加 var a...

  • 7.13

    今天是特别的日子 1.下午公司的电动车沟通让我知道社会是社会,当利益关系存在时有清清楚楚的规矩条款合约和证据是保护...

  • 7.13

    隔了几天没写日记 感觉这两天都不知道在做些什么。。 今天去拿了成绩单 看到了姚蕊含和施晓彤 我突然想考研了,考应用...

  • 7.13

    1. 干花到啦 一个酒瓶一个奶瓶 摆摆弄弄 结果特别好看 哈哈哈哈 2. 读KY,认识幸福,选择写3件积极的小事。...

  • 7.13

    戒掉“自传式回应” 用耳朵听,用眼睛看,用心理解 移情聆听 学会倾听,才能学会沟通,人与人之间缺不了沟通 每天听一...

  • 7.13

    一 学法学久了,现在做梦都是各种犯罪场景 二 早上起来对着镜子闭着眼睛扎头发,在左手腕摸了半天没摸到头绳,睁开眼睛...

  • 7.13

    白驹苍狗 四月刚满 学得越多 才发现自己真的无知 今天去吃了兵哥豌杂 面汤很好喝 后面来得小弟弟小妹妹们 打游戏可...

网友评论

      本文标题:7.13 SurfaceShader

      本文链接:https://www.haomeiwen.com/subject/fmtghxtx.html