shader

Unity3D中的Shader

女生的网名这么多〃 提交于 2020-01-22 19:05:00
简单的说,Shader是为渲染管线中的特定处理阶段提供算法的一段代码。Shader是伴随着可编程渲染管线出现的,从而可以对渲染过程加以控制。 1. Unity提供了很多内建的Shader,这些可以从官网下载,打开looking for older version的链接就能看到Build-in shaders。选择合适的Shader很重要,以下是开销从低到高的排序: (1)Unlit:仅使用纹理颜色,不受光照影响 (2)VertexLit:顶点光照 (3)Diffuse:漫反射 (4)Specular:在漫反射基础上增加高光计算 (5)Normal mapped:法线贴图,增加了一张法线贴图和几个着色器指令 (6)Normal Mapped Specular:带高光法线贴图 (7)Parallax Normal Mapped:视差法线贴图,增加了视差贴图的计算开销 (8)Parallax Normal Mapped Specular:带高光视差法线贴图 对于现在流行的移动平台游戏,Unity提供了几种专门的着色器放在Shader->Mobile下,它们是专门优化过的。 2. 在Unity中,可以编写3种类型的Shader: 表面着色器(Surface Shaders):最常用的Shader,可以与灯光、阴影、投影器交互,以Cg/HLSL语言进行编写,不涉及光照时尽量不要使用。

CocosCreator1.x使用自定义流光shader

