Shader 1:能接受阴影的透明shader

第一次接触Shader,项目需要,直接说需求吧,需要一个透明并且能接受阴影的shader。unity系统自带的shader已经满足不了了。上一段代码吧

Shader "GreenArch/Transparent Plane Shadow2" {
    Properties {
    }
    SubShader {
        Tags {
            "RenderType"="Opaque"
        }
        Pass {
            Name "DEFERRED"
            Tags {
                "LightMode"="Deferred"
            }

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_DEFERRED
            #include "UnityCG.cginc"
            #include "UnityPBSLighting.cginc"
            #include "UnityStandardBRDF.cginc"
            #pragma fragmentoption ARB_precision_hint_fastest
            #pragma multi_compile_shadowcaster
            #pragma multi_compile ___ UNITY_HDR_ON
            #pragma multi_compile_fog
            #pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2
            #pragma target 3.0
            struct VertexInput {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float4 posWorld : TEXCOORD0;
                float3 normalDir : TEXCOORD1;
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.normalDir = UnityObjectToWorldNormal(v.normal);
                o.posWorld = mul(unity_ObjectToWorld, v.vertex);
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex );
                return o;
            }
            void frag(
                VertexOutput i,
                out half4 outDiffuse : SV_Target0,
                out half4 outSpecSmoothness : SV_Target1,
                out half4 outNormal : SV_Target2,
                out half4 outEmission : SV_Target3 )
            {
                i.normalDir = normalize(i.normalDir);
                float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
                float3 normalDirection = i.normalDir;
                float3 viewReflectDirection = reflect( -viewDirection, normalDirection );
////// Lighting:
                float3 finalColor = 0;
                outDiffuse = half4( 0, 0, 0, 1 );
                outSpecSmoothness = half4(0,0,0,0);
                outNormal = half4( normalDirection * 0.5 + 0.5, 1 );
                outEmission = half4(0,0,0,1);
                #ifndef UNITY_HDR_ON
                    outEmission.rgb = exp2(-outEmission.rgb);
                #endif
            }
            ENDCG
        }
        Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_FORWARDBASE
            #include "UnityCG.cginc"
            #include "UnityPBSLighting.cginc"
            #include "UnityStandardBRDF.cginc"
            #pragma multi_compile_fwdbase_fullshadows
            #pragma multi_compile_fog
            #pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2
            #pragma target 3.0
            struct VertexInput {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float4 posWorld : TEXCOORD0;
                float3 normalDir : TEXCOORD1;
                UNITY_FOG_COORDS(2)
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.normalDir = UnityObjectToWorldNormal(v.normal);
                o.posWorld = mul(unity_ObjectToWorld, v.vertex);
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex );
                UNITY_TRANSFER_FOG(o,o.pos);
                return o;
            }
            float4 frag(VertexOutput i) : COLOR {
                i.normalDir = normalize(i.normalDir);
                float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
                float3 normalDirection = i.normalDir;
                float3 viewReflectDirection = reflect( -viewDirection, normalDirection );
////// Lighting:
                float3 finalColor = 0;
                fixed4 finalRGBA = fixed4(finalColor,1);
                UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
                return finalRGBA;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
    CustomEditor "ShaderForgeMaterialInspector"
}
时间: 2024-10-10 10:05:32

Shader 1:能接受阴影的透明shader的相关文章

【浅墨Unity3D Shader编程】之十三 单色透明Shader & 标准镜面高光Shader

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/50878538 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 本文工程使用的Unity3D版本: 5.2.1  本次更新放出的Shader为透明系列的3个Shader和标准的镜面高光Shader的两个Shader.由易到难,由入门级到应用级,难度梯度合理. 依然是先放出游戏场景的exe

unity3d游戏开发之简单的透明shader技能培训

下面我们开始今天的Unity3D游戏开发技能透明shader技能培训. 我们学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. [plain] view plaincopy // Shader created with Shader Forge Beta 0.34 // Shader Forge (c) Joachim Holmer - http://www.acegikmo.com/shaderforge/

