• 可以直接在C++里面写类似RSL的shader了


    今天我搞定了一个新技术

    可以直接在C++里面写类似RSL的shader了

    我简要介绍一下这个新技术,我还在考虑是否要在我们的项目中应用

    这个技术的优势是可以借助现有的C++编译器,将shader直接编译成机器码执行,这样对于raytracing的效率很高,而且提供像RSL一样友好的编程接口

    我用了一些比较邪门的tricks,现在可以直接用C++写类似RSL的shader,但是和RSL还有一定差距,shader写出来类似这样:

    SHADER( phong, surface phong ( float a, float b, vector c, vector output d ) )

    surface phong ( float a, float b, vector c, vector output d )
    {
     Ci = 0;
     c = 1 + vector( 1, 2, 3 ) + vector( 1, 2, 3 ) + 3;

     float dot = c & c;

    d = vector( 5, 6, 7 );

     illuminance_all( "catergory", point(1,2,3) )
     {
     }

     illuminance( "catergory", point(1,2,3), vector(4,5,6), PI/2 )
     {
     }
    }

    END_SHADER( phong )

    这里例子里面,和RSL相比,就是头尾需要多两行
    SHADER( phong, surface phong ( float a, float b, vector c, vector output d ) )
    END_SHADER( phong )

    中间部分几乎一样,差别就是点乘不允许用RSL的.而必须使用&,另外,vector构造的时候不能指定space,而且output关键字只能写在类型的后面而不是前面,还有illuminance的两种形式不允许重载,其中一种必须写成illuminance_all

    我想这点差别还是可以接受的吧?

    至于vector构造的时候不能指定space的问题,可以用类的模板成员函数解决,只是写的时候,不能像RSL一样写:
    vector "space" (x,y,z)
    而必须写成:
    vector_<space>(x,y,z)

    这就要求我们稍微修改一下规范,但是大体还是很像RSL的吧,你们觉得是否应该在项目中应用,还是我们要按照RSL的传统做,弄编译器和虚拟机?

  • 相关阅读:
    exit()和_exit()的比较(与前一篇日志行缓冲区有关)
    标准IO缓冲详解全缓冲、行缓冲、不缓冲
    windows与unix/linux下输入回车换行的区别
    strtok()的用法
    头文件的处理
    feof()出现的问题及解决办法
    测试题
    视觉十四讲:第十二讲_八叉树地图
    树莓派4B安装OPENCV4.0
    编译OpenCV以及openc_contrib提示缺少boostdesc_bgm.i文件出错的解决
  • 原文地址:https://www.cnblogs.com/len3d/p/908428.html
Copyright © 2020-2023  润新知