落爺英雄遲暮 提交于 2020-01-22 05:34:19
1.x使用shader与2.x使用shader有所不同,2.x的使用例子很多,1.x少些,这里列出使用流光shader例子。 1.创建顶点shader 代码: module.exports = ` attribute vec4 a_position; attribute vec2 a_texCoord; attribute vec4 a_color; varying vec2 v_texCoord; varying vec4 v_fragmentColor; void main() { gl_Position = CC_PMatrix * a_position; v_fragmentColor = a_color; v_texCoord = a_texCoord; } ` 2.创建片段shader 代码: module.exports = ` #ifdef GL_ES precision mediump float; #endif varying vec2 v_texCoord; uniform float sys_time; void main() { vec4 src_color = texture2D(CC_Texture0, v_texCoord).rgba; float width = 0.2; float start = sys_time * 1.2; float

How can I make the overlapping area of two sprites transparent in Unity?

余生长醉 提交于 2020-01-22 02:07:07
问题 How can I make the overlapping area of two sprites transparent in Unity? Could you write a shader about it? After some research, I learned that I should use stencil buffer, but I don't know how. This is vital to me. I have to complete this school project in 6 days. Please help .. = ( EXAMPLE IMAGE: 回答1: There you go, keep in mind this is the first time I'm using stencil so I might have done something less than optimal. But it works with sprites as you requested. // Upgrade NOTE: replaced 'mul

Opengl 3.3 doesn't draw anything. Using GLSL 330 Core

烂漫一生 提交于 2020-01-21 10:28:09
问题 I am following the guides from this site and have stopped on the lesson 2. At first I have tried wiriting my own code but after it didn't work I have simply taken the code from the site. And it still doesn't draw anything besides the glClearColor . What I have done: Checked compiling and linking. Works fine Checked errors. Not sure if I have done it right but seems like everything's allright (I get a 1280 error but I have read that GLEW can cause it and it can be ignored). Moved the

Android 图形显示系统(十四)OpenGLES 纯Native实现PNG图片贴图

做~自己de王妃 提交于 2020-01-21 09:22:35
文章目录 如何实现一个纯Native的应用 创建项目 AndroidManifest的配置 添加Native层的代码 简介一下NativeActivity 加载PNG图片 png库的编译 png库的使用 OpenGLES贴图 创建纹理Texture 使用纹理 Shader的那些事 小结 #OpenGLES 纯Native实现PNG图片贴图 春节临近本来不想更了,但是为了纪念即将逝去的一年,还是留下点什么吧!就让我们用OpenglES实现一个纯native的png图片的贴图! 如何实现一个纯Native的应用 我采用的是Android Studio!Android提供了 NativeActivity 来实现纯Native应用,我们将Native的实现打包成一个共享库,通过 NativeActivity 来调对应的共享库。创建一个native的应用,和正常项目大同小异,总的来说,主要注意一下几个部分: 创建项目 时选择 Native C++ ,C++ 标准我采用的是 C++ 14 AndroidManifest的配置 添加Activity,名称就是 android.app.NativeActivity ,主要的就是这里的 meta-data ,native打包成共享库 opengles_simples 。 <activity android:name="android.app

使用Shader Graph实现《塞尔达传说:旷野之息》风格的着色器

微笑、不失礼 提交于 2020-01-21 01:02:04
Unity的技术经理Ciro Continisio在Connect上分享创作模仿任天堂游戏《塞尔达传说:旷野之息》角色风格的着色器,受到不少用户的关注,本文将在分享制作该着色器的方法。 说明事项: 该着色器使用Shader Graph着色器视图制作。 使用了全新的轻量级渲染管线LWRP。 由于目前LWRP和Shader Graph着色器视图仍处于早期阶段,各自存在一些限制,本文将讲解如何使用技巧来解决这些限制问题。 受客户端所限制,为了方便大家更好阅读理解,本文中着色器完整视图图片提供了下载,请在文末获得下载地址。 目标 我打算实现二个层级的着色器,它带有强光和阴影。我要以二种方法支持镜面光照:头发使用简单的颜色面片实现,而皮肤要通过画笔描边来定义。 你可以在下图看到二种方法的不同,塞尔达的衣服呈现了特有的画笔描边效果,而她的头发上的高光只是明亮颜色的硬块。 希望实现的着色示例效果 我还想实现面向太阳时出现的边缘光照效果,以及当光线在特定角度时出现的几乎全白的边缘,请注意图中塞尔达的耳朵、手指和右臂。 最后,我想支持高光、法线和发射贴图。 视图流程 下图是视图流程的概述,所有重要部分都根据功能用方块突出显示。 左侧的TangentToWorld节点不是自定义节点,而是一个SubGraph。因为当时Transform节点存在bug,所以我必须使用SubGraph重新实现转换

unity shader 自定义定时器函数 interval

梦想与她 提交于 2020-01-21 00:53:37
如果代码中有什么不清楚请查看以下基础知识 Shader基础知识 unity3d 中 七种坐标知识详解 定时器函数 shader中没有定时函数,大部分时间相关的都要用_Time.y、_SinTime.w 来实现。 我的需求是指定几秒后触发条件,在指定的时间区域内不断重复提醒。到点返回间隔时间的true,没到点返回间隔时间的false,简单吧。 当然也可以直接使用_Time.w >- 0实现。.w是计算sin(t)。 将下面函数直接放进shader中的subshader>pass中,然后直接在着色器中调用即可 bool timeInterval ( float interval ) { //如果当前的时间余(间隔时间*2),返回的数是0-interval*2 // _Time.y当前时间,单位是秒 float intervalTime = _Time . y % ( interval * 2 ) ; //计算的时候是双倍时间,验证的时候用单倍时间,是因为不想面对琐碎的小数阈值 if ( intervalTime >= interval ) { return true ; } else { return false ; } //简化版 return _Time.y % (interval * 2) >= interval; //着色器 float4 frag ( v2f i ) :

UI shader 增加mask遮罩的支持

匆匆过客 提交于 2020-01-20 01:00:08
年前最后一贴,祝自己在明年能获得更多的Exp. 在为ui写shader时 一定要考虑到 ui mask 的问题, 加入对应的裁剪代码. [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 ZTest [unity_GUIZTestMode] #include "UnityUI.cginc" #pragma multi_compile __ UNITY_UI_CLIP_RECT #pragma multi_compile __ UNITY_UI_ALPHACLIP #ifdef UNITY_UI_CLIP_RECT col.a *= UnityGet2DClipping(i.worldPosition.xy, _ClipRect); #endif #ifdef UNITY_UI_ALPHACLIP clip (col.a - 0.001); #endif 来源: CSDN 作者: 拔箭四顾心茫然 链接: https://blog.csdn.net/qq_26365139/article/details/104039154

Shader预处理宏、内置状态变量、多版本编译等

你。 提交于 2020-01-18 01:05:33
预定义shader预处理宏:   Target platform:   SHADER_API_OPENGL - desktop OpenGL   SHADER_API_D3D9 - Direct3D 9   SHADER_API_XBOX360 - Xbox 360   SHADER_API_PS3 - PlayStation 3   SHADER_API_D3D11 - desktop Direct3D 11   SHADER_API_GLES - OpenGL ES 2.0 (desktop or mobile), use presence of SHADER_API_MOBILE to determine.   SHADER_API_FLASH - Flash Stage3D   SHADER_API_D3D11_9X - Direct3D 11 target for Windows RT   Surface shader pass indicators:   UNITY_PASS_FORWARDBASE - 前向渲染的base pass(主方向光、lightmaps、SH)   UNITY_PASS_FORWARDADD - 前向渲染的add pass(没盏灯一个pass)   UNITY_PASS_PREPASSBASE - 延迟渲染base pass(renders

如何在Unity中分别实现Flat Shading(平面着色)、Gouraud Shading(高洛德着色)、Phong Shading(冯氏着色)

房东的猫 提交于 2020-01-17 16:30:24
写在前面:    先说一下为什么决定写这篇文章,我也是这两年开始学习3D物体的光照还有着色方式的,对这个特别感兴趣,在Wiki还有NVIDIA官网看了相关资料后,基本掌握了渲染物体时的渲染管道(The rendering pipe-line)流程,以及各种空间坐标系(MVP),但是在用Unity的Shaderlab写shader的时候,对于具体怎么实现各种着色有很大的疑问,决定苦心钻研一下,过了几个月吧,现在对写shader还是比较熟练的,也解决了之前的疑惑,写这篇算是一篇笔记,以后可能用到,或者初学者想参考一下都是很好的,那么言归正传。 看这篇教程所需要的基础: 有一定的shader编写基础,能看懂vertex&fragment代码。 了解3D的物体的顶点存储有什么信息。 有一定的Unity基础,能看懂基本的C#代码。 初学者,想学习这方面技术的(虽然本篇本来就很基础) 那么本篇文章正式开始 三种着色方式的区别:   物体在屏幕中每个像素点的颜色,取决于两部分,一个是物体本身顶点的信息,比如位置,法线方向,颜色等等。另一个就是着色方式,着色函数可以根据顶点然后填充中间的部分,比如说你有三个顶点,你就可以用着色函数获取一个面,至于这个面怎么显示,就有各种各样的方法,本篇讲述三种比较常见的方法。 Flat Shading(平面着色) :平面着色简单来讲,就是一个三角面用一个颜色