关键词:
Shader "baicai/me02" { Properties { _MainTex ("MainTex", 2D) = "white" {} _Bump ("Bump", 2D) = "bump" {} _Intension ("强度", Range(0, 10)) = 10 _Scale ("范围", Range(0, 1)) = 0.5969197 _SpecularColor("SpecularColor",Color) = (1,1,1,1) } SubShader { Tags { "RenderType"="Opaque" } Pass { Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #define UNITY_PASS_FORWARDBASE #include "UnityCG.cginc" #include "AutoLight.cginc" #pragma multi_compile_fwdbase_fullshadows #pragma target 3.0 float4 _LightColor0; sampler2D _MainTex; float4 _MainTex_ST; sampler2D _Bump; float4 _Bump_ST; float _Intension; float _Scale; float4 _SpecularColor; struct VertexInput { float4 vertex : POSITION; float3 normal : NORMAL; float4 tangent : TANGENT; float2 uv : TEXCOORD0; }; struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; float4 posWorld : TEXCOORD1; float3 normal : TEXCOORD2; float3 tangentDir : TEXCOORD3; float3 bitangentDir : TEXCOORD4; LIGHTING_COORDS(5,6) }; v2f vert (VertexInput v) { v2f o ; o.pos = UnityObjectToClipPos(v.vertex ); o.uv =TRANSFORM_TEX(v.uv, _MainTex); o.normal =normalize( UnityObjectToWorldNormal(v.normal)); o.tangentDir = normalize( mul( unity_ObjectToWorld, float4( v.tangent.xyz, 0.0 ) ).xyz );//切线方向 o.bitangentDir = normalize(cross(o.normal, o.tangentDir) * v.tangent.w);//双切线 o.posWorld = mul(unity_ObjectToWorld, v.vertex); TRANSFER_VERTEX_TO_FRAGMENT(o) return o; } float4 frag(v2f i) : COLOR { float3 nVert = i.normal;//顶点法线,不支持法线贴图的时候 ,是把这个当做最终法线 float3x3 tangentTransform = float3x3( i.tangentDir, i.bitangentDir, nVert); float3 BumpMap = UnpackNormal(tex2D(_Bump,i.uv)); float3 N = normalize(mul( BumpMap.rgb, tangentTransform )); // 法线贴图 模型法线 切线 相结合,得到最终的法线 float3 V = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz); //视向量 float3 L = normalize(_WorldSpaceLightPos0.xyz); float3 speL = normalize(V+L); //视向量 + 光向量,得到一个高光的光向量 ////// Lighting: float atten = LIGHT_ATTENUATION(i); ///////// Gloss: float Gloss = exp2( _Scale * 10.0+1.0); ////// Specular: float NdotSpeL = saturate(dot (speL,N)); //高光强度 float4 col = tex2D(_MainTex,i.uv); float3 specular0 = atten * _LightColor0.xyz * pow(NdotSpeL,Gloss) * _SpecularColor * _Intension*col.a; ///////worldRefl half3 worldRefl = reflect (-V,N);///// half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, worldRefl);///// half3 skyColor = DecodeHDR (skyData, unity_SpecCube0_HDR);///// /////// Diffuse: float NdotL = saturate(dot( N, L )); //漫反射强 col.rgb= col.rgb * (NdotL *_LightColor0.xyz * atten + UNITY_LIGHTMODEL_AMBIENT.rgb); /// Final Color: col.rgb = col.rgb * 0.5 + skyColor*col.a*0.5 + specular0 ;///// return col; } ENDCG } } FallBack "Diffuse" }
shaderlab学习小结漫反射+高光+点光源
场景中有一个平行光,一个×××点光源,设高光颜色为绿,效果如下:Shader代码:Shader"Custom/DifSpecPoint"{Properties{_Spec("Spec",Color)=(1,1,1,1)//高光颜色_Shin("Shin",range(1,32))=2//高光强度系数}SubShader{pass{tags{"lightmode"="forwardbase"}CGP 查看详情
shader之——多光源漫反射以及阴影
Shader"Unlit/MulLight"{Properties{_MainTex("Texture",2D)="white"{}}SubShader{//一盏主灯Pass{//Always:总是渲染;没有光照模式。//ForwardBase:适用于前渲染、环境、主要方向灯、光/sh光和烘焙图。//ForwardAdd:适用于前渲染,叠加每一盏灯,每一盏灯就多... 查看详情
带法线贴图的高光着色
...空间矩阵//片元函数采样法线贴图并且反隐射再计算光照Shader"Tang/617/BlinnTexNormal" Properties _Color("TinColor",Color)=(1,1,1,1) _MainTex 查看详情
翻译8unityreflections(代码片段)
...ing一块完美的镜子是不会发生漫反射,但现在我们自己的Shader包含的[光照:环境光、漫反射、高光反射]、纹理、阴影,结果看起来蛮好。但是当把Metallic设为1,Smoothness设位0.95,看起来很亮就很不自然了。从下图看尽管颜色是... 查看详情
怎么使用深空盒子材质
...下操作:1.从菜单栏中,单击Assets>Create>Material。2.在Shader下拉选单中,单击Skybox,然后单击要使用的天空盒着色器。3.现在可以填写材质的属性以设置天空盒。材质的可用属性取决于材质使用的天空盒着色器。注意:每个天... 查看详情
Unity 自定义天空盒,如 Unity 天空盒
...何运气,我对着色器完全陌生。这是我到现在为止的代码Shader"Custom/fundido"Proper 查看详情
通过使用unityshader实现基础光照效果(代码片段)
...多少辐射量;高光反射部分,用于描述当光线从光源照射到模型表面时,该表面会在完全镜面反射方向散射多少辐射量;漫反射部分,当光线从光源照射到环境表面时,该表面会向每个方向散射多少辐射量... 查看详情
OpenGL:天空盒放大太多
...这样:这是我创建天空盒的代码:SkyBox::SkyBox()programID=LoadShaders("Resources/Shaders/skybox.vert", 查看详情
cesium之天空盒对应方位(代码片段)
下文讲解一下关于Cesium的天空盒具体方位。天空盒对应图一个立方体展开图,相当于一个站在negz的位置,背对电脑屏幕,对应关系如下negz→downposx→rightnegx→leftposy→backposz→upnegy→front分享一个天空盒网址www.custommapmakers.o... 查看详情
unity之pbr材质流程与材质制作实践
...一套基于物理的着色(PhysicallyBasedShading,PBS)的多功能Shader,叫做标准着色器(StandardShader)。这套Shader的设计初衷是化繁为简。想用这样的一个多功能Shader,来代替之前多种多样的Shader各司其职,对于不同的材质效果,需要不... 查看详情
OpenGL 在延迟渲染器中实现天空盒
...的位置的影响像任何物体一样相对于光(它的行为就像离光源很远的大盒子,并且显示得很暗)。我没有尝试在后 查看详情
unity之自制玻璃啤酒瓶shader
客户的要求如下步骤:1.进行玻璃瓶效果分析效果如下:高光,类次表面散射(里层通透而外层较为暗淡),外层白色勾勒轮廓。 高光:unity内部提供光滑度参数,越光滑则高光效果越明显,啤酒瓶材质是属于光滑,高光明... 查看详情
关于unity中天空盒的使用
...空盒是一个盒子,一个正方形的盒子。其实本身也是一种shader,需要材质球做载体。1:一个场景是由6幅正方形的纹理图无缝拼接而成,在视野看来位于真实的视野一样;2:两种天空盒: 场景天空盒Window->Lighting->Scene->Skybox,... 查看详情
unity商业shader开发之高光rimcolor,rimlight关键代码解析(代码片段)
原理RimColor的原理,puppert大神已经说的很清楚了,而关键还是viewDirUnityShader-边缘光(RimLight)效果_puppet_master的专栏-CSDN博客代码一#ifdefRIMLIGHT halfrim=1-saturate(dot(i.viewDir,i.normal)); c.rgb+=saturate( 查看详情
ogersdk研究之四demo_skybox天空盒
SkyBox.h/*-----------------------------------------------------------------------------ThissourcefileispartofOGRE(Object-orientedGraphicsRenderingEngine)Forthelatestinfo,seehttp://www.ogre3d.org/ 查看详情
phong和blinn-phong光照模型
...。但算法简单,运行速度快是Blinn-Phong光照模型的优点。Shader"Unlit/LightShader& 查看详情
unityshader用cubemap实现天空盒和环境映射(代码片段)
...mapCubemap在实时渲染中有很多应用,最常见的就是实现天空盒(Skybox)和环境映射(EnvironmentMapping)。2实现天空盒2.1实现原理天空盒不陌生,而且一定还听说过天空球吧!因为实现天空盒的技术除了六... 查看详情
shaderlab学习小结简单产生阴影
在之前“ShaderLab学习小结(三)漫反射+高光+点光源请添加链接描述”中的场景加入一个plane,如下图:被平行光和点光源照射的球体没有产生阴影代码方面很好解决,就是在原先的shader最末尾加个fallback即可Shader"shadername"{SubShade... 查看详情