Por que você usaria a renderização de software em vez da renderização de hardware hoje?

13

Ao contrário da CPU ou do software, eu assumo?

Geralmente, toda a renderização atual não seria baseada em GPU, visto que você usaria o OpenGL ou o Direct X?

Alguém poderia me dar algumas informações aqui, não consegue encontrar respostas adequadas?

user3333072
fonte

Respostas:

7

Como você já sabe claramente o que é renderização GPU, deixe-me responder o que você parece estar se perguntando.

Tradicionalmente, a renderização de hardware carrega um estigma de ser muito complexo. Isso se deve em grande parte ao design das interfaces de programação de aplicativos (APIs) que não foram bem projetadas para ocultar a complexidade; isto é, a curva de aprendizado tem sido íngreme. Também se deve em parte ao entendimento de que escrever aplicativos 3D - para os quais essas APIs são fortemente direcionadas - é muito mais complexo do que escrever 2D. Re complexidade da interface, estou me referindo a interfaces como OpenGL e DirectX. Re 3D vs 2D, estou me referindo à matemática e geometria que são utilizadas na construção de cenas 3D, versus a simplicidade com que a mente não treinada pode abordar problemas 2D.

No entanto, nos últimos anos, não apenas o material de aprendizagem se tornou muito mais disponível, como também muitas bibliotecas que envolvem as complexidades subjacentes dessas interfaces se tornaram disponíveis e reduziram as barreiras à entrada. Tudo isso retornou a um ciclo de interesse crescente, que já estava presente devido à crescente importância da visualização, interfaces de usuário elegantes e desempenho em dispositivos de baixa potência.

Portanto, a renderização de software e a renderização 2D foram bons pontos de entrada e áreas de foco para quem era novo em gráficos e / ou queria criar um produto em que a renderização não consumisse muito tempo disponível em um projeto. Pelo menos em relação ao 2D, isso ainda se aplica; A tecnologia cobriu amplamente a lacuna em trazer a renderização 2D para a GPU.

Engenheiro
fonte
20

Existem algumas respostas realmente boas aqui, apenas para complementá-las.

Uma grande força motriz por trás da renderização de software é a capacidade. Isso foi abordado em uma das respostas, mas vou fazer um ponto oposto: a renderização de software pode realmente ser mais capaz do que a renderização de hardware, e não menos.

Com o hardware, você geralmente se limita às capacidades do próprio hardware, embora o OpenGL para um seja capaz de emular por software muitas coisas que podem não existir no hardware. O que isso significa é que, se você tentar usar o Recurso X, mas o hardware não o suportar, uma das duas coisas acontecerá: você retornará à emulação de software (o cenário típico do OpenGL) ou não conseguirá use-o (o cenário típico do D3D).

Com a renderização do software, você mesmo pode escrever o código. Você consegue manipular as coisas e ter controle total sobre o que acontece até o nível de pixel. Para dar um exemplo de uma explosão do passado, o Quake implementou shaders de pixel em software em 1996, numa época em que as placas 3D (que não eram chamadas de "GPUs" na época)) mal podiam rasterizar algumas dezenas de triângulos texturizados.

Esse também é o caso das GPUs atuais, mas ainda existem partes significativas do pipeline gráfico expostas como funcionalidade fixa (ou mesmo nem expostas).

A renderização de software pode ser melhorada. É relativamente recente que vimos as configurações de várias GPUs se tornarem realmente viáveis, mas o software pode ser escalado em muitos núcleos de CPU em muitos servidores. Você pode ter farms de servidores inteiros dedicados a isso, e os farms de renderização profissionais ainda usarão a renderização de software.

O software pode expor diferentes paradigmas de renderização. O hardware atual está muito focado no paradigma triângulo / vértice / fragmento / rasterização; é um caso de escolher uma coisa e otimizá-la até que grite por misericórdia. As GPUs ainda são uma má escolha para, por exemplo, traçado de raios, que é mais comumente implementado em software.

