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

  • 相关阅读:
    C#面向对象之封装。
    python 数据处理学习pandas之DataFrame
    有用的vscode快捷键大全+自定义快捷键
    angular中控制器之间传递参数的方式
    angular.module 详解
    如何让类数组也使用数组的方法比如:forEach()
    CSS之flex兼容
    JavaScript中捕获/阻止捕获、冒泡/阻止冒泡
    Vue2.0 探索之路——生命周期和钩子函数的一些理解
    React 生命周期
  • 原文地址:https://www.cnblogs.com/len3d/p/908428.html
Copyright © 2011-2022 走看看