3dmax fx shader, vertex color
美术那边需要一个能在3dmax里用的支持diffuse纹理和顶点色的additive shader(不带光照)。
以前没搞过这个,于是从3dmax自带的vertexcolor.fx,DiffuseBump.fx拼凑出了一个,如下:
//-----------------------------DiffuseMapVertexcolorAdditive.fx
// 3ds max effect file
// Simple vertex color - work with the Vertex Paint tool. The max effect parser
// allows you to define any arbitary map channel to be passed in via a texcoord.
// In this case we are interested in Vertex Color, Illumination and Alpha which
// are stored in 0,-1,-2 respectively.
// light direction (view space)
// transformations
float4x4 World : WORLD;
float4x4 View : VIEW;
float4x4 Projection : PROJECTION;
float4x4 WorldViewProj : WORLDVIEWPROJ;
float4x4 WorldView : WORLDVIEW;
texture diffuseTexture : DiffuseMap<
string name = "seafloor.dds";
string UIName = "Diffuse Texture";
int Texcoord = 0;
int MapChannel = 1;
>;
int texcoord1 : Texcoord
<
int Texcoord = 1;
int MapChannel = 0;
>;
int texcoord2 : Texcoord
<
int Texcoord = 2;
int MapChannel = -2;
>;
struct AppData
{
float3 Pos : POSITION;
float2 TexCoord : TEXCOORD0;
float3 col : TEXCOORD1;
float3 alpha :TEXCOORD2;
};
struct v2f
{
float4 Pos : POSITION;
float4 color : COLOR;
float2 TexCoord0 : TEXCOORD0;
};
struct f2fb {
float4 col : COLOR;
};
v2f VS(
AppData IN
)
{
v2f Out = (v2f)0;
Out.Pos = mul(float4(IN.Pos,1),WorldViewProj); // position (projected)
float4 diff;
diff = float4(IN.col,1);
Out.color = diff;
Out.color.a = IN.alpha.x;
Out.TexCoord0.xy = IN.TexCoord.xy;
return Out;
}
f2fb PS(v2f IN,
uniform sampler2D DiffuseMap)
{
f2fb OUT;
//fetch base color
float4 color = tex2D(DiffuseMap,IN.TexCoord0 );
//fetch vertex color
float4 vertexColor=IN.color;
OUT.col = color *vertexColor;
return OUT;
}
sampler2D diffuseSampler = sampler_state
{
Texture = <diffuseTexture>;
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Linear;
ADDRESSU = WRAP;
ADDRESSV = WRAP;
};
technique tech
{
pass P0
{
ZEnable = true;
ZWriteEnable = false;
AlphaBlendEnable = TRUE;
SrcBlend = SRCALPHA;
DestBlend = ONE;//InvSrcAlpha;
CullMode = None;
ShadeMode = Gouraud;
// shaders
VertexShader = compile vs_2_0 VS();
PixelShader = compile ps_2_0 PS(diffuseSampler);
}
}
technique tech_cullModeCW
{
pass P0
{
ZEnable = true;
ZWriteEnable = false;
AlphaBlendEnable = TRUE;
SrcBlend = SRCALPHA;
DestBlend = ONE;//InvSrcAlpha;
CullMode = CW;
ShadeMode = Gouraud;
// shaders
VertexShader = compile vs_2_0 VS();
PixelShader = compile ps_2_0 PS(diffuseSampler);
}
}
----
补充:
1,内置的dx shader vertexcolor.fx在3dmax2012中会报错,在3dmax2010中vertexcolor.fx中是可用的。
2,仿照vertexcolor.fx,顶点色col用mapchannel 0,顶点透明度alpha用mapchannel -2。那个diffuse纹理,用一个跟它们不冲突的通道即可,我这里用的是mapchannel 1。
补充2:
3dmax里似乎没有办法控制渲染顺序,所以在复杂场景中,使用了blend的物体,显示结果并不一定符合预期。
3dmax fx shader, vertex color的更多相关文章
- Vertex color blending & UV tiling
[Vertex color blending & UV tiling] 1.GemotryData控件用于代码顶点数据,如网格中的Vertex Color(下左图),UV Coord(下右图) ...
- Shader编程教程
2010-05-13 11:37:14| 分类: DirectX 3D学习|举报|字号 订阅 Shader编程教程1-环境光照 您好,欢迎来到XNA Shader教程1.我的名字叫Petri ...
- DirectX11笔记(八)--Direct3D渲染4--VERTEX SHADER
原文:DirectX11笔记(八)--Direct3D渲染4--VERTEX SHADER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0103 ...
- Unity3d 着色器语法(Shader)
Shader "name" { [Properties] Subshaders [Fallback] } 定义了一个着色器.着色器拥有一个 Properties 的列表.着色器包含 ...
- Unity3D shader简介
Unity3D shader简介 可以肯定的说Unity3D使得很多开发者开发游戏更容易.毫无疑问,shader(着色器)编码,仍有很长的路要走.shader是一个专门运行在GPU的程序,经常被神秘包 ...
- Shader 之 顶点变形
可以使3D物体通过顶点变形弯曲,常见于跑酷游戏的跑道.可向左.右.上.下弯曲. Shader "Custom/VertexColorCurved" { Properties { / ...
- Surface Shader
Surface Shader: (1)必须放在SubShdader块,不能放在Pass内部: (2)#pragma sufrace surfaceFunction lightModel [option ...
- UnityShader之固定管线命令Combine纹理混合【Shader资料4】
Combine,纹理混合. 我们先看圣典上给的解释. 纹理在基本的顶点光照被计算后被应用.在着色器中通过SetTexture 命令来完成. SetTexture 命令在片面程序被使用时不会生效:这种模 ...
- Unity3d Shader开发(三)Pass(Pass Tags,Name,BindChannels )
Pass Tags 通过使用tags来告诉渲染引擎在什么时候该如何渲染他们所期望的效果. Syntax 语法 Tags { "TagName1" = "Value1&qu ...
随机推荐
- MySQL MERGE存储引擎 简介
MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询.构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构.每一个成员数据表的数据列必 ...
- SSM框架中出现的几种注解的理解
转自IT·达人原文 Spring5:@Autowired注解.@Resource注解和@Service注解,有删改. 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物 ...
- Python学习(四)数据结构 —— bool
Python 布尔类型 bool python 中布尔值使用常量True 和 False来表示:注意大小写 比较运算符< > == 等返回的类型就是bool类型:布尔类型通常在 if 和 ...
- java 五子棋之人机对战思路详解
最近做了五子棋,记录下自己完成五子棋的人机对战的思路. 首先,思路是这样的:每当人手动下一颗棋子(黑子)的时候,应当遍历它周围棋子的情况,并赋予周围棋子一定的权值,当在机器要下棋子(白子)守护之前,会 ...
- STM32F103 GU906B模块GPRS、短信收发、拨号等功能的实现
这个程序搞了我很久,尤其是对如何提高响应速度上,程序流程很简单,大概就是: 发送AT指令->等待模块响应->一旦响应了,立即返回,并处理掉. 这个程序不一定只能用在GU906上,程序框架在 ...
- (转) [Flash/Flex] 用柏林噪音和滤镜制作翻腾的火焰效果----Flash AS3效应
下图展示的是通过柏林噪声和一些滤镜制作的火焰效果.这个效果是从舞台底部燃起的熊熊烈火.这个效果使用了BitmapData里的perlinNoise方法,以及ColorMatrixFilter和Disp ...
- 机器学习-特征选择 Feature Selection 研究报告
原文:http://www.cnblogs.com/xbinworld/archive/2012/11/27/2791504.html 机器学习-特征选择 Feature Selection 研究报告 ...
- 使用Nodejs的Nodemailer通过163信箱发送邮件例程
首先需要安装一下nodemailer #nmp nodemailer install --save 然后就参照官方文档的例程改写一下就行了,代码如下: 'use strict'; const node ...
- C#获取外网IP地址;C#获取所在IP城市地址
public static string GetIP() { using (var webClient = new WebClient()) ...
- 利用 Android 系统原生 API 实现分享功能
利用 Android 系统原生 API 实现分享功能 这篇文章提供一个封装好的 Share2 库供大家参考. GitHub 项目地址:Share2 大家知道,要调用 Android 系统内建的分享功能 ...