• 可以直接在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的传统做,弄编译器和虚拟机?

  • 相关阅读:
    Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十五)阶段总结
    [Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~
    OpenCV学习记录之摄像头调用
    很不错的python 机器学习博客
    华清远见Linux设备驱动(每章小结)
    Linux 查看服务器开放的端口号
    MySQL简单优化
    数据探索之数据质量分析
    两张图简说代理服务器和反向代理服务器
    集合类中嵌套定义和引用的举例
  • 原文地址:https://www.cnblogs.com/len3d/p/908428.html
Copyright © 2020-2023  润新知