zoukankan      html  css  js  c++  java
  • MAX+VC版的RenderMonkey

    一般想快速实现某个shader会选择用rendermonkey,方便快捷地可以实现shader原型。max中提供了DX Shader的材质,可以直接使用fx文件来生成材质,这样我们就可以在max中做完场景后直接测试各种shader了。

    MAX中使用DX Shader

    新建材质,选择DX Shader:

     

    然后在DirectX Shader栏选择一个fx文件,比如DiffuseBump.fx

    MAX所用fx文件的特殊语义:

    如上图,基本的App传入的uniform数据,比如World,WorldViewProj。

    Max利用fx文件的<> 这种Annotation来解析一些语义。比如上图中的texture中的UIName,这样max可以分析这些annotation在材质编辑器中生成控件,比如纹理单元就会生成文件选择的按钮。如果是float4类型的变量,则会生成color picker的按钮。

    需要多个RT的后处理shader

    在max安装文件夹下有个maps\fx\scene\post_bloom.fx,不妨看看后处理的shader在max中如何写:

    fx脚本属性:

    这个script其实就是个全局常量,在它的annotation中写一些这个fx的配置,比如ScriptOrder="postprocess"表明这是个后处理shader,ScriptOutput=“color”输出是color buffer还是depth,以及这个shader对应的Technique是哪个,上图的情况是Bloom。

    上图是technique Bloom,可以看到有很多Pass,这些Pass会按顺序绘制。每个Pass都有对应的annotation,里面写了这个Pass的行为,比如pass GlowH中, RenderColorTarget0=HBlurMap表明该Pass输出Color0到HBlurMap这张RT上,ClearSetColor和Clear设置D3D绘制前的Clear行为。这张输出的HBlurMap对应了一个texture,在Bloom的最后合成Pass中作为一个sampler进行合成RT。

    更详细的max中使用fx可以参考http://www.gamasutra.com/view/feature/2702/using_directx_shaders_in_3ds_max.php

    在VC中编写Shader

    VC中可以安装NShader等高亮插件(VC2012自带高亮fx),或者网上找个hlsl相关usertype.data文件,扔到安装目录的IDE文件夹中

    让Shader代码可以跳转、自动补全

    利用VA插件可以让VC解析shader文件,生成类似C++的符号表,这样可以在代码中跳转、自动补全。方法:

    安装Visual Assist X,然后在C盘的 user\YourName\AppData\Roaming\VisualAssist\Autotext 中复制cpp.tpl几份,更改名字为fx.tpl, fxh.tpl等你需要的扩展名。打开注册表编辑 HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assit X\你的VANet版本,找到ExtSource,添加值fxh;fx;

    打开VC,Tools->Options->Text Editor->File Extension,添加几个扩展,比如fxh,fx,Editor选Microsoft Visual C++。

    好了,打开一个fx文件,就可以利用VA智能感应功能方便地写shader了。

    诊断shader错误

    编写完shader,可以用fxc编译shader,输出信息到Output窗口,这样可以定位编译错误。方法是为VC设置External tools:

    Tools->External Tools,弹出下面的对话框,然后添加一个fx_compile

    Commands选择fxc.exe的完整路径名,Arguments是fxc的编译选项参数,具体可以参照SDK文档。点击Arguments最右边的有三角形按钮是可以插入宏的,比如$(ItemDir)表示该shader文件所在的目录。然后勾选Use Output window,让shader编译信息输出到Output窗口。

    好了,设置完你会发现在Tools菜单下有个fx_compile,在VC中写完shader后,点击下这个fx_compile就可以编译shader了。

  • 相关阅读:
    【视频开发】ONVIF、RTSP/RTP、FFMPEG的开发实录
    【视频开发】ONVIF、RTSP/RTP、FFMPEG的开发实录
    【视频开发】opencv不能读取MP4格式文件
    CentOS 7下升级Python版本到3.x系列
    PyCharm常用快捷键
    ASCII、Unicode和UTF-8编码的区别
    配置Windows Server 2008/2012/2016允许2个用户同时远程桌面
    一道简单的python面试题-购物车
    Linux 下查看局域网内所有主机IP和MAC
    CentOS 7 配置HTTPS加密访问SVN
  • 原文地址:https://www.cnblogs.com/innerspace/p/3118058.html
Copyright © 2011-2022 走看看