【《Unity着色器和屏幕特效开发秘笈》】学习整理:第二章(1)_unity着色器和屏幕特效开发秘笈(原书第2版)-程序员宅基地

技术标签: Unity Shader学习  

    第二章的内容比较杂乱,所以打算分几次来记录。

第一个着色器

    下面是一个最简单的表面着色器:
Shader "MyShader/Diffuse"
{
    Properties{
        _Color("Color", Color) = (1, 1, 1, 1)
    }

    SubShader{
        Tags { "RenderType" = "Opaque" }

        CGPROGRAM

        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        struct Input{
            float2 uv_MainTex;
        };

        fixed4 _Color;

        void surf(Input IN, inout SurfaceOutputStandard o)
        {
            o.Albedo = _Color.rgb;
        }
        ENDCG
    }
    FallBack "Diffuse"
}   //end shader
    此着色器使用的光照模型和Unity5中的默认标准着色器一样,但是只对材质的颜色进行了控制。

着色器对比

    如图中所示,左边材质使用的就是代码块中的shader。右边使用的是默认的Standard的材质。由于白色不明显,所以特意全部设置为纯红色。

表面着色器的光照模型和输出结构体

    表面着色器中提供了不同的光照模型可供选择,此外还可以定义个性化的光照模型。但是,不同的光照模型所使用的表面着色器的输出结构体不同。因为不同的光照模型需要不同的参数进行计算,而输出结构体的作用就是把这些参数传入光照模型中。如果光照模型和输出结构体不对应会报错。

    以下是Unity提供的表面着色器光照模型所对应的结构体。
//使用Lambert和BlinnPhong光照模型时的输出结构体
struct SurfaceOutput
{
    fixed3 Albedo;     //表示材质的漫反射颜色
    fixed3 Normal;     //如果切面法线
    fixed3 Emission;   //表示材质自发光颜色
    fixed Alpha;       //表示透明度
    half Specular;     //表示高光亮度,取值范围0到1
    fixed Gloss;       //表示光泽度(光强度)
};
//使用Standard光照模型时的输出结构体
struct SurfaceOutputStandard
{
    fixed3 Albedo;
    fixed3 Normal;
    half3 Emission;    //需要注意此处与SurfaceOutput中的类型的不同
    fixed Alpha;
    half Occlusion;    //表示遮挡率,默认是1
    half Smoothness;   //表示光滑度,0表示粗糙,1表示光滑
    half Metallic;     //金属性,0表示非金属,1表示金属
};
//使用StandardSpecular光照模型时的输出结构体
struct SurfaceOutputStandardSpecular
{
    fixed3 Albedo;
    fixed3 Normal;
    half3 Emission;
    fixed Alpha;
    half Occlusion;
    half Smoothness;
    fixed3 Specular;    //表示表示高光颜色,
                        //与SurfaceOutput结构体中的Specular属性不同,
                        //这里可以指定一种颜色,而非单一值。
};

材质对比

    对第一部分shader代码中的光照模型和结构体替换后,得到了上面图中的对比。至少以我的感触来说是没又觉得有什么不同,而之所以最右面的Unity默认材质球和第一部分图片中的样子不一样,是因为默认材质球中有对Smoothness = 0.5的设置,将其调为0以后即为上图效果。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/EverNess010/article/details/77185535

智能推荐

Unity urp2d ShaderGraph 实现一个黑白转彩色的场景渐变效果 设计思路_unity渐变shader-程序员宅基地

文章浏览阅读3.4k次,点赞11次,收藏22次。那只能走走别的方向了,仔细想想,原来的shader也确实不太完美,因为我们要的是整个画面的黑白,而上面的shader则需要给每个场景物品都安装这个shader跑计算的话,无疑是降低了性能和扩展性的。我们可以放弃if节点,改用lerp在两个色域中做插值,就可以优化渐变效果,插值需要一个0-1的参数,我们选择使用“Saturate”节点,这个节点可以将一个浮点值映射到[0,1]的范围内,即输入大于1时=1,输入小于0时等于0,然后将结果连接到Lerp节点就可以了。这样我们这个效果就成功实现了。_unity渐变shader

Zookeeper、Dubbo面试题总结_下列有关zookeeper的说法不正确的是? 一个分布式的,开放源码的分布式应用程序协调-程序员宅基地

文章浏览阅读205次。【zookeeper面试】ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。1、zookeeper是一个开源的分布式协调服务框架。2、应用场景:分布式通知/协调、负载均衡、配置中心..._下列有关zookeeper的说法不正确的是? 一个分布式的,开放源码的分布式应用程序协调

Zillow“炒房”失败,算法神话破灭了吗?-程序员宅基地

