unity—shader简单编程(2)
发布日期:2021-05-07 17:59:07 浏览次数:12 分类:技术文章

本文共 1566 字,大约阅读时间需要 5 分钟。

上一篇编写shader需要具备的知识储备,在这篇博客中如果有迷茫的可以去这里看一看

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/My_shader"{
//属性,可以在编辑器里面绑定和修改 Properties {
_Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {
} _Glossiness("Smoothness", Range(0,1)) = 0.5 _Metallic("Metallic", Range(0,1)) = 0.0 } SubShader{
Pass{
CGPROGRAM //插入Cg代码开始,必须有 然后指定shader的入口在哪里 //Cg的语法与c、c#相似 fixed4 _Color;//定义同样名字的变量 sampler2D _MainTex;//定义同样名字的变量 #pragma vertex my_vert//编译指令,将那个函数作为着色器的入口,在这里是my_vert函数 //并且要告诉编译器,这是什么着色器 //顶点着色器的声明是 #pragma vertex+ 函数名称 //顶点着色器的优点是控制灵活,缺点是无法参与光照计算 //片元着色器的声明是 #pragma fragment +函数名称 //只有绑定了之后,编译的时候才会把上一个工位的position传过来(传到pos) //前面的那个POSITION是将上一个工位的位置绑定到pos上,第二个冒号是将修改后的pos传递到下一个工位 //GPU渲染流程工位图在上一篇博客里面 float4 my_vert(float4 pos :POSITION):POSITION//怎样获得的上一个工位的参数——》语义绑定 {
return UnityObjectToClipPos(pos);//将pos坐标变换到投影空间,然后传递到下一个工位 } #pragma fragment my_frag//进行片元着色器的编程 fixed4 my_frag(float2 uv:TEXCOORD0) :COLOR//第一套纹理也可以是第二套第三套,只需要将最后面的0修改即可 {
//return fixed4(1.0, 0.0, 0.0, 1.0); return _Color; //返回的这个是修改后的默认颜色值 //return tex2D(_MainTex,uv);//前面是需要修改的纹理,后面是查找的像素坐标颜色,函数在上一篇博客中 } //相当于四个float x、y、z、常量 ENDCG //插入Cg代码结束,必须有,两者都存在了之后,在中间就可以编辑着色器代码 //在子着色器中,必须要有通道属性,在通道属性中,只要有顶点着色器与片元着色器其中的一个,可以同时有两个 } } FallBack "Diffuse"}

实现效果

开始
在这里插入图片描述
运行
在这里插入图片描述
希望这篇博客可以对您有些启发,嗯,如果在这些代码中有看不懂的函数或者知识的话,可以去上一篇博客看一看

转载地址:https://blog.csdn.net/lfanyize/article/details/104087430 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:unity-修改shader的默认值,纹理
下一篇:unity-shader编写需要储备的知识(1)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月13日 13时34分39秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章