shader

【译】Unity3D Shader 新手教程(2/6) —— 积雪Shader

♀尐吖头ヾ 提交于 2020-01-17 16:12:16
本文为翻译,附上 原文链接 。 转载请注明出处—— polobymulberry-博客园 。 如果你是一个shader编程的新手,并且你想学到下面这些酷炫的技术,我觉得你可以看看这篇教程: 实现一个积雪效果的shader 创建一个具有凹凸纹理的shader 为每个像素修改其对应纹理值 在表面着色器中修改模型的顶点数据 引论 这是我们系列教程的第二部分,我们将在此部分实现些有用的技术。在学习完 第一部分 的所有背景知识后,我们将利用所学的知识实现一个简单的积雪效果的shader。效果如下: 准备工作 我们想做的其实很简单,简单介绍一下: 随着Snow Level(表示积雪的程度,该值越大,积雪越深)的增大,我们将迎着下雪方向的岩石纹理区域都变成Snow Color(雪的颜色) 随着Snow Level的增大,我们想将该岩石模型稍微变大一点,尤其是雪的边缘厚度要增加,这样给人真正的“积”雪效果。 步骤1 – Bumped Diffuse Shader 我们创建一个新的Diffuse shader(默认新建的shader基本都是Diffuse shader),并向其中添加凹凸纹理效果( 来自 猫大 的原话:法线贴图是凸凹贴图(Bump mapping)的一种常见应用,简单说就是在不增加模型多边形数量的前提下,通过渲染暗部和亮部的不同颜色深度,来为原来的贴图和模型增加视觉细节和真实效果

【译】Unity3D Shader 新手教程(4/6) —— 卡通shader(入门版)

和自甴很熟 提交于 2020-01-17 15:59:14
本文为翻译,附上 原文链接 。 转载请注明出处—— polobymulberry-博客园 。 暗黑系 动机 如果你满足以下条件,我建议你阅读这篇教程: 你想了解更多有关表面着色器的细节知识。 你想实现一个入门级别的卡通效果shader(Toon Shader)。 你想知道渐变纹理(ramp texture)的使用方式。 你想了解边缘光照(rim lighting)的知识。 准备工作 我们想实现一个toon shader - 一种能让模型看起来具有卡通效果的shader,在图形学领域,这被称作非真实感图形学(Non Photorealistic Rendering)。 为了实现这种卡通效果,我们得做以下几件事: 减少原始模型上使用的颜色种类。 自定义光照模型,使明暗边界更清晰。 将模型的边缘绘制成黑色。 表面着色器的工作流程 在教程的第一部分我使用了一个简化版的表面着色器流程图,事实上关于表面着色器的工作流程还有很多内容。首先我们看一个相对完整的工作流程图: (译者注:上面很多部分都是可选的,如果我们不自定义这些部分,那将使用Unity自己提供的处理函数。这里尤其注意可选部分的使用格式。 #pragma surface surfaceFunction lightModel [optionalparams] 对于像素处理函数surfaceFunction

Unity Shader入门精要学习笔记 - 第17章 Unity的表面着色器探秘

筅森魡賤 提交于 2020-01-17 15:36:53
转自 冯乐乐的《Unity Shader 入门精要》 2010年的Unity 3 中,Surface Shader 出现了。 表面着色器的一个例子。 我们先做如下准备工作。 1)新建一个场景,去掉天空盒子 2)新建一个材质,新建一个Shader,赋给材质。 3)场景中创建一个胶囊体,上步材质赋给它 然后我们修改Shader代码: Shader "Unity Shaders Book/Chapter 17/Bumped Diffuse" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _BumpMap ("Normalmap", 2D) = "bump" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 300 CGPROGRAM #pragma surface surf Lambert #pragma target 3.0 sampler2D _MainTex; sampler2D _BumpMap; fixed4 _Color; struct Input { float2 uv_MainTex; float2 uv_BumpMap; }; void surf (Input IN,

How to rebuild on resource file change in cmake?

試著忘記壹切 提交于 2020-01-17 05:33:11
问题 I have some shader files inside of a resource directory 'Shaders'. I want my app to copy this folder to the runtime directory everytime there are changes inside of one file in it before the build. How can I achieve this? Right now I use this here: add_custom_command(TARGET my_app PRE_BUILD COMMAND rm ARGS -rf ${CMAKE_CURRENT_BINARY_DIR}/Shaders COMMAND cp ARGS -a ${CMAKE_CURRENT_SOURCE_DIR}/my_app/Viewer/Shaders ${CMAKE_CURRENT_BINARY_DIR} ) But this does only work when I change another file

Shader 基础

