C for Graphics

Cg/HLSL
Uma cena contendo diversos sombreadores 2D HLSL diferentes. Distorção da estátua é obtida puramente fisicamente, enquanto a textura da moldura retangular ao lado dela é baseada na intensidade da cor. O quadrado no fundo foi transformado e rotacionado. A transparência parcial e reflexão parcial da água no primeiro plano são adicionadas por um sombreador aplicado finalmente a toda a cena.
Criado pornVIDIA, Microsoft
Estilo de tipagemlinguagem de sombreamento
DialetosCg, HLSL, Playstation Shading Language
Influenciada porC, RenderMan Shading Language
InfluenciouGLSL

C for Graphics (Cg), também conhecida como High-Level Shading Language (HLSL) é uma linguagem de programação desenvolvida pela Nvidia e Microsoft que é derivada do ANSI C[1] para suporte ao design gráfico, aproveitando os recursos do hardware NVIDIA. Usada principalmente para o desenvolvimento de algoritmos para pixel shaders e vertex shaders que são instruções específicas para os GPUs das placas de vídeo.

Existem dois ramos principais da linguagem Cg / HLSL: o compilador Nvidia Cg (cgc) que retorna DirectX ou OpenGL e o Microsoft HLSL que retorna sombreadores DirectX em formato bytecode.[2][3] Cg foi descontinuado em 2012, sem desenvolvimento ou suporte adicional disponível.[4]

Fundamentos

Como resultado de avanços tecnológicos nas placas aceleradoras gráficas, algumas áreas de programação gráfica 3D tinham ficado muito complexas. Para simplificar o processo, novas características foram sendo adicionadas às placas, como capacidade de modificar suas as filas de renderizações através de utilização de vertex e pixel shaders.

No começo, vertex e pixel shaders foram programados num nível muito básico, onde somente a linguagem assembly era utilizada para programação da GPU (Graphics Processing Unit). Apesar de ter o controle total da GPU o código em assembly era de difícil utilização. Uma linguagem portátil, e de maior nível de abstração era necessária, assim a Cg foi criada para facilitar o desenvolvimento de programas que utilizam esses avanços.

Algumas vantagens da utilização da Cg sobre a linguagem assembly são:

Maior nível de abstração do código facilita o aprendizado, a programação, a leitura e entendimento de códigos escritos.

O Código Cg é portátil para uma grande gama de hardware e diversas plataformas, diferente do código assembly que depende do hardware e plataforma. O compilador Cg pode ser optimizado e criar tarefas automaticamente que seriam difícieis de se codificar e mais livres de erros.

Cg tem seis tipos básicos de variáveis, algumas as mesmas de C, outras especiais para sua utilização.

Detalhes

Tipos de variáveis

  • float - número de ponto flutuante de 32 bits
  • half - número de ponto flutuante de 16 bits
  • int - número inteiro de 32 bits
  • fixed - número de ponto fixo de 12 bits
  • bool - variável booleana
  • sampler* - representa um objeto de textura

Cg também possui tipos de dados de vetores e matrizes que são baseados nos tipos básicos de variáveis, como float3 e float4x4. Esses tipos de dados são bastante comuns quando lidando com programação gráfica 3D. Cg também tem tipos de dados de estruturas bastante similares ao disponíveis em C.

A biblioteca padrão Cg

Assim como em C, Cg tem um conjunto de funções comuns da programação gráfica.

Algumas funções são equivalentes ao C, como funções matemáticas abs() e sin(), enquanto outras são especializadas nas tarefas para GPU, como as funções de mapeamento de texturas, como funções text1D e text2D.

A biblioteca de tempo de execução Cg

Programas em Cg são meramente vertex and pixel shaders. Eles precisam de suporte de outros programas para lidar com o resto do processo de renderização. Cg pode utilizar duas APIs: OpenGL ou DirectX. Cada uma tem seu próprio conjunto de funções para se comunicar com o programa em Cg, como funções para selecionar o shader corrente e passagem de parâmetros.

A biblioteca padrão de tempo de execução permite que o código Cg seja codificado para assembly. Ele também permite compilar shaders durante a execução do programa que está sendo suportado. Isso permite que a biblioteca de tempo de execução compilar utilizando as últimas optimizações disponíveis para o hardware alvo. No entanto essa técnica permite que o usuário tenha acesso ao código fonte do shader, isso tem representado a grande desvantagem dessa técnica.

Para evitar expor o código fonte do shader, e ainda manter as últimas optimizações para o hardware específico, o conceito de profiles foi desenvolvido. Shaders podem ser compilados com conjuntos de diferentes plataforma de hardware (de acordo com o profile). Quando executando o programa, o mais optimizado shader é carregado de acordo com o profile. Por exemplo, pode existir um profile que dá suporte para que placa gráfica aceleradora possa utilizar pixel shaders complexos, e outro profile que suporta somente pixel shaders mínimos. Criando um pixel shader para cada um desses profiles o programa amplia o número de plataformas sem sacrificar a qualidade gráfica de sistemas mais potentes.

Um exemplo de programa Cg vertex shader

 // input vertex
 struct VertIn {
     float4 pos   : POSITION;
     float4 color : COLOR0;
 };

 // output vertex
 struct VertOut {
     float4 pos   : POSITION;
     float4 color : COLOR0;
 };

 // vertex shader main entry
 VertOut main(VertIn IN, uniform float4x4 modelViewProj) {
     VertOut OUT;
     OUT.pos     = mul(modelViewProj, IN.pos); // calculate output coords
     OUT.color   = IN.color; // copy input color to output
     OUT.color.z = 1.0f; // blue component of color = 1.0f
     return OUT;
 }

Aplicações e jogos que utilizam Cg ou HLSL

Ver também

Referências

  1. Mark, William R.; Glanville, R. Steven; Akeley, Kurt; Kilgard, Mark J. (1 de julho de 2003). «Cg: a system for programming graphics hardware in a C-like language». San Diego, California: Association for Computing Machinery. SIGGRAPH '03: 896–907. ISBN 978-1-58113-709-5. doi:10.1145/1201775.882362. Consultado em 5 de dezembro de 2020 
  2. White, Steven; Coulter, David; Batchelor, Drew; Jacobs, Mike; Satran, Michael. «Writing HLSL Shaders in Direct3D 9 - Win32 apps». docs.microsoft.com (em inglês). Consultado em 5 de dezembro de 2020 
  3. «Cg FAQ». NVIDIA DesignWorks. 8 de março de 2011. Consultado em 25 de maio de 2017 
  4. «Cg Toolkit | NVIDIA Developer». 8 de março de 2011 

Bibliografia

Ligações externas

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.