É claro que quando se trata de uma comparação direta de maçãs para maçãs, uma GPU vence o software em qualquer dia da semana - desde que comparemos áreas em que as GPUs são mais fortes. Mas isso não quer dizer que eles sejam mais fortes em todas as áreas. Apesar disso, e para os fins deste site SE, o uso de hardware geralmente é o caminho a percorrer, mas esteja ciente de que existem casos de uso por aí em que o software também é viável.

Maximus Minimus
fonte
8
+1 para "renderização de software pode realmente ser mais capaz que renderização de hardware, e não menos".
precisa saber é o seguinte
10

A renderização de hardware ou GPU é, como você adivinhou, usando a unidade de processamento gráfico (também conhecida como placa de vídeo) para renderizar uma imagem. O oposto é a renderização de software em que a CPU é usada.

A renderização de software geralmente é usada como substituto quando não há GPU (adequado) disponível. No entanto, como a GPU possui ordens de magnitude, renderizações de software mais rápidas quase nunca são úteis, uma vez que uma CPU geralmente não consegue renderizar imagens em tempo real. A renderização de software é útil quando é necessária uma alta precisão, caso sejam necessárias fórmulas extremamente complicadas para renderizar a imagem. Como as CPUs são de uso geral, as GPUs e, portanto, têm mais recursos. No entanto, esse argumento está se tornando cada vez menos válido, pois hoje as GPUs podem lidar com tarefas cada vez mais complexas e não estão mais limitadas a apenas flutuadores de 32 bits para representar números.

Roy T.
fonte
2

Eu acho que essa é uma pergunta muito boa.

O que eu posso imaginar é:

  • A VRAM é mais limitada que a memória RAM geral. No caso de renderização de GPU - cada textura é mais um problema. Você pode armazenar em média cerca de 4 a 8 vezes mais dados na RAM que o VRAM. Obviamente, esse cenário pressupõe que não há sistema responsável por liberar / enviar texturas não utilizadas / necessárias de / para RAM / VRAM

  • Em termos de multithreading, é muito mais fácil quando você trabalha com a renderização de software - não é necessário compartilhar contextos

  • Se você estiver criando gráficos 2D - geralmente a maioria das estruturas realiza a implementação da Dirty Rectangles Evaluation - o que resolve muitas questões de desempenho.

Ainda assim, a renderização usando OGL / D3D oferece muito mais desempenho e possibilidades. Os shaders podem fazer coisas realmente incríveis, que são quase impossíveis com a renderização de software.

Mas técnicas como blitting, usando teclas coloridas, têm seu próprio tipo de sentimento como se você estivesse no nível básico, a origem do mundo da computação gráfica.

Eu acho que é pelo menos bom saber sobre a renderização do software. É realmente um mundo muito emocionante, sem mencionar que é a raiz de tudo o que vemos hoje.

luke1985
fonte
1
Você não precisa de aceleração de hardware para executar shaders. O OS X 10.9 é fornecido com um recurso de implementação de software completa do GL4. O desempenho é incrivelmente bom para renderização de software; não é o ponto em que você pode realisticamente jogar jogos sofisticados (para ser justo, as GPUs que a Apple não comercializa seus produtos), mas é muito mais prático do que usar algo como o rasterizador de referência Direct3D. Na verdade, é algo que você pode enviar usando o software em funcionamento.
precisa saber é o seguinte
@ AndonM.Coleman Nem todo mundo usa a Apple e eu não conheço representantes de software que suportam shaders no Linux e Windows.
precisa saber é o seguinte
1
Esse não era o meu ponto. Existem implementações do OpenGL em que os shaders totalmente funcionais são executados completamente na CPU. O fato de a Apple ser a desenvolvedora é em grande parte irrelevante. Sua resposta deu a impressão de que você tinha que ter uma GPU para executar shaders modernos no OpenGL.
Andon M. Coleman
@ AndonM.Coleman E isso quase está correto, porque em 80% dos casos você precisa.
precisa saber é o seguinte
2
Os shaders podem ser facilmente implementados por meio da renderização do software; até o Tomb Raider 1 e o Quake 1 tinham shaders de pixel. É exatamente o oposto: uma CPU oferece muito mais controle do que o pipeline limitador de vértices / fragmentos das GPUs atuais.
Lama12345 19/09/16