时间秒杀一切 提交于 2020-01-17 01:05:59
顶点和片元着色器 Vertex shader program(顶点着色程序)和 Fragment shader program(片断着色程序)分别被 Programmable Vertex Processor(可编程顶点处理器)和Programmable Fragment Processo(可编程片断处理器)所执行。 顶点着色程序从 GPU 前端模块(寄存器)中提取图元信息( 顶点位置、法向量、纹理坐标等 ),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需要的数据,通常为“ 纹理坐标、光照信息等 ”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。 由于 GPU 对数据进行并行处理,所以每个数据都会执行一次 shader 程序程序。 即, 每个顶点数据都会执行一次顶点程序; 每个片段都会执行一次片段程序。 什么是片断?片断和像素有什么不一样?所谓片断就是所有的三维顶点 在光栅化之后的数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素都是经过深度比较的 开始 Cg 之旅 Cg 支持 7 种基本的数据类型: float, 32 位浮点数据,一个符号位。浮点数据类型被所有的 profile 支持(但是 DirectX8 pixel

What are the semantics in CG programming?

拟墨画扇 提交于 2020-01-16 12:09:33
问题 msdn stated A semantic is a string attached to a shader input or output that conveys information about the intended use of a parameter unity stated Semantics is a special clause of Cg to define the default input values of a fragment/vertex Shader What are the actually semantics? why do we use it? It is necessary? 回答1: Basically it tells what kind of data stored in certain field - position, normal, texture coordinates et cetera. It was useful to describe vertex format in fixed-function

Unity Shader------顶点函数和片元函数

帅比萌擦擦* 提交于 2020-01-16 08:21:50
顶点和片元函数实现一个白色的效果 Shader "Custom/Shader01" { SubShader { Pass { CGPROGRAM // 声明了顶点函数的函数名 # pragma vertex vert //声明了片元函数的函数名 # pragma fragment frag //顶点函数(系统调用) /*基本作用:将顶点坐标从模型坐标系转换为剪裁面坐标系(从游戏环境转换到视野摄像机屏幕上) 每个顶点都参与计算*/ float4 vert ( float4 v : POSITION ) : SV_POSITION { //语义:告诉系统参数的作用 //POSITION语义:让系统把顶点左边传递给参数v,SV_POSITION语义:表示float4类型的返回值是剪裁空间的顶点坐标 return UnityObjectToClipPos ( v ) ; //矩阵相乘函数 } //片元函数(系统调用) /*基本作用:计算并返回每一个像素的颜色值,模型对应在屏幕上的每个像素都参与计算*/ fixed4 frag ( ) : SV_Target { return fixed4 ( 1 , 1 , 1 , 1 ) ; } ENDCG } } FallBack "Diffuse" } 通过结构体传递参数,NORMAL和TEXCOORD0语义 struct s1 { float4

OpenGL ES 2.0 知识串讲 (7) ——OpenGL ES 详解I(绑定 Shader)

删除回忆录丶 提交于 2020-01-16 06:34:08
出处:电子设备中的画家|王烁 于 2017 年 7 月 12 日发表, 原文链接(http://geekfaner.com/shineengine/blog8_OpenGLESv2_7.html) 上节回顾 在之前的六节中,讲解了 EGL、GLSL 与 OpenGL ES 三个专业术语的概念以及它们的关系,串讲了整个绘制流程;之后分别讲解了 EGL 主要 API 的用处,以及 GLSL 的主要语法。现在,对 EGL 和 GLSL 有了比较全面的了解,那从这一节开始, 会根据 OpenGL ES 与 EGL 和 GLSL 的关系,按照绘制图片的整个流程,对 OpenGL ES 进行详细讲解。 之前提过 OpenGL ES 其实就是一个图形学库,由 109 个 API 组成,只要明白了这 109 个 API 的意义和用途,就掌握了 OpenGL ES。那么从这一节开始,将主要对 OpenGL ES API 进行详细介绍。 OpenGL ES 中的 Shader 通过 EGL、GLSL、OpenGL ES 的关系,可以看出 EGL 就是为绘制做准备工作的,比如关联一块显示屏,初始化 GPU 信息,准备一块绘制 buffer 等。EGL 做的事情相对独立,只有当 EGL 的 API 被执行完毕,准备工作做好之后,才轮到 OpenGL ES 和 GLSL 出场。所以 EGL 与 GLSL 和

Twisted normals with the Three.js normal shader - r.58

∥☆過路亽.° 提交于 2020-01-16 01:11:14
问题 I'm attempting to use the Three.js r.58 normal shader to make a displacement map. I have it displacing correctly, but the lighting doesn't seem to be respecting the post-displacement normals, even when I use computeTangents(). When I turn off the displacement, I see that the default normals are definitely funny. Here's a top view of a sphere, lit from the side (the white dot marks a pointLight): And here's a demo page: http://meetar.github.io/three.js-normal-map-0/index0.html What's causing

HLSL Integer Texture Coordinates

北城以北 提交于 2020-01-16 00:44:46
问题 I'm trying to interpolate between integer pixel coordinates instead of between 0-1, because I'm using point sampling, so I'm not interested in fractions of pixels, but the texture coordinates are still coming into the pixel shader as float2 even though the data type is int2. pixelSize is 1 divided by texture size matrix WorldViewProjection; float2 pixelSize; Texture2D SpriteTexture; sampler2D SpriteTextureSampler = sampler_state { Texture = <SpriteTexture>; AddressU = clamp; AddressV = clamp;