
Shader
文章平均质量分 65
iningwei
这个作者很懒,什么都没留下…
展开
-
Unity StandardShader反射显示效果异常
情况说明1,笔者的Unity版本是2020.3.0f1, 使用Unity默认老管线和Standard Shader。ForwardRendering实时渲染,没有烘焙。2,所有的资源通过ab加载。,这边开发环境下编辑器使用的是android模式,加载的ab资源也是安卓下的ab,因此会出现GPU层shader的不兼容,我这边也是按照常规做法在客户端代码增加UNITY_EDITOR宏,在宏内为相应的材质球加载本地的shader。3,目前的问题是:使用了Standard(Specular setup)和反射原创 2021-09-07 15:50:06 · 2205 阅读 · 0 评论 -
扩展Unity SurfaceShader使支持模型顶点色
默认情况下Unity内置的SurfaceShader是不支持模型的顶点色的。通过简单的扩展可以使之对顶点色进行支持,下面以内置的Legacy Shaders/Transparent/Cutout/Diffuse为例说明。原始shader内容// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)Shader "My/Legacy Shaders/Trans原创 2021-07-06 19:00:40 · 562 阅读 · 2 评论 -
聊聊Shader.Find
通过Shader.Find(name)可以获得指定名字的shader,需要注意的是name为Shader脚本中第一行定义Shader的全名,如Unlit/Texture,Legacy Shaders/Diffuse等。如果shader没有被引用包含进发布工程,那么Shader.Find将不会获得目标shader,相关的材质球会粉色显示。可以通过以下几种方式把需要的shader引用到工程中:1...原创 2020-03-20 11:19:16 · 5262 阅读 · 0 评论 -
[Unity3D][Shader]PANCgShader--第二章 透明面--04透明物体轮廓增强
对于表面光滑的物体,其表面法线和视线接近90°的时候,一般可以认为该点位于轮廓处。增加轮廓位置的不透明度假定V是归一化后的视角方向,N为归一化后的表面法线方向。 当点乘V⋅N的结果越接近0,不透明度α的值越大。...原创 2019-09-09 15:19:04 · 227 阅读 · 0 评论 -
[Unity3D][Shader]PANCgShader--第二章 透明面--03顺序无关的透明
对于标准的alpha混合等式,其混合的正确与否往往跟物体三角面的排列有关。特别对于一些畸异的物体,三角面并不是按照从后到前顺序排列的。混合等式中有一些并不依赖三角面的顺序,因此可以很好的规避这些问题。常见的为Additive Blending和Multiplicative Blending。Additive Blending前文已经探讨了混合语法Blend {code for SrcFact...原创 2019-09-08 23:20:11 · 231 阅读 · 0 评论 -
cg 逐片元操作
原创 2019-09-08 16:33:56 · 236 阅读 · 0 评论 -
[Unity3D][Shader]PANCgShader--第二章 透明面--02透明物体Alpha混合
混合(Blending)可编程图形管线中提到fragment shader为每一个片元(除非被discard)计算RGBA颜色(以fragment输出参数COLOR的形式)。原创 2019-09-08 16:32:24 · 330 阅读 · 0 评论 -
[Unity3D][Shader]PANCgShader--第二章 透明面--01部分切除
最简单的切除在SubShader中的Pass中使用指令Cull Off,Cull Back,Cull Front可以关闭切除,切除背面,切除正面。默认情况下Pass使用的是Cull Back。需要注意的是这些指令需要放在CGPROGRAM前声明。大部分GPU还支持语义VFACE,这更容易区分正面或者背面,但并不是所有的GPU都支持,详见:Shader semanticsdiscard指令...原创 2019-09-07 00:51:36 · 253 阅读 · 0 评论 -
[Unity3D][Shader]PANCgShader--第一章 基础--04(补充) Shader属性
文章目录属性类型详解attributesTexGenShader结构Democ#脚本调用shader属性为Shader提供属性(也可以认为是变量),可以把控制权交给非程序员。在Unity中,这些属性会显示在Unity的材质球的inspector面板上。属性类型数字和Slidername ("display name", Range (min, max)) = numbername ("d...原创 2019-09-06 20:23:20 · 292 阅读 · 0 评论 -
[Unity3D][Shader]PANCgShader--第一章 基础--04 统一坐标系
物体坐标系向世界坐标系转变前文提到过,vertex shader阶段用POSITION语义修饰的输入参数指的是物体的坐标,而且是mesh以自身所在的坐标系统为准的坐标。因此所有的物体最终需要统一转换到一个共同的坐标系统——世界坐标关于坐标系统转换更多知识参见Vertex Transformations从模型空间转换到世界空间需要一个4x4的矩阵,该矩阵称之为模型矩阵,该矩阵在Unity3D中...原创 2019-09-06 17:08:02 · 351 阅读 · 0 评论 -
cg 可编程图形管线
GPU渲染流程图本图来源:Programmable_Graphics_Pipeline上图中蓝色box为数据,灰色box为固定单元阶段,绿色box为可编程阶段。在OpenGL ES 1.x,core OpenGL 1.x, Direct3D 7.x时期,渲染是可配置的固定单元管线(fixed-function pipelines),无法在管线中使用程序片段。到了OpenGL(ES)2.0,W...原创 2019-09-06 01:09:52 · 229 阅读 · 0 评论 -
[Unity3D][Shader]PANCgShader--第一章 基础--03 vertex参数
vertex阶段数据是怎么来的?gameobject的Mesh Renderer组件会每一帧把mesh的所有数据信息发往GPU。这也就是所谓的draw call。每一次的draw call都会有性能消耗,因此每次向GPU发送一个较大容量的mesh数据比发送若干个小mesh数据更高效。mesh数据包括三角面列表,每个三角面由3个顶点定义,每个顶点又包含若干属性,这些属性通过vertex输入参数...原创 2019-09-05 23:35:56 · 556 阅读 · 0 评论 -
[Unity3D][Shader]PANCgShader--第一章 基础--02 RGB方块(vertex输出参数)
Shader内容Shader "My/RGBCube"{ SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag struct vertexOutput{ ...原创 2019-09-05 22:53:39 · 293 阅读 · 0 评论 -
[Unity3d][Shader]HLSL Tools for Visual Studio
Unity3D中shader使用的是cg/hlsl语言。虽然shader可以用各种编辑工具编写。但是毕竟有很多关键词法,在不借用工具的条件下,硬编写难免增加了出错的几率。笔者使用的是VS2019,可以安装HLSL Tools for Visual Studio。功能不算强大,但勉强能用。拓展->管理扩展在联机选项中搜索shader,即可以下载安装。...原创 2019-09-05 11:48:46 · 2760 阅读 · 1 评论 -
Shader:背景图片循环移动
shader方式git地址//图片的WrapMode需要设置为RepeatShader "My/CirculationBg"{ Properties { _MainTex ("Texture", 2D) = "white" {} _ScrollXSpeed("X Scroll Speed",Range(0,10))=2 _ScrollYSpeed("...原创 2019-06-25 09:55:50 · 1108 阅读 · 0 评论 -
[Unity3D][Shader]PANCgShader--第一章 基础--01 shader的基础结构
test原创 2019-03-18 18:41:21 · 161 阅读 · 0 评论 -
支持UGUI Sprite的圆形进度条shader
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'//参考文档:https://blog.youkuaiyun.com/wanghaodiablo/article/details/52103132Shader "My/SpriteCircleFill"{ Properties ...原创 2019-02-20 15:48:54 · 955 阅读 · 0 评论 -
Material does not have a _MainTex texture property It is required for SpriteRenderer.
网上直接复制网页内容,拷贝了份对UGUI SpriteRenderer组件进行圆形进度条的shader代码。报错:有时候还会有其它莫名报错…原因由于复制粘贴的shader,带来了一些莫名的隐藏字符,导致上述莫名其妙的报错。解决方案手动敲一遍。即可。...原创 2019-01-14 10:11:52 · 3912 阅读 · 0 评论