`
absolute
  • 浏览: 190269 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HLSL normal map code

    博客分类:
  • CG
 
阅读更多

一般来说normalMap都是从高模获得,用来使低模渲染获得更好的颜色效果
帖上一段凹凸贴图的hlsl,不一定要用shader实现,看懂原理就行了

struct VS_INPUT
{
float4 position  : POSITION;
float3 normal    : NORMAL;
float3 tangent   : TANGENT;
float2 texcoord0 : TEXCOORD0;
};

struct VS_OUTPUT
{
float4 position : POSITION;
float3 color0   : COLOR0;
float2 texcoord0 : TEXCOORD0;
};

VS_OUTPUT VS_PerpixelDiffuseLighting( VS_INPUT In )
{
VS_OUTPUT Out;
Out.position = mul( In.position, matWorldViewProj );
//Out.position.z -= 0.01;


//把光照方向转到世界坐标中,这样可以避免把normal图中得到的每点的normal值
//都转到屏幕坐标上来,节约运算
float3 worldNormal = normalize(mul( In.normal, (float3x3)matWorld ));

float3 worldTangent = normalize(mul( In.tangent, (float3x3)matWorld ));
float3 worldBinormal = cross( worldNormal, worldTangent );
float3 L = normalize( lightDir.xyz );
float3x3 tangentBase = { worldTangent, worldBinormal, worldNormal };
float3 LInTangent = mul( tangentBase, -L );

//颜色值只能是0-1.normal可以是-1-1,这里要进行一次转化
Out.color0 = float4( 0.5 * LInTangent + 0.5, 1 );
Out.texcoord0 = In.texcoord0;
return Out;
}

float4 PS_PerpixelDiffuseLighting( VS_OUTPUT In ) : COLOR
{
//取得normal图上每点的normal
float3 pixelNormal = tex2D( sNormal, In.texcoord0 );
// 2*(pixelNormal-0.5) 是把0-1转化为-1到1
//这一步就是normalmap的使用了,把光线方向与normal dot一下

float diffuse = dot( 2*(In.color0-0.5), 2*(pixelNormal-0.5) );
float3 texTerm = tex2D( sDiffuse, In.texcoord0 );
float4 finalColor = { texTerm*diffuse, 1 };
return finalColor;
}

这样作的最终目标是让低模能够获得高模一样的光照效果

 

分享到:
评论

相关推荐

    hlsl2glsl hlsl转换为glsl图形化工具

    **hlsl2glsl:HLSL到GLSL的转换神器** 在计算机图形学领域,着色语言是渲染引擎的核心组成部分,它们允许开发者编写程序来控制GPU的行为,从而实现复杂的光照、纹理和几何处理效果。两种最广泛使用的着色语言分别是...

    HLSL初级教程 内含代码

    在IT领域,High-Level Shader Language(HLSL)是一种专门用于图形编程的着色语言,由微软开发,主要用于DirectX应用程序中的图形渲染。HLSL是程序员与图形硬件交互的重要工具,尤其在游戏开发和实时渲染领域应用...

    HLSL基础教程 DirectX

    ### HLSL基础教程 DirectX #### 1. 什么是HLSL? HLSL(High-Level Shading Language)是一种高级着色语言,它被设计用于DirectX API中的着色器编程。这种语言允许开发者以更直观的方式编写顶点着色器(Vertex ...

    HLSL Development Cookbook.pdf

    ### HLSL Development Cookbook 关键知识点概述 #### 一、HLSL与DirectX11简介 - **HLSL(High-Level Shading Language)**:一种由微软开发的高级着色语言,主要用于编写运行在DirectX环境下的着色器程序。HLSL的...

    HLSL语言编程实例

    HLSL,全称为High-Level Shader Language,是微软为DirectX图形API开发的一种着色器语言。它主要用于编写GPU上的程序,特别是在图形渲染、计算密集型任务和游戏开发中发挥着重要作用。本资源集合提供了丰富的HLSL...

    HLSL的VS工具

    HLSL的VS工具

    在OGRE中使用HLSL.txt

    float3 normal : NORMAL0; float2 texCoord0 : TEXCOORD0; float3 tangent : TANGENT0; }; ``` 这里定义了一个结构体 `a2v`,包含了位置、法线、纹理坐标和Tangent向量。 #### 七、总结 通过在OGRE中使用HLSL...

    HLSL基础教程中文版

    HLSL基础教程中文版 HLSL(High-Level Shading Language 高级着色语言)是一种高级着色语言,用于编写着色器(Shader)。它是DirectX Effect Framework的一部分,帮助开发者集成和管理shader到应用程序中。 一、...

    HLSL 初级教程.pdf

    "HLSL 初级教程.pdf" 本教程旨在帮助初学者快速理解 HLSL 编程的概念和方法,从应用的角度对 HLSL、顶点着色器、像素着色器和 Effect 效果框架进行了介绍。 什么是着色器 着色器是一种可以在 GPU 上执行的程序,...

    一个简单的HLSL例程

    HLSL(High-Level Shader Language)是微软为Direct3D图形接口开发的一种着色语言,用于编写图形渲染的着色器程序。在这个“一个简单的HLSL例程”中,我们可能涉及到以下几个关键知识点: 1. **HLSL概述**:HLSL是...

    HLSL特效 详细讲解shade

    HLSL(High-Level Shader Language)是微软为Direct3D开发的一种高级着色语言,用于GPU编程,特别是在图形渲染和图像处理中。它允许开发者创建复杂的光照、纹理和动画效果,提升图形表现力。 1: HLSL概述 HLSL是专...

    hlsl fx特效演示

    **hlsl与fx特效演示详解** hlsl,全称High-Level Shader Language,是DirectX中的高级着色器语言,由微软开发,用于图形渲染领域的编程。hlsl是为图形程序员设计的一种专用语言,允许他们创建复杂的图形效果和计算...

    HLSL Development Cookbook源代码

    源代码文件"4209OT_Code bundle"中可能包含了以下关键知识点: 1. **基础语法与结构**:HLSL的基本数据类型(如float、vector、matrix)和控制流语句(if、for、while)。这些是编写任何着色器的基础,理解它们如何...

    HLSL 入門教學

    ### HLSL 入門教學知识点解析 #### 一、HLSL基础知识 ##### 1.1 什么是着色器? 着色器是一种专门用于图形渲染的程序,可以在GPU上执行,用于控制图形如何被渲染。根据其作用的不同,着色器可以分为多种类型,如...

    hlsl流动云彩效果

    【hlsl流动云彩效果】是一种使用高级着色语言(High-Level Shader Language,简称hlsl)来实现的视觉特效,常见于3D游戏和虚拟环境中。hlsl是DirectX的一部分,专为图形处理单元(GPU)设计,允许开发者编写自定义的...

    XNA中的HLSL简单应用

    在XNA游戏开发框架中,High-Level Shader Language (HLSL)是一种强大的着色语言,用于编写图形处理单元(GPU)执行的着色器。HLSL被用来增强游戏的视觉效果,通过自定义顶点、像素等着色器来控制图形的渲染。在本文中...

    HLSL Pixel Shader-Chinese

    在计算机图形学领域,HLSL(High-Level Shader Language)是一种强大的着色语言,由微软为DirectX设计,用于编写图形处理单元(GPU)上的着色器程序。在这个主题中,我们将深入探讨“HLSL Pixel Shader”以及如何...

    HLSL程序入门03

    在进入HLSL(High-Level Shader Language)程序的深度学习之前,我们首先需要理解HLSL的基本概念。HLSL是一种专门针对微软DirectX图形接口的着色语言,用于编写图形处理单元(GPU)上的计算代码,从而实现复杂的图形...

    最新HLSL内置函数

    HLSL(High-Level Shading Language)是微软公司为DirectX的着色器语言设计的一种高级编程语言。它允许开发者使用C语言风格的语法在图形管线中编写顶点着色器和像素着色器等。HLSL内置函数是该语言预先定义好的函数...

    hlsl dll demo

    "hlsl dll demo" 是一个与图形编程相关的项目,主要涉及到的是High-Level Shader Language(HLSL)的应用。HLSL是DirectX的一部分,由微软开发,用于为Direct3D创建着色器程序。它允许程序员编写运行在GPU上的代码,...

Global site tag (gtag.js) - Google Analytics