Shader,想说爱你不容易。

2024-08-29 07:18
文章标签 shader 容易 想说爱

本文主要是介绍Shader,想说爱你不容易。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这两天开始接触shader,给我的第一感觉是容易,第二感觉是难,第三赶脚是数学不好就先学数学吧

首先我们通过unity自己创建一个shader脚本的时候,其实shader已经给我们搭建好了编写shader基本的框架,我们要做的就是往里面写自己的shader,但是写之前总的先认识这里面有啥子东西吧。先创建一个shader瞅瞅,我使用的unity的版本为5.x,代码如下:

Shader "Custom/BasicDiffuse" {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 {Tags { "RenderType"="Opaque" }LOD 200CGPROGRAM// Physically based Standard lighting model, and enable shadows on all light types#pragma surface surf Standard fullforwardshadows// Use shader model 3.0 target, to get nicer looking lighting#pragma target 3.0sampler2D _MainTex;struct Input {float2 uv_MainTex;};half _Glossiness;half _Metallic;fixed4 _Color;void surf (Input IN, inout SurfaceOutputStandard o) {// Albedo comes from a texture tinted by colorfixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;o.Albedo = c.rgb;// Metallic and smoothness come from slider variableso.Metallic = _Metallic;o.Smoothness = _Glossiness;o.Alpha = c.a;}ENDCG} FallBack "Diffuse"
}

unity4.x创建的shader代码如下:

Shader "Custom/BasicDiffuse" {  Properties {  _MainTex ("Base (RGB)", 2D) = "white" {}  }  SubShader {  Tags { "RenderType"="Opaque" }  LOD 200  CGPROGRAM  #pragma surface surf Lambert  sampler2D _MainTex;  struct Input {  float2 uv_MainTex;  };  void surf (Input IN, inout SurfaceOutput o) {  half4 c = tex2D (_MainTex, IN.uv_MainTex);  o.Albedo = c.rgb;  o.Alpha = c.a;  }  ENDCG  }   FallBack "Diffuse"  
}  
unity4.x 和5.x是有区别的,我们以5.x为准。

其实shader生成的东西主要由三部分组成:Properties,Subshader和FallBack。

Properties的组成结构为{VariableName(Inspecto Variable Name, Type) = Value},请看Type的类型Type。而该结构中最重要的莫过于VariableName,这个变量的名称在我们之后写shader的过程中要用到,类似于c++中的变量。

subShader则是我们用来渲染对象的主要内容,对于新手什么Tags,LOD可以暂时自己了解,不必深究。而#pragma surface surf Standard fullforwardshadows这句话则相当的重要,它将直接告诉Shader使用哪个光照模型用于计算,这个名叫 Standard fullforwardshadows则是unity默认的光照模型,现在我们自己创建了一个BasicDiffuse的脚本那就将名字替换为BasicDiffuse。_MainTex是与贴图相关,我们可以在unity界面的Inspector中拖入一张图片让如其中就相当于给_MainTex赋值了,也就是Input已经有值了。surf既然有输入的Input的值,在这里那就有输出的值了,不然怎么知道渲染的结果是什么呀,而SurfaceOutputStandard正是扮演者输出值得角色。

FallBack和SurfaceOutputStandard的值将会在后面的内容中讲到



广告之后再回来!

这篇关于Shader,想说爱你不容易。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117207

相关文章

Unity3D Shader详解:只画顶点或只画线框

在Unity3D开发中,Shader是控制渲染过程的关键组件,它允许开发者自定义物体的渲染方式。有时,为了特定的视觉效果,我们可能需要只渲染模型的顶点或者只显示其线框。下面,我们将详细探讨这两种效果的技术实现,并给出相应的代码示例。 对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀! 只画顶点 在Unity中直接“只画顶点”的概念可能不是非常直观,因为顶点本身只是模型

unity shader实现一个移动的箭头

Shader "Unlit/LT_Arrow" {     Properties     {         _MainTex ("Texture", 2D) = "white" {}         _MSpeed("MoveSpeed", Range(1, 3)) = 2 //移动速度     }     SubShader     {         //贴图带透明通道 ,半透明效果设置如下

初学java——关于数组容易忽视的地方总结

1:静态初始化:有程序员显示指定每个数组的初始化,由系统决定数组的长度。      动态初始化:程序员只指定数组长度,由系统为数组元素分配初始值。 2:java数组变量是一种引用类型的变量,引用的是堆内存中数组对象,而不是栈内存中的数组变量。例如数组int[] A={1,2,3};int[] B={4,5,6};当执行下面语句时:A=B;则int[] A={4,5,6};引用数组A时,变量为数

Shader学习笔记

1. 渲染管线概述 定义:渲染管线(流水线)就是将数据分阶段的变为屏幕图像的过程 数据就是我们在游戏场景中放置的模型、光源、摄像机等等内容的数据 阶段就是渲染管线中的三个阶段:应用阶段一>几何阶段一>光栅化阶段 通过这三个阶段对数据的处理,最终我们就能够在屏幕上看见最终的图像 2. 应用阶段 应用阶段的大部分内容都和渲染无关(游戏逻辑处理、动画更新、物理模拟)几何阶段和光栅化阶段将开始处理

独立站运营中容易陷入的误区

近年来,越来越多的跨境电商卖家选择独立站作为他们品牌的出海模式,但有些卖家花了很多时间精力在建站和投放广告上,却依旧无法获得一个好的效果,究其原因,可能是你在运营独立站的时候搞错了重点,本文整理了一些在独立站运营中容易陷入的误区,看看你是否踩坑了? 1、把过多精力放在建站上 建站是独立站运营的第一步,但绝不是最重要的,许多新手会把大量时间和精力放在建站上,这其实没有必要,市面上有许多成熟的

深入分析网络编程中容易踩的坑

目录 1.TCP没考虑粘包分包 2.UDP没考虑丢包 3.长连接没考虑应用层心跳 4.大小端字节序问题 5.多线程发送乱序问题 6.大数据没考虑分片和流量控制 7.外网没考虑加密通信 8.客户端没考虑断线重连 1.TCP没考虑粘包分包   TCP是面向连接的可靠协议,TCP是流式协议,创建TCP套接字的类型为SOCK_STREAM int sockfd = socket(

初学者深度学习搭建网络容易出错的‘大因素’

1.网络输出与监督信号的尺寸应该匹配 如果你的输出是128*128*10的结果,那么你的监督信号也应该是128*128*10 如果你的监督信号是128*128*1,但是最后一个维度是整数,比如[1,10,2,3,1,1,1...]但是你的输出是128*128*10,那你可以考虑使用sparse 损失函数。categorical_sparse_crossentropy   2.监督信号应注意

让你很容易被黑客盯上的九个行为

我们都不想沦为黑客的受害者,但有时我们不知不觉中做出的决定却又增加了沦为受害者的可能性。有时候,一个小小的错误就可能为黑客打开便利之门,所以知道应该避免什么显得很重要。 以下是让你更容易受到黑客攻击的九个错误。        1. 使用公共Wi-Fi网络 当我们外出在商店、餐馆、咖啡厅和酒店时,有两种方式可以连接到互联网:使用我们的移动数据流量或连接到公共Wi-Fi网络。我们常常不想耗用自己

SAT数学考试的容易是相对的

提起SAT数学考试,很多中国考生都会认为是非常容易的。但是事实上,SAT数学考试题真的有那么容易吗?下面我们就从一些对比和分析来看看SAT数学考试的真实难度,看看中国考生的数学优势要如何发挥出来。   考生认为SAT数学考试很容易,无非是从数学考试的知识点上说的。绝大部分的SAT数学考点都是中国考生高一甚至是初中学习过的,大部分中国考生所面临的SAT数学备考内容都是记忆一些常见的数学词汇。但

浅谈amos与spss的联系与区别,新手容易产生的误区

如大家所了解的,SPSS和AMOS都是统计分析软件,但它们的功能和应用领域有所不同。 SPSS主要用于数据管理、数据清洗、基础统计分析等任务,而AMOS则更专注于结构方程模型的分析和路径分析。 对于初学者来说,因为不了解二者的关系和区别,常常在使用过程中不知道如何选择,下面与大家一起来对比分析,便于更好的了解和掌握。 先来看看SPSS软件: SPSS是一款非常流行的统计分析软件,它提供