Shader学习
文章平均质量分 72
方大生
这个作者很懒,什么都没留下…
展开
-
ShaderLab属性的类型和CG变量的类型之间的匹配关系
如下表 ShaderLab属性类型 CG变量类型 Color,Vector float4,half4,fixed4 Range,Float float,half,fixed 2D sampler2D Cube sampleCube 3D sample3D 有时CG变量前会有一个uniform关键字 uniform fixed4 _Color; uniform关键词是CG中修饰变量和参数的一种修饰词,它仅仅用于提供一些关于该变量的初始值是如何指定和存储的相关信息。(这和其原创 2021-08-18 22:21:36 · 142 阅读 · 0 评论 -
Unity提供的内置文件/帮助函数
关于内置文件 在Shader开发中,我们经常会使用到类似c++头文件的东西,来帮助我们快速开发,我们可以从Unity的应用程序安装位置直接找到 CGIncludes 文件夹。 Windows:Unity安装路径/Data/CGIncludes Mac: /Applications/Unity/Unity.app/Contents/CGIncludes; CGIncludes中主要的包含文件以及它们的主要用处 文件名 描述 UnityCG.cginc 包含了最常使用的帮助函数,宏和结构体等原创 2021-08-19 16:55:42 · 223 阅读 · 0 评论 -
Unity提供的 CG/HLSL语义
什么是语义 语义实际上就是一个赋给Shader输入和输出的字符串。 通俗的讲,语义可以让Shader知道从哪里读取数据,并把数据输出到哪里。 DirectX10以后,有了一种新的语义类型,就是系统数值语义(system-value semantics)。这类语义是以SV开头的,SV代表的含义就是系统数值。这类语义在渲染流水线中有特殊的含义。 例如我们使用SV_POSITION语义去修饰顶点着色器的输出变量pos,那么就表示pos包含了可用于光栅化的变换后的顶点坐标(即齐次裁剪空间中的坐标),用这些语义描述的原创 2021-08-19 17:52:41 · 652 阅读 · 0 评论 -
UnityShader的调试方法
使用假彩色图像 假彩色图像指的是用假彩色技术生成的一种图像。与假彩色图像对应的是照片这种真彩色图像。一张假彩色图像可以用于可视化一些数据。 主要思想是:我们可以把需要调试的变量映射到[0,1]之间,把它们作为颜色输出到屏幕上,然后通过屏幕上显示的像素颜色来判断这个值是否正确。 需要注意的是,由于颜色的分量范围在[0,1],因此我们需要小心处理需要调试的变量的范围。如果我们已知它的值域范围,可以先把它映射到[0,1]之间再进行输出。如果不知道一个变量的范围 (往往说明你对这个Shader中的运算并不了解),原创 2021-08-20 16:09:39 · 1520 阅读 · 3 评论 -
Unity中的基础光照
我们是如何看到这个世界的 我们要模拟真实的光照环境来生成一张图像,需要考虑三种物理现象。 1.首先,光线从光源(light source)中被发射出来 2.光线和场景中的一些物体相交:一些光线被物体吸收,另一些光线散射到其他方向 3.最后,摄像机吸收了一些光,产生了图像 光源 光是由光源发射出来的。在实时渲染中,我们通常把光源当成一个没有体积的点,用l来表示它的方向。在光学里,我们用辐照度(irradiance)来量化光。 吸收和散射 光线由光源发射出来以后,就会与一些物体相交。通常,相交的结果有两个:散射原创 2021-08-26 14:22:31 · 312 阅读 · 1 评论 -
UnityShader透明效果
UnityShader的渲染顺序 Unity为解决渲染顺序的问题提供了渲染队列这一解决方案。我们可以使用SubShader的Queue标签来决定我们的模型将归于哪个渲染队列。 透明度测试 只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物体的处理方式来处理它。效果极端,要么完全透明,要么完全不透明 通常,我们会在片元着色器中使用clip函数来进行透明度测试。 函数:void cli原创 2021-09-02 14:58:44 · 417 阅读 · 2 评论