查看: 3022|回复: 7
【Shader技术杂谈】学习一些基本内容
在线时间 小时
本帖最后由 mskimizd 于
21:11 编辑
按照一贯的惯例,研究什么都要拿来给大家分享,这次也不例外。
由于不是很深入,很多内容没讲解,算是抛砖引玉吧,方便有心研究的汽油少走弯路,探索更深入的内容。
什么是Shader?
可以翻译成着色器,简单的来说就是你的模型效果最后都是通过它在游戏里渲染才能看得到。做美工的同学都知道,在openbrf里不选择好着色器就可能看不到需要的效果,比如没有法线效果等等。
如何增加shader?
骑马与砍杀本身有一系列核心Shader,你可以在根目录的CommonRes里找到core_shaders.brf,当需要添加自己的shader时,你需要在自己的Mod里建一个shader的brf文件,然后在菜单上导入--新建着色层。至于中间的数据栏该填什么内容,我不清楚,这个急需补充。最重要一点,数据栏里的 技术 (Technique.),这个是核心,该处的内容即是.fx定设置的Technique名。
如何编写Technique
既然Technique是新增shader必须的,那么怎么写呢,这时候你就要下载官方的自定义shader包了。里面的内容,暂时你只需知道两个compile_fx.bat用于编译,mb.fx是我们需要编辑的。
简单介绍下文件结构,开始一大串宏和常量的定义。接下来是一些函数的定义,之后的节奏就是结构体的定义,VertexShader,&&PixelShader, Technique. 这个顺序,反复。其中一些其他内容省略了,因为我也不知道他们是干嘛的。
Technique.是目前我们迫切需要的,有这个才能做成shader嘛。那我们呢举一个例子看看Technique的结构。
technique notexture
& & & & pass P0
& & & & & & & & VertexShader = compile vs_2_0 vs_main_notexture();
& & & & & & & & PixelShader = compile ps_2_0 ps_main_notexture();
我们看到这个technique包含了一个pass P0,实际上一个technique可以包含多个pass。
这个pass P0中有两条语句。分别用来编译成VertexShader和PixelShader。
VertexShader = compile vs_2_0 vs_main_notexture();
compile 就是编译嘛, vs_2_0是shader版本,也可以是1_1 或者3_0,就是版本的新旧啦。
最后这个vs_main_notexture(),完成一些渲染效果。
VS_OUTPUT_NOTEXTURE vs_main_notexture(float4 vPosition : POSITION, float4 vColor : COLOR)
& & & & VS_OUTPUT_NOTEXTURE O
& & & & Out.Pos = mul(matWorldViewProj, vPosition);
& & & & Out.Color = vColor * vMaterialC
& & & & float3 P = mul(matWorldView, vPosition); //position in view space
& & & & //apply fog
& & & & float d = length(P);
& & & & float4 vWorldPos = (float4)mul(matWorld,vPosition);
& & & & Out.Fog = get_fog_amount_new(d, vWorldPos.z);
& & & & return O
当然这个之前肯定有一个结构体定义
struct VS_OUTPUT_NOTEXTURE
& & & & float4 Pos& && && &&&: POSITION;
& & & & float4 Color& && && &: COLOR0;
& & & & float&&Fog& && && &&&: FOG;
同理对于PixelShader也是如此。
暂时看不懂这些没关系。
你只要知道technique 改怎么写,需要什么就ok了。
记住technique 由 pass 组成, pass 由编译完的VertexShader 和PixelShader 组成,
VertexShader与PixelShader需要两个结构体。
知道这些之后,就可以尝试去移植魔戒的shader效果了。
第纳尔 +20
感谢发表精华文章!
好东西啊!少走很多弯路。
在线时间 小时
本来想今天就把如何移植魔戒的shader效果也写一篇教程。。但是想想还是算了,我自己都没移植过,等我下次试着移植完之后在写。
其实只要知道了上面的内容,就知道要移植点什么东西,我这里简单说一下吧,纯粹纸上谈兵。
brf:找到你想移植的shader的brf,直接复制过来或者自己新建一个brf,单独复制那个shader.
technique:去mb.fx里寻找这个shader的technique名,然后像上面一样顺藤摸瓜,找齐所有代码。按照位置写入自己的mb.fx.
然后编译得到两个fxo文件丢入mod文件夹内。
在线时间 小时
呃原来这个才是第一篇。。
在线时间 小时
原来如此,brf方法和虫和尚大大的偷装备方法很像啊∩_∩
在线时间 小时
像是在看天书。。。。。
不知道战场有没有风效果,实现斗篷随风飘一定很酷。
在线时间 小时
mb.fx里面有几段宏函数,编起来很方便,大体是将一个technique批量编成3个,一个是低配,一个是普通,还有一个是英伟达专用。里面有几个布尔值的参数,貌似可以设定是否加默认漫反射、高光、法线之类的通道。推荐LZ看看
我没找到好工具,只用notepad++来编,预览不了,太悲催了。
在线时间 小时
你说的是这个吧
#define DEFINE_TECHNIQUES(tech_name, vs_name, ps_name)& & & & \
& & & & & & & & & & & & & & & & technique tech_name& & & & \
& & & & & & & & & & & & & & & & { pass P0 { VertexShader = compile vs_2_0 vs_name(PCF_NONE); \
& & & & & & & & & & & & & & & & & & & & & & & & & & & & PixelShader = compile ps_2_0 ps_name(PCF_NONE);} } \
& & & & & & & & & & & & & & & & technique tech_name##_SHDW& & & & \
& & & & & & & & & & & & & & & & { pass P0 { VertexShader = compile vs_2_0 vs_name(PCF_DEFAULT); \
& & & & & & & & & & & & & & & & & & & & & & & & & & & & PixelShader = compile ps_2_0 ps_name(PCF_DEFAULT);} } \
& & & & & & & & & & & & & & & & technique tech_name##_SHDWNVIDIA& & & & \
& & & & & & & & & & & & & & & & { pass P0 { VertexShader = compile vs_2_0 vs_name(PCF_NVIDIA); \
& & & & & & & & & & & & & & & & & & & & & & & & & & & & PixelShader = compile ps_2_a ps_name(PCF_NVIDIA);} }
有些是直接用这个函数定义的,有些是显示的定义了三个technique,实际上这里我没理解,因为后两种并不用于openbrf里创建shader, 还是系统在某些时候能够默认找到这些对应的technique?有些时候还不止三种,比如grass就多了一种grass_PRESHADED。
工具的话,我用的RenderMonkey, 还有用fx composer也可以,可以预览,但是RenderMonkey的坐标系和骑砍的有点不同。
在线时间 小时
6# qt911025
你说的是这个吧
有些是直接用这个函数定义的,有些是显示的定义了三个technique,实际上这里我没理解,因为后两种并不用于openbrf里创建shader, 还是系统在某些时候能够默认找到这些对应的tec ...
mskimizd 发表于
我认为系统会默认找的
Powered by骑马与砍杀:战团修改器八项 v1.158b
> 骑马与砍杀:战团修改器八项 v1.158b
骑马与砍杀:战团修改器八项 v1.158b
游戏分类:修改器游戏语言:简体中文更新日期:
游戏大小:3.7MB
骑马与砍杀:战团八项v1.158b本资料片最吸引人的地方就是多人联机的模式,面对AI感到厌倦,真正的乐趣是玩家们对战才是王道。
修改器说明:
按F1 无限生命
按F2 单位无限生命
按F3 无限弹药
设置技能点数-----
设置武器点数-----
设置属性点数-----
设置荣誉点数-----
设置声望点数-----
设置金钱-----
修改器激活码mrantifun.net
注:复制激活码到Enter the code位置
按Active Trainer激活修改器
CPUIntel Core2 3.0GHz/AMD同性能CPU
显卡nVidia GTX260/ATI Radeon HD4870
内存2GB以上
硬盘8GB以上空间
系统WinXP/Win7/Win8
使用方法:
1.解压文件
2.启动修改器
3.启动游戏
骑马与砍杀:战团修改器八项 v1.158b下载地址
本类周排行榜
本类最新更新