Unity3D&Shader_
文章平均质量分 94
unity3D与Shader
liu_if_else
这个作者很懒,什么都没留下…
展开
-
Unity Shader:细分着色器(Tessellation Shader)在Unity顶点着色器中的写法以及各参数变量解释
(上图:将sphere与quad进行细分后)Unity官网关于细分着色器的资料比较少,只有在Surface Shader中使用的例子。我看了下Surface Shader的generated code,总结出如何在顶点与片段着色器中写hull shader和domain shader并实现基本的Tessellation细分功能。首先看一下Unity Shader的4个可编程着色器的执行顺序:原创 2017-07-12 20:36:16 · 10302 阅读 · 0 评论 -
Unity Shader: 理解Stencil buffer并将它用于一些实战案例(描边,多边形填充,反射区域限定,阴影体shadow volume阴影渲染)
本文示例项目Github连接:https://github.com/liu-if-else/UnityStencilBufferUses有两次被人问到stencil buffer的用法,由于对它的印象一直比较模糊回答的含糊其辞,这两天研究了下它并总结出此文。1,Stencil buffer在OpenGL渲染管线/Unity Shader中的角色为什么叫stencil 模板如果将屏幕上所有像...原创 2019-01-11 22:46:21 · 19295 阅读 · 2 评论 -
在Unity内利用混融公式剔除背景颜色导出透明PNG以及半透明遮挡相关问题的研究
最近听到了一个想法,是将Unity内的一些特效进行截图,导出带透明度的png用于视频制作,于是回顾了一下以前研究过的混融相关的问题,研究了一下如何实现,也学到了一些新的技巧和知识。混融公式(图1:OpenGL渲染管线)在OpenGL渲染管线中,对于透明相关的处理是在管线后期进行的。画面中的物体,三角形是按照一定顺序渲染的,当物体或三角形在位置发生重叠时可能会出现一个颜色覆盖另一个颜...原创 2018-04-30 13:35:59 · 8004 阅读 · 0 评论 -
Unity Shader:Waveform波形(3)-复合波
# 2D复合波![这里写图片描述](https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwOTI1MTMxMjIyMzc4?x-oss-process=image/format,png)(图1:在xy平面有三个波,y1=sinx,y2=sin2x,y3=sin3x)根据叠加原理(superposition principle),可以将这三个波组合成一个复合波形,这个复合波既是三个波形相加后的结果:y=sinx+原创 2017-09-25 16:37:24 · 3436 阅读 · 5 评论 -
Unity Shader:Unity网格(1)---顶点,三角形朝向,法线,uv,以及双面渲染三角形
1,顶点顶点是网格最基础的组成部分,可通过mesh.vertices获取和赋值。mesh.vertices是一个Vector3的数组,每个Vector3代表了此顶点在世界空间中的位置。顶点的位置,数量没有任何限制。几个同样的顶点可以组合成若干不同形状,不同数量的三角形。mesh = new Mesh ();Vector3[] v3s=new Vector3[4];v3s [0] = new Ve原创 2017-06-15 17:33:04 · 18227 阅读 · 3 评论 -
Unity Shader:雾的数学运算以及在Unity中使用Fog
Forward,MSAA,Bloom,Global Fog/Exponential Squared/Density 0 Forward,MSAA,Bloom,Global Fog/Exponential Squared/Density 0.045 Forward,MSAA,Bloom,Global Fog/Exponential Squared/Density 0.085 Forw原创 2017-06-26 19:26:24 · 6076 阅读 · 0 评论 -
Unity Shader: 优化GPU代码--用step()代替if else等条件语句。
普通的卡通着色Shader:先看一个Shader,卡通着色。Shader "Unlit/NewToonShading"{ Properties { _Shininess("Shininess",float)=1 _Edge("Edge Scale",range(0,1))=0.2 _FinalColor("Final Col原创 2017-08-21 20:00:37 · 46032 阅读 · 10 评论 -
Unity Shader:三向贴图(Tri-planar mapping)---解决地形拉伸贴图变形以及贴图边缘的缝隙问题
效果图: 效果图1,地形:左边为三平面式贴图效果,右边为一般贴图效果。 效果图2,树干:右边为三平面式贴图效果,左边为一般贴图效果。 效果图3,球体:左边为三平面式贴图效果,右边为一般贴图效果。1,世界坐标贴图 World Space UV-mapping 在一般的贴图方法中,在片段着色器内使用tex2D(texture,uv);对2D材质进行采样时,片段着色器将会根据顶点着色器将会传入的顶原创 2017-06-28 15:18:52 · 18428 阅读 · 5 评论 -
Unity Shader:Waveform波形(2)-基本波形:正弦,三角,锯齿,直角以及其变种的实现方式
在Shader中,波形可以作为一种模拟动态的手段,例如颜色的波动,形状的波动,可以基于此创作出各种效果。 下文介绍几种基本波形以及变种的Shader实现代码,并配以函数图像和简单动画效果图。在效果图中,Shader代码计算出y值,在顶点着色器中赋给顶点的y坐标,或在片段着色器中插值后乘以颜色。波形公式中参数的说明:base:基点。波形的起始点。振幅从此点开始计算。 amplitude:振幅。振幅原创 2017-08-30 17:10:28 · 7830 阅读 · 5 评论 -
Unity Shader:Waveform波形(1)-用正弦函数做闪烁效果并分析波形公式中的参数
(图1:利用三角函数实现的闪烁动画)由于GPU机制的特殊性,在写Shader做动画效果时,很多时候要用到三角函数。实现上图中闪烁效果的Shader代码:```cfloat brightness=pow(sin(_Time.y*_SparkleRate+phase),20)*800;o.color.rgb=v.color.rgb*brightness;o.color.a=1;```计算brightness的代码行实际上来自以下公式:$y=((\sin(\_Time.y*SparkRat原创 2017-08-14 11:16:29 · 3720 阅读 · 0 评论 -
Unity Shader:实现菲涅尔+色散效果的环境映射以及相关原理解析
1,色散在光学中的原理 2,反射的原理以及环境映射的实现 3,折射的原理以及色散的实现 4,菲涅尔效果 5,将菲涅尔与色散效果增加到环境映射中1,色散在光学中的原理复色光 ——现实生活中的许多光都是复色光,例如阳光。 光谱 ——光学频谱,简称光谱,是复色光通过色散系统(如光栅、棱镜)进行分光后,依照光的波长(或频率)的大小顺次排列形成的图案。https://zh.wikipedia.o原创 2017-06-20 20:16:54 · 13376 阅读 · 2 评论 -
Unity Shader:向量在世界空间与切线空间中变换的相关数学原理与应用
1,将向量由世界空间变换至切线空间 2,将向量由切线空间变换至世界空间1,将向量由世界空间变换至切线空间假设在世界空间中有一个球体,还有一个光源,光源的方向接近于正对球体点p的法线。 图1在点p处存在着一个切线空间,在此空间中,p的法线作为z轴,p的tangent作为x轴,p的binormal由normal和tangent叉乘而得,作为y轴。tangent由点所在的三角形中的uv方向确定(三原创 2017-06-22 15:50:53 · 10905 阅读 · 2 评论 -
Unity Shader: Shader粒子广告牌
广告牌效果既是不论物体与摄像机的角度,被渲染物体总是正对着摄像机。此技术广泛利用于粒子效果中,例如Unity内置的Particle System。下文将要介绍如何在Shader中实现广告牌效果。# 在视空间对顶点进行重定位原创 2017-08-14 17:29:11 · 3682 阅读 · 0 评论 -
Unity Shader:用几何着色器实现复联3灭霸的终极大招灰飞烟灭
(上图:效果图1。普通网格模型) (上图:效果图2。几何着色器粒子化特效进行中。) (上图:效果图3。几何着色器粒子化特效进行中。)1,用几何着色器进行图元转换在OpenGL渲染管线中,几何着色器(Geometry Shader)有一个独一无二的工功能,既是图元转换。这里不对理论进行过多的讨论,可简单理解为渲染点,线,面之间的转换。 实现很简单,只有注意语法即可,以本...原创 2018-02-11 22:17:13 · 3594 阅读 · 2 评论