文章浏览阅读1.3k次。新冠时代,裁员、失业在全球范围内都是高频事件,我们似乎早就已经习惯了各种黑天鹅消息。不过美国地产平台Zillow在年底彻底关停iBuying业务,并将该业务约2000名员工全部裁掉的消息,...

navicat创建表不显示问题解决-程序员宅基地

文章浏览阅读5.1k次。在创建数据表时,我们会发现navicat创建表不显示问题?以下有三种解决方法!

SSH服务器拒绝了密码。请再试一次 问题解决_ssh拒绝了密码,请再试一次-程序员宅基地

文章浏览阅读1.1k次。SSH服务器拒绝了密码。请再试一次1.问题 SSH服务器拒绝了密码。请再试一次2.查看配置vim /etc/ssh/sshd_config找到Authentication# Authentication:#LoginGraceTime 2m#PermitRootLogin yes#StrictModes yes把配置改成# Authentication:LoginGraceTime 2mPermitRootLogin yesStrictModes yes重启s_ssh拒绝了密码,请再试一次

黑马IOS基础课程的学习笔记 C语言基础_黑马朴乾-程序员宅基地

文章浏览阅读576次。昨天弄了一天虚拟机是装上了 不过 这速度 装Xcode也死活装不上。。无爱了。。在MAC系统中的终端操作指令cc -c文件名.c // 要有空格编译成功会生成一个.o的目标文件链接 指令 CC 文件名.o 要有空格 貌似能多个文件一起链接的样子。 其实就是把我们的.o目标文件跟系统自带的库函数合并在一起,生成一个可_黑马朴乾

随便推点

android edittext背景颜色,Android 界面 EditText详解-程序员宅基地

文章浏览阅读1.3k次。本帖最后由 蒩你半张床つ 于 2013-5-26 12:46 编辑EditText说明EditText是一个非常重要的组件,可以说它是用户和Android应用进行数据传输窗户,有了它就等于有了一扇和Android应用传输的门,通过它用户可以把数据传给Android应用,然后得到我们想要的数据。TextView的子类,已知直接子类:AutoCompleteTextView,ExtractEditTe..._android edittext因为手机记住账号选择,导致界面变黄

nagios报错NRPE: Command 'check_heartbeat' not defined_nrpe: command 'check_cberp_mongodb' not defined-程序员宅基地

文章浏览阅读2.4k次。最近在做heartbeat监控的时候,在nagios服务器端报警提示:NRPE: Command 'check_heartbeat' not defined但是在nagios客户端/usr/local/nagios/libexec/check_nrpe -H 192.168.3.211 -c check_heartbeat都能够正常执行,查了很多资料主要有以下几种情况:1.nagios客户_nrpe: command 'check_cberp_mongodb' not defined

nth-child是以1开头_&:nth-child 从1开始-程序员宅基地

文章浏览阅读284次。一不注意,就要掉坑里面.外国人的东西,坑太多了._&:nth-child 从1开始

【HRBUST - 1996】数学等式 (HASH 或 二分)_现在给出三个数字a,b和c,你可以在保证a+b不变的情况下对两数进行调整,设调整以后-程序员宅基地

文章浏览阅读360次。题干:又到了数学题的时刻了,给出三个数组A,B,C,然后再给出一个数X,现在我想知道是否能找到三个数满足等式A[i]+B[j]+C[k]=X,你能帮助我么??Input本题有多组数据,每组数据第一行输入三个数n,m,h,分别表示数组A,B,C内的的元素个数(0<n,m,h<=500)接下来三行分别输入数组A,B,C的元素接下来输入一个数Q,表示Q次询问(1&l..._现在给出三个数字a,b和c,你可以在保证a+b不变的情况下对两数进行调整,设调整以后

数据可视化基本套路总结-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏13次。真依然很拉风,简书《数据可视化》专栏维护者,里面有很多优秀的文章,本文便是其中一篇。文章总结了多种数据可视化图形,并简要介绍了各种图形的作用,能为科研工作者在数据可视化阶段提供新的思路,..._计算机设计大赛经验分享,数据可视化

鸿蒙智联生态产品《接入智慧生活App开发指导》(官方更新版)_万和热水器如何加入鸿蒙智联-程序员宅基地

文章浏览阅读1.3k次。在HarmonyOS Connect生态产品应用开发过程中,很多开发者对于如何接入智慧生活App还存在一些疑问,如:如何选择合适的开发方式、如何进行H5开发与调测等。为了更好地帮助开发者,官方文档特意整理出“接入智慧生活App”专题。跟紧小编的步伐,赶紧来看看本次文档更新内容~文档中心-接入智慧生活App的开发指导:文档中心智慧生活App作为华为全场景智慧体验的重要入口,可以实现华为自研设备与生态伙伴设备的统一管理。图1 智慧生活App伙伴可以通过开发H5..._万和热水器如何加入鸿蒙智联

推荐文章

热门文章

相关标签