栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Shader学习心得(一)根据ShaderForge写出的最简Shader模板

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Shader学习心得(一)根据ShaderForge写出的最简Shader模板

 编辑器使用的是VSCODE,unity自带的vs2019写shader太tm痛苦了,简直能从入门到放弃。

这是我跟着大佬们装的插件,可能有些用不上。但是目前来说没什么毛病。 

首先是根据ShaderForge,作出最简Shader模板,然后在最简模板的基础上去添加计算。来达到想要的效果。 

Shader "Shader Forge/EasiestShader" {//路径名
    Properties {//材质面板参数
    }
    SubShader {
        Tags {
            "RenderType"="Opaque"
        }
        Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }
            
            
            CGPROGRAM
            //顶点变量
            #pragma vertex vert
            //像素变量
            #pragma fragment frag
            //目前阶段个人理解,shader就是给上方两个变量赋值。用结构体VertexInput描述物体在本身层面的一些属性信息,再用VertexOutput vert (VertexInput v)方法根据输入结构计算出输出结构。


            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase_fullshadows
            #pragma target 3.0
            struct VertexInput {//输入结构
                float4 vertex : POSITION;//将模型顶点信息输入进来

            };
            struct VertexOutput {//输出结构
                float4 pos : SV_POSITION;//由模型顶点信息换算而来的顶点屏幕位置
            };
            VertexOutput vert (VertexInput v) {//顶点shader
                VertexOutput o = (VertexOutput)0;//新建一个输出结构
                o.pos = UnityObjectToClipPos( v.vertex );//变换顶点信息,并将其赋值给输出结构

                return o;//将输出结构输出
            }
            float4 frag(VertexOutput i) : COLOR {//像素shader
                return fixed4(1.0,0.0,0.0,1.0);//RGBA  输出为红色
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

 

最简模板输出一颗红桔子 ,然后加入一点计算的代码,制作一个兰伯特光照模型

Shader "Shader Forge/EasiestShader" {//路径名
    Properties {//材质面板参数
    }
    SubShader {
        Tags {
            "RenderType"="Opaque"
        }
        Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }
            
            
            CGPROGRAM
            //顶点变量
            #pragma vertex vert
            //像素变量
            #pragma fragment frag
            //目前阶段个人理解,shader就是给上方两个变量赋值。用结构体VertexInput描述物体在本身层面的一些属性信息,再用VertexOutput vert (VertexInput v)方法根据输入结构计算出输出结构。


            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase_fullshadows
            #pragma target 3.0
            struct VertexInput {//输入结构
                float4 vertex : POSITION;//将模型顶点信息输入进来
                float3 normal: NORMAL;//将法线信息输入进来

            };
            struct VertexOutput {//输出结构
                float4 pos : SV_POSITION;//由模型顶点信息换算而来的顶点屏幕位置
                float3 nDirWS:TEXCOORD0;//由模型法线信息换算而来的世界空间法线信息
            };
            VertexOutput vert (VertexInput v) {//顶点shader
                VertexOutput o = (VertexOutput)0;//新建一个输出结构
                o.pos = UnityObjectToClipPos( v.vertex );//变换顶点信息,并将其赋值给输出结构
                o.nDirWS=UnityObjectToWorldNormal(v.normal);//变换法线信息,并将其赋值给输出结构
                return o;//将输出结构输出
            }
            float4 frag(VertexOutput i) : COLOR {//像素shader
            float3 nDir=i.nDirWS;
            float3 lDir=_WorldSpaceLightPos0.xyz;//光方向
            float nDot1=dot(i.nDirWS,lDir);//点乘算出兰伯特
            float lambert=max(0.0,nDot1);//兰伯特明暗钳制
                return fixed4(lambert,lambert,lambert,1.0);
                //return lambert;这样也不会报错,但是安全期间还是输出四维向量
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

兰伯特桔子完成!

(PS:我是跟着B站大佬,庄懂的视屏学习的。感谢大佬的视屏) 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/902199.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号