unityshader
卜若
love game,love life
展开
-
卜若的代码笔记-unityshader系列-第十七章:Shader练习.遮罩(Shader采样Image的Sprite)
1.遮罩的意义,就是让某个颜色的部分透明,其他的不透明。实现思路很简单,但如果你是从这个系列一步一步上学过来的,那肯定很简单啦1.1我们先定义一个标准Shader,然后慢慢改Shader "Custom/Mask001" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)原创 2020-05-30 08:35:13 · 363 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第十六章:光照模型的物理意义及高光反射模型&逐像素计算光照模型
1.光照模型的物理意义我们先看一下漫反射的定义漫反射颜色值 = (光源的rgb*定义的漫反射强度rgb)*max(0,dot(基于世界坐标系的模型法线,光源在世界空间坐标系下的位置))先解释一下:(光源的rgb*定义的漫反射强度rgb)意味着:光源的rgb,和强度rgb的一种单存的颜色叠加。其实到这一步,我们看到的渲染的模型的颜色就已经和光照挂钩了。我们可以这样写...原创 2020-04-18 17:29:08 · 429 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第十五章:光照模型
事实上,我们在前面所有的章节所做的操作都没涉及到光照模型。我们只是给他赋予了某种颜色,没有接受来自外界光照的这种干涉。这和现实情况是背离的是吧。也不算,比如我们的灯泡就不受其它干扰,这种光照叫做自发光Emissive其实举个最简单的例子:我无论怎么变化平行光属性,对应的效果都不会有变化。这就是没加光照的。那么这一章我们要考虑光照。我们所看到的物体 = 物体...原创 2020-04-18 13:08:29 · 130 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第十四章:UV的分配,图像采样(片元着色器,顶点着色器)
1. UV的分配1.1 在Unity当中,注意,shader的uv坐标定死了长这样如果来一张图它的坐标就是这样:所以,我们在分配uv的时候,它也只会将该图映射到这个坐标里面。比如,你设计了一个你猜它会贴到哪?我们来做一个实验和想象的不太一样,我以为它会只贴0-1的区域,没想到都贴上了?原因很容易想到,肯定某个地方设置为重复,我们找一下...原创 2020-04-17 15:56:39 · 951 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第十三章:第八章绘制顺序错误带来的问题及其分析(顶点偏移带来的三角面缺失)
在第八章中,我们绘制了一个100*100 的面片,看起来没有什么问题,并且我们所使用的绘制顺序是这样的然后显示的平面效果是这样的:看起来没啥问题是吧?我现在在顶点着色器通过采样一张噪点图:得到一个随机值rd然后通过vertex偏移->得到了一个奇葩的效果:一种破破烂烂的效果。这个叫做三角面缺失。我搜索了一下各种问题,但是目前提到...原创 2020-04-17 15:23:20 · 268 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第十一章:透明效果2(混合透明)
11.1 步骤1.你得打开混合blend然后就没事了。嗯,确实很简单。看下效果:当然,如果你要考虑渲染顺序之类的问题的话,你得往后面看。因为目前我们还没有需要考虑渲染顺序的需求。源码:// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "Unlit/t2"...原创 2020-04-15 21:44:03 · 109 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第十章:透明效果1(透明度测试)
这个操作的核心原理就是:让alpha分量小于某个阈值的像素透明核心代码是10.1 一个简单的demo先来看效果:源码:// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "Unlit/t2"{ Properties { _Color("Color",Colo...原创 2020-04-15 20:16:42 · 128 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第九章:波动(最简单的顶点动画)
我们在第八章创建了复杂的一个mesh,在这一章中,我们希望实现一个波动效果9.1 正弦波动我们先通过gif看一下这个效果实现的原理很简单,就是让它的顶点的y分量根据时间呈现正弦波动核心操作都是在顶点着色器完成。以下是源码:// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Sh...原创 2020-04-15 20:02:36 · 186 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第八章:复杂Mesh
这一章我们讲复杂的mesh为下一章的材质准备一些材料8.1 创建一个矩形面片本质就是绘制两个三角形面片,如图8-1.其代码有注释了就不做太多解释了。 public virtual Mesh createMesh() { Mesh mesh = new Mesh(); Vector3[] v3s = new Vector3[4]...原创 2020-04-14 21:18:54 · 272 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第七章:网格
第七章:网格在接下来的好几章内,我们来玩水。7 如何产生Mesh?我们在Unity中看到的所有3D形状都是由mesh构成的。那么如何产生一个mesh?大概分成两步:产生mesh数据和将mesh数据渲染出来。前者由cpu帮你操作后者由gpu帮你操作。如果你没有看过前面几章的gpu渲染流程,这边建议是你回顾一下,那样比较好。7.1 生成mesh数据如果你有一点的opengl或者...原创 2020-04-13 16:13:38 · 195 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第六章:空间变化
第六章:空间变化本章需要掌握的四个知识点是Unityshader的四个基本坐标系。1 模型空间1.1 如何理解模型空间?模型空间,你可以认为是你自己,针对模型空间不存在东南西北,只有上下左右。希望你能理解这句话。他是独立的,是无法呗观测到的。但是你能想象得到的,计算机也能计算得到的。我们可以理解为这是一个结节空间,一个不被 探测到的新世界。1.2 模型空间坐标系怎么确定...原创 2020-04-13 12:41:06 · 152 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第五章:渲染流水线
第五章:渲染流水线5.1 核心模块5.2 Shader中如何设置顶点着色器?关于POSITION和TEXCOORD0,我这里先不做介绍,我们可以认为它是一个已经实现了的变量(在这里称为语义)。UNITY引擎在底层做了很多工作。让你可以轻易的拿到顶点的位置和uv。请注意,这个时候,它是一个引用,是一个指针。它会直接指向这个”3D对象”的顶点位置和贴图。你可以对它为所...原创 2020-04-13 00:31:12 · 137 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第四章:时间
1.1 时间变量_Timeunity内置的变量通常都会加上下划线比如_xxx那么时间也是一样。从引擎角度来讲,时间应该是内置的变量,就像你的pc一样,你的pc里面有个叫晶震的东西,它会不断分频为你的cpu提供时钟,那么,unity内部其实也有这样一种时钟机制,它叫做_Time。我们可以看到_Time的定义_Time float4 time (t/20,t,t*2,...原创 2020-04-12 21:31:54 · 321 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第三章:void surf()函数
第三章:void surf()函数在本章中,我们主要介绍上一章遗留下的问题,void surf()扮演一个什么样的角色,我们应该怎么使用它?1.1 函数的基本介绍要想了解这个函数,我们或许得先了解一下片元着色器的着色流程fragment shader其中表面函数就是指void surf()函数。请注意,这个流程是一个渲染流水线,在有些材料里面你可以看到渲染管线,其实都是...原创 2020-04-12 21:00:58 · 738 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-第二章:shader的基本结构
一个完整的Shader文件由Properties,SubShader,FallBack组成,命名规则遵循驼峰结构,下面会一一介绍各个部分扮演的角色1.1 Properties属性,是shader文件里面的基本模块,用于定义一些基本操作元素,比如颜色,纹理等见图1-1,我们可以看到一个简单的Properties属性在这个Shader里面,我们定义了颜色_Color,采样纹理_Ma...原创 2020-04-12 20:55:57 · 189 阅读 · 0 评论 -
卜若的代码笔记-unityshader系列-unityshader入门精要读书笔记-第一天
该系列内容均来自冯乐乐大佬撰写的Unity入门精要仅做交流学习,不做商业用途,特此声明,在今后的章节中将不做赘述。1.什么是渲染流水线?计算机将一系列的顶点数据,纹理数据转化为一张人眼可以看见的图像的过程,就叫做渲染流水线。2.渲染流水线的过程2.1:应用阶段主要处理哪些事情?1.准备场景数据,摄像机,视锥体的位置,模型,光源2.剔除culling操作,...原创 2019-09-05 21:02:26 · 170 阅读 · 0 评论