UnityShader学习笔记(1)_unity shader clamp0-1-程序员宅基地

技术标签: unity  shader学习笔记  开发  

开博只为记录学习笔记。
工作两年多,发现shader的神奇之处,一直想学,却没能学进去,在此开博客,以坚定决心。

前几天买了一本《Unity着色器和屏幕特效开发秘籍》,由浅入深,目前看到了1.7.2,学到了些东西,先记录下来,刚开始学,自己理解的东西可能比较浅显,甚至有错,后面会慢慢纠正。

Shader "DQ/DQ_test_Difuse" { //shader路径
    Properties {
   //shader的属性
        _EmissiveColor("Emissive Color",Color) = (1,1,1,1)//放射色(目前理解是向光面颜色)
        _AmbientColor("Ambient Color",Color) = (1,1,1,1)//环境色(背光面颜色)
        _SaturateValue("Saturate",Range(0,10)) = 2.5//饱和度
        _RampTex("RampTex",Rect) ="ramp"//渐变纹理
    }
    SubShader {
        Tags { "RenderType"="Opaque" }//不透明
        LOD 200//渲染先后

        CGPROGRAM//开始
        #pragma surface surf BasicDiffuse//没有用Lambert
        float4 _EmissiveColor;//这里的名字要和Properties中的变量名一致(理解为field成员)
        float4 _AmbientColor;
        float _SaturateValue;
        sampler2D _RampTex;

        struct Input {
            float2 uv_MainTex;//这里是输入,实际上这个测试shader并没有用到,但是不能删,目前还不理解原因
        };

        void surf (Input IN, inout SurfaceOutput o) {
            float4 c;
            c = pow((_AmbientColor + _EmissiveColor),_SaturateValue);//pow算颜色和饱和度
            o.Albedo = c.rgb;//给输出赋颜色
            o.Alpha = c.a;
        }

//自己定义的光照模型,harf lambert 和 渐变纹理
        inline float4 LightingBasicDiffuse(SurfaceOutput s, fixed3 lightDir, fixed atten){
            float difLight = max(0, dot(s.Normal,lightDir));
            //点乘(向量的夹角越小,值越大,范围-1~1,平行且同向为1,平行且反向为-1,即向光方向>0,背光方向<0) + clamp限制 [0~1]
            float hLambert = difLight * 0.5 + 0.5; //限制difLight值范围0.5 ~ 1.0,避免背面颜色过暗
            float3 ramp = tex2D(_RampTex, float2(hLambert)).rgb;//把渐变纹理的颜色配合亮度读出来
            float4 col;
            col.rgb = s.Albedo * _LightColor0.rgb * ramp;//算出的颜色和光照颜色还有surf得到的颜色相乘,得到新的颜色
            col.a = s.Alpha;
            return col;
        }
        ENDCG//结束
    } 
    FallBack "Diffuse"
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/DbleQin/article/details/49613149

智能推荐

5.7mysql 多线程slave_mysql slave 任务数-程序员宅基地

文章浏览阅读1.2k次。5.7mysql 多线程slave1.主库需要设置参数:server_id=202log-bin=mysql-binbinlog_format=rowlog-slave-updatessync_binlog=1innodb_flush_log_at_trx_commit=12.从库配置server_id=203log-bin=mysql-binbinlog_format=rowlog-slave-updatesslave-parallel-type=LOGICAL_CLOCKs_mysql slave 任务数

《机器学习实战》笔记——第二章:k-近邻算法(kNN)实战_knn构建邻接矩阵-程序员宅基地

文章浏览阅读1.1k次,点赞5次,收藏8次。def classify0(inX, dataSet, labels, k): dataSetSize = dataSet.shape[0]#获取训练样本集的行数,即样本个数 diffMat = tile(inX, (dataSetSize,1)) - dataSet#利用tile()函数将inX向量构造成一个和dataset有相同行数列数的矩阵,并与之相减 sqDiffM..._knn构建邻接矩阵

Android 热敏打印机打印二维码_android热门打印机 二维码-程序员宅基地

文章浏览阅读9.6k次。最近项目需要研究下Android通过usbhost和蓝牙连接热敏打印机打印小票,收集了一下资料参考,感觉这块技术比较乱的,每家打印机都有自己的SDK,但其实底层的原理差不多,做个稳定兼容多个品牌热敏打印机的APP还是有难度的。  昨天晚上说抽时间来写一篇关于Android 热敏打印机打印二维码和图片的文章,所幸在下班之前把它给写了,和大家分享吧。我的是Android机器有内置热敏打印机的,我是把a_android热门打印机 二维码

IGMP Snooping和组播VLAN技术原理-程序员宅基地

文章浏览阅读6.8k次,点赞6次,收藏57次。IGMP Snooping:诞生原因:由于IGMP报文是封装在IP报文内,属于三层协议报文,而二层设备不处理报文的三层信息,所以这个过程它并不知道,而且通过对数据链路层数据帧的源MAC地址的学习也学不到组播MAC地址(数据帧的源MAC地址不会是组播MAC地址)。这样当二层设备在接收到一个目的MAC地址为组播MAC地址的数据帧时,在以前学习的MAC地址表中就不会找到对应的表项。那么这时候,它就会采用广播方式发送接收到的组播报文,这样一来不但会造成带宽的极大浪费,而且影响网络安全。注意:对应224.xxx.

编写一个函数,用于统计一个字符串中出现次数最多的字符和其出现的次数_编写一个函数,统计一个字符串中连续出现最多的字符及其次数-程序员宅基地

文章浏览阅读7.8k次,点赞3次,收藏10次。var str = "kobebryant";var obj = {};//遍历str,统计每个字符出现的次数for (var i = 0, length = str.length; i < length; i++) { //当前第i个字符 var char = str.charAt(i); //char就是对象obj的一个属性,obj[char]是属性值,存储..._编写一个函数,统计一个字符串中连续出现最多的字符及其次数

SAP QM 取消UD方法_冲销ud-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏22次。SAP QM 取消UD方法 一、业务场景1、 适用业务 通常检验批作完检验结果录入后,最后一步就是做UD判断,这一步的内容主要包括两方面:选定UD代码,表示检验将作如何的判定,如A表示接受,R表示拒绝,A1表示让步接受…;另外就是做库存转移,就是将检验状态的库存移为非限制状态的库存(有的企业称为判良品)或者转为冻结库存,甚至如果是破坏性检验还要做样品消_冲销ud

随便推点

4-The Network Layer_a router forwards a packet by examining the value -程序员宅基地

文章浏览阅读7.9k次。Please indicate the source: http://blog.csdn.net/gaoxiangnumber1Welcome to my github: https://github.com/gaoxiangnumber14.1 IntroductionFigure 4.1 shows a network with two hosts, H1 and H2, and severa_a router forwards a packet by examining the value of a field in the arri

8821AU双频抓包案例_8821au.ko-程序员宅基地

文章浏览阅读747次。操作系统:ubuntu网卡芯片:8821AU操作步骤:解压驱动包unzip RTL8821AU_Linux_v4.3.14_13455_BTCOEX20150128-51.20150216.zip2.进入驱动目录cd RTL8821AU_Linux_v4.3.14_13455_BTCOEX20150128-51.20150216/driver/3.修改驱动Makefile 文件,使支持monitor 功能4.编译驱动在驱动目录下make5.执行完Make 之后生成 .ko 文件6_8821au.ko

正则表达式相关概念_正则表达式 \*-程序员宅基地

文章浏览阅读1.2k次。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。在 [] 中加入 - 匹配指定范围内的任意字符,这个指定范围使用 ASCII 码来判断,比如 [ a-z ],表示匹配 a 到 z 中的任意一个字符。使用 () 定义一个子表达式。以上出自百度百科,通俗点说就是拥有一些特殊能力的字符,普通的字符比如a就表示a,元字符.可以表示任意字符。使用[]来表示任意字符,[]代表一个字符集合,可以匹配所包含的任意一个字符,注意只能匹配一个。._正则表达式 \*

修改openssh源代码,添加操作记录审记功能-程序员宅基地

文章浏览阅读285次。为什么80%的码农都做不了架构师?>>> ..._添加openssh源

db2设置默认schema_dataSource配置jdbc连接db2源url项指定currentSchema-程序员宅基地

文章浏览阅读3.3k次。1、jdbc连接字符串中指定当前schema要连接的目标库的schema名为DB2INST1,而在jdbc连接db2的字符串中不指定currentSchema的话,分配给用户的schema可能不是DB2INST1,而是DB2ADMIN,这时候程序的数据库操作会报sqlstate=42704的错误,因此需要在jdbc数据源连接设置中带上currentSchema设置具体如下:factory="org..._currentschema

Vue中调用qrcodejs2生成二维码,并将canvas转为图片格式使得移动端使用时可长按识别。(含批量生成二维码时遇到的坑,封装组件_vue-qrcode canvas-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏9次。业务需求,需要使用JS将url链接转为二维码图片。查到可以使用qrcodejs2传入内容、大小获得一个画布上的二维码。但是canvas标签在移动端上无法使用长按识别的功能,所以还需要把canvas对象转换为图片img标签。 网上找到的相关资料大多是通过html2canvas来将二维码转为图片的,但通过这种方法,总有一些奇奇怪怪的问题,比如有时候明明转成了base64,但是页面不显示。后来还是选择直接转为image,使用起来也更灵活。首先安装qrcodejs2:npm install qrcodej._vue-qrcode canvas

推荐文章

热门文章

相关标签