【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] 文章开头,先给自己诚求个游戏研发实习的好去处. 浅墨今年1月.明年上半年有近半年的空暇时间可供实习. 近5年游戏编程经验,能够胜任全职的游戏开发工作.仅仅拿实习生的工资(性价比非常高有

超简单CSS3实现圆角、阴影、透明效果

CSS实现圆角,阴影,透明的方法很多,传统的方法都比较复杂,用CSS3就方便很多了,虽然现在各浏览器对CSS3的支持还不是很好,但不久的将来CSS3就会普及. 1.圆角 CSS3实现圆角有两种方法. 第一种是背景图像,传统的CSS每个元素只能有一个背景图像,但是CSS3可以允许一个元素有多个背景图像.这样给一个元素添加4个1/4圆的背景图像,分别位于4个角上就可以实现圆角了. Html代码   .box { /* 首先定义要使用的4幅图像为背景图 */ background-image: url

shader之——移动端阴影实现

移动端阴影的实现有很多种方式,用shader实现个人觉得是比较省的方法.原理比较简单, 将模型的沿着y方向压扁,然后按照一个方向把zx做延伸,相当于多渲染一次模型,也多了一个dc 但是比起昂贵的实时阴影,还是相当省的. 阴影相当于一个平面,即使是这样,也可以适应稍有起伏的地形 代码如下: Shader "Game-X/PlanarShadow" { Properties { _Strength ("Strength", Range(0.1, 10)) = 3 _Ma

Unity3D教程宝典之Shader篇:第二讲Fixed Function Shader

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 Fixed function shader简介:  属于固定渲染管线 Shader, 基本用于高级Shader在老显卡无法显示时的情况.使用的是ShaderLab语言,语法与微软的FX files 或者NVIDIA的 CgFX类似. 例一:显示单一颜色下面我们来看第一个例子,显示单一颜色,注释写得挺详细了,照着格式写即可. //根Shader Shader "Custom/1_1color" { // 属性 Propertie

【译】Unity3D Shader 新手教程(5/6) —— Bumped Diffuse Shader

动机 如果你满足以下条件,我建议你阅读这篇教程: 你想学习片段着色器(Fragment Shader). 你想实现复杂的多通道着色器(multipass),但是对其不是很了解. 你想使用上面提到的两种技术(片段着色器和多Pass)来实现描边效果的Toon shader,你就需要理解这两种技术的概念. 学习资源 Martin Kraus's fantastic Wiki Book GLSL Programming/Unity 引论 在教程的第4部分,我们创建了一个相当好的toon shader,该

Unity3D 开发之shader教程(浅谈GPU渲染之shader language概述)

尊重他人智慧成果,欢迎转载,请注明作者 心若透明 地址  http://www.cnblogs.com/ubanck/p/4110618.html 在上一篇博客里,大致讲解了一下3D渲染的原理,即从一个简单的模型到渲染到屏幕的过程!其中提到了重要的坐标变换方式,说的不够清楚!今天来谈谈shader语言的执行过程 从硬件上讲,GPU内部有顶点着色器与片段着色器,从渲染管线来看,顶点着色器控制这顶点的坐标转换过程,片段着色器控制像素的颜色计算过程.顶点着色器将顶点转换完成,输入到片段着色器进行处理(

Shader编程学习笔记(二)—— Shader和渲染管线

Shader和渲染管线 什么是Shader Shader,中文翻译即着色器,是一种较为短小的程序片段,用于告诉图形硬件如何计算和输出图像,过去由汇编语言来编写,现在也可以使用高级语言来编写.一句话概括:Shader是可编程图形管线的算法片段. 它主要分为两类:Vertex Shader和Fragment Shader. 什么是渲染管线 渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的并行处理单元.一个流水线是一序列可以并行和按照固定顺序进行的阶段.就像一个在同一时间内,不同阶段不同