`
webcenterol
  • 浏览: 924740 次
文章分类
社区版块
存档分类
最新评论

引擎技术研究之Shader技术

 
阅读更多

Shader技术属于GPU的渲染技术,其相应语言是高级着色器语言High Level Shader Language 简称HLSL)。HLSL主要作用为将一些复杂的图像处理快速而又有效率地在显卡上完成。

DirectX中有两种Shader,顶点着色器Vertex Shader (vs)和像素着色器Pixel Shader (ps)能够实现VSPS的显卡的图形处理流水线被称作为是可编程的。VS实际代替了传统图形渲染流水线里的T&L部分,其以顶点为计算单位,负责处理世界坐标中的顶点信息,可以处理光照、阴影、坐标变换、法向量等等。PS代替了传统图形渲染流水线中的光栅化部分,比如纹理贴图等, 其以像素为计算单位,用来操纵物体表面的色彩和外观。

1Shader基本框架

Shader文件的后缀名为.fx,可在文件里编写如下代码:

首先定义一颜色纹理变量:texture ColorMap,这是ShaderC++的接口.

定义一采样变量,例:

sampler ColorSampler = sampler_state

{

texture = (ColorMap);

MipFilter = Linear;

AddressU = Wrap;

AddressV = Wrap;

};

设计一顶点格式,例:

struct VSOutShadow

{

float4 vPosition : POSITION;

float2 vTexcoord : TEXCOORD0;

float diff : TEXCOORD1;

};

定义全局变量:

shared uniform float4x4 World: World //世界变换矩阵

shared uniform float4x4 View: View; //观察矩阵

shared uniform float4x4 Projection : PROJECTION; //投影矩阵

顶点着色函数,例:

VSOutShadow VS_Scene( float4 inPosition : POSITION, float2 texcoord:TEXCOORD0)

{

VSOutShadow OUT = (VSOutShadow)0;

//使用传入的参数计算顶点的相关信息

inPosition = mul( inPosition, World );//世界变换

OUT.vPosition = mul( inPosition, View );//摄像机变换

OUT.vPosition = mul( OUT.vPosition, Projection );//投影变换

。。。。。。。。。。

。。。。。。。。。。

return OUT;

}

像素着色函数,例:

float4 PS_Scene( VSOutShadow IN) : COLOR0

{

float4 color= tex2D(ColorSampler,IN.vTexcoord);

//使用传入的参数设置像素的着色

return color;

}

定义技术:

technique techScene

{

pass p0

{

VertexShader = compile vs_2_0 VS_Scene();//对应顶点着色函数

PixelShader = compile ps_2_0 PS_Scene();//对应像素着色函数

}

}

2.C++应用shader

先设计一EffectManager类,并提供一接口,用于根据传入的.fx 文件的路径名创建一ID3DXEffect类型的指针m_pShader并使其指向该文件,函数返回m_pShader,可用m_pShader调用相应函数设置shader里的变量值,例如:

m_pShader->SetFloat("ambient",m_sight);

m_pShader->SetMatrix("World",&finalWorldMat);

其中ambientWorldshader里的变量,m_sightfinalWorldMatc++程序里的变量,设置特定类型的变量需调用相应的函数。

设置技术:m_pShader->SetTechnique("techScene")

techSceneshader里已定义的技术。

着色,例:

UINT passnum=0;

m_pShader->Begin(&passnum,0);

for(UINT pass=0;pass<passnum;pass++)

{

m_pShader->BeginPass(pass);

_Render();//完成相关操作

m_pShader->EndPass();

}

m_pShader->End();

_Render()里需设置纹理,例m_pShader->SetTexture("ColorMap",m_pMeshTextures[i]);

提交: m_pShader->CommitChanges();

分享到:
评论

相关推荐

    云层shader,云层shader

    云层shader,

    XNA:管理Shader

    在学习了一点儿shader和图形卡发展的历史之后,你将经历创建一个简单shader的过程,只要渲染一个带有每像素镜面反射光的简单3D模型,然后把shader导入到你的游戏引擎。你将用来创建shader、甚至在你开始把更多代码...

    Unity技术-Shader Graph-水面倒影Shader.zip

    Unity2020.3版本水面倒影Shader案例 文章地址:https://zhima.blog.csdn.net/

    Unity Shader 之遮挡透明

    Unity Shader 之遮挡透明

    Shader变体收集 Shader Control 6.4.unitypackage

    Shader变体收集 Shader Control 6.4

    Unity 皮肤shader

    Unity3D使用的皮肤Shader资源,可在Unity3D中渲染出真实的毛发效果。

    unity 调色板之shader绘制

    免费下载地址:https://blog.csdn.net/linda012518/article/details/106048377 unity 调色板之shader绘制,最近闲来无事,给自己找点麻烦,用shader做一个调色板,分享给大家

    ShaderGraph实战之全息效果Shader

    全息效果是通过贴图的Offset随时间滚动产生,ShaderGraph实战之全息效果

    unityshader:水流动效果shader

    u3d场景中用于实现水流动的效果的shader

    6种Shader编程

    Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的...

    猫都能学会的Unity3D Shader入门指南

    Unity3D Shader 是 Unity3D 游戏引擎中最重要的一部分,它控制着游戏中的所有渲染工作。如果您想深入了解 Unity3D 的核心技术,学习 Shader 编程是必经之路。然而,对于初学者来说,Shader 的学习曲线非常陡峭,...

    Shader Forge 13个版本合集

    Shader Forge v1.3.5 for Unity5.5.unitypackage Shader Forge v1.3.6 for Unity5.5.unitypackage Shader Forge v1.3.7 for Unity5.6.unitypackage Shader Forge v1.3.8 for Unity4.5-5.6.unitypackage Shader Forge...

    ShaderGraph实战教程之溶解效果shader

    溶解效果是游戏中常用的一种效果,可用于Boss死亡时的消失。溶解效果的原理是通过一张噪波贴图,实现模型上随机消失。

    Unity3D内置Shader 详解

    传统意义上的vertex shader和pixel shader 还是使用标准的Cg/HLSL 编程语言编写的。(因此Unity文档里面的Shader,都是指用ShaderLab编写的代码) 然后我们来看下Unity3D自带的60多个Shader。 这些Shader被分为五个...

    Unity反射折射Refractive Shader 1.2材质shader着色器插件

    淘宝花RMB买的·····Refractive Shader 1.2 最新版本,请勿用于商业用途,仅供学习参考! https://assetstore.unity.com/packages/vfx/shaders/substances/refractive-shader-94848 his shader emulates light...

    模拟电流效果(shader)

    模拟电流效果(shader),将此shader导入Unity引擎中可直接使用

    Unity-HDRP-ShaderGraph-透明Shader-旋转动画

    Shader动画,有时候比Transform的动画更加高效。 可以创建多个管线的Shader资源,方便切换或者升级管线。 节点式的编辑器,类似UE的蓝图编辑器,可视化编程比较直观,暴露参数简单。 有一句话叫做:黑透白不透。 ...

    DecalGraph.shadergraph

    自定义ShaderGraph

    Amplify Shader Editor v1.8.zip

    unity shader 可视化插件 比shader graph 好多了

    论Compute Shader之word文档说明

    我们这里学习的是Unity的Compute Shader,作为一种Shader语言,它的语法结构和普通Shader差不多,float3,float4x4等数据结构和数学函数都可以支持,并且还可以把计算的结果作为结构体数组的方式类型输出出来。...

Global site tag (gtag.js) - Google Analytics